centos linux Ubuntu php Python 微软 云计算 Firefox shell 开源 mysql Windows wordpress google 编程 java nginx apache 程序员 Android

《高性能Linux服務器構建實戰:系統安全、故障排查、自動化運維與集群架構》——第1章 Linux服務器安全運維 1.1 賬戶和登錄安全

1.1 賬戶和登錄安全

安全是IT行業一個老生常談的話題了,最近的“棱鏡門”事件折射出了很多安全問題,處理好信息安全問題已變得刻不容緩。因此作為一名運維人員,必須了解一些安全運維準則,同時,要保護自己所負責的業務,首先要站在攻擊者的角度思考問題,才能修補任何潛在的威脅和漏洞。
賬戶安全是系統安全的第一道屏障,也是系統安全的核心,保障登錄賬戶的安全,在一定程度上可以提高服務器的安全級別,本節重點介紹Linux系統登錄賬戶的安全設置方法。
1.1.1 刪除特殊的用戶和用戶組
Linux提供了各種不同角色的系統賬號,在系統安裝完成後,默認會安裝很多不必要的用戶和用戶組,如果不需要某些用戶或者用戶組,應立即刪除它們,因為賬戶越多,系統就越不安全,從而很可能被黑客利用,威脅服務器的安全。
Linux系統中可以刪除的默認用戶和用戶組大致如下:
可刪除的用戶,如adm、lpsyncshutdownhalt、news、uucp、operator、games、gopher等。
可刪除的用戶組,如adm、lp、news、uucp、games、dip、pppusers、popusers、slipusers等。
刪除的方法很簡單,下面以刪除games用戶和用戶組為例介紹具體的操作。
刪除系統不必要的用戶使用下面命令:

[root@localhost ~]# userdel games
刪除系統不必要的用戶組使用如下命令:

[root@localhost ~]# groupdel  games
有些時候,某些用戶僅僅用作進程調用或者用戶組調用,並不需要登錄功能,此時可以禁止這些用戶登錄系統的功能,例如要禁止nagios用戶的登錄功能,可以執行如下命令:

[root@localhost ~]# usermod -s /sbin/nologin nagios
其實要刪除哪些用戶和用戶組,並沒有固定要求,可以根據服務器的用途來決定,如果服務器是用於Web應用的,那麽系統默認的apache用戶和用戶組就無需刪除;而如果服務器是用於數據庫應用的,那麽建議刪除系統默認的apache用戶和用戶組。
1.1.2 關閉系統不需要的服務
在安裝完成後,Linux綁定了很多沒用的服務,這些服務默認都是自動啟動的。對於服務器來說,運行的服務越多,系統就越不安全,運行的服務越少,系統安全性就越高,因此關閉一些不需要的服務,對系統安全有很大的幫助。
具體關閉哪些服務,要根據服務器的用途而定,一般情況下,只要系統本身用不到的服務都認為是不必要的服務,例如某臺Linux服務器用於WWW應用,那麽除了httpd服務和系統運行是必需的服務外,其他服務都可以關閉。下面這些服務一般情況下是不需要的,可以選擇關閉:

anacron、auditd、autofs、avahi-daemon、avahi-dnsconfd、bluetooth、cpuspeed、firstboot、gpm、haldaemon、hidd、ip6tables、ipsec、isdn、lpd、mcstrans、messagebus、netfs、nfs、nfslock、nscd、pcscd portmap、readahead_early、restorecond、rpcgssd、rpcidmapd、rstatd、sendmail、setroubleshoot、yppasswdd ypserv

關閉服務自動啟動的方法很簡單,可以通過chkconfig命令實現。例如,要關閉bluetooth服務,執行下面命令即可:

chkconfig --level 345 bluetooth off
對所有需要關閉的服務都執行上面的操作後,重啟服務器即可。
為了系統能夠正常穩定運行,建議啟動的系統運行必需的服務如表1-1所示。


image
image

