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