特殊權限
文件特殊權限
一、SUID(4)
SUID:當s這個標志出現在文件所有者的x權限上時,就被稱作SUID。
SUID的功能和限制:1、僅僅對二進制程序有效;
2、執行者對程序需要X的執行權限;
3、本權限僅僅在執行該程序的過程中有效;
4、執行者將具有該程序所有者的權限。
5、SUID僅僅可以用在二進制程序上,不能用在shell腳本上,不能設置在目錄上面
6、若原來的權限有X執行權限,則是s權限,沒有X執行權限則是S權限。
[root@localhost ~]# ll /bin/vi -rwxr-xr-x. 1 root root 907248 Jul 23 2015 /bin/vi [root@localhost ~]# chmod u+s /bin/vi [root@localhost ~]# ll /bin/vi -rwsr-xr-x. 1 root root 907248 Jul 23 2015 /bin/vi [root@localhost ~]# ll /bin/vi ----r-xr-x. 1 root root 907248 Jul 23 2015 /bin/vi [root@localhost ~]# chmod u+s /bin/vi [root@localhost ~]# ll /bin/vi ---Sr-xr-x. 1 root root 907248 Jul 23 2015 /bin/vi
二、SGID(2)
SGID:當s這個標志出現在文件所屬組的x權限上時,就被稱作SGID。
SGID的權限和功能:SGID對目錄和二進制程序都有效 ,有來所屬組有x權限是則是s,沒有x權限則是S。
1)當使用在二進制程序時
1.程序執行者來說對該程序來說,具備x權限 2.執行者在執行過程中將會收獲得該程序用戶組的支持,
2)當使用在目錄上面的時 1.用戶若對與此目錄具有rx全顯示能夠進入 2.用戶在此目錄下的有效用戶組將變成該目錄的用戶組
3.若用戶在此目錄下具有w權限,則用戶在此目錄下創建文件的用戶組與此目錄一樣。
root@localhost mail]# chmod 2770 /tmp/testdir/ [root@localhost mail]# ll /tmp/testdir/ -d drwxrws---. 2 gentoo gentoo 4096 Aug 3 09:17 /tmp/testdir/ [root@localhost mail]# su - gentoo [gentoo@localhost ~]$ cd /tmp/testdir/ [root@localhost mail]# su - redhat [redhat@localhost ~]$ cd /tmp/testdir/ [redhat@localhost testdir]$ touch 1.txt
三、SBIT(1)
SBIT只對目錄有效,對文件沒有效果。若原來的其他人有x權限則為s,沒有x權限則為S。
對目錄的效果有:
1.當用戶對此目錄具有w、x權限,即具有寫入權限時;
2.當用戶在該目錄下創建文件或者目錄,僅有自己和root才有權利修改該文件。
3.配合SGID一起使用時,在目錄所屬組的用戶只能修改該文件,不能刪除該文件。
SUID為4,SGID為2,SBIT為1.
四、umask
為什么我們創建文件或者目錄時,權限會不同了。就是因為這個umask影響的。
[root@localhost mail]# umask 0022
在linux系統上,系統默認文件是存儲數據地方,所以不需要執行權限。因此最大權限為rw-rw-rw-(666),若是目錄因為x權限影響用戶是否能進入該目錄,所以默認為rwxrwxrwx(777)。那為什么新創建的文件和目錄不是666和777呢?
這就是因為umask存在,剛剛執行umask命令可以看見當前系統的umask為0022,最前面的0指的是特殊權限,暫時不考慮。那這時候
新建文件就為:(rw-rw-rw-)-(—-w–w-)==>rw-r–r—
[root@localhost ~]# touch 1.txtr [root@localhost ~]# ll total 20 -rw-r--r--. 1 root root 0 Aug 3 09:35 1.txtr
和我們上面算的一樣。
新建目錄:(rwxrwxrwx)-(—-w–w-)==>rwxr-xr-x
[root@localhost ~]# mkdir testdir [root@localhost ~]# ll drwxr-xr-x. 2 root root 4096 Aug 3 09:36 testdir
ACL(Access Control List實現靈活的權限管理)
主要目的:是提供傳統的owner、group、other的r、w、x權限之外的具體權限。
除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限。ACL可以針對單一用戶、單一文件或目錄進行r、w、x的權限設置,對需要特殊權限的使用情況非常有幫助。
主要針對以下項目:
用戶(user):可以針對用戶來設置權限;
用戶組(group):針對用戶組來設置其權限;
默認屬性(mask):在該目錄下新建文件/目錄時設置新數據的默認權限。
CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。 CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL 功能。需手動增加:
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt
ACL設置方式:
就兩個命令:
setfacl 設置ACL權限
getfacl 查看ACL權限
setfacl
-b,--remove-all:刪除所有擴展的acl規則,基本的acl規則(所有者,群組,其他)將被保留。 -k,--remove-default:刪除缺省的acl規則。如果沒有缺省規則,將不提示。 -n,--no-mask:不要重新計算有效權限。setfacl默認會重新計算ACL mask,除非mask被明確的制定。 --mask:重新計算有效權限,即使ACL mask被明確指定。 -d,--default:設定默認的acl規則。 --restore=file:從文件恢復備份的acl規則(這些文件可由getfacl -R產生)。通過這種機制可以恢復整個目錄樹的acl規則。此參數不能和除--test以外的任何參數一同執行。 --test:測試模式,不會改變任何文件的acl規則,操作后的acl規格將被列出。 -R,--recursive:遞歸的對所有文件及目錄進行操作。
設置規則 setfacl命令可以識別以下的規則格式: [d[efault]:] [u[ser]:]uid [:perms] 指定用戶的權限,文件所有者的權限(如果uid沒有指定)。 [d[efault]:] g[roup]:gid [:perms] 指定群組的權限,文件所有群組的權限(如果gid未指定) [d[efault]:] m[ask][:] [:perms] 有效權限掩碼 [d[efault]:] o[ther] [:perms] 其他的權限
例子:
[root@localhost ~]# getfacl ./test.txt # file: test.txt # owner: root # group: admin user::rw- user:john:rw- group::rw- group:dev:r-- mask::rw- other::r--
MASK和Effective 權限
如果文件有ACL_MASK值,那么當中那個rw-代表的就是mask值而不再是group 權限了。
讓我們來看下面這個例子:
[root@localhost ~]# ls -l -rwxrw-r-- 1 root admin 0 Jul 3 23:10 test.sh [root@localhost ~]# ls -l -rwxrwxr--+ 1 root admin 0 Jul 3 23:10 test.sh
那么如果現在admin組的用戶想要執行test.sh的程序會發生什么情況呢?它會被拒絕。原因在于實際上admin組的用戶只有rw權限,這里當中顯示的rwx是ACMASK的值而不是group的權限。 所以從這里我們就可以知道,如果一個文件后面有+標記,我們都需要用getfacl來確認它的權限,以免發生混淆。 下面我們看一個例子,假如現在我們設置test.sh的mask為r,那么admin組的用戶還會有w權限嗎?
[root@localhost ~]# setfacl -m mask::r-- ./test.sh [root@localhost ~]# getfacl ./test.sh user::rwx user:john:rwx group::rw- #effective:r-- mask::r-- other::r--
Default ACL
Default ACL是指對于一個目錄進行Default ACL設置,并且在此目錄下建立的文件都將繼承此目錄的ACL。 同樣我們來做一個試驗說明,比如現在root用戶建立了一個dir目錄:
[root@localhost ~]# mkdir dir
他希望所有在此目錄下建立的文件都可以被john用戶所訪問,那么我們就應該對dir目錄設置Default ACL。
[root@localhost ~]# setfacl -d -m user:john:rw ./dir [root@localhost ~]# getfacl ./dir user::rwx group::rwx other::r-x default:user::rwx default:user:john:rwx default:group::rwx default:mask::rwx
default: other::r-x 這里我們可以看到ACL定義了default選項,john用戶擁有了default的rwx。所有沒有定義的default都將從這里copy過來,現在root用戶在dir下建立一個test.txt文件。
[root@localhost ~]# touch ./dir/test.txt [root@localhost ~]# ls -l ./dir/test.txt -rw-rw-r--+ 1 root root 0 Jul 3 23:46 ./dir/test.txt [root@localhost ~]# getfacl - ./dir/test.txt user::rw- user:john:rw- group::rwx #effective:rw- mask::rw- other::r--
這里我們看到在dir下建立的文件john用戶自動就有了rwx權限
關于umask和mask 的區別
umask 是目前用戶在新建文件或者目錄時候的權限的默認值,他影響的owner、group、other三者的普通權限。而且是用最大權限去減去umask得到文件或者目錄的權限。
mask 是ACL權限中group的最大控制權限,任何group 成員的權限不能超過 mask權限,超過的權限沒有效應。
兩者都是設置后默認生效,不影響創建的文件。都是我們進行權限管理過程中的有效方式。
原創文章,作者:fighter,如若轉載,請注明出處:http://www.www58058.com/29202
寫的很好,思路清晰,通過都特殊權限的應用場景模擬,有了自己的總結。