1. 程式人生 > >Linux系統安全設定

Linux系統安全設定

根據此文章寫了一個自動檢測指令碼

指令碼位置:https://gitee.com/wdze/linux_security_settings

一、賬號管理

1、使用者密碼

檢測方法:

(1)是否存在如下類似的簡單使用者密碼配置,比如:root/root, test/test, root/root1234
(2)執行:more /etc/login.defs,檢查PASS_MAX_DAYS/ PASS_MIN_DAYS/PASS_WARN_AGE引數
(3)執行:awk -F: '($2 == "") { print $1 }' /etc/shadow, 檢查是否存在空口令帳號

建議安全標準:

(1)在/etc/login.defs檔案中配置:
PASS_MAX_DAYS   90        #新建使用者的密碼最長使用天數
PASS_MIN_DAYS   0          #新建使用者的密碼最短使用天數
PASS_WARN_AGE   14        #新建使用者的密碼到期提前提醒天數
(2)不允許存在空口令帳號

2、密碼強度

檢測方法:

/etc/pam.d/system-auth檔案中是否對pam_cracklib.so的引數進行了正確設定。

建議安全標準:

密碼長度至少8位,幷包括數字、小寫字母、大寫字母和特殊符號4種中至少3種
建議在/etc/pam.d/system-auth 檔案中配置:
password  requisite pam_cracklib.so difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=1

3、使用者鎖定策略

檢測方法:

/etc/pam.d/system-auth檔案中是否對pam_tally.so的引數進行了正確設定。

建議安全標準:

設定連續輸錯10次密碼,帳號鎖定5分鐘,
使用命令“vim /etc/pam.d/system-auth”修改配置檔案,新增
auth required pam_tally.so onerr=fail deny=10 unlock_time=300
注:解鎖使用者 faillog  -u  <使用者名稱>  -r

4、禁止root使用者遠端登入

檢測方法:

執行:more /etc/securetty,檢查Console引數

建議安全標準:

建議在/etc/securetty檔案中配置:CONSOLE = /dev/tty01

5、檢查是否存在root外的UID為0使用者

檢測方法:

執行:awk -F: '($3 == 0) { print $1 }' /etc/passwd

建議安全標準:

UID為0的任何使用者都擁有系統的最高特權,保證只有root使用者的UID為0,返回值包括“root”以外的條目,則低於安全要求;

6、檢查root環境變數中是否包含777的目錄

檢測方法:

執行:echo $PATH | egrep '(^|:)(\.|:|$)',檢查是否包含父目錄,
執行:find `echo $PATH | tr ':' ' '` -type d \( -perm -002 -o -perm -020 \) -ls,檢查是否包含組目錄許可權為777的目錄

建議安全標準:

確保root使用者的系統路徑中不包含父目錄,在非必要的情況下,不應包含組許可權為777的目錄

7、遠端連線的安全性配置

檢測方法:

執行:find  / -name  .netrc,檢查系統中是否有.netrc檔案,
執行:find  / -name  .rhosts ,檢查系統中是否有.rhosts檔案

建議安全標準:

如無必要,刪除這兩個檔案

8、使用者的umask安全配置

檢測方法:

執行:more /etc/profile  more /etc/csh.login  more /etc/csh.cshrc  more /etc/bashrc檢查是否包含umask值且umask=027

建議安全標準:

建議設定使用者的預設umask=027

9、重要目錄和檔案的許可權

檢測方法:

執行以下命令檢查目錄和檔案的許可權設定情況:
ls -l /etc/
ls -l /etc/rc.d/init.d/
ls -l /etc/inetd.conf	
ls -l /etc/passwd
ls -l /etc/shadow
ls -l /etc/group
ls -l /etc/security
ls -l /etc/services
ls -l /etc/rc*.d

建議安全標準:

對於重要目錄,建議執行如下類似操作:
chmod -R 750 /etc/rc.d/init.d/*
這樣只有root可以讀、寫和執行這個目錄下的指令碼。

10、查詢未授權的SUID/SGID檔案

檢測方法:

for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART \( -perm -04000 -o -perm -02000 \) -type f -xdev -print
done

建議安全標準:

若存在未授權的檔案,則低於安全要求
建議經常性的對比suid/sgid檔案列表,以便能夠及時發現可疑的後門程式

11、檢查任何人都有寫許可權的目錄

檢測方法:

for PART in `awk '($3 == "ext2" || $3 == "ext3") \
{ print $2 }' /etc/fstab`; do
find $PART -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
done

建議安全標準:

若返回值非空,則低於安全要求

12、查詢任何人都有寫許可權的檔案

檢測方法:

for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART -xdev -type f \( -perm -0002 -a ! -perm -1000 \) -print
done

建議安全標準:

若返回值非空,則低於安全要求

13、檢查沒有屬主的檔案

檢測方法:

for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART -nouser -o -nogroup -print
done
注意:不用管“/dev”目錄下的那些檔案。

建議安全標準:

若返回值非空,則低於安全要求
發現沒有屬主的檔案往往就意味著有******你的系統了。不能允許沒有主人的檔案存在。如果在系統中發現了沒有主人的檔案或目錄,先檢視它的完整性,如果一切正常,給它一個主人。有時候解除安裝程式可能會出現一些沒有主人的檔案或目錄,在這種情況下可以把這些檔案和目錄刪除掉

14、檢查異常隱含檔案

檢測方法:

用“find”程式可以查詢到這些隱含檔案。例如:
find  / -name ".. *" -print -xdev
find  / -name "…*" -print -xdev | cat -v
同時也要注意象“.xx”和“.mail”這樣的檔名的。(這些檔名看起來都很象正常的檔名)

建議安全標準:

若返回值非空,則低於安全要求
在系統的每個地方都要檢視一下有沒有異常隱含檔案(點號是起始字元的,用“ls”命令看不到的檔案),因為這些檔案可能是隱藏的***工具或者其它一些資訊(口令破解程式、其它系統的口令檔案,等等)。在UNIX下,一個常用的技術就是用一些特殊的名,如:“…”、“..    ”(點點空格)或“..^G”(點點control-G),來隱含檔案或目錄。

15、登入超時設定

檢測方法:

使用命令“cat /etc/profile |grep TMOUT”檢視TMOUT是否設定

建議安全標準:

使用命令“vi /etc/profile”修改配置檔案,新增“TMOUT=”行開頭的註釋,建議設定為“TMOUT=180”,即超時時間為3分鐘

16、遠端登入設定

檢測方法:

檢視SSH服務狀態:
service ssh status
檢視telnet服務狀態:
service telnet status

建議安全標準:

SSH服務狀態檢視結果為:running 
telnet服務狀態檢視結果為:not running/unrecognized

17、Root遠端登入限制

檢測方法:

使用命令“cat /etc/ssh/sshd_config”檢視配置檔案
(1)檢查是否允許root直接登入
檢查“PermitRootLogin ”的值是否為no
(2)檢查SSH使用的協議版本
檢查“Protocol”的值

建議安全標準:

(1)不允許root直接登入
設定“PermitRootLogin ”的值為no
設定後root使用者需要使用普通使用者遠端登入後su進行系統管理
(2)修改SSH使用的協議版本
設定“Protocol”的版本為2

18、關閉不必要的服務

檢測方法:

使用命令“who -r”檢視當前init級別
使用命令“chkconfig --list <服務名>”檢視所有服務的狀態

建議安全標準:

若有不必要的系統在當前級別下為on,則低於安全要求
使用命令“chkconfig --level <init級別> <服務名> on|off|reset”設定服務在個init級別下開機是否啟動

二、日誌審計

1、syslog登入事件記錄

檢測方法:

執行命令:more /etc/syslog.conf
檢視引數authpriv值

建議安全標準:

若未對所有登入事件都記錄,則低於安全要求

2、Syslog.conf的配置稽核

檢測方法:

執行:more /etc/syslog.conf,檢視是否設定了下列項:
kern.warning;*.err;authpriv.none\[email protected]
*.info;mail.none;authpriv.none;cron.none\[email protected]
*.emerg\[email protected]
local7.*\[email protected]

建議安全標準:

若未設定,則低於安全要求
建議配置專門的日誌伺服器,加強日誌資訊的異地同步備份

三、系統檔案

1、系統core dump狀態

檢測方法:

執行:more /etc/security/limits.conf 檢查是否包含下列項:
* soft core 0
* hard core 0

建議安全標準:

若不存在,則低於安全要求
core dump中可能包括系統資訊,易被***者利用,建議關閉