服務器安全是 IT 行業一個老(lǎo)生常談的問題了(le),每年的護網行動,企業内部的安全培訓都在提醒每個程序員處理(lǐ)好(hǎo)服務器安全問題已變得刻不容緩
如果在安全方面有疏忽,極易造成數據洩露、隐私洩露等重大(dà)安全事(shì)故
2022年美(měi)醫(yī)療中心數據洩露,超130萬人受影響;
去年一月,勒索軟件攻擊引發墨西哥(gē)州監獄越獄危機;
同樣是2022年,紅(hóng)十字國際委員會(huì)遭網絡攻擊,超51萬人信息被黑。
作(zuò)爲一名運維人員,必須要了(le)解一些(xiē)安全運維守則,通過一些(xiē)手段來(lái)保護自(zì)己的服務器不受入侵和(hé)攻擊,再進一步保護自(zì)己所負責的業務不受影響
下(xià)面我将給大(dà)家介紹一些(xiē)提高(gāo)服務器安全性的方法論
删除特殊的用(yòng)戶和(hé)用(yòng)戶組
Linux 系統提供了(le)各種不同角色的系統賬号,在系統安裝完成之後,默認會(huì)安裝很(hěn)多不必要的用(yòng)戶和(hé)用(yòng)戶組
如果你(nǐ)用(yòng)不上(shàng)這(zhè)些(xiē)用(yòng)戶和(hé)用(yòng)戶組,應該删除他(tā)們,因爲賬戶越多,系統就越不安全,這(zhè)些(xiē)你(nǐ)不會(huì)注意到(dào)的用(yòng)戶很(hěn)有可能(néng)會(huì)被黑客給利用(yòng),從(cóng)而威脅服務器的安全
像:adm、sync、shutdown、lp、halt、news、uucp、games 等系統默認用(yòng)戶
以及 adm、news、uucp、dip、popusers 等系統默認用(yòng)戶組
如果你(nǐ)用(yòng)不上(shàng)它們,删除掉
删除的方法很(hěn)簡單
禁止某些(xiē)用(yòng)戶登錄系統的功能(néng)
有些(xiē)情況下(xià),某些(xiē)用(yòng)戶僅僅用(yòng)作(zuò)進程調用(yòng)或者用(yòng)戶組調用(yòng),并不需要登錄功能(néng)
比如說 mail 用(yòng)戶,很(hěn)多情況下(xià),我們的郵件服務器隻需要進行收取郵件的功能(néng),不需要登錄到(dào)系統上(shàng)
所以給它的 shell 設置成 nologin 就行了(le)
總結一下(xià)
關于用(yòng)戶和(hé)用(yòng)戶組的删除,其實不是千篇一律的,可以根據服務器的主要用(yòng)途來(lái)決定:如果服務器是 web 應用(yòng),那麽 apache 用(yòng)戶或 nginx 用(yòng)戶就無需删除;而跟數據庫相關的默認用(yòng)戶,例如 mysql 用(yòng)戶就可以删除
合理(lǐ)使用(yòng) su、sudo 命令
su 命令是一個切換用(yòng)戶的工(gōng)具,用(yòng)于将普通用(yòng)戶切換到(dào)超級用(yòng)戶下(xià),也(yě)可以将超級用(yòng)戶切換到(dào)普通用(yòng)戶
爲了(le)保證服務器安全,很(hěn)多情況都是直接禁止超級用(yòng)戶直接登錄系統,而是先通過普通用(yòng)戶登錄,再通過 su 命令切換到(dào)超級用(yòng)戶
但(dàn)是 su 命令會(huì)導緻一些(xiē)安全問題:普通用(yòng)戶想要使用(yòng) su 命令切換到(dào)超級用(yòng)戶,就首先要知(zhī)道(dào)超級用(yòng)戶的密碼,如果有多個普通用(yòng)戶,那麽這(zhè)多個普通用(yòng)戶都知(zhī)道(dào)超級用(yòng)戶的密碼,這(zhè)在一定程度上(shàng)會(huì)對(duì)系統的安全造成威脅
超級用(yòng)戶的密碼應該掌握在少數人手裏
這(zhè)時(shí)候 sudo 命令登場了(le)
sudo 命令允許管理(lǐ)員分配給普通用(yòng)戶一些(xiē)合理(lǐ)的“權利”,并且不需要普通用(yòng)戶知(zhī)道(dào)超級用(yòng)戶的密碼,就能(néng)讓普通用(yòng)戶執行一些(xiē)隻有超級用(yòng)戶或其他(tā)特權用(yòng)戶才能(néng)完成的任務,比如服務重啓,修改配置文(wén)件等
sudo 命令也(yě)叫受限制的 su
sudo 命令的執行流程是:将當前用(yòng)戶切換到(dào)超級用(yòng)戶下(xià)(或切換到(dào)指定用(yòng)戶),然後以超級用(yòng)戶(指定用(yòng)戶)身份執行命令,執行完成後,直接退回到(dào)當前用(yòng)戶
舉個例子:普通用(yòng)戶是無法訪問 /etc/shadow 文(wén)件的
如果要讓 user1 能(néng)夠訪問這(zhè)個文(wén)件,可以在 /etc/sudoers.d/ 添加下(xià)面内容:
添加之後我們用(yòng) user1 執行一下(xià)
輸入 user1 的密碼之後就可以查看(kàn)文(wén)件了(le)
如果普通用(yòng)戶沒有在 /etc/sudoers.d/ 或/etc/sudoers 中配置,同樣無法查看(kàn)
sudo 使用(yòng)時(shí)間戳文(wén)件來(lái)完成類似“檢票”的功能(néng):當用(yòng)戶輸入密碼之後就獲得了(le)一張默認存活期爲5分鐘(zhōng)的入場券,超時(shí)以後,用(yòng)戶必須重新輸入密碼才能(néng)獲得相應的權限
這(zhè)樣會(huì)導緻一個問題:如果超時(shí)就要重新輸入密碼,像一些(xiē)自(zì)動調用(yòng)超級權限的程序就會(huì)出現(xiàn)問題
我們可以通過下(xià)面的設置讓普通用(yòng)戶無需輸入密碼也(yě)可執行具有超級權限的程序,例如需要 user1 用(yòng)戶 可以自(zì)動重啓 network 的權限
這(zhè)樣 user1 用(yòng)戶就可以執行重啓 network 的腳本而無需輸入密碼了(le)
如果要讓 user1 具有超級用(yòng)戶的所有權限,又不想輸入超級用(yòng)戶的密碼,隻需要添加如下(xià)内容即可
使用(yòng)強密碼而非弱密碼
這(zhè)個準則想必大(dà)家都聽過了(le),一個強大(dà)健壯的密碼,能(néng)讓你(nǐ)的系統安全性翻倍提高(gāo)
什(shén)麽是強密碼:
至少 12 個字符長,但(dàn) 14 個或 14 個字符以上(shàng)更好(hǎo)
大(dà)寫字母、小(xiǎo)寫字母、數字和(hé)符号的組合
不是可以在詞典或人員、角色、産品或組織名稱中找到(dào)的單詞
使用(yòng)密鑰認證作(zuò)爲遠程登錄系統的認證方式
Linux 中,遠程登錄系統有兩種認證方式:
密碼認證
密鑰認證
關于密碼認證,雖然設置一個密碼對(duì)系統安全能(néng)夠起到(dào)一定作(zuò)用(yòng),但(dàn)是當遇到(dào)像密碼暴力破解、密碼洩露、密碼丢失等問題時(shí),我們往往就會(huì)束手無策,而且強密碼也(yě)會(huì)對(duì)我們的工(gōng)作(zuò)造成一定負擔
而密鑰認證是一種新型的認證方式,公用(yòng)密鑰存儲在遠程服務器上(shàng),專用(yòng)密鑰保存在本地,當需要登錄系統時(shí),通過本地專用(yòng)密鑰和(hé)遠程服務器的公用(yòng)密鑰進行配對(duì)認證,如果認證成功就能(néng)登陸
這(zhè)種認證方式避免了(le)被暴力破解的風(fēng)險,同時(shí)隻要保存在本地的專用(yòng)密碼不被黑客盜用(yòng),是一般無法通過密鑰認證的方式進入系統的
關閉系統不需要的服務
Linux 綁定了(le)很(hěn)多沒用(yòng)的服務,這(zhè)些(xiē)服務默認都是自(zì)動啓動的
對(duì)于服務器來(lái)說,運行的服務越多,系統就越不安全,因此關閉一些(xiē)不需要的服務,對(duì)系統安全有很(hěn)大(dà)的幫助
但(dàn)具體要關閉那些(xiē)服務,需要根據服務器的用(yòng)途而定,一般情況下(xià),隻要系統本身用(yòng)不到(dào)的服務都認爲是不必要的服務
例如某台 Linux 服務提供 web 服務,那麽除了(le) httpd 服務或者 nginx 服務和(hé)系統運行時(shí)必需的服務外(wài),其他(tā)服務都可以關閉
下(xià)面列出一下(xià)不常用(yòng)的服務,大(dà)家可以自(zì)行選擇關閉
關閉服務自(zì)啓動的方法可以通過 chkconfig 命令實現(xiàn)
對(duì)所有需要關閉的服務都執行上(shàng)面的操作(zuò)之後,重啓服務器即可
而爲了(le)系統能(néng)夠安全穩定的運行,就不得不運行一些(xiē)服務,如下(xià)所示
acpid:用(yòng)于電源管理(lǐ)
apmd:高(gāo)級電源能(néng)源管理(lǐ)服務,用(yòng)于監控電池性能(néng)
kudzu:檢測硬件是否變化的服務
crond:爲 Linux 下(xià)自(zì)動安排的進程提供運行服務
atd:類似于 crond,提供計(jì)劃任務功能(néng)
keytables:用(yòng)于裝載鏡像鍵盤
iptables:Linux 内置防火牆軟件
xinetd:支持多種網絡服務的核心守護進程
network:Linux 網絡服務
sshd:提供遠程登錄 Linux 的服務
syslog:記錄系統日志的服務
文(wén)件權限檢查和(hé)修改
不正确的文(wén)件權限設置會(huì)直接威脅系統的安全,因此運維人員應該能(néng)及時(shí)發些(xiē)這(zhè)些(xiē)不正确的權限設置,并立即修改
查找系統中任何用(yòng)戶都具有寫權限的文(wén)件或目錄
查找系統中具有 s 權限的程序
含有 s 權限的程序對(duì)系統安全威脅很(hěn)大(dà),上(shàng)面的命令可以把某些(xiē)不必要的 s 權限的程序去掉,防止用(yòng)戶濫用(yòng)權限或者提升權限
檢查系統中所有 suid 和(hé) sgid 文(wén)件
檢查系統中沒有屬主的文(wén)件
沒有屬主的孤兒文(wén)件往往容易成爲黑客利用(yòng)的工(gōng)具,因此再找到(dào)這(zhè)些(xiē)文(wén)件之後,要麽删除要麽修改文(wén)件的屬主