1、計(jì)算機(jī)系統(tǒng)中的權(quán)限

1.1、什么是權(quán)限
概念:
在計(jì)算機(jī)系統(tǒng)中,權(quán)限是指用戶或進(jìn)程對(duì)系統(tǒng)資源(如文件、目錄、設(shè)備、網(wǎng)絡(luò)等)可以執(zhí)行的操作的授權(quán)。權(quán)限的設(shè)計(jì)目的是為了保障系統(tǒng)的安全性,防止未經(jīng)授權(quán)的訪問(wèn)或操作。
權(quán)限的關(guān)鍵要素:
1、資源
權(quán)限總是針對(duì)某個(gè)具體資源,如:
文件或目錄數(shù)據(jù)庫(kù)記錄網(wǎng)絡(luò)端口系統(tǒng)配置
2、操作類(lèi)型
不同資源支持不同的操作類(lèi)型。如:
對(duì)文件:讀(Read)、寫(xiě)(Write)、執(zhí)行(Execute) 對(duì)數(shù)據(jù)庫(kù):查詢、插入、更新、刪除 對(duì)網(wǎng)絡(luò):連接、發(fā)送、接收
3、 主體
權(quán)限控制需要明確操作的主體,主體可以是:
用戶(User)用戶組(Group)進(jìn)程(Process)角色(Role)
簡(jiǎn)單來(lái)說(shuō),權(quán)限就是能或者不能去做一件事
1.2、為什么要有權(quán)限
權(quán)限設(shè)計(jì)的核心目的是保護(hù)系統(tǒng)資源,確保只有授權(quán)的用戶或進(jìn)程可以訪問(wèn)或修改特定的文件、程序或數(shù)據(jù)!
具體來(lái)說(shuō)有以下原因:
提升系統(tǒng)安全性:限制未授權(quán)用戶訪問(wèn)敏感數(shù)據(jù)或系統(tǒng)資源,防止數(shù)據(jù)泄露和惡意操作。精細(xì)化訪問(wèn)控制:根據(jù)用戶角色分配權(quán)限,確保最小權(quán)限原則,避免誤操作和資源浪費(fèi)。保障資源完整性:防止重要文件和數(shù)據(jù)被修改或破壞。支持多用戶環(huán)境:確保用戶之間的資源隔離,保護(hù)個(gè)人數(shù)據(jù)和協(xié)作權(quán)限。遵守合規(guī)要求:滿足行業(yè)法規(guī)和數(shù)據(jù)保護(hù)要求,提供審計(jì)追蹤功能。提升系統(tǒng)可維護(hù)性:通過(guò)角色和用戶組簡(jiǎn)化權(quán)限管理,提高系統(tǒng)擴(kuò)展性。減少潛在漏洞:通過(guò)嚴(yán)格的權(quán)限控制,降低系統(tǒng)漏洞帶來(lái)的風(fēng)險(xiǎn)。1.3、不同操作系統(tǒng)下的權(quán)限
不同操作系統(tǒng)下的權(quán)限設(shè)計(jì)方式有所不同,以下是主要操作系統(tǒng)的權(quán)限管理概述:
文件權(quán)限:
每個(gè)文件和目錄都有三種基本權(quán)限:讀(r)、寫(xiě)(w)、執(zhí)行(x),這些權(quán)限分別對(duì)文件的擁有者、所屬用戶組和其他用戶有效。 每個(gè)文件和目錄有三個(gè)權(quán)限組:
用戶(Owner):文件的擁有者權(quán)限。組(Group):與文件所有者同一組的用戶權(quán)限。其他(Others):其他用戶的權(quán)限。
文件權(quán)限表示:
通過(guò) ls -l顯示的文件權(quán)限(例如:-rwxr-xr-x)。
SELinux和AppArmor:
增強(qiáng)訪問(wèn)控制機(jī)制,通過(guò)給資源分配安全上下文來(lái)細(xì)化權(quán)限,提供更細(xì)粒度的安全控制。
ACL(access Control Lists):
提供比基本文件權(quán)限更細(xì)粒度的權(quán)限控制,允許為不同的用戶或組單獨(dú)設(shè)置不同的訪問(wèn)權(quán)限。
命令行管理:
使用 chmod、chown 和 chgrp等命令來(lái)設(shè)置文件或目錄的權(quán)限。
根用戶(root):
root 用戶在類(lèi) Unix 系統(tǒng)中擁有完全的控制權(quán)限,不受權(quán)限控制,可以執(zhí)行所有操作。
1.3.2、 Windows
NTFS 權(quán)限:
Windows 使用 NTFS 文件系統(tǒng)來(lái)管理文件和文件夾權(quán)限,權(quán)限包括讀取(Read)、寫(xiě)入(Write)、執(zhí)行(Execute)、修改(Modify)等。
用戶和組:
Windows 使用用戶賬戶和用戶組來(lái)管理權(quán)限,可以將權(quán)限分配給單個(gè)用戶或用戶組。
-訪問(wèn)控制列表(ACL):
文件和文件夾的訪問(wèn)控制通過(guò) ACL 設(shè)置,ACL 記錄哪些用戶或組具有哪些權(quán)限。
–繼承權(quán)限:
在 Windows 中,文件夾的權(quán)限通常可以被其子文件繼承,這樣可以簡(jiǎn)化大規(guī)模權(quán)限管理。
用戶賬戶控制(UAC):
UAC 允許系統(tǒng)管理權(quán)限的請(qǐng)求,防止未授權(quán)應(yīng)用程序或惡意軟件獲得系統(tǒng)管理員權(quán)限。
1.3.3、 macos
UNIX 權(quán)限:
macos 基于 Unix,使用類(lèi)似于 Linux 的文件權(quán)限(讀、寫(xiě)、執(zhí)行)來(lái)管理文件。
用戶和組:
macOS 使用用戶和組進(jìn)行權(quán)限分配,每個(gè)文件都可以有不同的所有者和所屬用戶組。
系統(tǒng)完整性保護(hù)(SIP):
macOS 引入了 SIP 來(lái)保護(hù)系統(tǒng)關(guān)鍵文件和目錄,防止被修改。
ACL:
macOS 也支持訪問(wèn)控制列表,提供更細(xì)粒度的權(quán)限控制。
1.3.4、 ios
iOS 是基于 Unix(Darwin)的操作系統(tǒng),具有嚴(yán)格的權(quán)限管理機(jī)制,確保應(yīng)用沙盒隔離,并保護(hù)用戶數(shù)據(jù)和設(shè)備的安全:
應(yīng)用沙盒:
每個(gè)應(yīng)用在 iOS 中都被隔離在自己的沙盒中,無(wú)法直接訪問(wèn)其他應(yīng)用或系統(tǒng)文件。即使是同一應(yīng)用的不同部分,也只能在有限的沙盒內(nèi)運(yùn)行。
權(quán)限請(qǐng)求:
iOS 使用類(lèi)似 android 的權(quán)限請(qǐng)求機(jī)制,應(yīng)用在使用攝像頭、麥克風(fēng)、位置、照片庫(kù)等敏感信息時(shí),需要請(qǐng)求用戶授權(quán)。
App Store 審核:
iOS 應(yīng)用必須經(jīng)過(guò)嚴(yán)格的 App Store 審核,審核過(guò)程中會(huì)檢查應(yīng)用是否遵循 iOS 的權(quán)限管理規(guī)則。
System Integrity Protection (SIP):
類(lèi)似于 macOS,iOS 也擁有系統(tǒng)完整性保護(hù)機(jī)制,防止惡意應(yīng)用或代碼篡改系統(tǒng)文件。
1.3.5、 Android
Android 是基于 Linux 內(nèi)核的 ,因此它的權(quán)限管理方式也繼承了 Linux 的一些特性,但在移動(dòng)環(huán)境下做了很多調(diào)整:
應(yīng)用權(quán)限:
Android 應(yīng)用有一套權(quán)限管理系統(tǒng),應(yīng)用安裝時(shí)會(huì)請(qǐng)求用戶授權(quán)所需的權(quán)限,如訪問(wèn)攝像頭、位置、存儲(chǔ)等。
權(quán)限模型:
Android 使用基于角色的權(quán)限模型,系統(tǒng)級(jí)權(quán)限由 Android系統(tǒng)預(yù)定義,應(yīng)用程序則需要顯式聲明權(quán)限,用戶可以選擇是否授予這些權(quán)限。
運(yùn)行時(shí)權(quán)限:
Android6.0(Marshmallow)及更高版本引入了運(yùn)行時(shí)權(quán)限模型。用戶可以在應(yīng)用運(yùn)行時(shí)授予或撤銷(xiāo)特定權(quán)限,而不僅僅是在安裝時(shí)授權(quán)。
SELinux:
Android 也采用了 SELinux 強(qiáng)制訪問(wèn)控制機(jī)制,以提高安全性,確保應(yīng)用和進(jìn)程不能越權(quán)訪問(wèn)系統(tǒng)資源。
小結(jié):
操作系統(tǒng)
權(quán)限管理模型
特點(diǎn)
Linux/Unix
基于文件權(quán)限模型(r, w, x)和用戶、組、其他權(quán)限控制;使用命令行管理工具(chmod, chown, chgrp);支持 SELinux 和 AppArmor
類(lèi) Unix 系統(tǒng),支持精細(xì)權(quán)限控制,適用于服務(wù)器和開(kāi)發(fā)環(huán)境,強(qiáng)制訪問(wèn)控制(MAC)
Windows
基于用戶和組的權(quán)限管理,訪問(wèn)控制列表(ACL)控制文件權(quán)限,NTFS 文件系統(tǒng)
權(quán)限管理通過(guò)圖形界面和命令行工具(如 icacls)進(jìn)行,較為簡(jiǎn)單直觀,廣泛用于桌面環(huán)境
macOS
基于 Unix 系統(tǒng)(Darwin);文件權(quán)限管理與 Linux 相似,支持 ACL 和 System Integrity Protection(SIP)
通過(guò)沙盒機(jī)制、SIP 和 Gatekeeper 提供安全保護(hù),限制惡意軟件和非授權(quán)訪問(wèn),應(yīng)用需通過(guò)嚴(yán)格審核
Android
基于 Linux 內(nèi)核,但加入了應(yīng)用沙盒和運(yùn)行時(shí)權(quán)限管理;使用 SELinux 提高安全性
動(dòng)態(tài)權(quán)限請(qǐng)求,注重移動(dòng)設(shè)備安全,應(yīng)用被沙盒化,用戶控制權(quán)限的授予
iOS
基于 Unix 系統(tǒng)(Darwin);應(yīng)用沙盒機(jī)制,嚴(yán)格的權(quán)限控制;系統(tǒng)完整性保護(hù)(SIP)和審查機(jī)制
強(qiáng)化安全性,通過(guò)沙盒機(jī)制隔離應(yīng)用,嚴(yán)格的權(quán)限管理和審查機(jī)制,防止惡意行為和泄漏敏感數(shù)據(jù)
類(lèi) Unix 系統(tǒng)(Linux 和 Unix):基于文件和目錄權(quán)限,廣泛使用命令行工具來(lái)進(jìn)行權(quán)限控制,支持更多高級(jí)的安全機(jī)制(如 SELinux)。Android 和 iOS:作為移動(dòng)操作系統(tǒng),它們?cè)趥鹘y(tǒng)的文件權(quán)限控制基礎(chǔ)上增加了應(yīng)用沙盒和動(dòng)態(tài)權(quán)限管理,以提高安全性,避免應(yīng)用之間的相互干擾。Windows:使用 ACL 和 NTFS 權(quán)限模型,主要依賴于用戶和組管理,注重易用性,適合桌面操作系統(tǒng)的需求。macOS:與 Linux 相似的 Unix 權(quán)限模型,增強(qiáng)了系統(tǒng)完整性保護(hù)(SIP)和應(yīng)用沙盒,提供多層次的安全防護(hù)機(jī)制。
這些操作系統(tǒng)在權(quán)限管理上的主要差異在于它們的架構(gòu)設(shè)計(jì)和使用場(chǎng)景,移動(dòng)操作系統(tǒng)更注重用戶隱私和安全,而桌面系統(tǒng)則更多地依賴于文件系統(tǒng)和用戶賬戶管理。
2、Linux中的權(quán)限2.1、Linux下的兩種用戶2.1.1、普通用戶
定義:
普通用戶是指擁有有限權(quán)限的用戶。普通用戶無(wú)法執(zhí)行一些系統(tǒng)管理任務(wù),如修改系統(tǒng)配置文件或安裝軟件等。
權(quán)限:
普通用戶通常只能訪問(wèn)自己有權(quán)限的文件和資源,不能訪問(wèn)其他用戶的文件,除非擁有相應(yīng)的權(quán)限。
文件和目錄權(quán)限:
普通用戶通常只能對(duì)自己擁有的文件和目錄進(jìn)行讀寫(xiě)操作,對(duì)其他用戶的文件只能根據(jù)文件權(quán)限設(shè)置進(jìn)行操作。
命令執(zhí)行:
普通用戶只能執(zhí)行普通的命令或程序,不能執(zhí)行系統(tǒng)管理命令,除非獲得特殊權(quán)限(例如使用 sudo)。
常見(jiàn)用途:
普通用戶主要用于日常使用,比如瀏覽網(wǎng)頁(yè)、編輯文檔、運(yùn)行應(yīng)用程序等。
用戶管理:
在 Linux 中,每個(gè)普通用戶都有一個(gè)唯一的用戶 ID(UID)和一個(gè)與之關(guān)聯(lián)的用戶組。用戶可以屬于多個(gè)組,但每個(gè)文件和目錄都有一個(gè)與之關(guān)聯(lián)的所有者和所屬組。
普通用戶的命令行提示符:
代碼語(yǔ)言:JavaScript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$
2.1.2、超級(jí)用戶(root用戶)
定義:
超級(jí)用戶(也叫 root 用戶)是 Linux 系統(tǒng)中的管理員賬戶。root用戶擁有系統(tǒng)的完全控制權(quán)限,可以執(zhí)行所有操作,包括對(duì)系統(tǒng)進(jìn)行修改、安裝軟件、配置網(wǎng)絡(luò)等。
權(quán)限:
root 用戶具有幾乎無(wú)所不能的權(quán)限,能夠訪問(wèn)所有文件、修改系統(tǒng)設(shè)置、安裝和卸載程序、創(chuàng)建和刪除用戶等。root不受權(quán)限限制
文件和目錄權(quán)限:
root 用戶對(duì)所有文件和目錄都擁有讀寫(xiě)執(zhí)行權(quán)限,不受任何權(quán)限限制。
命令執(zhí)行:
root 用戶可以執(zhí)行所有系統(tǒng)級(jí)命令,包括管理系統(tǒng)、網(wǎng)絡(luò)、硬件和用戶等。
常見(jiàn)用途:
root 用戶主要用于系統(tǒng)管理、安裝軟件、配置系統(tǒng)、修復(fù)系統(tǒng)問(wèn)題等。普通用戶不能執(zhí)行的一些管理任務(wù),通常需要 root 用戶來(lái)執(zhí)行。
安全性:
由于 root 用戶具有極高的權(quán)限,濫用或誤用 root 權(quán)限可能會(huì)對(duì)系統(tǒng)造成嚴(yán)重破壞。因此,一般建議避免長(zhǎng)期以 root 用戶身份進(jìn)行工作,最好通過(guò) sudo 命令臨時(shí)獲得 root 權(quán)限來(lái)執(zhí)行需要的操作。2.1.3、用戶之間的切換
普通用戶切換為超級(jí)用戶:
使用su -命令:
輸入su – 命令后,系統(tǒng)會(huì)提示你輸入root用戶的密碼,密碼輸入正確后,將會(huì)切換為root用戶,并且默認(rèn)處在root用戶的家目錄。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ pwd/home/zwy[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ su -Password: Last login: Thu Jan 23 18:52:22 CST 2025 on pts/0[root@iZbp1dkpw5hx2lyh7vjopaZ ~]# pwd/root
使用su命令:
輸入su 命令后,系統(tǒng)同樣會(huì)提示你輸入root用戶的密碼,密碼輸入正確后,將會(huì)切換為root用戶,并且會(huì)保留在切換身份前的目錄中。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ test]$ pwd/home/zwy/code/test[zwy@iZbp1dkpw5hx2lyh7vjopaZ test]$ suPassword: [root@iZbp1dkpw5hx2lyh7vjopaZ test]# pwd/home/zwy/code/test
超級(jí)用戶切換為其他普通用戶:
使用exit命令:
如果時(shí)使用 su或者su -命令從普通用戶切換為超級(jí)用戶,那么使用exit命令退出當(dāng)前的 root 會(huì)話,返回到之前的普通用戶會(huì)話。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ test]$ su -Password: Last login: Thu Jan 23 18:55:53 CST 2025 on pts/0[root@iZbp1dkpw5hx2lyh7vjopaZ ~]# exitlogout[zwy@iZbp1dkpw5hx2lyh7vjopaZ test]$
使用su命令:
使用su uesrname命令即可切換到任意一個(gè)普通用戶,username代表要切換到的用戶名,由于root的權(quán)限為最高級(jí)別,所以無(wú)需密碼即可切換。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[root@iZbp1dkpw5hx2lyh7vjopaZ ~]# su zwy[zwy@iZbp1dkpw5hx2lyh7vjopaZ root]$ pwd/root
切換后不會(huì)改變當(dāng)前路徑,仍然停留在切換為普通用戶前,root用戶所在的目錄
2.2、文件的權(quán)限2.2.1、文件類(lèi)型的劃分
普通文件(Regular File)
普通文件是最常見(jiàn)的文件類(lèi)型,通常包含文本、二進(jìn)制數(shù)據(jù)、圖像、音頻等內(nèi)容。普通文件不具備特殊的功能,它們僅存儲(chǔ)數(shù)據(jù)。表示符號(hào):-代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
示例:/home/user/document.txt、/usr/bin/program
目錄文件(Directory File)
目錄文件用于存儲(chǔ)文件系統(tǒng)中的文件和其他目錄。它實(shí)際上是一個(gè)特殊的文件,用于存儲(chǔ)其他文件的名字和位置信息。目錄本身不包含數(shù)據(jù),而是充當(dāng)文件夾的角色。表示符號(hào):d代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
示例:/home/user/、/etc/
符號(hào)鏈接文件(Symbolic Link File)
符號(hào)鏈接(也叫軟鏈接)是一個(gè)指向另一個(gè)文件或目錄的引用。符號(hào)鏈接實(shí)際上只是一個(gè)路徑,指向另一個(gè)文件或目錄。它允許用戶通過(guò)一個(gè)文件名訪問(wèn)另一個(gè)文件或目錄,而不需要知道實(shí)際文件的位置。表示符號(hào):l代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
示例:/home/user/symlink(指向 /home/user/target_file)
字符設(shè)備文件(Character Device File)
字符設(shè)備文件是與字符設(shè)備(如終端、鍵盤(pán)、鼠標(biāo)等)相關(guān)的文件。這些設(shè)備通常按字符流的方式進(jìn)行輸入輸出。字符設(shè)備文件沒(méi)有緩存機(jī)制,每次輸入/輸出一個(gè)字符。表示符號(hào):c代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
示例:/dev/tty1(終端設(shè)備),/dev/random(隨機(jī)設(shè)備)
塊設(shè)備文件(Block Device File)
塊設(shè)備文件是與塊設(shè)備(如硬盤(pán)、USB驅(qū)動(dòng)器、光盤(pán)等)相關(guān)的文件。塊設(shè)備將數(shù)據(jù)按塊(如 512字節(jié)或更大的塊)進(jìn)行存儲(chǔ)和傳輸。與字符設(shè)備不同,塊設(shè)備通常具有緩存機(jī)制,可以在多個(gè)塊上同時(shí)進(jìn)行讀寫(xiě)操作。表示符號(hào):b代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
示例:/dev/sda(硬盤(pán)),/dev/sdb1(硬盤(pán)分區(qū))
命名管道文件(FIFO File)
FIFO(First In, FirstOut)文件也叫命名管道,是一種用于進(jìn)程間通信(IPC)的特殊文件。它允許一個(gè)進(jìn)程將數(shù)據(jù)寫(xiě)入管道,另一個(gè)進(jìn)程讀取這些數(shù)據(jù)。管道文件的作用是建立進(jìn)程之間的通信。表示符號(hào):p代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
示例:/tmp/myfifo(管道文件)
套接字文件(Socket File)
套接字文件用于網(wǎng)絡(luò)通信或進(jìn)程間通信。它們提供了進(jìn)程間數(shù)據(jù)交換的通道,特別適用于客戶端-服務(wù)器通信。套接字通常用于建立網(wǎng)絡(luò)連接。表示符號(hào):s代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
示例:/tmp/mysocket(套接字文件)
設(shè)備文件(Device File)
設(shè)備文件是 Linux 中與硬件設(shè)備的交互接口。它們分為字符設(shè)備和塊設(shè)備文件。設(shè)備文件一般位于 /dev 目錄下。字符設(shè)備文件(c):用于與字符設(shè)備(如終端、串口等)進(jìn)行交互。塊設(shè)備文件(b):用于與塊設(shè)備(如硬盤(pán)、USB 驅(qū)動(dòng)器等)進(jìn)行交互。
符號(hào)鏈接(Symbolic Link)
符號(hào)鏈接文件(軟鏈接)是 Linux 系統(tǒng)中的一種特殊文件,實(shí)際上它只是一個(gè)指向另一個(gè)文件的路徑引用。它允許用戶通過(guò)不同的路徑訪問(wèn)同一個(gè)文件或目錄。表示符號(hào):l代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
示例:ln -s /path/to/target /path/to/symlink
文件類(lèi)型查看
你可以使用 ls -l 命令查看文件的類(lèi)型。
輸出示例:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
-rw-r--r-- 1 user group 1048576 Jan 23 10:00 example.txt # 普通文件drwxr-xr-x 2 user group 4096 Jan 23 10:00 myfolder # 目錄文件lrwxrwxrwx 1 user group 10 Jan 23 10:00 symlink -> file.txt # 符號(hào)鏈接crw-rw-rw- 1 root root 10, 1 Jan 23 10:00 /dev/tty1 # 字符設(shè)備文件brw-rw-rw- 1 root root 8, 0 Jan 23 10:00 /dev/sda # 塊設(shè)備文件prw-r--r-- 1 user group 0 Jan 23 10:00 myfifo # FIFO 文件srw-rw-rw- 1 user group 0 Jan 23 10:00 mysocket # 套接字文件
文件類(lèi)型總結(jié)
文件類(lèi)型
表示符號(hào)
說(shuō)明
示例
普通文件
–
包含文本、圖像、程序等數(shù)據(jù)
/home/user/document.txt
目錄文件
d
存放其他文件或目錄
/home/user/
符號(hào)鏈接
l
指向其他文件的快捷方式
/home/user/symlink -> /home/user/target_file
字符設(shè)備文件
c
與字符設(shè)備(如終端、鼠標(biāo))交互的文件
/dev/tty1
塊設(shè)備文件
b
與硬盤(pán)等塊設(shè)備交互的文件
/dev/sda
FIFO 文件
p
用于進(jìn)程間通信的文件
/tmp/myfifo
套接字文件
s
用于進(jìn)程間或網(wǎng)絡(luò)通信的文件
/tmp/mysocket
設(shè)備文件
c、b
用于與硬件設(shè)備交互的文件,字符設(shè)備和塊設(shè)備
/dev/sda(塊設(shè)備),/dev/tty1(字符設(shè)備)
符號(hào)鏈接文件(軟鏈接)
l
文件系統(tǒng)中的快捷方式,指向其他文件或目錄
/home/user/symlink -> /home/user/target_file
2.2.2、文件權(quán)限的表示
文件訪問(wèn)用戶的分類(lèi):
文件的擁有者(User)與文件擁有者同組的用戶(Group)稱為所屬組其他用戶(Others)
文件訪問(wèn)的權(quán)限:
r:讀權(quán)限w:寫(xiě)權(quán)限x:執(zhí)行權(quán)限如果沒(méi)有某項(xiàng)權(quán)限,則該位置為 –
文件的權(quán)限=訪問(wèn)角色+目標(biāo)文件屬性
角色就是文件訪問(wèn)者的身份目標(biāo)屬性就是目標(biāo)文件本身的屬性
說(shuō)明:
文本文件本身不具備可執(zhí)行的屬性,那么即使文件訪問(wèn)者具備執(zhí)行該文件的權(quán)限,由于該文件本身不可執(zhí)行,最終文件的權(quán)限表示為不可執(zhí)行可執(zhí)行文件本身就具備可執(zhí)行的屬性,那么如果文件訪問(wèn)者具備執(zhí)行該文件的權(quán)限,那么文件的權(quán)限就表示為可執(zhí)行,如果文件訪問(wèn)者不具備執(zhí)行該文件的權(quán)限,那么文件的權(quán)限就表示為不可執(zhí)行
通俗的說(shuō),給你機(jī)會(huì)你也不中用啊,即便系統(tǒng)給你執(zhí)行該文件的權(quán)限,但是該文件本來(lái)就不具備可執(zhí)行屬性,那么最終文件的權(quán)限還是不可執(zhí)行
再次理解,文件的權(quán)限=訪問(wèn)角色+目標(biāo)文件屬性
例如:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ ls -ltotal 0-rw-r--r-- 1 root root 0 Jan 22 21:40 root.txt-rw-rw-r-- 1 zwy zwy 0 Jan 22 21:56 zwy.txt
對(duì)如上文件權(quán)限分析:

