權限
權限就是用戶或者組對文件或者目錄所擁有的能力,所能執行的操作。
權限的分配:
通過ls -l file這個命令可以查看文件或者目錄的詳細信息: [root@localhost home]# ls -l /root/ total 4 -rw-------. 1 root root 2633 Jul 25 21:08 anaconda-ks.cfg drwxr-xr-x 2 root root 6 Jul 31 23:24 Desktop drwxr-xr-x 2 root root 6 Jul 31 23:24 Documents 其中rwxr-xr-x代表了不同用戶不同組的權限: 左三位:定義user(owner)的權限(屬主權限) 中三位:定義group的權限(屬組權限) 右三位:定義other權限(其他用戶權限) 進程安全上下文: 進程對文件的訪問權限應用模型: 進程的屬主(進程的發起者)與文件的屬主是否相同,如果相同則應用屬主權限。 否則,則檢查進程的屬主是否屬于穩健的屬組:如果是,則應用屬組權限。 否則,就只能應用其他的權限
權限
r: readable, 讀 w:writeable, 寫 x:excuteable,執行 對文件來說: r:可獲取文件的數據; w:可修改文件的數據;(但不能刪除文件) x:可將此文件運行為進程;(針對二進制文件或腳本) (一般而言,文件默認情況下不該有執行權限) 對目錄來說: r:可以使用ls獲取其下的所有文件列表;但不能訪問文件,不能cd進目錄,不能查看文件的詳細信息(元數據) w:可修改此目錄下的文件列表;即創建或刪除文件;配合x x:可cd至此目錄中,且可使用ls-l來獲取所有文件的詳細屬性信息;可以訪問目錄中的文件 X:針對目錄來說,在執行權限相關命令時,只給目錄加x權限,目錄下的文件不加x權限(前提是本身沒有x權限),如果文件原本有x權限,則給文件也增加x權限。
權限的組合機制
二進制 八進制 對文件沒有任何權限: --- 000 0 對文件有執行權限: --x 001 1 對文件有寫權限: -w- 010 2 對文件有有寫和執行權限:-wx 011 3 對文件有讀權限: r-- 100 4 對文件有讀和執行權限: r-x 101 5 對文件有讀和寫權限: rw- 110 6 對文件有讀寫執行權限: rwx 111 7
權限管理命令
chmod命令: chmod [option]... MODE[,MODE]...FILE... chmod [option]... OCTAL-MODE FILE... chmod [option]... --reference=RFILE FILE... 三類用戶: u:屬主 g:屬組 o:其他 a:所有 (1)chmod [option]... MODE[,MODE]...FILE... 賦權表示法:直接操作一類用戶的所有權限位rwx; u= 修改屬主的權限 g= 修改屬組的權限 [root@localhost ~]# ll fstab -rw-r--r-- 1 root root 595 Aug 2 19:38 fstab [root@localhost ~]# chmod g=rw fstab [root@localhost ~]# ls fstab fstab [root@localhost ~]# ll fstab -rw-rw-r-- 1 root root 595 Aug 2 19:38 fstab o= 修改其他的權限 a= 修改所有權限 [root@localhost ~]# chmod u=rwx,g=rw,o= fstab [root@localhost ~]# ll fstab -rwxrw---- 1 root root 595 Aug 2 19:38 fstab 可以組合使用:ug ou og 授權表示法:直接操作一類用戶的一個權限位r,w,x; u+, u- [root@localhost ~]# chmod u-x fstab [root@localhost ~]# ll fstab -rw-rw---- 1 root root 595 Aug 2 19:38 fstab g+, g- [root@localhost ~]# chmod g-wx fstab [root@localhost ~]# ll fstab -rwxr--r-- 1 root root 595 Aug 2 19:38 fstab o+, o- [root@localhost ~]# chmod o+r fstab [root@localhost ~]# ll fstab -rw-rw-r-- 1 root root 595 Aug 2 19:38 fstab a+, a- 也可以以組合使用:ug+ ug- uo+ uo- og+ og- [root@localhost ~]# chmod ug+x fstab [root@localhost ~]# ll fstab -rwxrwxr-- 1 root root 595 Aug 2 19:38 fstab chmod -x 去掉所有權限的執行權限 [root@localhost ~]# chmod -x fstab [root@localhost ~]# ll fstab -rw-r--r-- 1 root root 595 Aug 2 19:38 fstab chmod +w 只對屬主有效(只有寫權限只對屬主有效) [root@localhost ~]# chmod +w fstab [root@localhost ~]# ll fstab -rw-r--r-- 1 root root 595 Aug 2 19:38 fstab chmod +r 只對屬主屬組有效 [root@localhost ~]# chmod +r fstab [root@localhost ~]# ll fstab -rwxr-xr-x 1 root root 595 Aug 2 19:38 fstab (2)chmod [option]... OCTAL-MODE FILE...(八進制權限位) [root@localhost ~]# chmod 660 fstab [root@localhost ~]# ll fstab -rw-rw---- 1 root root 595 Aug 2 19:38 fstab 注意:此方法必須至少有三位八進制位 (3)chmod [option]... --reference=RFILE FILE...(引用型修改) [root@localhost ~]# chmod --reference=/var/log/messages fstab [root@localhost ~]# ll fstab -rw------- 1 root root 595 Aug 2 19:38 fstab [root@localhost ~]# ll /var/log/messages -rw------- 1 root root 316661 Aug 2 20:01 /var/log/messages 選項: -R, --recursive:遞歸修改:通常只有在授權表示法當中應用,在其他的三種方法中不建議使用。賦權表示法斟酌使用。 注意:用戶只能修改屬主為自己的那些文件的權限;
從屬關系管理命令
chown, chgrp(這兩個命令的用法可以參考chmod命令用法) chown命令:(屬主) chown [OPTION]... [OWNER][:[GROUP]] FILE... (中間的冒號也可以用點號表示) [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 root root 0 Aug 4 10:28 f1 [root@localhost ~]# chown mageedu.mageedu testmod/f1 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 chown [OPTION]... --reference=RFILE FILE... [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 root root 0 Aug 4 10:47 f2 [root@localhost ~]# chown --reference=testmod/f1 testmod/f2 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 選項: -R:遞歸修改 chgrp命令: chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE... 注意:只有管理員root方可修改屬主屬組 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 root root 0 Aug 4 10:52 f3 -rw-r--r-- 1 root root 0 Aug 4 10:52 f4 [root@localhost ~]# chgrp mageedu testmod/f3 [root@localhost ~]# ll testmod/f3 -rw-r--r-- 1 root mageedu 0 Aug 4 10:52 testmod/f3 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 root mageedu 0 Aug 4 10:52 f3 -rw-r--r-- 1 root root 0 Aug 4 10:52 f4 [root@localhost ~]# chgrp --reference=testmod/f3 testmod/f4 [root@localhost ~]# ll testmod total 0 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 root mageedu 0 Aug 4 10:52 f3 -rw-r--r-- 1 root mageedu 0 Aug 4 10:52 f4
umask
umask: 從目錄或文件上屏蔽掉最大權限相應的位,從而得出默認權限。 umask值 可以用來保留在創建文件權限 新建FILE 權限: 666-umask 如果所得結果某位存在執行(奇數)權限,則將其權限+1 新建DIR 權限: 777-umask 非特權用戶umask是 002 root 的umask 是022 umask: 查看umask值 [root@localhost ~]# umask 0022 umask #: 設定umask的值 [root@localhost ~]# umask 026 [root@localhost ~]# umask 0026 umask 002 umask –S 模式方式顯示 [root@localhost ~]# umask -S u=rwx,g=rx,o=x umask –p 輸出可被調用 [root@localhost ~]# umask -p umask 0022 全局設置: /etc/bashrc 用戶設置:~/.bashrc umask:文件的權限反向掩碼,遮罩碼; 創建文件時:666-umask 創建目錄時:777-umask 注意:之所以文件用666去減,表示文件默認不能擁有執行權限; 例如: umask: 023 666 - 023 = 643 如果減得的權限中有執行權限,則需要將其權限加1 目錄則沒有此項限制 umask命令: umask:查看當前umask umask MASK:設置umask 注意:此類設定僅對當前SHELL進程有效
Linux文件系統上的特殊權限
SUID, SGID, Sticky 此三種權限都是基于x權限上的。 三種常用權限:r, w, x user, group, other 前提:進程有屬主和屬組;文件有屬主和屬組 (1) 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限 (2) 啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組 (3) 進程訪問文件時的權限,取決于進程的發起者 (a) 進程的發起者,同文件的屬主:則應用文件屬主權限 (b) 進程的發起者,屬于文件屬組;則應用文件屬組權限 (c) 應用文件“其他”權限
-
可執行文件上SUID權限:
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限 啟動為進程之后,其進程的屬主為原程序文件的屬主 SUID 只對二進制可執行程序有效 SUID 設置在目錄上無意義 權限設定: chmod u+s FILE... chmod u-s FILE... SUID 用八進制是4表示。例如,改權限的時候八進制是4755 [mageedu@localhost root]$ cat /etc/shadow cat: /etc/shadow: Permission denied [mageedu@localhost root]$ exit exit [root@localhost ~]# chmod 4755 /bin/cat [root@localhost ~]# ll /bin/cat -rwsr-xr-x. 1 root root 54048 Nov 20 2015 /bin/cat [root@localhost ~]# su mageedu [mageedu@localhost root]$ cat /etc/shadow root:$6$Afpcf.Bd$w3ywPraRpplA4imtsyep02.a02lehv1amAFrg9qfSnrAO2Mj0Ca9aXpo5Bw4 rpcuser:!!:17007:::::: nfsnobody:!!:17007:::::: postfix:!!:17007:::::: sshd:!!:17007:::::: ntp:!!:17007:::::: tcpdump:!!:17007:::::: mageedu:$6$S0t9SxXkvSI0Npz5$YDVonz69YGGGkGyZDy/KesO4CI1HUBLNThcHj6PXDntQGS0Cl0SNpN6zGASuzYE.z5veu1XAzMvO4xLWbKE.n0::0:99999:7::: user1:!!:17017:0:99999:7::: tom:!!:17017:0:99999:7::: user2:!!:17017:0:99999:7::: [mageedu@localhost root]$ exit exit [root@localhost ~]# chmod 755 /bin/cat [root@localhost ~]# ll /bin/cat -rwxr-xr-x. 1 root root 54048 Nov 20 2015 /bin/cat
-
可執行文件上的SGID權限
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限 啟動為進程之后,其進程的屬主為原程序文件的屬組 權限設定: chmod g+s FILE... chmod g-s FILE... [root@localhost ~]# ll /bin/cat -rwxr-xr-x. 1 root root 54048 Nov 20 2015 /bin/cat [root@localhost ~]# ll /etc/shadow ---------- 1 root root 1220 Aug 4 14:28 /etc/shadow [root@localhost ~]# chmod 2755 /bin/cat [root@localhost ~]# su tom [tom@localhost root]$ cat /etc/shadow cat: /etc/shadow: Permission denied [tom@localhost root]$ exit exit [root@localhost ~]# chmod g+r /etc/shadow [root@localhost ~]# su tom [tom@localhost root]$ cat /etc/shadow root:$6$Afpcf.Bd$w3ywPraRpplA4imtsyep02.a02lehv1amAFrg9qfSnrAO2Mj0Ca9aXpo5Bw4L4kOAOU5rzB8asPw2siyNDNcd1:17007:0:99999:7::: bin:*:16659:0:99999:7::: daemon:*:16659:0:99999:7::: user1:!!:17017:0:99999:7::: tom:!!:17017:0:99999:7::: user2:!!:17017:0:99999:7::: [tom@localhost root]$
-
目錄上的SGID權限
SGID作用在目錄上時: 將使在該目錄中新建文件或目錄將自動繼承該目錄所屬組。 默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組 一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組 通常用于創建一個協作目錄 權限設定: chmod g+s DIR... chmod g-s DIR...SGID的八進制編號是2 [root@localhost testmod]# chmod 2777 /root/testmod/ [root@localhost testmod]# ll -d drwxrwsrwx 2 root root 42 Aug 4 10:52 . [root@localhost testmod]# groupadd test [root@localhost testmod]# gpasswd -a tom test Adding user tom to group test [root@localhost testmod]# gpasswd -a mageedu test Adding user mageedu to group test [root@localhost testmod]# chgrp test /root/testmod [tom@localhost testmod]$ touch f5 [tom@localhost testmod]$ ll f5 -rw-rw-r-- 1 tom test 0 Aug 4 18:50 f5 [tom@localhost testmod]$ echo "I am tom " >> f5 [tom@localhost testmod]$ exit exit [root@localhost testmod]# su mageedu [mageedu@localhost testmod]$ echo "I am mageedu" >> f5 [mageedu@localhost testmod]$ cat f5 I am tom I am mageedu [mageedu@localhost testmod]$
對目錄的SGID設置之后,目錄所屬組的成員之間,新建的文件,或者目錄,可以相互訪問修改。
-
Sticky位:粘滯位
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有者是用戶本身 在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件 sticky 設置在文件上無意義 權限設定: chmod o+t DIR... chmod o-t DIR... [root@localhost testmod]# ll total 4 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 tom tom 0 Aug 4 10:52 f3 -rw-r--r-- 1 tom tom 0 Aug 4 10:52 f4 -rw-rw-r-- 1 tom test 23 Aug 4 18:51 f5 [root@localhost testmod]# su mageedu [mageedu@localhost testmod]$ rm f3 rm: remove write-protected regular empty file ‘f3’? y [mageedu@localhost testmod]$ ll total 4 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:28 f1 -rw-r--r-- 1 mageedu mageedu 0 Aug 4 10:47 f2 -rw-r--r-- 1 tom tom 0 Aug 4 10:52 f4 -rw-rw-r-- 1 tom test 23 Aug 4 18:51 f5 [mageedu@localhost testmod]$ exit exit [root@localhost testmod]# chmod o+t /root/testmod [root@localhost testmod]# ll -d drwxrwsrwt 2 root test 42 Aug 4 18:54 . [root@localhost testmod]# su mageedu [mageedu@localhost testmod]$ rm f4 rm: remove write-protected regular empty file ‘f4’? y rm: cannot remove ‘f4’: Operation not permitted 6 :SUID,SGID 7 :SUID,SGID,Sticky 在去除特殊權限的時候要用: u-s g-s o-t 用其他方法的話會有去不掉的情況 SUID: user, 占據屬主的執行權限位 s: 屬主擁有x 權限 S :屬主沒有x 權限 SGID: group, 占據屬組的執行權限位 s: group 擁有x 權限 S :group 沒有x 權限 Sticky: other, 占據other 的執行權限位 t: other 擁有x 權限 T :other 沒有x
-
設定文件的特定屬性
chattr +i 不能刪除,改名,更改 [root@localhost test]# chattr +i test1 [root@localhost test]# ll total 0 -rw-r--r-- 1 root root 0 Aug 4 18:58 test1 -rw-r--r-- 1 root root 0 Aug 4 18:58 test2 [root@localhost test]# lsattr ----i----------- ./test1 ---------------- ./test2 [root@localhost test]# rm test1 rm: remove regular empty file ‘test1’? y rm: cannot remove ‘test1’: Operation not permitted [root@localhost test]# mv test1 test3 mv: cannot move ‘test1’ to ‘test3’: Operation not permitted [root@localhost test]# echo mmm >> test1 -bash: test1: Permission denied [root@localhost test]# chattr +a 只能增加文件內容(目前使用nano或者echo) [root@localhost test]# chattr +a test1 [root@localhost test]# lsattr -----a---------- ./test1 ---------------- ./test2 [root@localhost test]# echo "mmm" >> test1 [root@localhost test]# cat test1 mmm [root@localhost test]# rm test1 rm: remove regular file ‘test1’? y rm: cannot remove ‘test1’: Operation not permitted [root@localhost test]# mv test1 test3 mv: cannot move ‘test1’ to ‘test3’: Operation not permitted lsattr 顯示特定屬性 chattr +A file chattr -A file 鎖定文件的atime mtime ctime 不能被改變 chattr +i file 不能更改不能刪除不能改名字 使用lsattr查看
-
訪問控制列表
setfacl 設置acl的命令 用戶:setfacl -m u:user_name:mode file 組: setfacl -m g:group_name:mode file -x是取消設置 setfacl -x g:group_name:mode file setfacl -b file 清空所有對file設置的acl權限 getfacl 查看acl權限 ACL :Access Control List ,實現靈活的權限管理 除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限 CentOS7.0 默認創建的xfs 和ext4 文件系統有ACL 功能。 CentOS7.X 之前版本,默認手工創建的ext4文件系統無ACL功能。需手動增加: tune2fs –o acl /dev/sdb1 mount –o acl /dev/sdb1 /mnt ACL 生效 順序:所有者,自定義用戶,自定義組,其他為多用戶或者組的文件和目錄賦予訪問權限rwx ? mount -o acl /directory ? getfacl file |directory 獲取文件或者目錄的acl權限設置 [root@localhost test]# getfacl /root/testmod getfacl: Removing leading '/' from absolute path names # file: root/testmod # owner: root # group: test # flags: -st user::rwx group::rwx other::rwx ? setfacl -m u:wang:rwx file|directory 設置某個用戶對文件或者目錄的訪問權限 [root@localhost ~]# setfacl -m u:tom:x test [root@localhost ~]# su tom [tom@localhost root]$ ll test ls: cannot open directory test: Permission denied ? setfacl -Rm g:sales:rwX directory 遞歸設置組對目錄以及目錄下的文件和子目錄的訪問權限。 [root@localhost ~]# setfacl -Rm g:tom:rwX /root/test [root@localhost ~]# getfacl /root/tes # file: root/test # owner: root # group: root user::rwx user:mageedu:rwx group::r-x group:tom:rwx mask::rwx other::r-x [root@localhost ~]# ll -d test drwxrwxr-x+ 3 root root 44 Aug 4 19:18 test [root@localhost ~]# ll test total 4 -rw-rw-r--+ 1 root root 4 Aug 4 19:01 test1 -rw-rw-r--+ 1 root root 0 Aug 4 18:58 test2 drwxrwxr-x+ 2 root root 6 Aug 4 19:18 testdir [root@localhost ~]# getfacl test/test1 # file: test/test1 # owner: root # group: root user::rw- group::r-- group:tom:rw- mask::rw- other::r-- [root@localhost ~]# getfacl test/testdir # file: test/testdir # owner: root # group: root user::rwx group::r-x group:tom:rwx mask::rwx other::r-x ? setfacl -M file.acl file|directory ? setfacl -m g:salesgroup:rw file| directory ? setfacl -m d:u:wang:rx directory 默認acl權限:新建文件都有,原有文件不受影響,刪除時用-k 刪除默認權限 ? setfacl -x u:wang file |directory ? setfacl -X file.acl directory mask :所有人除了所有者和other,其他所有人的權限都不能超過mask的權限,只能比他下或者跟他相同。 ACL 文件上的group權限是mask值(自定義用戶,自定義組,擁有組的最大權限), 而非傳統的組權限 getfacl 可看到特殊權限:flags 默認ACL 權限給了x ,文件也不會繼承x 權限。 base ACL 不能刪除 setfacl -k dir 刪除默認ACL 權限 setfacl -b file1 清除所有ACL 權限 getfacl file1 | setfacl --set-file=- file2 復制file1的acl 權限給file2 mask 只影響除所有者和other 的之外的人和組的最大權限Mask 需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(Effective Permission) 用戶或組的設置必須存在于mask 權限設定 范圍內才會 生效。 setfacl -m mask::rx file --set 選項會把原有的ACL 項都刪除,用新的替代,需要注意的是一定要包含UGO 的設置,不能象-m 一樣只是添加ACL 就可以. 如: setfacl --set u::rw,u:wang:rw,g::r,o::- file1
-
備份和恢復ACL
主要的文件操作命令cp 和mv 都支持ACL ,只是cp 命令需要加上-p 參數。但是tar 等常見的備份工具是不會保留目錄和文件的ACL 信息
-
#getfacl -R /tmp/dir1 > acl.txt #setfacl -R -b /tmp/dir1
-
#setfacl -R --set-file=acl.txt /tmp/dir1
-
#getfacl -R /tmp/dir1
原創文章,作者:dxkboke,如若轉載,請注明出處:http://www.www58058.com/29256
重點突出,分類得當,標簽精確