1.1.3 密碼安全策略
在Linux下,遠程登錄系統有兩種認證方式:密碼認證和密鑰認證。密碼認證方式是傳統的安全策略,對於密碼的設置,比較普遍的說法是:至少6個字符以上,密碼要包含數字、字母、下劃線、特殊符號等。設置一個相對復雜的密碼,對系統安全能起到一定的防護作用,但是也面臨一些其他問題,例如密碼暴力破解、密碼泄露、密碼丟失等,同時過於復雜的密碼也會對運維工作造成一定的負擔。
密鑰認證是一種新型的認證方式,公用密鑰存儲在遠程服務器上,專用密鑰保存在本地,當需要登錄系統時,通過本地專用密鑰和遠程服務器的公用密鑰進行配對認證,如果認證成功,就可以成功登錄系統。這種認證方式避免了被暴力破解的危險,同時只要保存在本地的專用密鑰不被黑客盜用,攻擊者一般無法通過密鑰認證的方式進入系統。因此,在Linux下推薦用密鑰認證方式登錄系統,這樣就可以拋棄密碼認證登錄系統的弊端。
Linux服務器一般通過SecureCRT、putty、Xshell之類的工具進行遠程維護和管理,密鑰認證方式的實現就是借助於SecureCRT軟件和Linux系統中的ssh服務實現的。
SSH的英文全稱是Secure Shell。SSH以及OpenSSH是類似於telnet的遠程登錄程序,SecureCRT就是一個SSH客戶端,要想通過SecureCRT登錄遠程機器,要求該遠程機器必須運行sshd服務。但是,與telnet不同的是,SSH協議非常安全,數據流加密傳輸,確保數據流的完整性和安全性。OpenSSH 的RSA/DSA密鑰認證系統是一個優秀的功能組件,使用基於密鑰認證系統的優點在於:在許多情況下,可以不必手工輸入密碼就能建立起安全的連接。
支持RSA/DSA密鑰認證的軟件有很多,這裏以SecureCRT為例,詳細講述通過密鑰認證方式遠程登錄Linux服務器的實現方法。
這裏的環境是SecureCRT5.1、CentOS6.4、SSH-2.0-OpenSSH_5.3,操作如下。
1)首先產生SSH2的密鑰對,這裏選擇使用RSA 1024位加密,如圖1-1所示。

image

2)弹出“密钥生成向导”对话框,如图1-2所示。
image

3)在选择密钥类型时,选择 RSA 方式,如图1-3所示。

image

4)输入一个保护设定的加密密钥的通行短语,如图1-4所示。
image

5)在密钥的长度(位)中,使用默认的1024位加密即可,如图1-5所示。

image

6)系统开始生成密钥,如图1-6所示。

image

7)为生成的密钥选择一个文件名和存放的目录(可以自行修改或使用默认值),如图1-7所示。

image

到這裏為止,使用客戶端 SecureCRT 生成密鑰的步驟已經完成。接下來將密鑰文件上傳到Linux服務器端,並在服務器端導入密鑰。
例如,這裏設置普通用戶ixdba使用SSH2協議,在Linux服務器執行如下操作:

[ixdba@localhost~]$ mkdir /home/ixdba/.ssh
[ixdba@localhost~]$ chmod 700 /home/ixdba/.ssh
把之前生成的後綴名為pub的密鑰文件上傳到Linux服務器上,如果已經在用 SecureCRT連接Linux系統,可以直接使用rz命令將密鑰文件上傳到服務器上,然後開始導入:

[ixdba@localhost~]$ ssh-keygen -i -f Identity.pub >> /root/.ssh/authorized_keys2
完成後,在/home/ixdba/.ssh下面就會多出一個 authorized_keys2 文件,這就是服務器端的密鑰文件。 
8)在SecureCRT 客戶端軟件上新建一個SSH2連接。
在“協議”下拉列表中選擇“SSH2”,在主機名文本框中輸入“192.168.12.188”,在用戶名文本框中輸入“ixdba”,其他保持默認,如圖1-8所示。
9)由於這裏要讓服務器使用 RSA 方式來驗證用戶登錄 SSH,因此在“鑒權”一欄中只需選擇“公鑰”方式,然後單擊右邊的“屬性”按鈕,如圖1-9所示。

