15步打造一個安全的Linux服務器
可能大多數(shù)人都覺得Linux是安全的吧?但我要告訴你,這種想法絕對是錯誤的!假設你的筆記本電腦在沒有增強安全保護的情況下被盜了,小偷首先就會嘗試用“root”(用戶名)和“toor”(密碼)來登錄你的電腦,因為這是KaliLinux的默認用戶名和密碼,而大多數(shù)人仍然會繼續(xù)使用它們。你是否也是這樣?我希望你不是!
在這篇文章中,我將會與大家分享一些能夠讓你的Linux主機更加安全的方法,其中還會包括一些滲透測試技巧。需要注意的是,目前市面上有很多不同的Linux發(fā)行版,從命令行工具的角度來看,這些版本雖然各有不同,但原理和處理邏輯是一樣的。接下來,讓我們開始吧!
1-記錄主機信息
每當你在對一臺新的Linux主機進行安全增強工作時,你需要創(chuàng)建一個文檔并在文檔中記錄下本文所列出的各種項目,而且在工作完成之后,你還要對這些項目進行核查。除此之外,在文檔的開頭處,你需要記錄下這臺Linux主機的相關信息:
設備名稱 IP地址 Mac地址 進行安全增強工作的負責人(其實就是你) 日期 資產(chǎn)編號(如果你在為一家企業(yè)工作,那么你就需要記錄下這臺設備的資產(chǎn)編號)
2-BIOS保護
你需要為這臺主機的BIOS設置一個密碼,以確保終端用戶無法修改或覆蓋BIOS中的安全設置,這是非常重要的!BIOS的管理員密碼設置完成之后,你需要禁止主機從外部媒體設備(USB/CD/DVD)啟動。如果你忽略了這項設置,那么任何人都可以通過一個寫入了啟動鏡像的U盤來訪問這臺主機中的數(shù)據(jù)。
在新版服務器的主板中內(nèi)置有一個Web服務器,你可以利用它來遠程訪問主機中的數(shù)據(jù)。所以你要確保已經(jīng)修改了服務器管理頁面的默認密碼,如果可以的話,請直接禁用這個功能。
3-硬盤加密(機密性)
大多數(shù)Linux發(fā)行版在進行安裝之前,都允許你對磁盤進行加密。磁盤加密是非常重要的,因為當你的計算機被盜之后,就算小偷將你的硬盤插入他們自己的計算機中也仍然無法讀取你的數(shù)據(jù)。
在下圖中,選擇列表中的第三個選項:Guided-use entire disk and set up encrypted LVM(LVM代表邏輯卷管理器)。
如果你的Linux發(fā)行版不支持加密的話,你可以選擇使用類似TrueCrypt這樣的加密軟件。
4-磁盤保護(可用性)
數(shù)據(jù)備份是一個很好的習慣,當系統(tǒng)發(fā)生崩潰或系統(tǒng)更新出現(xiàn)故障時,備份的優(yōu)點就突顯出來了。對于某些重要的服務器來說,為了防止災難(包括自然災害和人為因素)帶來的影響,備份數(shù)據(jù)通常需要進行離線存儲。當然了,備份也需要我們花精力去管理。比如說,舊的備份文件需要保存多久?何時需要對系統(tǒng)進行備份?(每天?每周?還是每月?)
核心系統(tǒng)的磁盤需要進行多個分區(qū):
/ /boot /usr /home /tmp /var /opt
磁盤分區(qū)可以在系統(tǒng)發(fā)生故障的情況下依然保障系統(tǒng)的性能和安全性。在下圖中,你可以看到Kali Linux在安裝的過程中所提供的分區(qū)選項。
5-鎖定boot目錄
boot目錄中包含大量的重要文件,這些文件與Linux內(nèi)核有關,所以你需要通過下列步驟來確保這個目錄只開放了“只讀”權限。首先,打開“fstab”文件。
接下來,將下圖所示的最后一行數(shù)據(jù)添加進去。
這一步完成之后,你需要執(zhí)行下列命令來設置該文件的擁有者:
- #chown root:root /etc/fstab
接下來還需要設置一些權限來保護啟動設置:
-設置/etc/grub.conf的擁有者(owner)和組(group)為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存儲設備
根據(jù)你系統(tǒng)的重要程度,有時你需要禁止Linux主機使用USB存儲設備?,F(xiàn)在有很多種方法可以禁用USB存儲設備,下面給大家提供的是最常用的一種:
用你最喜歡的文本編輯器打開“blacklist.conf”文件:
- #nano /etc/modprobe.d/blacklist.conf
打開文件之后,將下列信息添加到文件底部,然后保存并退出:
blacklist usb_storage
然后打開rc.local文件:
- #nano /etc/rc.local
添加下面這兩行數(shù)據(jù):
- modprobe -r usb_storage
- exit 0
7-系統(tǒng)更新
首次啟動之后,第一件事就是更新系統(tǒng),這一步應該算比較簡單了。通常情況下,你可以打開終端,然后執(zhí)行相應的命令即可。在Kali Linux中,你可以使用下圖所示的命令進行系統(tǒng)更新:
8-檢查已安裝的package
列出你Linux系統(tǒng)中所有已安裝的package,然后刪除那些你不需要的。如果你正在操作的是一臺服務器的話,那么你就要非常仔細了,因為服務器中一般只用安裝必須使用的應用程序和服務。你可以通過下圖所示的命令列出Kali Linux中安裝的package:
請記住,禁用那些你不需要的服務可以降低服務器的攻擊面。如果你在自己的Linux服務器中發(fā)現(xiàn)了下面這些遺留服務的話,請趕緊刪除它們:
- Telnet server
- RSH server
- NIS server
- TFTP server
- TALK server
9-檢查開放端口
識別面向互聯(lián)網(wǎng)的開放連接是一項非常重要的任務。在Kali Linux中,我們可以使用下圖所示的命令來發(fā)現(xiàn)隱藏的開放端口:
10-增強SSH的安全性
沒錯,SSH確實是安全的,但是我們?nèi)匀灰诂F(xiàn)有的基礎上繼續(xù)增強它的安全性。首先,如果你可以禁用SSH的話,那么問題就解決了。但是,如果你仍然需要使用它,那么你就需要修改SSH的默認配置了。切換到目錄/etc/ssh,然后打開“sshd_config”文件。
-將默認端口號(22)修改為其他的數(shù)字(例如99)。
-確保root用戶無法通過SSH進行遠程登錄:
- PermitRootLogin no
-允許某些特殊的用戶:
- AllowUsers [username]
如果你需要進行更加豐富的配置,請確保在閱讀了SSH手冊并了解文件中全部配置項的情況下進行操作?!緟⒖假Y料】
除此之外,你還需要確保在“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
最后,設置該文件的訪問權限,確保只有root用戶可以修改該文件的內(nèi)容:
- #chown root:root etc/ssh/sshd_config
- #chmod 600 /etc/ssh/sshd_config
11-啟用SELinux
SELinux是一種支持訪問控制安全策略的內(nèi)核安全機制。SELinux有三種配置模式:
- Disabled: Turned-off
- Permissive: Prints warnings
- Enforcing: Policy is enforced
打開配置文件:
- #nano /etc/selinux/config
確保SELinux已開啟:
- SELINUX=enforcing
12-網(wǎng)絡參數(shù)
保護Linux主機的網(wǎng)絡活動同樣是非常重要的,永遠不要指望著防火墻去幫你完成所有的任務。打開/etc/sysctl.conf文件,然后進行下列設置:
- -將net.ipv4.ip_forward參數(shù)設為0。
- -將net.ipv4.conf.all.send_redirects和net.ipv4.conf.default.send_redirects參數(shù)設為0。
- -將net.ipv4.conf.all.accept_redirects和net.ipv4.conf.default.accept_redirects參數(shù)設為0。
- -將net.ipv4.icmp_ignore_bogus_error_responses參數(shù)設為1。
13-密碼策略
人們通常會在不同的地方使用相同的密碼,這是一個非常不好的習慣。舊的密碼保存在/etc/security/opasswd文件中,我們需要使用PAM模塊來管理Linux主機中的安全策略。在Debian發(fā)行版中,可以打開/etc/pam.d/common-password文件,然后將下面的信息添加進去,這樣就可以防止用戶重新使用最近曾使用過的四個密碼了:
- auth sufficient pam_unix.so likeauthnullok
- password sufficient pam_unix.so remember=4
另外一個密碼策略就是強迫用戶使用健壯的密碼。PAM模塊提供了一個庫(pam_cracklib),它可以幫助你的服務器抵御字典攻擊和爆破攻擊。打開/etc/pam.d/system-auth文件,然后將下列信息添加進去:
- /lib/security/$ISA/pam_cracklib.so retry=3 minlen=8lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
Linux保存的是密碼的哈希,所以你要確保系統(tǒng)使用的是SHA512哈希算法。
另外一個有趣的功能就是“密碼輸出錯誤五次之后鎖定賬號”。打開/etc/pam.d/password-auth文件,然后添加下列數(shù)據(jù):
- auth required pam_env.so
- auth required pam_faillock.so preauth audit silent deny=5unlock_time=604800
- auth [success=1 default=bad] pam_unix.so
- auth [default=die] pam_faillock.so authfail audit deny=5unlock_time=604800
- auth sufficient pam_faillock.so authsucc audit deny=5unlock_time=604800
- auth required pam_deny.so
然后打開/etc/pam.d/system-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=5unlock_time=604800
- auth sufficient pam_faillock.so authsucc audit deny=5unlock_time=604800
- auth required pam_deny.so
密碼輸錯五次之后,只有管理員才可以解鎖這個賬號,解鎖命令如下:
- # /usr/sbin/faillock --user <userlocked> --reset
另一個好習慣就是設置“密碼九十天后過期”。
-將/etc/login.defs中的PASS_MAX_DAYS參數(shù)設為90。
-修改當前用戶的密碼過期時間:
- #chage --maxdays 90 <user>
現(xiàn)在,我們還要限制su命令的訪問權。打開/etc/pam.d/su文件,然后設置pam_wheel.so參數(shù):
- auth required pam_wheel.so use_uid
最后一步就是禁止非root用戶訪問系統(tǒng)賬號。這一步可以通過下面這個bash腳本完成:
- #!/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
- 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分配適當?shù)臋嘞蓿?/p>
- #chown root:root <crontabfile>
- #chmod og-rwx <crontabfile>
為“passwd”、“group”、“shadow”和“gshadow”文件分配適當?shù)臋嘞蓿?nbsp;
- #chmod 644 /etc/passwd
- #chown root:root /etc/passwd
- #chmod 644 /etc/group
- #chown root:root /etc/group
- #chmod 600 /etc/shadow
- #chown root:root /etc/shadow
- #chmod 600 /etc/gshadow
- #chown root:root /etc/gshadow
15-額外的操作
除了上述配置之外,下面這些因素也應該納入我們的考慮范圍內(nèi)。
第一:
-在/etc/security/limits.conf文件中添加“hardcore 0”;-在/etc/sysctl.conf文件中添加“fs.suid_dumpable= 0”;
第二:
-在/etc/sysctl.conf文件中添加“kernel.exec-shield= 1”
第三:
-在/etc/sysctl.conf文件中添加“kernel.randomize_va_space= 2”;
結束語
在這篇文章中,我給大家介紹了幾個能夠增強Linux系統(tǒng)安全性的重要配置。