根據(jù)上述分析:
root.txt: 該文件為普通文件,文件本身不具備可執(zhí)行的屬性,標(biāo)識(shí)符為-,擁有者為root,所屬組為root,擁有者的權(quán)限為rw-,可讀可寫(xiě)不可執(zhí)行,所屬組的權(quán)限為r–,只可讀不可寫(xiě)不可執(zhí)行,其他用戶other的權(quán)限為r–,只可讀不可寫(xiě)不可執(zhí)行zwy.txt: 該文件也為普通文件,文件本身不具備可執(zhí)行的屬性,標(biāo)識(shí)符為-,擁有者為zwy,所屬組為zwy,擁有者的權(quán)限為rw-,可讀可寫(xiě)不可執(zhí)行,所屬組的權(quán)限為rw-,可讀可寫(xiě)不可執(zhí)行,其他用戶other的權(quán)限為r–,只可讀不可寫(xiě)不可執(zhí)行
文件權(quán)限的八進(jìn)制表示:

每個(gè)用戶類(lèi)別的權(quán)限是獨(dú)立的,因此可以用二進(jìn)制的0或1來(lái)表示每個(gè)用戶的權(quán)限,0表示沒(méi)有該權(quán)限,1表示擁有該權(quán)限。則每3個(gè)二進(jìn)制位可以表示該用戶的權(quán)限,而3個(gè)二進(jìn)制位剛好可以表示一個(gè)八進(jìn)制數(shù),共3組八進(jìn)制數(shù)就構(gòu)成了文件權(quán)限的八進(jìn)制表示。
例如:
權(quán)限
擁有者(Owner)
所屬組(Group)
其他用戶(Others)
二進(jìn)制表示
八進(jìn)制表示
rwxr-xr-x
rwx (7)
r-x (5)
r-x (5)
111 101 101
755
rw-r–r–
rw- (6)
r– (4)
r– (4)
110 100 100
644
rwx——
rwx (7)
— (0)
— (0)
111 000 000
700
r–r–r–
r– (4)
r– (4)
r– (4)
100 100 100
444
rwxrwxrwx
rwx (7)
rwx (7)
rwx (7)
111 111 111
777
—rwx—
— (0)
rwx (7)
— (0)
000 111 000
070
r-x——
r-x (5)
— (0)
— (0)
101 000 000
500
rw——-
rw- (6)
— (0)
— (0)
110 000 000
600
r–r-xr–
r– (4)
r-x (5)
r– (4)
100 101 100
454
2.2.3、文件權(quán)限的修改
使用chmod指令修改文件的權(quán)限
操作符:
+:添加權(quán)限。-:移除權(quán)限。=:設(shè)置精確權(quán)限(覆蓋現(xiàn)有權(quán)限)。
用戶類(lèi)別:
u:擁有者(User)g:所屬組組(Group)o:其他用戶(Others)a:所有用戶(All,包含 u、g 和 o)
權(quán)限字符:
r:讀權(quán)限w:寫(xiě)權(quán)限x:執(zhí)行權(quán)限
命令格式:
chmod 用戶 操作符 權(quán)限 文件名
添加權(quán)限:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod u+x filename:#給文件的擁有者添加執(zhí)行權(quán)限。chmod g+r filename:#給文件的所屬組添加讀權(quán)限。chmod o+w filename:#給其他用戶添加寫(xiě)權(quán)限。
移除權(quán)限:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod u-x filename:#給文件的擁有者移除執(zhí)行權(quán)限。chmod g-w filename:#給文件的所屬組移除寫(xiě)權(quán)限。chmod o-r filename:#給文件其他用戶移除讀權(quán)限。
精確設(shè)置權(quán)限:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod u=rwx filename:#將文件的擁有者的權(quán)限設(shè)置為讀、寫(xiě)、執(zhí)行。chmod g=rx filename:#將文件的所屬組權(quán)限設(shè)置為讀和執(zhí)行。chmod o=r filename:#將文件其他用戶權(quán)限設(shè)置為只讀。
使用八進(jìn)制表示法修改文件的權(quán)限
八進(jìn)制模式使用一個(gè)三位二進(jìn)制數(shù)字來(lái)表示文件的權(quán)限。每一位數(shù)字表示不同類(lèi)別的權(quán)限,范圍從 0 到 7。
示例:
設(shè)置文件權(quán)限為 rwxr-xr-x(755)代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod 755 filename
說(shuō)明:所有者有讀、寫(xiě)、執(zhí)行權(quán)限(7),用戶組和其他用戶有讀和執(zhí)行權(quán)限(5)。
設(shè)置文件權(quán)限為 rw-r–r–(644)代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod 644 filename
說(shuō)明:所有者有讀和寫(xiě)權(quán)限(6),用戶組和其他用戶有只讀權(quán)限(4)。
設(shè)置文件權(quán)限為 rwx——(700)代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod 700 filename
說(shuō)明:所有者有讀、寫(xiě)、執(zhí)行權(quán)限(7),用戶組和其他用戶沒(méi)有任何權(quán)限(0)。
設(shè)置文件權(quán)限為 r–r–r–(444)代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod 444 filename
說(shuō)明:所有者、用戶組和其他用戶只有讀權(quán)限(4)。
設(shè)置文件權(quán)限為 rwxrwxrwx(777)代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod 777 filename
說(shuō)明:所有者、用戶組和其他用戶都有讀、寫(xiě)、執(zhí)行權(quán)限(7)。
設(shè)置文件權(quán)限為 r-xr-xr-x(555)代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod 555 filename
說(shuō)明:所有者、用戶組和其他用戶都有讀和執(zhí)行權(quán)限(5),沒(méi)有寫(xiě)權(quán)限。
遞歸修改權(quán)限
當(dāng)需要修改目錄及其所有子文件和子目錄的權(quán)限時(shí),可以使用 -R 選項(xiàng)來(lái)遞歸修改權(quán)限。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chmod -R 755 /path/to/Directory #指定目錄
這將會(huì)遞歸地將指定目錄及其所有內(nèi)容的權(quán)限設(shè)置為 rwxr-xr-x(755)
2.2.4、文件擁有者和所屬組的修改
在 Linux 系統(tǒng)中,文件的 擁有者(owner)和 所屬組(group)可以通過(guò)命令進(jìn)行修改。這對(duì)于文件的管理和權(quán)限控制非常重要。
chown 命令 chown(change owner)命令用于更改文件或目錄的擁有者和所屬組。
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chown [OPTIONS] USER:GROUP FILE
USER: 新的文件擁有者(用戶)。GROUP: 新的文件所屬組(組)。FILE: 目標(biāo)文件或目錄的路徑。
如果你只需要更改文件的 擁有者 或 所屬組,可以省略 GROUP 或 USER。
修改文件的擁有者:
要將文件 file.txt 的擁有者改為用戶 Sam,可以執(zhí)行以下命令:代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chown Sam file.txt
這會(huì)將 file.txt 的擁有者更改為 Sam,而文件的所屬組保持不變。
修改文件的所屬組:
要將文件 file.txt 的所屬組改為Bob,可以執(zhí)行以下命令:代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chown :Bob file.txt
或者使用chgrp命令:代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chown Bob file.txt
這會(huì)將 file.txt 的所屬組更改為Bob,而文件的擁有者保持不變。
同時(shí)修改文件的擁有者和所屬組: 要將文件 file.txt 的擁有者更改為Sam,同時(shí)將所屬組更改為 Bob,可以執(zhí)行以下命令:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chown Sam:Bob file.txt
或者也可以使用這種方式:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chown Sam.Bob file.txt
修改目錄及其內(nèi)部所有文件的擁有者和所屬組
如果你想遞歸地修改目錄及其下所有文件的擁有者和所屬組,可以使用 -R 選項(xiàng):代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
chown -R Sam:Bob /path/to/directory
這會(huì)將 /path/to/directory 目錄及其所有內(nèi)容(包括子目錄和文件)的擁有者更改為 Sam,所屬組更改為Bob。
修改文件的權(quán)限和擁有者時(shí)的注意事項(xiàng):
文件擁有者:只有超級(jí)用戶(root)才能修改文件的擁有者。如果你沒(méi)有足夠的權(quán)限,系統(tǒng)會(huì)提示權(quán)限錯(cuò)誤。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ test]$ chown zyy:zyy zwy.txtchown: changing ownership of ‘zwy.txt’: Operation not permitted
文件所屬組:普通用戶可以更改文件的所屬組,但需滿足兩個(gè)條件:用戶是文件的當(dāng)前所有者。用戶屬于目標(biāo)組。
2.2.5、文件權(quán)限的缺失
文件沒(méi)有讀取權(quán)限:
如果一個(gè)文件沒(méi)有讀取權(quán)限,用戶無(wú)法查看該文件的內(nèi)容。嘗試打開(kāi)文件時(shí),會(huì)返回權(quán)限拒絕錯(cuò)誤。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 16-rwxrwxrwx 1 zwy zwy 8360 Jan 25 16:13 code--w-rw-rw- 1 zwy zwy 75 Jan 25 20:57 code.c[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ cat code.ccat: code.c: Permission denied
這意味著用戶無(wú)法查看文件的內(nèi)容。
文件沒(méi)有寫(xiě)入權(quán)限:
如果一個(gè)文件沒(méi)有寫(xiě)入權(quán)限,用戶無(wú)法修改該文件。嘗試編輯或覆蓋文件時(shí),會(huì)收到權(quán)限拒絕的錯(cuò)誤。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 16-rwxrwxrwx 1 zwy zwy 8360 Jan 25 16:13 code----rw-rw- 1 zwy zwy 75 Jan 25 20:57 code.c[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ echo 'hello linux' >> code.c-bash: code.c: Permission denied
這意味著用戶無(wú)法對(duì)文件進(jìn)行修改或?qū)懭氩僮鳌?/p>
文件沒(méi)有執(zhí)行權(quán)限: 如果文件是腳本或二進(jìn)制文件,而沒(méi)有執(zhí)行權(quán)限,用戶無(wú)法運(yùn)行該文件作為程序。
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 16-rw-rwxrwx 1 zwy zwy 8360 Jan 25 16:13 code-rw-rw-rw- 1 zwy zwy 75 Jan 26 11:59 code.c[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ ./code-bash: ./code: Permission denied
這意味著用戶無(wú)法執(zhí)行該文件。
文件沒(méi)有修改權(quán)限:如果你嘗試修改文件權(quán)限(例如使用 chmod)但沒(méi)有足夠的權(quán)限,你可能會(huì)收到如下系統(tǒng)反饋:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 16-rw-rwxrwx 1 zwy zwy 8360 Jan 25 16:13 code-rw-rw-rw- 1 zwy zwy 75 Jan 26 11:59 code.c-rw-r--r-- 1 root root 0 Jan 26 12:03 root.txt[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ chmod o+w root.txtchmod: changing permissions of ‘root.txt’: Operation not permitted
以zwy用戶身份使用chmod指令修改root用戶的文件權(quán)限,顯然該操作不被系統(tǒng)允許,不具備足夠的權(quán)限
2.3、目錄的權(quán)限Linux下一切皆文件
目錄也是一種特殊的文件 。由于目錄權(quán)限的特殊性,我們將目錄單獨(dú)講解

大家覺(jué)得用戶能否進(jìn)入一個(gè)目錄,取決于目錄的哪個(gè)權(quán)限呢?答對(duì)了!取決于是否擁有該目錄的執(zhí)行權(quán)限
2.3.1、目錄的執(zhí)行權(quán)限含義: 允許用戶進(jìn)入(訪問(wèn))該目錄,執(zhí)行與該目錄相關(guān)的路徑操作。使用場(chǎng)景: 用戶需要有執(zhí)行權(quán)限才能通過(guò) cd 命令進(jìn)入該目錄,或訪問(wèn)該目錄的子目錄(即使該目錄不可讀)。如果沒(méi)有執(zhí)行權(quán)限,用戶不能進(jìn)入該目錄,即使有其他權(quán)限(如讀取權(quán)限)。沒(méi)有執(zhí)行權(quán)限時(shí): 如果目錄沒(méi)有執(zhí)行權(quán)限,用戶無(wú)法進(jìn)入該目錄,甚至無(wú)法通過(guò)路徑訪問(wèn)該目錄的任何文件或子目錄。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ lltotal 4drw-rwxr-x 2 zwy zwy 4096 Jan 26 12:03 code[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ cd code/-bash: cd: code/: Permission denied[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ ls -l code/ls: cannot access code/root.txt: Permission deniedls: cannot access code/code.c: Permission deniedls: cannot access code/code: Permission deniedtotal 0-????????? ? ? ? ? ? code-????????? ? ? ? ? ? code.c-????????? ? ? ? ? ? root.txt
由此可以得出結(jié)論,如果沒(méi)有目錄的執(zhí)行權(quán)限,用戶無(wú)法通過(guò)cd命令進(jìn)入該目錄,也無(wú)法通過(guò)ls命令查看該目錄的任何內(nèi)容2.3.2、目錄的讀權(quán)限含義: 允許用戶列出目錄中的文件和子目錄。使用場(chǎng)景: 用戶可以使用 ls 命令查看目錄中的文件名和子目錄名稱,但無(wú)法查看文件的內(nèi)容。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ lltotal 4drwxrwxr-x 2 zwy zwy 4096 Jan 26 12:03 code[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ ls -l code/total 16-rw-rwxrwx 1 zwy zwy 8360 Jan 25 16:13 code-rw-rw-rw- 1 zwy zwy 75 Jan 26 11:59 code.c-rw-r--r-- 1 root root 0 Jan 26 12:03 root.txt
沒(méi)有讀取權(quán)限時(shí): 如果目錄沒(méi)有讀取權(quán)限,嘗試執(zhí)行 ls 命令會(huì)返回權(quán)限拒絕的錯(cuò)誤,即使你有進(jìn)入該目錄的權(quán)限,仍然無(wú)法列出其中的內(nèi)容。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ chmod u-r code[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ ls -l code/ls: cannot open directory code/: Permission denied[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ cd code/[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ ls -l ls: cannot open directory .: Permission denied
2.3.3、目錄的寫(xiě)權(quán)限含義: 允許用戶在該目錄內(nèi)創(chuàng)建、刪除和重命名文件或子目錄。使用場(chǎng)景: 用戶可以在該目錄中創(chuàng)建新的文件或子目錄,或者刪除目錄中的文件和子目錄。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 16-rw-rwxrwx 1 zwy zwy 8360 Jan 25 16:13 code-rw-rw-rw- 1 zwy zwy 75 Jan 26 11:59 code.c-rw-r--r-- 1 root root 0 Jan 26 12:03 root.txt[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ touch log.txt[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ mv code.c code.cpp[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 16-rw-rwxrwx 1 zwy zwy 8360 Jan 25 16:13 code-rw-rw-rw- 1 zwy zwy 75 Jan 26 11:59 code.cpp-rw-rw-r-- 1 zwy zwy 0 Jan 26 12:39 log.txt-rw-r--r-- 1 root root 0 Jan 26 12:03 root.txt
沒(méi)有寫(xiě)入權(quán)限時(shí): 如果目錄沒(méi)有寫(xiě)入權(quán)限,用戶無(wú)法在目錄內(nèi)進(jìn)行修改,如創(chuàng)建文件、刪除文件或重命名文件。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ chmod u-w code[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ cd code/[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ touch test.ctouch: cannot touch ‘test.c’: Permission denied[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ rm -f log.txtrm: cannot remove ‘log.txt’: Permission denied[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ mv code.cpp code.cmv: cannot move ‘code.cpp’ to ‘code.c’: Permission denied
2.4、缺省權(quán)限(默認(rèn)權(quán)限)文件:新文件的默認(rèn)權(quán)限通常是 666(rw-rw-rw-),即所有者、組用戶和其他用戶都具有讀寫(xiě)權(quán)限,但沒(méi)有執(zhí)行權(quán)限。目錄:新目錄的默認(rèn)權(quán)限通常是 777(rwxrwxrwx),即所有者、組用戶和其他用戶都可以讀、寫(xiě)和執(zhí)行,即可以進(jìn)入該目錄。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ touch log.txt[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ mkdir test-dir[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 4-rw-rw-r-- 1 zwy zwy 0 Jan 26 21:14 log.txtdrwxrwxr-x 2 zwy zwy 4096 Jan 26 21:15 test-dir
但當(dāng)我們?cè)贚inux下實(shí)際操作時(shí)發(fā)現(xiàn):
創(chuàng)建新文件時(shí),默認(rèn)權(quán)限是664(rw-rw-r–),并不是666(rw-rw-rw-)創(chuàng)建新目錄時(shí),默認(rèn)權(quán)限是775(rwxrwxr-x),并不是777(rwxrwxrwx)
為什么會(huì)出現(xiàn)這種情況呢? 這是因?yàn)橛衭mask的存在
2.4.1、權(quán)限掩碼umask

什么是權(quán)限掩碼?
權(quán)限掩碼(umask) 是一個(gè)用于控制新創(chuàng)建文件和目錄權(quán)限的機(jī)制
它定義了系統(tǒng)在創(chuàng)建文件或目錄時(shí),應(yīng)該從默認(rèn)權(quán)限中去除哪些權(quán)限。umask值通過(guò)位掩碼的方式指定,影響文件和目錄的讀(r)、寫(xiě)(w)和執(zhí)行(x)權(quán)限。
默認(rèn)文件權(quán)限:666(rw-rw-rw-)默認(rèn)目錄權(quán)限:777(rwxrwxrwx)掩碼:umask會(huì)“減去”這些默認(rèn)權(quán)限的一部分,從而影響最終的權(quán)限。
為什么要有權(quán)限掩碼?
權(quán)限掩碼的目的是為了 增強(qiáng)安全性 和 控制權(quán)限,因?yàn)椴皇撬杏脩艋虺绦蚨紤?yīng)該對(duì)文件或目錄擁有相同的訪問(wèn)權(quán)限。
增強(qiáng)安全性:默認(rèn)情況下,文件創(chuàng)建時(shí)具有過(guò)多的權(quán)限可能會(huì)導(dǎo)致安全問(wèn)題。例如,如果一個(gè)文件對(duì)所有人都開(kāi)放寫(xiě)權(quán)限,任何用戶都可以修改它,這可能導(dǎo)致數(shù)據(jù)丟失或泄露。控制訪問(wèn):通過(guò)設(shè)置合適的umask值,管理員可以確保文件和目錄僅限于必要的用戶和組訪問(wèn)。比如,管理員可以避免其他用戶(不是文件的所有者或所屬組的用戶)擁有不必要的寫(xiě)權(quán)限。滿足特定需求:不同的環(huán)境和項(xiàng)目可能需要不同的權(quán)限控制。例如,一些敏感項(xiàng)目要求嚴(yán)格的訪問(wèn)權(quán)限,因此可以設(shè)置更嚴(yán)格的umask值。
怎么使用權(quán)限掩碼?
查看umask:
在命令行中輸入umask指令即可查看當(dāng)前用戶的umask設(shè)置代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ umask0002
或者在命令行中輸入umask -S查看當(dāng)前用戶的umask設(shè)置代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ ~]$ umask -Su=rwx,g=rwx,o=rx
更改umask:
如果你想設(shè)置新的umask值為0022,直接在命令行中輸入 umask 0022代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ umask 0022[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ umask0022
注意:
這樣設(shè)置只是臨時(shí)的,umask只能在當(dāng)前狀態(tài)下有效,當(dāng)重啟Xshell時(shí)就會(huì)恢復(fù)。如果要永久更改umask,需要編輯 /etc/profile或用戶的 ~/.bash_profile 文件,添加或修改 umask 設(shè)置。如果你只想影響特定用戶,可以編輯他們的~/.bash_profile 或 ~/.bashrc 文件
四位umask的含義:
四位umask的格式為:0ABC
其中:
第1位(0):控制特殊權(quán)限位(setuid、setgid、sticky bit)。后3位(ABC):控制基本權(quán)限(所有者、組、其他用戶的權(quán)限掩碼)。
第一位數(shù)字用于屏蔽以下權(quán)限:
setuid(SUID):允許用戶以文件所有者的權(quán)限執(zhí)行程序。setgid(SGID):對(duì)目錄生效時(shí),新建文件會(huì)繼承目錄的組;對(duì)文件生效時(shí),以文件所屬組的權(quán)限執(zhí)行。sticky bit:常見(jiàn)于目錄(如/tmp),僅允許文件所有者刪除自己的文件。
八進(jìn)制值
二進(jìn)制值
被屏蔽的權(quán)限
說(shuō)明
0
000
無(wú)
允許設(shè)置所有特殊權(quán)限
1
001
Sticky Bit
屏蔽 Sticky Bit
2
010
SGID
屏蔽 SGID
3
011
SGID + Sticky Bit
同時(shí)屏蔽 SGID 和 Sticky Bit
4
100
SUID
屏蔽 SUID
5
101
SUID + Sticky Bit
同時(shí)屏蔽 SUID 和 Sticky Bit
6
110
SUID + SGID
同時(shí)屏蔽 SUID 和 SGID
7
111
SUID + SGID + Sticky Bit
屏蔽所有特殊權(quán)限
后三位與三位umask一致,通過(guò)掩碼屏蔽權(quán)限:
文件默認(rèn)權(quán)限:666 – umask(文件默認(rèn)無(wú)執(zhí)行權(quán)限)。目錄默認(rèn)權(quán)限:777 – umask(目錄默認(rèn)有執(zhí)行權(quán)限)。
八進(jìn)制值
二進(jìn)制值
屏蔽的權(quán)限(rwx)
0
000
不屏蔽任何權(quán)限
1
001
屏蔽執(zhí)行(x)
2
010
屏蔽寫(xiě)(w)
3
011
屏蔽寫(xiě)和執(zhí)行
4
100
屏蔽讀(r)
5
101
屏蔽讀和執(zhí)行
6
110
屏蔽讀和寫(xiě)
7
111
屏蔽所有權(quán)限
2.4.2、最終權(quán)限的確定
最終權(quán)限=缺省權(quán)限(默認(rèn)權(quán)限)&(~umask) 如何理解?
默認(rèn)權(quán)限:文件和目錄的初始最大權(quán)限(文件 666,目錄 777)。umask:需要屏蔽(禁用)的權(quán)限位,通過(guò) 按位取反(~) 后與默認(rèn)權(quán)限進(jìn)行 按位與(&) 操作。最終權(quán)限:實(shí)際生效的權(quán)限。
示例驗(yàn)證:
文件權(quán)限計(jì)算(默認(rèn) 666,umask 022)
默認(rèn)權(quán)限:666 → 二進(jìn)制 110 110 110umask:022 → 二進(jìn)制 000 010 010按位取反(~umask):111 101 101
按位與(&):
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
110 110 110 (666)& 111 101 101 (~022)--------------------110 100 100 → 八進(jìn)制 `644`(rw-r--r--)
目錄權(quán)限計(jì)算(默認(rèn) 777,umask 027)
默認(rèn)權(quán)限:777 → 二進(jìn)制 111 111 111umask:027 → 二進(jìn)制 000 010 111按位取反(~umask):111 101 000
按位與(&):
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
111 111 111 (777)& 111 101 000 (~027)--------------------111 101 000 → 八進(jìn)制 `750`(rwxr-x---)
為什么看起來(lái)可以等價(jià)為“減法”?
當(dāng) umask 的二進(jìn)制位是默認(rèn)權(quán)限的子集時(shí),按位與取反后的 umask 等價(jià)于 默認(rèn)權(quán)限減去 umask。
示例: 默認(rèn)權(quán)限 666(110 110 110),umask 022(000 010 010):
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
666 - 022 = 644 → 結(jié)果與按位與一致。
局限性:
如果 umask 的某一位權(quán)限值超過(guò)默認(rèn)權(quán)限的對(duì)應(yīng)位,減法會(huì)借位,但按位與不會(huì)(此時(shí)兩種方法結(jié)果不同)。(實(shí)際場(chǎng)景中,umask 通常不會(huì)設(shè)置超過(guò)默認(rèn)權(quán)限的位,因此減法仍適用。)
公式的普遍適用性:
適用所有情況:無(wú)論是三位還是四位 umask,均可用此公式計(jì)算最終權(quán)限。特殊權(quán)限位:四位 umask 的第一位(如 0022 中的 0)也遵循此規(guī)則代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
默認(rèn)權(quán)限(含特殊位):7777(SUID/SGID/Sticky Bit + rwxrwxrwx)umask 0777 → 屏蔽所有權(quán)限(包括特殊權(quán)限)。
方式
優(yōu)點(diǎn)
缺點(diǎn)
默認(rèn)權(quán)限 – umask
直觀,適合簡(jiǎn)單場(chǎng)景
不適用于 umask 位超過(guò)默認(rèn)權(quán)限的情況
默認(rèn)權(quán)限 & (~umask)
嚴(yán)格符合二進(jìn)制邏輯,普適所有場(chǎng)景
需要理解位運(yùn)算
2.5、權(quán)限粘滯位2.5.1、問(wèn)題導(dǎo)入
思考一個(gè)問(wèn)題:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
drwxrwxrwx 2 root root 4096 Jan 27 12:44 temp-backup
如果有多人協(xié)同辦公的需求,我們可以在在/下創(chuàng)建臨時(shí)目錄temp-backup來(lái)解決這樣的場(chǎng)景,所有人對(duì)該目錄都具有讀寫(xiě)和執(zhí)行的權(quán)限,我們知道,擁有目錄的寫(xiě)權(quán)限就可以在目錄內(nèi)新建或者刪除文件,那么如果不是我們的文件,可以刪除嗎?
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ temp-backup]$ lltotal 4-rw-r--r-- 1 root root 11 Jan 27 15:54 root.txt[zwy@iZbp1dkpw5hx2lyh7vjopaZ temp-backup]$ cat root.txthelloworld[zwy@iZbp1dkpw5hx2lyh7vjopaZ temp-backup]$ echo 'hellolinux' >> root.txtbash: root.txt: Permission denied[zwy@iZbp1dkpw5hx2lyh7vjopaZ temp-backup]$ rm -f root.txt[zwy@iZbp1dkpw5hx2lyh7vjopaZ temp-backup]$ lltotal 0
答案是可以的!
即便我不是文件的擁有者和所屬組,我只有文件的讀權(quán)限,但是我仍然可以刪除這屬于root用戶的文件,且不需要任何身份確認(rèn)!因?yàn)槲募芊癖粍h除取決于所在目錄的讀權(quán)限,而不取決于文件本身的權(quán)限
在這些共享目錄中,如果有人惡意刪除文件,那么即便不是他的文件他也有權(quán)力刪除,就會(huì)導(dǎo)致一些不可預(yù)料的錯(cuò)誤,針對(duì)這個(gè)問(wèn)題,Linux中對(duì)目錄增加了粘滯位的概念。
2.5.2、粘滯位的設(shè)置
在 Linux 和類(lèi) Unix 系統(tǒng)中,給目錄設(shè)置 粘滯位(Sticky Bit)是一種常見(jiàn)的做法,尤其是在共享目錄中。
粘滯位的作用是限制對(duì)目錄中文件的刪除權(quán)限,確保只有文件的所有者、目錄的所有者,或者超級(jí)用戶(root)才能刪除該目錄中的文件。
為什么需要設(shè)置粘滯位?
防止非所有者刪除文件:
在多用戶系統(tǒng)中,可能有多個(gè)用戶共享一個(gè)目錄。如果沒(méi)有設(shè)置粘滯位,任何用戶都可以刪除該目錄中的文件。為了避免誤刪除或惡意刪除其他用戶的文件,可以設(shè)置粘滯位。粘滯位限制了文件的刪除權(quán)限,只有文件的所有者(即該文件創(chuàng)建者)或超級(jí)用戶(root)才能刪除該文件,即使其他用戶對(duì)該目錄有寫(xiě)權(quán)限。
增強(qiáng)共享目錄的安全性:
如果有一個(gè)公共的共享目錄,多個(gè)用戶可以向其中添加文件。如果沒(méi)有粘滯位,那么用戶 A、B、C 都可以刪除目錄中其他用戶的文件。而如果設(shè)置了粘滯位,則只有文件的擁有者才能刪除自己的文件,其他用戶不能刪除。這樣可以避免共享目錄中的文件被無(wú)意中或惡意刪除。
常見(jiàn)應(yīng)用場(chǎng)景:
/tmp 目錄:這是一個(gè)常見(jiàn)的設(shè)置粘滯位的目錄。所有用戶都可以在 /tmp 目錄中創(chuàng)建臨時(shí)文件,但只有文件的所有者或 root用戶能夠刪除文件。這樣即使其他用戶也能在該目錄下創(chuàng)建文件,也無(wú)法刪除他人創(chuàng)建的文件。/var/tmp 目錄:類(lèi)似于 /tmp,也經(jīng)常會(huì)設(shè)置粘滯位來(lái)防止文件的刪除問(wèn)題。
粘滯位的查看:
使用 ls -l 命令查看目錄的權(quán)限,如果最后一個(gè)字符是 t,說(shuō)明目錄已啟用粘滯位:代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
drwxrwxrwt. 8 root root 4096 Jan 27 03:28 tmp
根目錄下的tmp目錄就是啟用粘滯位的目錄,用來(lái)存放臨時(shí)文件多人協(xié)作辦公

設(shè)置粘滯位:
設(shè)置粘滯位:使用 chmod 命令可以設(shè)置或取消粘滯位。設(shè)置粘滯位的命令如下: chmod +t /tmp 這樣就會(huì)為 /tmp 目錄啟用粘滯位。代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 4drwxrwxr-x 2 zwy zwy 4096 Jan 27 18:58 temp-backup[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ chmod +t temp-backup[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 4drwxrwxr-t 2 zwy zwy 4096 Jan 27 18:58 temp-backup
取消粘滯位:
如果你不再需要該目錄具有粘滯位,可以使用以下命令來(lái)取消:chmod -t /tmp代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 4drwxrwxr-t 2 zwy zwy 4096 Jan 27 18:58 temp-backup[zwy@iZbp1dkpw5hx2lyh7vjopaZ code]$ lltotal 4drwxrwxr-x 2 zwy zwy 4096 Jan 27 18:58 temp-backup
總結(jié):
公共目錄在沒(méi)有粘滯位的情況下,任何用戶都可以刪除目錄中的文件。設(shè)置粘滯位后,只有文件的所有者或 root用戶才能刪除目錄中的文件,即使其他用戶對(duì)目錄具有寫(xiě)權(quán)限。設(shè)置粘滯位是為了增強(qiáng)共享目錄的安全性,防止用戶誤刪或惡意刪除其他用戶的文件。它特別適用于公共目錄,如/tmp,通過(guò)限制刪除權(quán)限,保證系統(tǒng)的穩(wěn)定性和安全性。
3、Linux下的家目錄
在 Linux 系統(tǒng)中,每個(gè)用戶都有一個(gè) 家目錄(Home Directory),該目錄是用戶存儲(chǔ)個(gè)人文件、配置文件和其他數(shù)據(jù)的地方。家目錄通常位于 /home 目錄下,每個(gè)用戶都會(huì)有一個(gè)與其用戶名相同的子目錄。例如,用戶 LA的家目錄通常是 /home/LA
3.1、家目錄的基本知識(shí)
家目錄的基本概念: 家目錄是一個(gè)為每個(gè)用戶分配的獨(dú)立空間,包含該用戶的文件、設(shè)置、配置文件等。家目錄為用戶提供一個(gè)隔離的環(huán)境,使得他們可以自由地管理自己的文件,而不影響其他用戶的文件。
家目錄的默認(rèn)位置: 默認(rèn)情況下,Linux 系統(tǒng)為每個(gè)用戶創(chuàng)建一個(gè)家目錄,通常位于 /home 目錄下。 例如:
用戶 la 的家目錄:/home/la用戶 hq 的家目錄:/home/hq對(duì)于 root 用戶(超級(jí)用戶),家目錄通常位于 /root,這是 root 用戶的默認(rèn)工作目錄。3.2、家目錄的權(quán)限
家目錄的權(quán)限通常為 700,即僅允許該用戶自己訪問(wèn),其他用戶無(wú)法查看或修改其家目錄。這樣就做到了多用戶彼此隔離,互不干擾
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
[root@iZbp1dkpw5hx2lyh7vjopaZ home]# ls -ltotal 8drwx------ 3 zwy zwy 4096 Jan 26 22:32 zwydrwx------ 2 zyy zyy 4096 Jan 27 19:48 zyy

3.3、家目錄的創(chuàng)建和刪除
家目錄中的內(nèi)容: 家目錄通常包含以下內(nèi)容:
配置文件:大多數(shù)程序的配置文件都會(huì)存放在家目錄下,通常以 . 開(kāi)頭,表示它們是隱藏文件。例如,~/.bashrc、 ~/.profile 等。個(gè)人數(shù)據(jù):用戶在家目錄下存放的文件和文件夾程序和應(yīng)用的臨時(shí)文件:一些程序可能會(huì)在家目錄下創(chuàng)建臨時(shí)文件和緩存文件,通常在隱藏的文件夾內(nèi)。
創(chuàng)建用戶時(shí)的家目錄: 當(dāng)使用 useradd 命令創(chuàng)建新用戶時(shí),系統(tǒng)會(huì)默認(rèn)為用戶創(chuàng)建一個(gè)家目錄。默認(rèn)情況下,該目錄位于 /home 下,目錄名與用戶的用戶名相同。
例如,創(chuàng)建一個(gè)名為 xxn 的用戶時(shí):
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
sudo useradd xxn
系統(tǒng)會(huì)為xxn用戶創(chuàng)建 /home/xxn 目錄,并將其設(shè)置為該用戶的家目錄。
設(shè)置家目錄: 如果你希望為某個(gè)用戶設(shè)置一個(gè)不同的位置作為家目錄,可以使用 -d 選項(xiàng):
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
sudo useradd -d /custom/path/username username
這會(huì)將用戶 username 的家目錄設(shè)置為 /custom/path/username
訪問(wèn)家目錄: 用戶可以通過(guò) cd 命令進(jìn)入自己的家目錄:
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
cd ~
或者
代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
cd /home/username
~ 是一個(gè)快捷方式,表示當(dāng)前用戶的家目錄。你也可以使用 echo $HOME 命令查看當(dāng)前用戶的家目錄路徑。
刪除用戶及其家目錄: 如果你想刪除用戶以及他們的家目錄,可以使用 userdel 命令的 -r 選項(xiàng):
sudo userdel -r alice
這會(huì)刪除用戶 alice 和其家目錄 /home/alice。
4、權(quán)限小結(jié)4.1、文件權(quán)限
權(quán)限
含義
數(shù)字表示
示例
r
讀權(quán)限
4
r–(只讀)
w
寫(xiě)權(quán)限
2
rw-(讀寫(xiě))
x
執(zhí)行權(quán)限
1
rwx(完全權(quán)限)
4.2、權(quán)限表示(數(shù)字)
權(quán)限組合
含義
數(shù)字表示
rwx
所有者:讀、寫(xiě)、執(zhí)行
7
r-x
所有者:讀、執(zhí)行
5
rw-
所有者:讀、寫(xiě)
6
r–
所有者:讀
4
4.3、 文件和目錄權(quán)限
操作
文件權(quán)限
目錄權(quán)限
r
讀取文件內(nèi)容
列出目錄中的文件
w
修改文件內(nèi)容
創(chuàng)建、刪除文件
x
執(zhí)行文件
進(jìn)入目錄(cd)
4. 4、常用命令
命令
說(shuō)明
ls -l
查看文件權(quán)限
chmod 755 file.txt
修改文件權(quán)限
chown alice:staff file.txt
更改文件的擁有者和所屬組
useradd alice
創(chuàng)建新用戶
usermod -aG devs john
將用戶添加到組
4.5、 特殊權(quán)限