很多人認為linux天然安全——這顯然是種荒謬的誤解。想象一下,如果我們的筆記本裝置未經安全保護且被他人盜取,那麼對方往往能夠輕松猜到我們的使用者名為“root”而密碼為“toor”——因為這是大多數人都在無腦使用的預設組合。如果是這樣,linux的安全性展現在哪裡?
為了避免上述問題的出現,我們将通過本篇文章共享15項重要心得,幫助大家在多種linux發行版當中利用其中的通用邏輯實作安全性強化。
1-記錄主機資訊
在進行系統保護之前,我們首先需要建立一份文檔,其中包含全部待檢查條目。另外,在文檔開頭,大家還需要包含以下linux主機資訊:
裝置名稱
ip位址
mac位址
實施安全強化工作的人員姓名
日期
資産編号(如果在企業當中,則需要包含用于标記主機的資産編号)
2-bios保護
需要利用密碼保護主機bios,避免最終使用者變更或者覆寫其中的安全設定。每一家計算機制造商都會提供不同的bios模式進入方式,接下來則是設定理想的管理密碼。
之後,大家需要禁用外部媒體啟動(usb/cd/dvd)。如果不變更此配置,那麼任何人都能夠利用u盤啟動系統并通路其中的資料。
最新的伺服器主機闆内包含一套内部web伺服器,大家可以對其進行遠端通路。確定變更管理頁面中的預設密碼或者在可行時加以禁用。
3-硬碟加密(保密)
大多數linux發行版允許大家在安裝前對磁盤進行加密。磁盤加密非常重要,特别是考慮到裝置失竊這種可能性的存在。
如下圖所示,大家可以從清單中選擇第三個選項:guided-use entire disk and set up encrypted lvm(lvm代表邏輯分卷管理器)。