image

10)在出现的“公钥属性”窗口中选择“使用身份或证书文件”,然后找到上面步骤7中生成的密钥文件,如图1-10所示。

image

11)到此為止,通過 RSA 密鑰方式驗證用戶登錄SSH的步驟就全部完成了。接下來,為了服務器的安全,還需要修改 SSH2 的配置文件,讓其只能接收PublicKey認證方式來驗證用戶。
在Linux服務器上的操作步驟如下:

[root@localhost ~]# vi  /etc/ssh/sshd_config
修改如下幾個配置:

Protocol 2  #僅允許使用SSH2
PubkeyAuthentication yes        #啟用PublicKey認證
AuthorizedKeysFile .ssh/authorized_keys2  # PublicKey文件路徑
PasswordAuthentication no        #不使用口令認證
最後重啟sshd服務,執行如下命令:

[root@localhost ~]# /etc/rc.d/init.d/sshd restart
等sshd服務啟動完畢,就可以利用SecureCRT通過PublicKey認證遠程登錄Linux系統了。
1.1.4 合理使用susudo命令
su命令是一個切換用戶的工具,經常用於將普通用戶切換到超級用戶下,當然也可以從超級用戶切換到普通用戶。為了保證服務器的安全,幾乎所有服務器都禁止了超級用戶直接登錄系統,而是通過普通用戶登錄系統,然後再通過su命令切換到超級用戶下,執行一些需要超級權限的工作。通過su命令能夠為系統管理帶來一定的方便,但是也存在不安全的因素,例如系統有10個普通用戶,每個用戶都需要執行一些有超級權限的操作,就必須把超級用戶的密碼交給這10個普通用戶,如果這10個用戶都有超級權限,通過超級權限可以做任何事,那麽在一定程度上會對系統的安全造成威脅。因此在很多人都需要參與的系統管理中,使用su命令並不是最好的選擇,超級用戶密碼應該掌握在少數人手中,此時sudo命令就派上用場了。
sudo命令允許系統管理員分配給普通用戶一些合理的“權力”,並且不需要普通用戶知道超級用戶密碼,就能讓他們執行一些只有超級用戶或其他特許用戶才能完成的任務,比如系統服務重啟、編輯系統配置文件等,通過這種方式不但能減少超級用戶登錄次數和管理時間,而且提高了系統安全性。因此,sudo命令相對於權限無限制性的su命令來說,還是比較安全的,這使得sudo也被稱為受限制的su,另外sudo也是需要事先進行授權認證的,所以也被稱為授權認證的su。
sudo執行命令的流程是:將當前用戶切換到超級用戶下,或切換到指定的用戶下,然後以超級用戶或其指定切換到的用戶身份執行命令,執行完成後,直接退回到當前用戶,而這一切的完成要通過sudo的配置文件/etc/sudoers來進行授權。
例如,普通用戶是無法訪問/etc/shadow文件的:

[user01@unknown ~]$ more /etc/shadow
/etc/shadow: Permission denied
如果要讓普通用戶user01可訪問這個文件,可以在/etc/sudoers添加如下內容:

user01     ALL = /bin/more /etc/shadow
這樣,通過如下方式user01用戶就可訪問/etc/shadow文件:

