文件系統的權限管理
1、Linux系統下每個目錄或文件的權限對象主要分為:屬主(u)、屬組(g)、其他用戶(o),針對每類訪問對象都定義了三種權限:讀(r)、寫(w)、執行(x),這三種權限針對目錄和文件的作用各不相同,以下將做詳細說明:
對于文件來說:
讀(r)權限:可以使用文本查看類工具讀取文件內容
寫(w)權限:可以修改文件內容,但不能刪除文件本身
執行(x)權限:主要針對二進制程序或腳本,可以將其提交給內核并啟動一個進程(即運行程序)
對于目錄來說:
讀(r)權限:只能讀取目錄中的文件列表,不能訪問、不能進入目錄、不能查看元數據
寫(w)權限:可以在目錄中創建、刪除文件,但不能使用cd命令進入目錄中
執行(x)權限:可以使用cd命令進入目錄,但不能查看目錄中的文件列表
權限的表示方法可以使用字符表示,也可以使用八進制數字表示,對應關系如下表:
權限位 | — | –x | -w- | -wx | r– | r-x | rw- | rwx |
二進制表示 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
八進制表示 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
一個文件的權限位通常分為9位,前三位表示屬主的權限,中間三位表示屬組的權限,后三位表示其他用戶的權限。
2、文件權限修改命令chmod
用法:chmod [選項]… 模式[,模式]… 文件…
或:chmod [選項]… 八進制模式 文件…
或:chmod [選項]… –reference=參考文件 文件…
常用選項:
-R:以遞歸方式更改所有的文件及子目錄
模式:
u= 表示修改屬主的所有r、w、x權限
g= 表示修改屬組的所有r、w、x權限
o= 表示修改除了屬主、屬組的其他用戶所有r、w、x權限
ug= 表示同時修改屬組和屬組的所有r、w、x權限
a= 表示修改所有對象的r、w、x權限(即屬主、屬組和其他用戶)
u+ 表示在原來屬主權限的基礎上增加某位或某些位的權限
u- 表示在原來屬主權限的基礎上減去某位或某些位的權限
注意:X(大寫)表示只給目錄x權限,不給文件x權限
應用實例:
[root@liang testdir]# ll 總用量 4 drwxr-xr-x. 3 root root 4096 8月 4 05:46 bbb [root@liang testdir]# chmod u=r,o-x bbb/ [root@liang testdir]# ll 總用量 4 dr--r-xr--. 3 root root 4096 8月 4 05:46 bbb [root@liang testdir]# chown 765 bbb/ [root@liang testdir]# ll 總用量 4 drwxr-xr--. 3 765 root 4096 8月 4 05:46 bbb [root@liang testdir]# ll /etc/shadow ----------. 1 root root 2268 8月 4 05:07 /etc/shadow [root@liang testdir]# chmod --reference=/etc/shadow bbb/ [root@liang testdir]# ll 總用量 4 d---------. 3 root root 4096 8月 4 05:46 bbb
3、文件屬主修改命令chown
用法:chown [選項]… [所有者][:[組]] 文件…
或:chown [選項]… –reference=參考文件 文件…
常用選項:
-R:遞歸處理所有的文件及子目錄
應用實例:
[root@liang testdir]# ll 總用量 4 drwxrw-r-x. 3 root root 4096 8月 4 05:46 bbb [root@liang testdir]# chown zsan bbb/ [root@liang testdir]# ll 總用量 4 drwxrw-r-x. 3 zsan root 4096 8月 4 05:46 bbb [root@liang testdir]# chown lsi:sysadmins bbb/ [root@liang testdir]# ll 總用量 4 drwxrw-r-x. 3 lsi sysadmins 4096 8月 4 05:46 bbb [root@liang testdir]# chown --reference=/root/ bbb/ [root@liang testdir]# ll 總用量 4 drwxrw-r-x. 3 root root 4096 8月 4 06:28 bbb
4、文件屬組修改命令chgrp
用法:chgrp [選項]… 用戶組 文件…
或:chgrp [選項]… –reference=參考文件 文件…
常用選項:
-R:遞歸處理所有的文件及子目錄
應用實例:
[root@liang testdir]# ll 總用量 4 drwxrw-r-x. 3 root root 4096 8月 4 06:28 bbb [root@liang testdir]# chgrp sysadmins bbb/ [root@liang testdir]# ll 總用量 4 drwxrw-r-x. 3 root sysadmins 4096 8月 4 06:28 bbb [root@liang testdir]# chgrp --reference=/root/ bbb/ [root@liang testdir]# ll 總用量 4 drwxrw-r-x. 3 root root 4096 8月 4 06:28 bbb
5、設置文件或目錄新建時的默認權限命令umask
umask命令的作用是新建目錄或文件時屏蔽掉最大權限相應的位,從而得出默認權限。
對于普通文件來說,一般情況下,新建文件的默認八進制權限值等于666減去umask的值,但如果某類對象的權限值結果中存在x權限,則將其權限位加1。
對于目錄文件來說,新建目錄的默認八進制權限值等于777減去umask的值。
設定umask值:umask 八進制權限模式 或:umask 模式[,模式]…
顯示umask值:umask 或 umask -S 或 umask -p
[root@fengl etc]# umask u=r,g=r,o=r [root@fengl etc]# umask 0333 [root@fengl etc]# umask -p umask 0333 [root@fengl etc]# umask -S #顯示的是新建文件或目錄的默認權限,如果新建的是文件且有x權限時,則自動減去x權限 u=r,g=r,o=r [root@fengl etc]# umask 234 [root@fengl etc]# umask 0234
可以在環境變量中直接添加umask的值實現控制新建目錄或文件的默認權限效果。umask的全局配置在文件/etc/bashrc中,umask的用戶環境變量可以在~/.bashrc中設置。
應用實例:
[root@liang6 testdir]# umask 0022 [root@liang6 testdir]# touch file1 [root@liang6 testdir]# mkdir dir1 [root@liang6 testdir]# ll total 4 drwxr-xr-x. 2 root root 4096 Aug 4 08:18 dir1 -rw-r--r--. 1 root root 0 Aug 4 08:18 file1 [root@liang6 testdir]# umask 111 [root@liang6 testdir]# touch file2 [root@liang6 testdir]# mkdir dir2 [root@liang6 testdir]# ll total 8 drwxr-xr-x. 2 root root 4096 Aug 4 08:18 dir1 drw-rw-rw-. 2 root root 4096 Aug 4 08:18 dir2 -rw-r--r--. 1 root root 0 Aug 4 08:18 file1 -rw-rw-rw-. 1 root root 0 Aug 4 08:18 file2
6、Linux文件系統上的特殊權限
在Linux系統上的三個特殊權限為:SUID、SGID、Sticky
Linux系統中任何一個可執行程序文件都有其屬主和屬組,程序運行時的進程也有屬主和屬組。一個可執行程序能否啟動為進程,取決于發起者對程序文件是否擁有可執行權限,當可執行程序啟動為進程時,其進程的屬主為發起者,進程的屬組為發起者所屬的組。而進程訪問文件時的權限取決于進程的發起者,如果進程的發起者為程序文件的屬主,則該進程所擁有的權限和程序文件的屬主權限一樣,如果進程的發起者為程序文件的屬組,則該進程擁有的權限和程序文件的屬組權限一樣,同樣,如果進程的發起者為程序文件的“其他位”用戶,則該進程所擁有的權限和程序文件的“其他位”權限一樣。
(1)、SUID的作用就是保證程序運行時的進程屬主為原有文件的屬主,即進程的有效身份不是發起者,而是程序文件自身的屬主,這樣可以避免不同用戶啟動可執行程序時的權限問題(如paswd命令,執行passwd命令的過程其實就是訪問并修改/etc/shadow文件,而普通用戶對該文件是沒有任何訪問權限的)。因此,SUID權限一般作用在有可執行權限的二進制文件(可執行程序或命令)上。
SUID權限的設置方法為:chmod u+s FILE… 或 chmod u-s FILE…
SUID的權限位(s)和文件的屬主執行權限位(x)相同,此s可能顯示為大寫或小寫,大寫表示該文件的屬主本身沒有可執行權限,小寫表示該文件的屬主本身具有可執行權限。
應用實例:
[root@liang6 testdir]# ll total 0 -rw-r--r--. 1 root root 0 Aug 4 08:18 file1 [root@liang6 testdir]# chmod u+s file1 [root@liang6 testdir]# ll total 0 -rwSr--r--. 1 root root 0 Aug 4 08:18 file1 [root@liang6 testdir]# chmod u-s file1 [root@liang6 testdir]# ll total 0 -rw-r--r--. 1 root root 0 Aug 4 08:18 file1 [root@liang6 testdir]# chmod u+sx file1 [root@liang6 testdir]# ll total 0 -rwsr--r--. 1 root root 0 Aug 4 08:18 file1
(2)、默認情況下用戶創建文件時,其屬組為此用戶所屬的主組,而一旦某目錄被設定了SGID權限,則對該目錄有寫權限的用戶,在此目錄下所創建的文件或目錄所屬組為此目錄的屬組。
SGID的設置方法為:chmod g+s DIR… 或 chmod g-s DIR…
SUGD的權限位(s)和目錄的屬組執行權限位(x)相同,此s可能顯示為大寫或小寫,大寫表示該目錄的屬組本身沒有可執行權限,小寫表示該目錄的屬組本身具有可執行權限。
應用實例:
[root@liang6 testdir]# ll total 4 drwxr-xr-x. 2 root root 4096 Aug 4 10:41 dir1 [root@liang6 testdir]# chmod g+s dir1/ [root@liang6 testdir]# ll total 4 drwxr-sr-x. 2 root root 4096 Aug 4 10:41 dir1 [root@liang6 testdir]# chmod o+w dir1/ [root@liang6 testdir]# ll total 4 drwxr-srwx. 2 root root 4096 Aug 4 10:41 dir1 [root@liang6 testdir]# su user5 [user5@liang6 testdir]$ touch dir1/file1 [user5@liang6 testdir]$ exit [root@liang6 testdir]# su user3 [user3@liang6 testdir]$ touch dir1/file2 [user3@liang6 testdir]$ exit [root@liang6 testdir]# ll dir1/ total 0 -rw-rw-r--. 1 user5 root 0 Aug 4 10:44 file1 -rw-rw-r--. 1 user3 root 0 Aug 4 10:44 file2
(3)、Sticky 稱作為粘滯位,一般作用在目錄上,實現的效果是對于一個多人可寫的目錄,每個用戶僅能刪除自己的文件(GID為0的管理員用戶除外),如系統上的/tmp和/var/tmp目錄默認都具有Sticky權限。
Sticky的設置方法為:chmod o+t DIR… 或 chmod o-t DIR…
Sticky的權限位(t)和目錄的“其他位”執行權限位(x)相同,此t可能顯示為大寫或小寫,大寫表示該目錄的“其他位”本身沒有可執行權限,小寫表示該目錄的“其他位”本身具有可執行權限。
應用實例:
[root@liang6 testdir]# chmod o+t dir1/ [root@liang6 testdir]# ll total 4 drwxr-xrwt. 2 root root 4096 Aug 4 10:44 dir1 [root@liang6 testdir]# cd dir1/ [root@liang6 dir1]# su user5 [user5@liang6 dir1]$ ll total 0 -rw-rw-r--. 1 user5 root 0 Aug 4 10:44 file1 -rw-rw-r--. 1 user3 root 0 Aug 4 10:44 file2 [user5@liang6 dir1]$ rm -f file2 rm: cannot remove `file2': Operation not permitted [user5@liang6 dir1]$ rm -f file1 [user5@liang6 dir1]$ ll total 0 -rw-rw-r--. 1 user3 root 0 Aug 4 10:44 file2
(4)、這三個特殊權限也可以組成一組權限,并用八進制表示法表示,這三個權限位分別為:sgid-suid-sticky,
000 001 010 011 100 101 110 111
八進制 0 1 2 3 4 5 6 7
特殊權限的八進制表達法,可于默認的三位八進制數字左側再加一位八進制數字,如:
[root@liang testdir]# chmod 2555 dir1/ [root@liang testdir]# ll 總用量 4 dr-xr-sr-x. 2 root root 4096 8月 5 03:32 dir1
7、改變文件屬性的命令chattr和查看屬性命令lsattr
chattr命令只有超級權限的用戶才能使用,該命令可改變存放在ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs等文件系統上的文件或目錄屬性。chattr命令的作用很大,其中一些功能是由Linux內核版本來支持的,不過現在絕大部分的Linux系統都是2.6以上內核了。通過chattr命令修改屬性能夠提高系統的安全性,但是它并不適合所有的目錄。chattr命令不能保護/、/dev、/tmp、/var目錄。
用法:chattr [-RVf] [-+=AacDdeijsSu] [-v version] files…
常用選項:
-R 遞歸處理,將指定目錄下的所有文件及子目錄一并處理
-V 顯示指令執行過程
-f 抑制大多數的錯誤信息
-v<版本編號> 設置文件或目錄版本
模式說明:
+<屬性> 開啟文件或目錄的該項屬性
-<屬性> 關閉文件或目錄的該項屬性
=<屬性> 指定文件或目錄的該項屬性
A:即Atime,文件或目錄的atime不可被修改,可以有效預防例如手提電腦磁盤I/O錯誤的發生
a:即Append Only,設定該參數后,只能向文件中添加數據,而不能刪除。如果目錄具有這個屬性,系統將只允許在這個目錄下創建和修改文件,而不允許刪除任何文件,多用于服務器日志文件安全
c:即compresse,設定文件是否經壓縮后再存儲,讀取時需要經過自動解壓操作
i:即Immutable,設定文件不能被刪除、改名、設定鏈接關系,同時不能寫入或新增內容,如果目錄具有這個屬性,那么任何的進程只能修改目錄之下的文件,不允許建立和刪除文件。i參數對于文件系統的安全設置有很大幫助
s:保密性地刪除文件或目錄,不可恢復,因為是從磁盤上刪除,然后用0填充文件所在區域
u:與s相反,當一個應用程序請求刪除這個文件,系統會保留其數據塊以便以后能夠恢復刪除這個文件,用來防止意外刪除文件或目錄
lsattr命令可查看使用chattr命令改變文件的屬性信息。
用法:lsattr [-RVadlv] [files…]
常用選項:
-a:顯示所有文件和目錄,包括“.”和“..”
-d:顯示目錄,而非目錄內容
-R:遞歸處理
應用實例:
[root@liang testdir]# chattr -R +i dir1/ [root@liang testdir]# lsattr -a dir1/ ----i--------e- dir1/. -------------e- dir1/.. ----i--------e- dir1/file1 [root@liang testdir]# ll 總用量 4 drwxr-xr-x. 2 root root 4096 8月 5 04:20 dir1 [root@liang testdir]# cd dir1/ [root@liang dir1]# touch file2 touch: 無法創建"file2": 權限不夠 [root@liang dir1]# ll 總用量 4 -rw-r--r--. 1 root root 5 8月 5 04:20 file1 [root@liang dir1]# cat file1 aaaa [root@liang dir1]# echo bbbbbbbbbb > file1 -bash: file1: 權限不夠
8、設置文件的訪問控制列表命令setfacl
chmod命令可以修改文件或目錄的所有者、所屬組和其他人的權限,而setfacl命令可以實現更靈活的權限管理,除了對文件或目錄的所有者、所屬組和其他人的權限管理外,還可以對更多的用戶設置權限。
文件設置了訪問控制列表后的權限執行順序為:所有者、自定義用戶、自定義組、其他人
CentOS7之前版本,默認手工創建的ext4文件系統無ACL功能,需要手動增加,命令如下:
]# tune2fs -o acl /dev/sdb1
]# mount -o acl /dev/sdb1 /mnt
用法: setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file …
常用參數:
-m, –modify=acl:修改ACL
-x, –remove=acl:移除ACL
-M, –modify-file=file:修改從文件讀取的ACL條目
-X, –remove-file=file:移除從文件讀取的ACL條目
-b, –remove-all:清空ACL
-d, –default:通常用在目錄上,效果是在該目錄下新建的文件或目錄會默認添加ACL
-k, –remove-default:與-d相反,作用是移除目錄上添加的默認ACL
-R, –recursive:遞歸設置
getfacl命令可以查看設置的文件訪問控制列表
用法:getfacl [-aceEsRLPtpndvh] file …
應用實例:
[root@liang testdir]# setfacl -m u:zsan:rwx dir1/ #修改ACL [root@liang testdir]# [root@liang testdir]# getfacl dir1/ #查看ACL # file: dir1/ # owner: root # group: root user::rwx user:zsan:rwx group::r-x mask::rwx other::r-x [root@liang testdir]# chmod g=w dir1/ [root@liang testdir]# getfacl #更改屬組的權限后再查看ACL Usage: getfacl [-aceEsRLPtpndvh] file ... Try `getfacl --help' for more information. [root@liang testdir]# getfacl dir1/ # file: dir1/ # owner: root # group: root user::rwx user:zsan:rwx #effective:-w- group::r-x #effective:--- mask::-w- other::r-x [root@liang testdir]# setfacl -x u:zsan dir1/ #移除ACL后使用ll查看 [root@liang testdir]# ll 總用量 8 drwxr-xr-x+ 2 root root 4096 8月 5 04:20 dir1 [root@liang testdir]# setfacl -b dir1/ #清楚ACL后查看 [root@liang testdir]# ll 總用量 4 drwxr-xr-x. 2 root root 4096 8月 5 04:20 dir1 [root@liang testdir]# setfacl -m d:u:zsan:rw dir1/ #設置目錄的默認ACL,只影響改目錄下的新文件 [root@liang testdir]# getfacl dir1/ # file: dir1/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:zsan:rw- default:group::r-x default:mask::rwx default:other::r-x
原創文章,作者:苦澀咖啡,如若轉載,請注明出處:http://www.www58058.com/28313
寫的很好,思路清晰,命令常見用法都有詳細示例。