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