1.介紹 html
lynis 是一款開源的unix-based平臺的審計工具。能夠幫助審計員掃描unix系統以及可用的軟件。程序主要探測,系統上安裝的程序包,配置上的錯誤,以及安全問題和系統信息。 mysql
官方地址http://www.rootkit.nl/projects/lynis.html linux
程序徹底用shell 腳本編寫,下載以後就可直接運行,須要root權限,並讀寫目錄/var/log/ and /tmp。 執行./lynis –c 可開始掃描任務。程序會運行多個子腳原本進行不一樣類型的審計檢測,最後把結果輸出到report文件中。 sql
2.使用說明 shell
經過 –profile 能夠指定掃描使用的配置,默認使用的是程序目錄下的default.prf文件,用戶能夠複製此文件後本身編輯本身的任務配置文件。 數據庫
其中能夠配置任務相關的參數例如:ssl證書的搜尋目錄 ssl:certificates:/etc/ssl /var/www: 。 略過某個檢查項, ubuntu
config:test_skip_always:AAAA-1234 BBBB-5678 CCCC-9012: 。 安全
lynis經過循環運行include目錄下的各個腳原本執行不一樣類型的掃描任務,把初步結果輸出到屏幕上,每運行一個腳本都須要人工干預是否繼續。 ssh
程序會把每一項的檢查結果實時輸出到屏幕,給出ok或warning的提示。更加詳細的信息能夠參照日誌文件。 函數
3.代碼學習
1.主函數初始化工做
主程序運行後,會初始化一些 經常使用的變量
而後 會判斷掃描腳本目錄include和用戶自定義插件目錄plugin是否存在.
調用include下的consts,和functions腳本進行經常使用變量的設置和函數聲明。
調用trap 命令 攔截INT信號,maid函數作程序結束的清除工做。
使用umask 保證生成的文件的權限的安全。
. ${INCLUDEDIR}/parameters
調用include 下面的parameters腳本進行命令行參數的讀取。
shift命令: 移動參數位置,丟棄第一個參數。
同時還用到了:
case $變量 in
比配字符)
語句;
;;
*)
;;
調用function腳本里的checkupdate函數進行版本檢測
使用了dig命令查詢dns服務,將最新的版本號放在dns服務的描述裏面。
調用 id –u 保證程序以userid爲0的超級用戶權限運行。
在/var/run 目錄下面建立pid文件, 而且以前判斷文件是否存在保證程序實例的惟一。
2.檢測系統的功能腳本
1. 系統類型檢測
調用uname 獲取系統類型名。若是是linux 則調用uname –r 獲取內核版本。若是是ubuntu 使用命令
grep "^DISTRIB_ID=" /etc/lsb-release | cut -d '=' –f2 獲取系統名字。 f2 表明=分割後的第二個參數。
2.檢測系統的二進制可執行文件
在/bin /sbin /usr/bin 等路勁下查找常見的程序。
肯定常見程序是否存在和其安裝的目錄
3.最後循環執行include目錄下的以test開頭的檢測腳本
爲了去除if語句 分支過多帶來的代碼雜亂,在每一個程序邏輯前調用Register 函數檢查隨後的程序邏輯是否須要執行。
例如程序邏輯的檢查編號是否在屏蔽列表中,系統類型是否知足,等。
腳本tests_accounting 檢測不一樣系統下auditd審計工具的開啓狀態。
腳本tests_authentication 檢測用戶信息和認證。檢測超級用戶的個數,調用chkgrp進行檢查
從passwd中檢索出系統的全部用戶和用戶id : awk -F: '($3 > 500) && ($3 != 65534) || ($3 == 0) { print $1","$3 }' /etc/passwd
從/etc/group中檢測是否存在重複的用戶組 cat /etc/group | grep -v '^#' | grep -v '^$' | awk -F: '{ print $3 }' | sort | uniq –d
調用pwck檢測密碼文件的數據完整性: /usr/sbin/pwck -q –r
腳本tests_banner 檢測含有系統banner的文件是否存在,如/etc/issue 中保存了系統的版本信息。
腳本tests_boot_services 檢測系統啓動時運行的腳本,首先是grub boot loader文件/boot/grub/grub.conf 和grub.cfg, ubuntu 的話能夠檢測 /etc/rc2.d文件,檢測文件/etc/init.d,/etc/rc /etc/rc.local /etc/rc.d/rc.sysinit
腳本tests_crypto 檢測過時的ssl證書
腳本tests_database : 首先檢測是否有mysql進程存在,檢測mysql 數據庫是否設置密碼${MYSQLCLIENTBINARY} -u root --password= --silent --batch --execute=""
腳本test_file_integrity 檢測是否安裝文件完整性檢測工具,例如tripwire
腳本tests_file_permission 檢測root/.ssh 文件的權限設置
腳本tests_filesystem :檢測/tmp 目錄和/home 目錄是否掛載在一個掛載點, 檢測文件系統類型(ext2,3,4),
腳本tests_firewall : 檢測iptable的開啓狀態和規則設置