從原理到實(shí)踐:深入探索Linux安全機(jī)制
前言
本文將從用戶和權(quán)限管理、文件系統(tǒng)權(quán)限、SELinux、防火墻、加密和安全傳輸、漏洞管理和更新等幾個(gè)Linux安全機(jī)制中的重要方面,深入探索其工作原理和使用方法。在當(dāng)今數(shù)字化時(shí)代,網(wǎng)絡(luò)安全問(wèn)題備受關(guān)注,Linux作為廣泛應(yīng)用的操作系統(tǒng)之一,其安全性至關(guān)重要。無(wú)論你是Linux系統(tǒng)的初學(xué)者還是資深管理員,本文都將為你提供寶貴的經(jīng)驗(yàn)和啟發(fā),幫助你在保護(hù)網(wǎng)絡(luò)安全的道路上行穩(wěn)致遠(yuǎn)。
Linux
Linux 是一種開(kāi)源的類Unix操作系統(tǒng)內(nèi)核,由Linus Torvalds在1991年首次發(fā)布,其后又衍生出許多不同的發(fā)行版(如Ubuntu、Debian、CentOS等)。Linux操作系統(tǒng)則是由Linux內(nèi)核與各種應(yīng)用程序、工具和庫(kù)組成的完整操作系統(tǒng),在其眾多的特性中,Linux以其穩(wěn)定性和安全性而聞名,這首先得益于開(kāi)源社區(qū)的廣泛參與和持續(xù)改進(jìn),其次就是Linux優(yōu)秀的安全機(jī)制,這些保證了其能夠提供一個(gè)高度穩(wěn)定和安全的運(yùn)行環(huán)境,事實(shí)上在服務(wù)器領(lǐng)域、嵌入式系統(tǒng)、超級(jí)計(jì)算機(jī)等多個(gè)領(lǐng)域也得到了廣泛應(yīng)用,并擁有龐大的用戶群體和開(kāi)發(fā)者社區(qū)。
用戶和權(quán)限管理
Linux系統(tǒng)使用用戶和組的概念來(lái)管理文件和系統(tǒng)資源的訪問(wèn)權(quán)限。其主要原理也很簡(jiǎn)單,可以從下面幾個(gè)方面來(lái)理解:
- 用戶:
在 Linux 系統(tǒng)中,每個(gè)用戶都有一個(gè)唯一的用戶名和用戶 ID(User ID),用于標(biāo)識(shí)用戶身份。用戶可以屬于一個(gè)或多個(gè)用戶組,每個(gè)用戶組也有一個(gè)唯一的組名和組 ID。
- 權(quán)限
每個(gè)文件和目錄都有屬主(Owner)、所屬組(Group)和其他用戶(Others)的權(quán)限設(shè)置。權(quán)限通常包括讀(r)、寫(xiě)(w)和執(zhí)行(x)權(quán)限。這些權(quán)限分別表示對(duì)文件的讀取、寫(xiě)入和執(zhí)行操作的權(quán)限。另外,每個(gè)權(quán)限位也可以用一個(gè)數(shù)字來(lái)表示,分別對(duì)應(yīng)讀(4)、寫(xiě)(2)和執(zhí)行(1)權(quán)限。
- 權(quán)限位:
Linux 中使用權(quán)限位來(lái)表示文件或目錄的權(quán)限。每個(gè)文件或目錄有 9 個(gè)權(quán)限位,分為 3 個(gè)部分:屬主權(quán)限、所屬組權(quán)限和其他用戶權(quán)限。每個(gè)部分包括讀(r)、寫(xiě)(w)和執(zhí)行(x)權(quán)限。
- 權(quán)限控制:
當(dāng)用戶訪問(wèn)文件或目錄時(shí),系統(tǒng)會(huì)根據(jù)用戶的身份(用戶 ID)、文件的權(quán)限位和用戶所屬的組來(lái)確定是否允許特定操作。只有擁有相應(yīng)權(quán)限的用戶或組成員才能對(duì)文件進(jìn)行讀取、寫(xiě)入或執(zhí)行操作。
- 特殊權(quán)限:
除了基本的讀寫(xiě)執(zhí)行權(quán)限外,還有一些特殊權(quán)限,如 SetUID、SetGID 和粘著位(Sticky Bit)。這些特殊權(quán)限可以影響文件或目錄的執(zhí)行方式,例如在執(zhí)行文件時(shí)臨時(shí)提升用戶權(quán)限或確保只有文件所有者才能刪除文件。
文件系統(tǒng)權(quán)限
從我個(gè)人的理解來(lái)看,文件系統(tǒng)權(quán)限應(yīng)該屬于Linux用戶和權(quán)限管理的一部分,但我更愿意把它單獨(dú)拿出來(lái)理解,因?yàn)槔斫獾慕嵌炔灰粯?,?cè)重重點(diǎn)也不同。
在用戶和權(quán)限管理中,更多側(cè)重于用戶和權(quán)限。在這里更多側(cè)重于文件和權(quán)限。雖然角度不同,但是描述的是同一件事,這是確定的。
Linux 文件系統(tǒng)權(quán)限的工作原理主要涉及文件的所有者、所屬組和其他用戶對(duì)文件的訪問(wèn)控制,其基本工作原理也比較簡(jiǎn)單:
- 文件屬性:
每個(gè)文件和目錄在 Linux 系統(tǒng)中都有一個(gè)唯一的所有者(Owner)和所屬組(Group)。此外,還有其他用戶(Others)對(duì)該文件的訪問(wèn)權(quán)限。這些屬性由文件系統(tǒng)存儲(chǔ),并且與文件的元數(shù)據(jù)一起保存。
- 權(quán)限位:
每個(gè)文件和目錄都有 9 個(gè)權(quán)限位,分為 3 個(gè)部分:屬主權(quán)限、所屬組權(quán)限和其他用戶權(quán)限。每個(gè)部分包括讀(r)、寫(xiě)(w)和執(zhí)行(x)權(quán)限。這些權(quán)限位決定了不同用戶對(duì)文件的操作權(quán)限。另外,每個(gè)權(quán)限位也可以用一個(gè)數(shù)字來(lái)表示,分別對(duì)應(yīng)讀(4)、寫(xiě)(2)和執(zhí)行(1)權(quán)限。
- 訪問(wèn)控制:
當(dāng)用戶嘗試訪問(wèn)某個(gè)文件時(shí),系統(tǒng)會(huì)根據(jù)用戶的身份(用戶 ID)、文件的權(quán)限位和用戶所屬的組來(lái)判斷是否允許特定操作。如果用戶是文件的屬主或具有適當(dāng)?shù)臋?quán)限,系統(tǒng)將允許他們進(jìn)行讀取、寫(xiě)入或執(zhí)行操作。
- 特殊權(quán)限:
除了基本的讀寫(xiě)執(zhí)行權(quán)限外,還有一些特殊權(quán)限,如 SetUID、SetGID 和粘著位(Sticky Bit)。這些特殊權(quán)限可以影響文件或目錄的執(zhí)行方式,例如在執(zhí)行文件時(shí)臨時(shí)提升用戶權(quán)限或確保只有文件所有者才能刪除文件。
關(guān)于用戶和權(quán)限管理有兩個(gè)命令是必須得掌握的,這兩個(gè)命令就是chmod和chown。
1、在 CentOS 7 中,chmod 命令用于修改文件或目錄的權(quán)限。
使用方式:
chmod [選項(xiàng)] 權(quán)限模式 文件/目錄
常用選項(xiàng):
- -R:遞歸地修改文件夾及其子文件夾的權(quán)限。
- -v:顯示每個(gè)修改后的文件/目錄的權(quán)限。
權(quán)限模式:
可以使用數(shù)字或符號(hào)來(lái)指定權(quán)限模式。
- 數(shù)字模式:數(shù)字模式使用三位數(shù),每一位表示一個(gè)權(quán)限組(所有者、所屬組、其他用戶),其中每一位的值為 4(讀權(quán)限)、2(寫(xiě)權(quán)限)和 1(執(zhí)行權(quán)限)的組合。例如,755 表示所有者具有讀、寫(xiě)和執(zhí)行權(quán)限,所屬組和其他用戶具有讀和執(zhí)行權(quán)限。
- 符號(hào)模式:符號(hào)模式使用類似于 u+rwx、g+rw、o-x 的格式來(lái)指定權(quán)限。u 代表所有者,g 代表所屬組,o 代表其他用戶,+ 表示添加權(quán)限,- 表示移除權(quán)限,r 表示讀權(quán)限,w 表示寫(xiě)權(quán)限,x 表示執(zhí)行權(quán)限。例如,chmod u+rwx file.txt 表示給文件 file.txt 的所有者添加讀、寫(xiě)和執(zhí)行權(quán)限。
示例:
將文件 file.txt 的所有者和所屬組的權(quán)限設(shè)置為讀寫(xiě),其他用戶無(wú)權(quán)限:
chmod 660 file.txt
將文件夾 dir 及其子文件夾的所有者、所屬組和其他用戶的權(quán)限設(shè)置為讀寫(xiě)執(zhí)行:
chmod -R 777 dir
給文件 script.sh 的所有用戶添加執(zhí)行權(quán)限:
chmod a+x script.sh
給文件 file.txt 的所有者和所屬組添加讀權(quán)限,其他用戶移除所有權(quán)限:
chmod u+r,g+r,o-rwx file.txt
2、在 CentOS 7 中,chown 命令用于修改文件或目錄的所有者。
使用方式:
chown [選項(xiàng)] 新所有者 文件/目錄
常用選項(xiàng):
- -R:遞歸地修改文件夾及其子文件夾的所有者。
- -v:顯示每個(gè)修改后的文件/目錄的所有者。
示例:
- 將文件 file.txt 的所有者修改為 fanfu:
chown fanfu file.txt
- 將目錄 dir 及其子目錄的所有者修改為 fanfu,同時(shí)顯示修改過(guò)程:
chown -Rv fanfu dir
- 將文件 file.txt 的所有者和所屬組修改為 fanfu 和 yzxa:
chown fanfu:yzxa file.txt
chmod 和 chown 是兩個(gè)在 CentOS(以及其他 Linux 發(fā)行版)中常用的命令,用于修改文件或目錄的權(quán)限和所有者,功能上很相近,但是還是有區(qū)別的:
chmod 命令:
- 作用:chmod 命令用于修改文件或目錄的權(quán)限。
- 使用方式:chmod 命令后面跟著權(quán)限模式和要修改權(quán)限的文件或目錄路徑。
- 權(quán)限模式:可以使用數(shù)字(例如 755)或符號(hào)(例如 u+rwx)來(lái)指定權(quán)限模式。
- 數(shù)字模式:數(shù)字模式使用三位數(shù),每一位表示一個(gè)權(quán)限組(所有者、所屬組、其他用戶),其中每一位的值為 4(讀權(quán)限)、2(寫(xiě)權(quán)限)和 1(執(zhí)行權(quán)限)的組合。例如,755 表示所有者具有讀、寫(xiě)和執(zhí)行權(quán)限,所屬組和其他用戶具有讀和執(zhí)行權(quán)限。
- 符號(hào)模式:符號(hào)模式使用類似于 u+rwx、g+rw、o-x 的格式來(lái)指定權(quán)限。u 代表所有者,g 代表所屬組,o 代表其他用戶,+ 表示添加權(quán)限,- 表示移除權(quán)限,r 表示讀權(quán)限,w 表示寫(xiě)權(quán)限,x 表示執(zhí)行權(quán)限。
chown 命令:
- 作用:chown 命令用于修改文件或目錄的所有者。
- 使用方式:chown 命令后面跟著新的所有者和要修改所有者的文件或目錄路徑。
- 所有者:可以使用用戶名或用戶 ID(UID)來(lái)指定新的所有者。
總的來(lái)看,chmod 用于修改文件或目錄的權(quán)限,而 chown 用于修改文件或目錄的所有者。它們是不同的命令,用途和參數(shù)也不同。在實(shí)際應(yīng)用中,我們可以根據(jù)需要選擇使用 chmod 或 chown 來(lái)對(duì)文件或目錄進(jìn)行相應(yīng)的權(quán)限和所有者的修改操作。
SELinux
SELinux(Security-Enhanced Linux)和 AppArmor 都是用于強(qiáng)化 Linux 系統(tǒng)安全性的安全模塊,它們提供了額外的安全層來(lái)限制程序和進(jìn)程的權(quán)限,以減少系統(tǒng)受到惡意攻擊的風(fēng)險(xiǎn)。
它是由美國(guó)國(guó)家安全局(NSA)開(kāi)發(fā)的安全模塊,旨在提供強(qiáng)大的訪問(wèn)控制機(jī)制,通過(guò)強(qiáng)制訪問(wèn)控制(MAC)實(shí)現(xiàn)對(duì)系統(tǒng)資源的細(xì)粒度控制。SELinux基于安全策略規(guī)則,可以限制程序、進(jìn)程和用戶對(duì)文件、網(wǎng)絡(luò)資源以及其他系統(tǒng)資源的訪問(wèn)權(quán)限,從而減少潛在的安全漏洞。SELinux的靈活性很高,但配置和管理相對(duì)復(fù)雜,想要熟練掌握有一定難度。然而這并妨礙你來(lái)了解它,如果在使用Linux系統(tǒng)中,遇到一些棘手的問(wèn)題,這個(gè)地方也是一個(gè)排查方向。
這里可以先從以下幾個(gè)方面來(lái)理解一下SELinux的工作原理:
- 安全策略:
SELinux 使用安全策略來(lái)定義系統(tǒng)資源和對(duì)象之間的訪問(wèn)規(guī)則。這些安全策略由 SELinux 策略庫(kù)(Policy)管理,其中包括了對(duì)文件、進(jìn)程、網(wǎng)絡(luò)端口等各種資源的訪問(wèn)規(guī)則定義,以及用戶角色和安全上下文等信息。
- 安全上下文:
在 SELinux 中,每個(gè)對(duì)象(如文件、進(jìn)程)都有一個(gè)安全上下文,用于描述該對(duì)象的安全屬性。安全上下文由標(biāo)簽表示,包括了對(duì)象的類型(Type)、角色(Role)和用戶(User)等信息。這些安全上下文決定了對(duì)象可以執(zhí)行的操作和被允許的訪問(wèn)權(quán)限。
- 強(qiáng)制訪問(wèn)控制:
SELinux 引入了強(qiáng)制訪問(wèn)控制(MAC),通過(guò)強(qiáng)制執(zhí)行安全策略來(lái)限制系統(tǒng)資源的訪問(wèn)。即使用戶具有足夠的權(quán)限(如 root),也無(wú)法繞過(guò) SELinux 對(duì)資源的訪問(wèn)控制。這種強(qiáng)制控制確保了系統(tǒng)的安全性,減少了惡意軟件和攻擊的影響范圍。
- 安全上下文轉(zhuǎn)換:
當(dāng)進(jìn)程或程序嘗試訪問(wèn)某個(gè)資源時(shí),SELinux 會(huì)根據(jù)安全上下文進(jìn)行訪問(wèn)權(quán)限的檢查。如果需要訪問(wèn)的資源與進(jìn)程的安全上下文不匹配,SELinux 可能會(huì)進(jìn)行安全上下文的轉(zhuǎn)換,以確保訪問(wèn)的合法性。
- 日志和審計(jì):
SELinux 提供了完善的日志和審計(jì)功能,可以記錄系統(tǒng)中發(fā)生的安全事件和違反安全策略的行為。這些日志信息對(duì)于系統(tǒng)管理員來(lái)說(shuō)是非常有價(jià)值的,可以幫助其監(jiān)控系統(tǒng)的安全狀況,并及時(shí)采取措施應(yīng)對(duì)潛在的安全威脅。
以我個(gè)人經(jīng)驗(yàn)來(lái)看,在日常工作來(lái)說(shuō),SELinux的安全策略管理是一個(gè)非常重要的地方,之前在搭建vsftp服務(wù)的時(shí)候,遇到的問(wèn)題就是vsftp的配置正常,但是無(wú)法實(shí)現(xiàn)匿名用戶的訪問(wèn)、文件上傳,經(jīng)過(guò)排查發(fā)現(xiàn)原因是SELinux的安全策略中,允許匿名用戶寫(xiě)入的權(quán)限是關(guān)閉的,后來(lái)把這個(gè)權(quán)限打開(kāi),問(wèn)題迎刃而解。因此,我覺(jué)得,如果能夠掌握SELinux安全策略的基本管理,還是比較實(shí)用的。這里就給大家分享一下SELinux安全策略管理常用工具和命令的用法:
1、sestatus
sestatus命令可以查看當(dāng)前 SELinux 的狀態(tài)和基本信息,包括是否啟用、當(dāng)前模式等。
sestatus
sestatus輸出信息的解讀:
- ELinux status: enabled
SELinux 狀態(tài)為啟用,這表示 SELinux 安全模塊已經(jīng)啟用并正在系統(tǒng)中運(yùn)行。
- SELinuxfs mount: /sys/fs/selinux
SELinux 文件系統(tǒng)掛載點(diǎn)的路徑為 /sys/fs/selinux,這是 SELinux 內(nèi)核文件系統(tǒng)所在的路徑。
- SELinux root directory: /etc/selinux
SELinux 根目錄的路徑為 /etc/selinux,這是 SELinux 配置文件等相關(guān)文件存放的位置。
- Loaded policy name: targeted
加載的策略名稱為 targeted,這表示系統(tǒng)當(dāng)前使用的是針對(duì)特定應(yīng)用的 SELinux 策略。
- Current mode: enforcing
當(dāng)前 SELinux 模式為強(qiáng)制執(zhí)行(enforcing),這意味著 SELinux 將強(qiáng)制執(zhí)行安全策略,對(duì)違反規(guī)則的操作進(jìn)行限制。
- Mode from config file: enforcing
從配置文件中設(shè)置的 SELinux 模式也是強(qiáng)制執(zhí)行(enforcing),這說(shuō)明系統(tǒng)會(huì)在重啟后繼續(xù)以強(qiáng)制執(zhí)行模式運(yùn)行。
- Policy MLS status: enabled
策略 MLS 狀態(tài)為啟用,這表示多級(jí)安全策略(MLS)功能在 SELinux 中是啟用的。
- Policy deny_unknown status: allowed
deny_unknown 策略狀態(tài)為允許(allowed),這表示 SELinux 允許對(duì)未知進(jìn)程進(jìn)行訪問(wèn)控制。
- Max kernel policy version: 31
最大內(nèi)核策略版本號(hào)為 31,這是指內(nèi)核支持的 SELinux 策略的最大版本號(hào)。
2、getenforce
getenforce命令可以查看 SELinux 的強(qiáng)制模式(Enforcing)、警告模式(Permissive)或禁用模式(Disabled)。
圖片
3、semanage
semanage命令可以查詢和管理 SELinux 策略中的各種對(duì)象,如端口、用戶、登錄名等。比如查詢ftp服務(wù)相關(guān)的布爾值是否處于打開(kāi)狀態(tài),這里多解釋一下,在 SELinux 安全策略中,布爾值(Boolean)是一種用于控制特定安全策略行為的開(kāi)關(guān)變量。通過(guò)設(shè)置這些布爾值,可以啟用或禁用特定的安全策略規(guī)則,從而調(diào)整系統(tǒng)的訪問(wèn)控制行為。
semanage boolean -l | grep ftp
如果semanage指令執(zhí)行錯(cuò)誤,可以是未安裝SELinux管理工具包,執(zhí)行下面的指令進(jìn)行相關(guān)工具包安裝,安裝后再次執(zhí)行上述命令:
sudo yum install policycoreutils
4、setsebool
setsebool 用于設(shè)置或修改 SELinux 的布爾值(Boolean)。布爾值通常以 on 或 off 的形式存在,用于表示某個(gè)特定的安全功能或行為是否啟用。通過(guò) setsebool,你可以啟用或禁用特定的 SELinux 布爾值,從而調(diào)整系統(tǒng)的訪問(wèn)控制行為。
比如,允許vsftpd服務(wù)匿名用戶寫(xiě)入
setsebool -P ftpd_anon_write on
其中,-P 參數(shù)表示永久性地修改該布爾值,而不僅僅是臨時(shí)性地修改。
5、getsebool
用于查看 SELinux 布爾值的狀態(tài)。比如,查詢?cè)试Svsftpd服務(wù)匿名用戶寫(xiě)入的布爾值:
getsebool ftpd_anon_write