Linux用戶與組權限管理
1、Linux權限概念
Linux權限主要分爲讀、寫、執行三種。ls -l可查看文件或目錄權限,系統顯示r(讀取)、w(寫入)、x(執行)。通過設置權限來限制哪些用戶或用戶組可以對特定文件進行相應的操作。
[root@test ~]# ls -l
total 44
-rw-r--r-- 1 root root 15 Dec 23 10:08 1.log
-rw-r--r-- 1 root root 870 May 27 2019 1.sh
-rw-r--r-- 1 root root 216 Dec 23 10:06 2.sh
drwxr-xr-x 3 root root 4096 Feb 26 23:37 back
drwxr-xr-x 2 root root 4096 Oct 24 09:40 mypackages
第一列第一個字符代表文件類型:-:普通文件;d:目錄;l:鏈接文件;b或c代表設備。第二至第九個字符代表權限,三位一組,分別代表所有者權限(user)、所屬組權限(group)、其他賬戶權限(other)。
第二列:鏈接數量或子目錄個數。
第三列:文檔所有者;第四列:文件所屬組;第五列:容量(大小);
第六-八列:文檔最近被修改時間(月-日-時:分);
第九列:文檔名稱。
權限名稱(代號) |
對文件作用 |
對目錄作用 |
r(4) |
可讀取文件內容 |
可列出目錄內容 |
w(2) |
可修改文件內容 |
可在目錄中創建刪內容 |
x(1) |
可作爲命令執行 |
可訪問目錄內容 目錄必須有執行權限 |
2、用戶與組權限相關命令
2.1用戶及組權限管理命令
2.1.1 權限修改chmod命令
描述:修改某個用戶、組對文件或目錄權限。
用法:chmod [選項] 權限 [文件/目錄]
主要參數:
必要參數 |
作用 |
-c |
當發生改變時,報告處理信息 |
-f |
不輸出錯誤信息 |
-R |
遞歸處理指定目錄及其子目錄下所有文件 |
-v |
顯示詳細處理信息 |
--reference=rfile |
根據參考文檔設置權限 |
權限範圍:
權限範圍參數 |
作用 |
u |
目錄或文件所有主 |
g |
目錄或文件所有組 |
o |
目錄或文件其他用戶或羣組 |
a |
所有用戶及羣組 |
Eg:
[root@test ~]# ls -l 1.sh
-rwxrwxrwx 1 root root 870 May 27 2019 1.sh
(1)修改1.sh文件所有人的權限均爲可讀可寫
[root@test ~]# chmod a=rw 1.sh
[root@test ~]# ls -l 1.sh
-rw-rw-rw- 1 root root 870 May 27 2019 1.sh
(2)修改1.sh的所有人權限都爲可讀、可寫、可執行
[root@test ~]# chmod a=rwx 1.sh
[root@test ~]# chmod 777 1.sh
(3)修改1.sh所有組無執行權限
[root@test ~]# chmod g-x 1.sh
(4)修改1.sh所有組有執行權限
[root@test ~]# chmod g+x 1.sh
(5)修改1.sh所有組無執行權限,其他只有讀權限
[root@test ~]# chmod g-x,o-wx 1.sh
2.1.2 屬主/組修改chown命令
描述:修改文件或目錄所有主或所有組,root用戶使用。
用法:chown [選項][所有者]:[所有組] [文件/目錄]
主要參數:
必要參數 |
作用 |
-c |
當發生改變時,報告處理信息 |
-f |
不輸出錯誤信息 |
-R |
遞歸處理指定目錄及其子目錄下所有文件 |
-v |
顯示詳細處理信息 |
-h |
修復符號鏈接 |
--reference=rfile |
根據參考文檔設置權限 |
Eg:
[root@test ~]# ls -l 1.sh
-rwxrwxrwx 1 root root 870 May 27 2019 1.sh
(1)修改1.sh文件屬主、屬組爲test
[root@test ~]# chown test:test 1.sh
[root@test ~]# ls -l 1.sh
-rwxrw-rwx 1 test test 870 May 27 2019 1.sh
(2)改變指定目錄以及其子目錄下的所有文件的擁有者和羣組並顯示處理信息
[root@test ~]# chown -R -v root:test 1.sh
changed ownership of `1.sh' to root:test
2.1.3 屬組修改chgrp命令
描述:可採用羣組名稱或羣組識別碼的方式改變文件或目錄的所屬羣組。root用戶使用。
用法:chgrp [選項][所有者]:[所有組] [文件/目錄]
主要參數:
必要參數 |
作用 |
-c |
當發生改變時,報告處理信息 |
-f |
不輸出錯誤信息 |
-R |
遞歸處理指定目錄及其子目錄下所有文件 |
-v |
顯示詳細處理信息 |
--reference=rfile |
根據參考文檔設置權限 |
Eg:
[root@test ~]# ls -l 1.sh
-rwxrwxrwx 1 root root 870 May 27 2019 1.sh
(1)修改1.sh文件由root羣組改爲test羣組
[root@test ~]# ls -l 1.sh
-rwxrw-rwx 1 root root 870 May 27 2019 1.sh
[root@test ~]# chgrp -v test 1.sh
changed group of `1.sh' to test
[root@test ~]# ls -l 1.sh
-rwxrw-rwx 1 root test 870 May 27 2019 1.sh
(2)改變文件2.sh 的羣組屬性,使得文件2.sh的羣組屬性和參考文件1.sh的羣組屬性相同
[root@test ~]# chgrp --reference=1.sh 2.sh
3、Linux特殊權限及掩碼
Umask:每個Linux終端都擁有一個umask屬性,用於控制新建文件、目錄默認權限。默認系統權限掩碼爲022。在系統中每創建一個文件或者目錄,文件默認權限是666,而目錄權限則爲777,權限對外開放比較大,所以設置了權限掩碼之後,默認的文件和目錄權限減去umask值纔是真實的文件和目錄的權限。(目錄權限爲:777-022=755;文件權限爲:666-022=644;)
使用命令:umask可以查看默認權限掩碼;
umask -s 023 可重新設置權限掩碼。
特殊權限:Linux除了基本權限位爲9位權限,還有額外3個特殊權限位。
權限及代號 |
對文件的影響 |
對目錄的影響 |
suid(s/4) |
以文件的所屬用戶身份執行,而非執行文件的用戶 |
無 |
sgid(s/2)
|
以文件所屬組身份去執行 |
在該目錄中創建任意新文件的所屬組與該目錄的所屬組相同 |
sticky(t/1)
|
無 |
對目錄擁有寫入權限的用戶僅可以刪除其擁有的文件,無法刪除其他用戶所擁有的文件 |
Suid:當一個設置了suid位的可執行文件被執行時,以文件所有者的權限來執行,可任意存取文件擁有者可以使用的全部系統資源。
Sgid:當一個設置了sgid位的可執行文件被執行時,該文件具有所有組權限。任意存取整個組所能使用的系統資源。如果一個目錄設置了sgid,所有複製到該目錄的文件,所有組會變成與目錄一樣。
Sbit(sticky):當一個文件設置了sbit後,就算其他用戶有寫權限,
(有執行權限權限的,suid/sgid權限會顯示s,否則顯示S)
特殊權限設置:
(1)suid:chmod 4755 file 或者chmod u+s file
(2)sgid:chmod 2755 file 或者 chmod g+s file
(3)sticky:chmod 1777 file 或者 chmod o+t file
4、Linux系統ACL訪問控制權限
由於Linux系統的基本權限主要針對文檔所有者、所屬組以及其他用戶進行控制。無法針對某個單獨賬戶進行控制。故出現acl(access control list)訪問控制列表概念,使用acl針對單一賬戶進行文檔訪問權限。
Linux系統使用getfacl查看文檔acl權限,使用setfacl設置文檔acl權限。
4.1.setfacl/getfacl命令
描述:setfacl設置文檔訪問控制列表。
用法:setfacl [選項] [{-m|-x}acl條目] [文件/目錄]
主要參數:
必要參數 |
作用 |
-b |
刪除所有acl條目 |
-m |
添加acl條目,不可與-x同時使用 |
-x |
刪除指定acl條目,不可與-m同時使用 |
-R |
遞歸處理所有文件及子目錄 |
-k |
刪除默認acl條目 |
描述:gettfacl查看文檔訪問控制列表。
用法:getfacl [文件/目錄]
Eg:
[root@test ~]# ls -l 1.sh
-rwxrwxrwx 1 root root 870 May 27 2019 1.sh
(1)添加acl條目,使用戶test對1.sh文件可讀可寫
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
group::rwx
other::rwx
[root@test ~]# setfacl -m u:test:rw 1.sh
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
user:test:rw- #acl控制權限,test用戶有讀寫權限
group::rwx
mask::rwx #權限掩碼
other::rwx
[root@test ~]# ls -l 1.sh
-rwxrwxrwx+ 1 root test 870 May 27 2019 1.sh
[root@test ~]#
(2)添加acl條目,使test組對1.sh文件只讀
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
user:test:rw-
group::rwx
mask::rwx
other::rwx
[root@test ~]# setfacl -m g:test:r 1.sh
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
user:test:rw-
group::rwx
group:test:r-- #acl控制權限,test組有可讀權限
mask::rwx
other::rwx
[root@test ~]# ls -l 1.sh
-rwxrwxrwx+ 1 root test 870 May 27 2019 1.sh
(3)刪除test用戶的acl條目
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
user:test:rw-
group::rwx
group:test:r--
mask::rwx
other::rwx
[root@test ~]# setfacl -x u:test 1.sh
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
group::rwx
group:test:r--
mask::rwx
other::rwx
(4)刪除所有acl條目
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
group::rwx
group:test:r--
mask::rwx
other::rwx
[root@test ~]# setfacl -b 1.sh
[root@test ~]# getfacl 1.sh
# file: 1.sh
# owner: root
# group: test
user::rwx
group::rwx
other::rwx
個人公衆號: