最近備戰國網信通調考信息安全專業,參考系統安全加固手冊,練習加固命令。
操作系統選用CentOS 7,考慮到可以隨時進行“破壞性試驗”,所以選擇安裝在VM虛擬機中,可以使用快照隨時回退錯誤操作。
首先,為了熟悉使用CLI,設置開機不進入圖形界面。之前版本是修改 /etc/inittab 文件,到CentOS 7改為如下命令:
systemctl set-default multi-user.target //設置成命令模式 systemctl set-default graphical.target //設置成圖形模式
事實上,系統進行了如下操作:
好!進入系統,不要忘了首先做好初始快照哦。
一、賬號管理、認證授權
第一部分主要是對用戶賬號和權限進行加固,主要用到的命令主要是一些文件查看與編輯類的命令。
1、與賬號、用戶組、密碼等有關的文件
這些文件包括:
/etc/passwd
/etc/shadow
/etc/group
簡單說明一下:
/etc/passwd 記錄了系統中各用戶的一些基本屬性,root可寫,所有用戶可讀,查看可見如下信息:
用“:”隔開的各部分含義為:
用戶名:口令:用戶標識號:組標識號:注釋性描述:主目錄:登錄Shell
其中口令由於安全考慮,被記錄在了 /etc/shadow 文件中,所以這里統一顯示為x。
/etc/shadow 負責所有用戶的密碼:
與passwd文件相似,各字段也被“:”隔開,其含義為:
登錄名:加密口令:最后一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標志(系統保留)
這里有幾點需要說明:
(1)“口令”字段存放的是加密后的用戶口令字,如果為空,則對應用戶沒有口令,登錄時不需要口令; 星號代表帳號被鎖定,有些系統為NP; 雙嘆號表示這個密碼已經過期了。 $6$開頭的,表明是用SHA-512加密的 $1$ 表明是用MD5加密的 $2$ 是用Blowfish加密的 $5$ 是用SHA-256加密的。 (2)“最后一次修改時間”表示的是從某個時刻起,到用戶最后一次修改口令時的天數。時間起點對不同的系統可能不一樣。例如1970年1月1日。(后面所有時間均以此時間為起點) (4)“最小時間間隔”指的是兩次修改口令之間所需的最小天數。 (5)“最大時間間隔”指的是口令保持有效的最大天數。 (6)“警告時間”字段表示的是從系統開始警告用戶到用戶密碼正式失效之間的天數。 (7)“不活動時間”表示的是用戶沒有登錄活動但賬號仍能保持有效的最大天數。 (8)“失效時間”字段給出的是一個絕對的天數,如果使用了這個字段,那么就給出相應賬號的生存期。
/etc/group 負責用戶組屬性:
這個文件比較簡單: 組名:口令:組標識號:組內用戶列表
其中,組內用戶列表中,用戶間用“,”隔開。
如果想要查看一個用戶的用戶組信息,可以使用
id [user]
來查看:
OK,文件說明到此結束,讓我們來干些實際的吧~
2、鎖定無關賬戶
在確認某些賬戶可以鎖定的情況下,可以使用
passwd -l [user]
其原理是在/etc/shadow中用戶的密碼字段前加入“!!”(因系統而異,有些系統是加入“*LK*”),使得用戶密碼改變,無法登陸
這還真是簡單粗暴,不過這也意味着,只要隨意修改shadow文件密碼字段,即可實現賬號鎖定。
對應的解鎖命令為
passwd -u [user]
3、禁止超級管理員賬戶遠程登錄
在進行這方面工作之前,首先要知道一個重要內容 Linux-PAM(Linux可插拔認證模塊)。
用戶可以通過修改配置文件/etc/pam.conf(RedHat等系統還支持另外一種配置方式,即通過配置目錄/etc/pam.d/)對認證機制進行修改,而個模塊的具體配置在/etc/security下。
具體相關知識由於篇幅,可以自行百度,(推薦一篇博客,很實用)這里只對本小節內容進行說明。
1 PAM工作機制
/lib/security 目錄下的每一個認證模塊都會返回pass或者fail結果,部分程序使用/etc/security目錄下的設置文件決定認證方式。
應用程序調用PAM模塊認證的配置,存放於/etc/pam.d,文件名與應用程序名對應,文件中的每一行都會返回一個成驗證功還是失敗的控制標志,以決定用戶是否擁有訪問權限。 2 PAM驗證類型 * auth 驗證使用者身份,提示輸入賬號和密碼 * account 基於用戶表、時間或者密碼有效期來決定是否允許訪問 * password 禁止用戶反復嘗試登錄,在變更密碼時進行密碼復雜性控制 * session 進行日志記錄,或者限制用戶登錄的次數 libpam函數庫會可以調用以上一種服務或者全部。 3 PAM驗證控制類型(Control Values) 驗證控制類型也可以稱做Control Flags,用於PAM驗證類型的返回結果。 * required 驗證失敗時仍然繼續,但返回Fail(用戶不會知道哪里失敗) * requisite 驗證失敗則立即結束整個驗證過程,返回Fail * sufficient 驗證成功則立即返回,不再繼續,否則忽略結果並繼續 * optional 無論驗證結果如何,均不會影響(通常用於session類型
打開/etc/pam.d/login文件,可以看到如下內容:
其中
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
或
auth required pam_securetty.so
處於未注釋狀態,再查看/etc/securetty中沒有pts/x(x為一個十進制整數)或已被注釋掉
確保root不能通過telnet連接主機。
再檢查SSH:
/etc/ssh/sshd_config
檢查下列行設置是否為no並且該行未被注釋:PermitRootLogin
然后重新啟動ssh服務:
service sshd stop
service sshd start
4、修改用戶組
使用usermod -g [group/GID] [username] 修改用戶組。沒什么好說的,上圖:
5、口令策略
(1)口令復雜度及時效
修改 /etc/login.defs,文件注釋很清楚,可以自己修改:
(2)設定密碼歷史,不能重復使用近N次內已使用的口令(方法來自網絡)
對於Redhat系列的Linux,查看/etc/pam.d/system-auth
對於Debian系列的Linux,查看/etc/pam.d/common-password
在如圖所示的行后,加入remember=N
但我目前有一個疑問,remember=N這個語句的PAM驗證控制類型是否應該是sufficient而不是其他類型。但求大神指導!
(3)設定連續認證失敗次數超過N次鎖定該賬號
依然是修改/etc/pam.d/login文件的第二行,加入如下命令
auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=10
6、設定文件目錄權限
在用戶登錄中,passwd、shadow、group文件非常重要,需要嚴格管理文件權限
/etc/passwd 必須所有用戶都可讀,root用戶可寫 –rw-r—r— 權限值為644
/etc/shadow 只有root可讀 –r-------- 權限值為400
/etc/group 必須所有用戶都可讀,root用戶可寫 –rw-r—r— 權限值為644
使用如下命令修改權限:
chmod 644 /etc/passwd chmod 400 /etc/shadow chmod 644 /etc/group
此外還有一個重要的參數 umask ,其值確定了新建目錄文件的默認權限,這里先給出我們推薦的值 027
在權限設定中 r=4;w=2;x=1 但對於umask來說,umask=777(666)-權限值,即權限值=777(666)-umask。例如,umask=002,所對應的文件和目錄創建缺省權限分別為6 6 4(666-2)和7 7 5(777-2)。
為什么是這樣的呢?對於文件來說,這一數字的最大值分別是6。系統不允許你在創建一個文本文件時就賦予它執行權限,必須在創建后用chmod命令增加這一權限。目錄則允許設置執行權限,這樣針對目錄來說,umask中各個數字最大可以到7。
如果使用推薦值umask=027,則對於文件來說,其權限為640,即-rw-r----- ,對目錄來說,其權限為750,即-rwxr-x---
7、檢查是否存在除root之外UID為0的用戶
使用如下代碼,對passwd文件進行檢索:
awk -F ':' '($3==0){print $1)' /etc/passwd
將檢索出來的不是root的用戶使用userdel命令全部刪除。