我們使用Linux操作系統的過程中,必然存在對有限資源使用的限制性,那麼操作系統就必須提供一種途徑來保證每個用戶獨立、合理的使用計算機,那麼Linux採用的用戶權限的管理機制是怎麼樣的呢?
首先,用戶的權限有四個部分:普通權限、特殊權限、文件的特殊屬性以及FACL--文件訪問控制列表;
一、普通權限:
在用戶與羣組中,我們提到了進程安全上下文(Secure Context),這裏做一個回顧:
進程運行的過程:
1.判斷進程的所有者是否爲想要操作的文件的屬主,如果是就按照屬主的權限進行授權,如果不是,轉2
2.判斷進程的所有者是否爲想要操作的文件的屬組中的成員,如果是 就按照屬組的權限進行授權,如果不是 轉3
3.按照其他用戶的權限進行授權。
這裏所涉及到的授權,就是對用戶進行權限的分配,那麼權限到底是個什麼東東呢?
linux權限機制採用UGO模式。其中 u(user)表示所屬用戶、g(group)表示所屬組、o(other)表示除了所屬用戶、所屬組之外的情況。權限的構成是MODE+OWNERSHIP,即使用權和所有權;
★MODE(Permisson):使用權,包括三個部分(rwx 可讀可寫可執行)
--對於目錄來說:
r:代表可以使用ls命令獲取其中所有的文件名的列表;
注意:不能使用 ls -l 命令獲取目錄中文件的詳細屬性信息,也不能用cd進入其中,也不能在 路徑中引用該目錄;
w:表示可以修改此目錄中的文件名或者文件名列表,即:可以在此目錄中增刪改文件名;
x:可以使用ls -l獲取文件的詳細屬性信息;****
這裏的 x權限是目錄的最基本的權限,即任何目錄都必須對任和用戶開放x權限,不然的話用戶
將無法對該目錄進行任何操作,沒錯,任何操作都不可以!所以說x權限很基本也很重要。
--對文件來說:
r:可以查看或者獲取文件存放的數據
w:可以修改文件存放的數據
x:可以將此文件發起運行爲進程;
在文件的詳細屬性信息中:我們會看到這樣的一個字段
rw-r--r-- 我們把這三組稱爲三個權限位,分別代表屬主,屬組,其他用戶的權限,- 代表不具備r/w/x的權限;
我們可以用八進制 0-7分別表示權限位的分配情況
權限標識三元組:
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
-wx 111 7
舉個例子~ rwxr-xr-x --> 111101101--> 755
瞭解了權限的構成,下面介紹有關使用權的管理命令:
修改使用權的命令:chmod
1.chmod [option]... MODE[,MODE]... FILE... 符號表示法進行權限修改
MODE 表示符號權限的標識
u,g,o,a表示所有權,a是all 全部用戶
用+,-,= 加上具體權限rwx
+:在原有的權限基礎上增加新的權限
-:在原有的權限基礎上去除某些權限
=:不考慮原有的權限,直接將權限設置爲目標權限
例如 chmod u+w FILE; chmod g+rw FILE; chmod u+x,g+wx,o-x FILE ......
chmod +x file 默認的爲a添加,即所有用戶 添加可執行的權限
chmod +w file 默認的只爲屬主添加寫權限
注意:能不能刪除某文件,主要查看登錄用戶是否對該文件所在的目錄有w權限
再次強調,文件的執行權限,對linux系統而言是非常重要的安全標識; 因爲一旦文件具備了執行權限,意味着該文件可以被髮起直行爲進程,所以默認情況下文件都不具備執行權限;
2.chmod [option]... OCTAL -MODE FILE
八進制數字標識,每次必須給足所有的權限位;如果給的權限位不完整,文件系統會自動補足,將給定的權限放在最右側,左側用0補足;
例如 chmod 640 file
3.chmod --reference=/PATH/TO/FILE DES_FILE
這是一個仿照某個文件的權限設置給指定文件設置權限的命令;
例如 chmod --reference=a b
【選項】:
-R,--Recursive:將目標目錄的文件及子目錄及子目錄中的文件統一設置爲指定的權限標識;
★OWNERSHIP:所有權 ugo
屬主:資源掌控的某個特定用戶:owner(user)--u
屬組:資源掌控的某些特地用戶;group--g
其他用戶:未曾掌控資源的用戶;other--o
全部用戶 all--a
所有權比較好理解,前面也稍微提到過;所以直接來介紹它的相關命令:
①chown : 修改文件的屬主和屬組
用法:chown [opt]... [owner][:[group]] FILE
chown OWNER FILE
chown :GROUP FILE
chown OWNER: FILE // 將目標文件的屬主改爲owner 同時將屬組修改爲ower的基本組
chown OWNER:GROUP FILE // 屬主和主組改爲OWNER和GROUP;
chown [opt]... --reference=RFILE FILE...
【選項】
-R,將目標目錄的文件及子目錄及子目錄中的文件統一設置爲指定的所有權;
注意:修改OWNERSHIP操作只有root可以完成
②chgrp:只用來修改文件的所屬組
##這裏補充兩個小命令
1.install命令:
安裝:複製文件並給文件增加執行權限;
單源複製:
install [options] [-s] [--strip] source dest
多源複製:
install [options] [-s] [--strip] source... directory
創建目錄:
install [options]... -d DIR
【常用選項】
-m:指定目標文件的權限,默認755
-o:設定目標文件的屬主;僅超級用戶可用;
-g:設定目標文具店的屬組;僅超級用戶可用;
注意:此命令不能複製目錄,即其源不能是目錄,如果源是目錄,則install會進入目錄,依次複製其中的所有非目錄文件到目標位置;
2.mktemp:創建臨時文件
一般來講,臨時文件到會創建在/tmp或/var/tmp,無需手動刪除,系統會定期自動清除這兩個目錄的文件;
-d,--directory:可以創建臨時目錄;
例: mktemp /PATH/TO/TMP.XXXXXXX(至少三個X) [-d] X越多,碰撞的機率就越小
二、特殊權限--SUID SGID STICKY
默認情況下,用戶發起執行一個進程,該進程的屬主是其發起者,也就是說,該進程是以其發起者的身份在運行
1.SUID:
功能:用戶發起執行一個進程時,該程序文件如果擁有SUID權限,那麼此程序發起的進程,其屬主爲該程序文件的屬主而不是其發起者;
suid權限所顯示的位置在文件的屬主權限中的執行權限位; 如果屬主本來就有執行權限,顯示爲s,否則顯示爲S;
管理文件的SUID權限,例如chmod u+|-s FILE...
2.SGID:
功能:如果某個目錄對於一些用戶有寫權限,並且設置了SGID,則所有對此目錄有寫權限的用戶在創建新文件或目錄以後,新文件或目錄的屬組不再是創建用戶的基本組而是繼承該目錄的屬組;
SGID權限顯示的位置 在文件的屬組權限中的執行權限位;如果屬組本來有執行權限,顯示爲s,否則顯示爲S;
管理文件的SGID權限 例如 chmod g+/-s FILE...
3.STICKY:粘滯位
如果某個目錄中,超過一個用戶有寫權限,則這多個用戶都可以在該目錄中隨意增刪改文件名;
功能:如果爲上述類似的目錄設置了STICKY權限,則每個用戶仍舊能夠在這類目錄裏創建、修改文件名,但是,每個用戶只能刪除那些屬主爲其自身的文件名;
位置顯示在文件權限的其他用戶權限中的執行權限位,如果原來有執行權限,顯示爲t,否則顯示爲T;
管理文件的STICKY權限 例如chmod o+/-t FILE...
suid sgid sticky的三個特殊權限也可以視作一個 三元組
--- 000 0
--t 001 1
-s- 010 2
-st 011 3
s-- 100 4
s-t 101 5
ss- 110 6
sst 111 7
特殊權限的另一種修改方式:
將特殊權限對應的八進制數字放置於普通權限八進制數字的前面即可
例如:給某個目錄加上粘滯位
chmod 1755 DIR
umask
權限遮罩瑪:在創建文件或者目錄的時候默認的權限生成標準
root:0022
第一個0表示不考慮特殊權限位,
對於新建文件或目錄,不遮擋屬主的任何權限,但是遮擋了屬組的寫權限。和其他用戶的寫權限
mkdir test --> rwxr-xr-x 755
touch test.txt --> rw-r--r-- 644
理解遮罩碼,將遮罩碼的值變成二進制,凡是有1的位置,在創建文件時 這個權限位不予設置;
默認情況下,文件的遮罩碼已經有了一個0111 在此基礎上再次應用umask來遮罩權限;
三、.文件的特殊屬性:
查看文件的特殊屬性
lsattr命令:
顯示文件在Linux第二擴展文件系統上的特有屬性
lsattr [ -RVadv ] [ files... ]
修改設置文件的特殊屬性
chattr [ -RV ] [ -v version ] [ mode ] files...
mode:會使用+-=的方式來設置;
+:在原有屬性設定的基礎上,添加新的屬性;
-:從原有屬性設置中移除某些指定的屬性;
=:不考慮原有屬性設置,直接將文件的屬性更新爲指定的屬性內容;
整個chattr最關鍵核心的設置就是mode部分
[aAcCdDeijsStTu]都是所需要的屬性;
a:append; 設置這個屬性的文件,其內容不能被更改和刪除,只能以追加的方式向文件中寫數據;
多數的服務器日誌類文件會設置此屬性
A:atime, 文件的訪問時間戳;IO瓶頸
設置A屬性時,可以使得文件在被訪問時不更改文件的訪問時間戳,從而可以有效的防止IO瓶頸的發生;
c: 設置文件是否自動壓縮後再進行存儲;
C:設置文件是否開啓“寫時複製”屬性;
d:設置文件在使用dump進行備份的時候,不會成爲備份目標;
D:設置文件在文件系統中的異步寫錯左;
i:設置文件不能被刪除、修改、設定鏈接關係;只讀!
s:設置文件的保密性刪除,一旦設置了此屬性的文件被刪除,其對應存儲設備中的使用空間會一併刪除;
u:與s屬性相反,如果這樣的文件被刪除,其存儲於存儲設備中的數據會被留存;
其中最常用的屬性是i和a;
chattr +/-/= i FILE...
同樣也有-R選項 遞歸的設置指定目錄中的所有文件和子目錄的特殊屬性;
四、爲文件賦予額外的權限機制:FACL file access control list(並不是每個文件系統都支持)
在原有的u,g,o權限位之外,讓普通用戶能夠控制權限賦予另外用戶和組的一種授權機制。CentOS7和RHEL7之後的發行版 逐漸成熟,CentOS5之前不支持;
與FACL有關的命令:
1.getfacl
etfacl [-aceEsRLPtpndvh] file ...
user:USERNAME:MODE
group:GROUPNAME:MODE
other::MODE
2.setfacl
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
acl_spec: acl_specification,指定的訪問控制列表
u:USERNAME:MODE
g:GROUPNAME:MODE
MODE:一般使用符號權限標識法
爲用戶賦予額外權限:
setfacl -m u:USERNAME:MODE FILE ...
撤銷爲用戶賦予的額外權限:
setfacl -x u:USERNAME
爲組賦予額外權限:
setfacl -m u:GROUPNAME:MODE FILE ...
撤銷爲組賦予的額外權限:
setfacl -x u:GROUPNAME
注意:如果設置了facl之後再修改目標文件的使用權限,那麼facl中設置的條目就可能會受到影響,而導致與要求不符;因此,如果真的需要設置facl,就要在已經確定目標文件的使用權限以後再進行設置;