[user01@unknown ~]$ sudo more /etc/shadow
[sudo] password for user01:
執行這個命令後,需要輸入user01用戶的密碼,然後就可訪問文件內容了。在這裏sudo使用時間戳文件來完成類似“檢票”的系統功能,當用戶輸入密碼後就獲得了一張默認存活期為5分鐘的“入場券”(默認值可以在編譯的時候改變)。超時以後,用戶必須重新輸入密碼才能查看文件內容。
如果每次都需要輸入密碼,那麽某些自動調用超級權限的程序就會出現問題,此時可以通過下面的設置讓普通用戶無需輸入密碼即可執行具有超級權限的程序。例如,要讓普通用戶centreon具有/etc/init.d/nagios腳本重啟的權限,可以在/etc/sudoers添加如下設置:

CENTREON   ALL = NOPASSWD: /etc/init.d/nagios restart
這樣,普通用戶centreon就可以執行重啟nagios腳本而無需輸入密碼了。如果要讓一個普通用戶user02具有超級用戶的所有權限,而又不想輸入超級用戶的密碼,只需在/etc/sudoers添加如下內容即可:
user02 ALL=(ALL) NOPASSWD: ALL
這樣user02用戶登錄系統後,就可以通過執行如下命令切換到超級用戶:

[user02@unknown ~]$ sudo su -
[root@unknown ~]# pwd
/root
設計sudo的宗旨是:賦予用戶盡可能少的權限但仍允許他們完成自己的工作,這種設計兼顧了安全性和易用性,因此,強烈推薦通過sudo來管理系統賬號的安全,只允許普通用戶登錄系統,如果這些用戶需要特殊的權限,就通過配置/etc/sudoers來完成,這也是多用戶系統下賬號安全管理的基本方式。
1.1.5 刪減系統登錄歡迎信息
雖然系統的一些歡迎信息或版本信息能給系統管理者帶來一定的方便,但是這些信息有時候可能被黑客利用,從而成為攻擊服務器的幫兇,為了保證系統的安全,可以修改或刪除某些系統文件,這樣的文件有4個,分別是/etc/issue、/etc/issue.net、/etc/redhat-release和/etc/motd。
/etc/issue和/etc/issue.net文件都記錄了操作系統的名稱和版本號,當用戶通過本地終端或本地虛擬控制臺等登錄系統時,就會顯示/etc/issue的文件內容,當用戶通過ssh或telnet等遠程登錄系統時,在登錄後就會顯示/etc/issue.net的文件內容。在默認情況下/etc/issue.net文件的內容是不會在ssh登錄後顯示的,要顯示這個信息可以修改/etc/ssh/sshd_config文件,在此文件中添加如下內容即可:

Banner /etc/issue.net
其實,這些登錄提示很明顯泄露了系統信息,為了安全起見,建議將此文件中的內容刪除或修改。
/etc/redhat-release文件也記錄了操作系統的名稱和版本號,為了安全起見,可以將此文件中的內容刪除。
/etc/motd文件是系統的公告信息。每次用戶登錄後,/etc/motd文件的內容就會顯示在用戶的終端。通過這個文件系統,管理員可以發布一些軟件或硬件的升級、系統維護等通告信息,但是此文件的最大作用就是可以發布一些警告信息,在黑客登錄系統後,會對其發出這些警告信息,進而產生一些震懾作用。筆者曾看過國外的一個報道,黑客入侵了一臺服務器,而這臺服務器卻給出了歡迎登錄的信息,因此法院不做任何裁決。
1.1.6 禁止Control-Alt-Delete鍵盤關閉命令
在Linux的默認設置下,同時按下Control-Alt-Delete組合鍵,系統將自動重啟,這個策略是很不安全的,因此要禁止Control-Alt-Delete組合鍵重啟系統。禁止的方法很簡單,在CentOS5.x以下的系統,只需修改/etc/inittab文件即可,操作如下:

[root@localhost ~]# vi /etc/inittab
找到如下這行:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now
在這行之前加上“#”,然後執行:

[root@localhost ~]# telinit q
在CentOS6.x以上版本中,需要修改/etc/init/control-alt-delete.conf文件,找到如下內容:

exec /sbin/shutdown -r now "Control-Alt-Delete pressed"
在這行之前加上“#”進行註釋掉即可。

延伸阅读

评论