如果您的linux發行版不支援加密,則可選擇truecrypt等軟體方案。
4-磁盤保護(可用性)
備份對于系統受損以及系統更新bug等問題擁有良好的解決效果。對于重要伺服器,我們可以考慮将備份資料傳輸至異地以實作災難恢複。在設計備份方案時,大家需要考慮幾項重要問題,包括舊備份需要保留多久、何時需要進行系統備份(每天一次抑或每周一次)等。
關鍵性系統應分為多個不同分區:
/
/boot
/usr
/home
/tmp
/var
/opt
磁盤分區允許大家在遭遇系統錯誤時保持其性能與安全性。如下圖所示,大家可以看到該選項如何在kali linux的安裝過程中進行分區劃分。
5-鎖定引導目錄
引導目錄中包含有與linux核心密切相關的重要檔案,是以大家需要確定此目錄被鎖定為隻讀模式。首先,打開“fstab”檔案。
此後,在末尾添加最後的高亮行。
完成檔案編輯後,大家需要執行以下指令設定其擁有者:
#chown root:root /etc/fstab
此後,我設定了幾項權限用以保護引導設定:
将擁有者與/etc/grub.conf組設定為root使用者:
#chown root:root /etc/grub.conf
在/etc/grub.conf檔案上将權限設定為僅root可讀寫:
#chmod og-rwx /etc/grub.conf
單使用者模式要求使用驗證:
#sed -i "/single/s/sushell/sulogin/" /etc/sysconfig/init
#sed -i "/prompt/s/yes/no/" /etc/sysconfig/init
6-禁用usb
某些高重要度系統需要禁用u盤使用。我們可以通過多種方式拒絕u盤存儲媒體的接入,以下介紹一種較為普遍的作法:
利用文本編輯器打開 “blacklist.conf” 檔案:
#nano /etc/modprobe.d/blacklist.conf
打開後,将以下行添加至檔案内容末尾(而後儲存并退出):
blacklist usb_storage
此後,打開rc.local檔案:
#nano /etc/rc.local
最後,添加以下兩行:
modprobe -r usb_storage
exit 0
7-系統更新
在首次引導完成後,我們必須馬上進行系統更新。總體來講,大家隻需要打開終端視窗并執行對應指令即可。在kali linux中,大家可以執行如下圖所示的指令:
8-檢查已安裝軟體包
列出linux系統中已經安裝的全部軟體包,并将其中不必要的部分移除。大家需要以嚴格的方式進行篩選,這對于linux伺服器的安全保障非常重要。下面來看如何在kali linux中列出全部已有軟體包:
請注意,禁用不必要的服務能夠有效削減攻擊面,是以如果大家在自己的linux伺服器中找到了以下服務,請馬上将其移除:
telnet server
rsh server
nis server
tftp server
talk server
9-檢查開放端口
正确識别指向網際網路的開放端口非常重要。在kali linux中,可使用以下指令以找到任意隐藏的開放端口:
10-保護ssh
是的,ssh确實很安全,但大家仍然需要對其加以保護。首先,如果大家能夠禁用ssh,那這本身就是個問題。另外,如果要切實加以使用,大家還需要調整ssh的預設配置。前往/etc/ssh并打開sshd_config檔案。
将預設端口數22變更為其它,例如99。
確定root無法通過ssh進行遠端登入:
permitrootlogin no
允許部分特定使用者接入:
allowusers [username]
當然,需要調整的内容遠不止如此。例如,某些企業會添加屏蔽機制以避免攻擊者的進一步深入。我建議大家檢視ssh手冊以了解此檔案中全部配置的含義。
以下為大家需要確定sshd_config檔案中存在的部分其它選項:
protocol2
ignorerhosts to yes
hostbasedauthentication no
permitemptypasswords no
x11forwarding no
maxauthtries 5
ciphers aes128-ctr,aes192-ctr,aes256-ctr
clientaliveinterval 900
clientalivecountmax 0
usepam yes
最後,在sshd_config上設定權限以確定隻有root使用者能夠對其内容進行變更:
#chown root:root /etc/ssh/sshd_config
#chmod 600 /etc/ssh/sshd_config
11- 啟用selinux
安全強化linux,即selinux,是一項核心安全保護機制,用于支援通路控制安全政策。selinux擁有以下三種配置模式:
disabled: 關閉
permissive: 輸出警告
enforcing: 執行政策
使用文本編輯器打開config檔案:
#nano /etc/selinux/config
確定其中的政策得到執行:
selinux=enforcing
12- 網絡參數
保護linux主機網絡活動同樣非常重要。不要假定防火牆能夠搞定一切問題。下面來看在保護主機網絡時需要認真考慮的幾項核心問題:
- 禁用ip轉發:在“/etc/sysctl.conf”中将net.ipv4.ip_forward參數設定為0。
- 禁用發送包重新定向:在“/etc/sysctl.conf”中将net.ipv4.conf.all.send_redirects與net.ipv4.conf.default.send_redirects參數設定為0。
- 禁用icmp重新定向接受:在“/etc/sysctl.conf”中net.ipv4.conf.all.accept_redirects将與net.ipv4.conf.default.accept_redirects參數設定為0。
- 啟用惡性錯誤消息保護:在“/etc/sysctl.conf”中将net.ipv4.icmp_ignore_bogus_error_responses參數設定為1。
我強烈建議大家在linux防火牆中應用iptable規則并過濾全部輸入、輸出以及轉發資料包。配置适合自身需求的iptable需要耗費一定時間,但這一切都是值得的。
13- 密碼政策
人們常常會重複使用密碼,而這顯然是一種糟糕的安全實踐。原有密碼會被存儲在/etc/security/opasswd檔案當中。我們将利用pam子產品以管理linux主機的安全政策。在debian發行版中,打開/etc/pam.d/common-password檔案并添加以下兩行:
auth sufficient pam_unix.so likeauth nullok
password sufficient pam_unix.so remember=4 (意味着使用者無法重複使用以往使用過的最後四條密碼。)
另一項需要強制執行的政策為強密碼要求。pam子產品提供的pam_cracklib能夠保護伺服器免受詞典及暴力破解攻擊的危害。要完成這項任務,打開/etc/pam.d/system-auth檔案并添加以下行:
/lib/security/$isa/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
linux會對密碼進行散列處理,以避免其被儲存為明文形式。是以,我們需要確定将安全密碼定義中的雜湊演算法設定為sha512。
另一項有趣的功能是在五次失敗嘗試後鎖定該賬戶。要實作這一效果,大家需要打開/etc/pam.d/password-auth檔案并添加以下行:
auth required pam_env.so
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=604800
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=604800
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=604800
auth required pam_deny.so
到這裡還沒有完成,我們還需要額外一項步驟。打開/etc/pam.d/system-auth檔案并確定添加以下内容:
在五次失敗嘗試後,隻有管理者能夠使用以下指令解鎖該賬戶:
# /usr/sbin/faillock --user --reset
另外,我們也可以為密碼設定為期90天的過期時長:
在“/etc/login.defs”中将pass_max_days參數設定為90
執行以下指令以變更活動使用者:
#chage --maxdays 90
下面這項提示用于強化密碼政策,即在/etc/pam.d/su檔案内設定參數以限制指向su指令的通路:
auth required pam_wheel.so use_uid
最後一項密碼政策相關提示在于面向非root使用者禁用系統賬戶,具體請使用以下腳本:
#!/bin/bash
for user in `awk -f: '($3 < 500) {print $1 }' /etc/passwd`; do
if [ $user != "root" ]
then
/usr/sbin/usermod -l $user
if [ $user != "sync" ] && [ $user != "shutdown" ] && [ $user != "halt" ]
then /usr/sbin/usermod -s /sbin/nologin $user
fi
done
14-權限與驗證
請保持耐心,因為以下清單内容較長。不過權限正是實作linux主機安全保護目标的一大重要因素,是以值得我們多花點時間與精力。
執行以下指令以在/etc/anacrontab、/etc/crontab與/etc/cron.*上設定使用者/組擁有者及權限:
#chown root:root /etc/anacrontab
#chmod og-rwx /etc/anacrontab
#chown root:root /etc/crontab
#chmod og-rwx /etc/crontab
#chown root:root /etc/cron.hourly
#chmod og-rwx /etc/cron.hourly
#chown root:root /etc/cron.daily
#chmod og-rwx /etc/cron.daily
#chown root:root /etc/cron.weekly
#chmod og-rwx /etc/cron.weekly
#chown root:root /etc/cron.monthly
#chmod og-rwx /etc/cron.monthly
#chown root:root /etc/cron.d
#chmod og-rwx /etc/cron.d
在/var/spool/cron上為root crontab設定權利與權限:
#chown root:root
#chmod og-rwx
在passwd檔案上設定使用者/組擁有者與權限:
#chmod 644 /etc/passwd
#chown root:root /etc/passwd
在group檔案上設定使用者/組擁有者與權限:
#chmod 644 /etc/group
#chown root:root /etc/group
在shadow檔案上設定使用者/組擁有者與權限:
#chmod 600 /etc/shadow
#chown root:root /etc/shadow
在gshadow檔案上設定使用者/組擁有者與權限:
#chmod 600 /etc/gshadow
#chown root:root /etc/gshadow
15-其它安全強行舉措
作為最後一項建議,我将與大家分享其它幾項重要選項。
首先,限制核心轉儲:
向“/etc/security/limits.conf”檔案添加hard core 0。
向“/etc/sysctl.conf”檔案添加fs.suid_dumpable = 0。
第二,配置exec shield:
向“/etc/sysctl.conf”檔案添加kernel.exec-shield = 1。
第三,啟用随機虛拟記憶體區域放置:
向“/etc/sysctl.conf”檔案添加kernel.randomize_va_space = 2。
原文标題: linux hardening: a 15-step checklist for a secure linux server,作者: gus khawaja
本文轉自d1net(轉載)