15步打造一個安全的Linux伺服器

FB-Alpha_h4ck發表於2016-12-02

可能大多數人都覺得Linux是安全的吧?但我要告訴你,這種想法絕對是錯誤的!假設你的膝上型電腦在沒有增強安全保護的情況下被盜了,小偷首先就會嘗試用“root”(使用者名稱)和“toor”(密碼)來登入你的電腦,因為這是KaliLinux的預設使用者名稱和密碼,而大多數人仍然會繼續使用它們。你是否也是這樣?我希望你不是!

在這篇文章中,我將會與大家分享一些能夠讓你的Linux主機更加安全的方法,其中還會包括一些滲透測試技巧。需要注意的是,目前市面上有很多不同的Linux發行版,從命令列工具的角度來看,這些版本雖然各有不同,但原理和處理邏輯是一樣的。接下來,讓我們開始吧!

1-記錄主機資訊

每當你在對一臺新的Linux主機進行安全增強工作時,你需要建立一個文件並在文件中記錄下本文所列出的各種專案,而且在工作完成之後,你還要對這些專案進行核查。除此之外,在文件的開頭處,你需要記錄下這臺Linux主機的相關資訊:

裝置名稱

IP地址

Mac地址

進行安全增強工作的負責人(其實就是你)

日期

資產編號(如果你在為一家企業工作,那麼你就需要記錄下這臺裝置的資產編號)

2-BIOS保護

你需要為這臺主機的BIOS設定一個密碼,以確保終端使用者無法修改或覆蓋BIOS中的安全設定,這是非常重要的!BIOS的管理員密碼設定完成之後,你需要禁止主機從外部媒體裝置(USB/CD/DVD)啟動。如果你忽略了這項設定,那麼任何人都可以通過一個寫入了啟動映象的U盤來訪問這臺主機中的資料。

在新版伺服器的主機板中內建有一個Web伺服器,你可以利用它來遠端訪問主機中的資料。所以你要確保已經修改了伺服器管理頁面的預設密碼,如果可以的話,請直接禁用這個功能。

3-硬碟加密(機密性)

大多數Linux發行版在進行安裝之前,都允許你對磁碟進行加密。磁碟加密是非常重要的,因為當你的計算機被盜之後,就算小偷將你的硬碟插入他們自己的計算機中也仍然無法讀取你的資料。

在下圖中,選擇列表中的第三個選項:Guided-use entire disk and set up encrypted LVM(LVM代表邏輯卷管理器)。

如果你的Linux發行版不支援加密的話,你可以選擇使用類似TrueCrypt這樣的加密軟體。

4-磁碟保護(可用性)

資料備份是一個很好的習慣,當系統發生崩潰或系統更新出現故障時,備份的優點就突顯出來了。對於某些重要的伺服器來說,為了防止災難(包括自然災害和人為因素)帶來的影響,備份資料通常需要進行離線儲存。當然了,備份也需要我們花精力去管理。比如說,舊的備份檔案需要儲存多久?何時需要對系統進行備份?(每天?每週?還是每月?)

核心系統的磁碟需要進行多個分割槽:

/

/boot

/usr

/home

/tmp

/var

/opt

磁碟分割槽可以在系統發生故障的情況下依然保障系統的效能和安全性。在下圖中,你可以看到Kali Linux在安裝的過程中所提供的分割槽選項。

5-鎖定boot目錄

boot目錄中包含大量的重要檔案,這些檔案與Linux核心有關,所以你需要通過下列步驟來確保這個目錄只開放了“只讀”許可權。首先,開啟“fstab”檔案。

接下來,將下圖所示的最後一行資料新增進去。

這一步完成之後,你需要執行下列命令來設定該檔案的擁有者:

#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儲存裝置

根據你係統的重要程度,有時你需要禁止Linux主機使用USB儲存裝置。現在有很多種方法可以禁用USB儲存裝置,下面給大家提供的是最常用的一種:

用你最喜歡的文字編輯器開啟“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-檢查已安裝的package

列出你Linux系統中所有已安裝的package,然後刪除那些你不需要的。如果你正在操作的是一臺伺服器的話,那麼你就要非常仔細了,因為伺服器中一般只用安裝必須使用的應用程式和服務。你可以通過下圖所示的命令列出Kali Linux中安裝的package:

請記住,禁用那些你不需要的服務可以降低伺服器的攻擊面。如果你在自己的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

最後,設定該檔案的訪問許可權,確保只有root使用者可以修改該檔案的內容:

#chown root:root etc/ssh/sshd_config

#chmod 600 /etc/ssh/sshd_config

11-啟用SELinux

SELinux是一種支援訪問控制安全策略的核心安全機制。SELinux有三種配置模式:

Disabled: Turned-off

Permissive: Prints warnings

Enforcing: Policy is enforced

開啟配置檔案:

#nano /etc/selinux/config

確保SELinux已開啟:

SELINUX=enforcing

12-網路引數

保護Linux主機的網路活動同樣是非常重要的,永遠不要指望著防火牆去幫你完成所有的任務。開啟/etc/sysctl.conf檔案,然後進行下列設定:

-將net.ipv4.ip_forward引數設為0。

-將net.ipv4.conf.all.send_redirects和net.ipv4.conf.default.send_redirects引數設為0。

-將net.ipv4.conf.all.accept_redirects和net.ipv4.conf.default.accept_redirects引數設為0。

-將net.ipv4.icmp_ignore_bogus_error_responses引數設為1。

13-密碼策略

人們通常會在不同的地方使用相同的密碼,這是一個非常不好的習慣。舊的密碼儲存在/etc/security/opasswd檔案中,我們需要使用PAM模組來管理Linux主機中的安全策略。在Debian發行版中,可以開啟/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儲存的是密碼的雜湊,所以你要確保系統使用的是SHA512雜湊演算法。

另外一個有趣的功能就是“密碼輸出錯誤五次之後鎖定賬號”。開啟/etc/pam.d/password-auth檔案,然後新增下列資料:

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引數設為90。

-修改當前使用者的密碼過期時間:

#chage --maxdays 90 <user>

現在,我們還要限制su命令的訪問權。開啟/etc/pam.d/su檔案,然後設定pam_wheel.so引數:

auth required pam_wheel.so use_uid

最後一步就是禁止非root使用者訪問系統賬號。這一步可以通過下面這個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分配適當的許可權:

#chown root:root <crontabfile>

#chmod og-rwx <crontabfile>

為“passwd”、“group”、“shadow”和“gshadow”檔案分配適當的許可權:

#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-額外的操作

除了上述配置之外,下面這些因素也應該納入我們的考慮範圍內。

第一:

-在/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系統安全性的重要配置。但是,這只是冰山一角,還有很多複雜且有效的設定項還沒來得及與大家分享。如果你還想了解更多關於增強Linux安全性的內容,請參考我在Pluralsight上的課程。

相關文章