系統安全強化——Linux作業系統(一),加固linux
最近備戰國網信通調考資訊安全專業,參考系統安全強化手冊,練習加固命令。
作業系統選用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 stopservice 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/passwdchmod 400 /etc/shadowchmod 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命令全部刪除。