一、特殊權限
實際上權限位一共有四組,共12位,而使用umask命令查看反掩碼對應的也是12位,其中前三位就是特殊掩碼對應的位。
三種特殊權限分別是:SUID、SGID、SBIT
二、SUID
程序文件擁有該權限之後,運行某程序的時候,相應進程的屬主是程序文件自身的屬主,而不再是啓動者。
chmod u+s FILENAME :給文件加上SUID權限 chmod u-s :講文件的SUID權限取消
舉例說明SUID權限的作用:
passwd命令文件本身就帶有SUID權限:
普通用戶和管理員用戶都能狗使用該命令修改密碼,所謂的修改密碼實際上只是修改了/etc/shadow文件的內容罷了,查看/etc/shadow文件的權限:
可以看到只有管理員纔有權限修改該文件的內容,普通用戶沒有權限修改該文件的內容,那麼普通用戶是怎麼使用passwd命令修改該配置文件的呢?
正是因爲/usr/bin/passwd文件擁有SUID權限才使得普通用戶能夠修改/etc/passwd文件,當passwd命令運行時,相應的進程的屬主不在是啓動者,而是/usr/bin/passwd的屬主,即root,而/etc/shadow文件的屬主也是root,而且擁有寫權限,所以passwd命令的進程才能夠有權限修改/etc/shadow文件,這樣普通用戶也就能夠成功修改/etc/shadow文件了。
三、SGID
當程序文件擁有該權限之後,運行某程序的時候,相應進程的數組是程序文件自身的屬組,而不是啓動者所屬的基本組。
chmod g+s FILENAME :給文件加上SGID權限 chmod g-s FILENAME :將文件的SGID權限取消
實際上SGID權限最經常加到目錄上,當該權限加到目錄上之後,所有用戶在該目錄中創建的文件的屬組將不再是啓動者,而是目錄的屬組。
root@kdyzm:/tmp/test# chmod g+s . root@kdyzm:/tmp/test# chmod o+w . root@kdyzm:/tmp/test# ll drwxr-srwx 2 root root 4096 2月 10 20:36 ./ drwxrwxrwt 13 root root 4096 2月 10 20:35 ../ root@kdyzm:/tmp/test# touch a.root root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ touch b.user1 user1@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# su user2 user2@kdyzm:/tmp/test$ touch a.user2 user2@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# ll total 8 drwxr-srwx 2 root root 4096 2月 10 20:39 ./ drwxrwxrwt 13 root root 4096 2月 10 20:35 ../ -rw-r--r-- 1 root root 0 2月 10 20:36 a.root -rw-rw-r-- 1 user1 root 0 2月 10 20:38 a.user1 -rw-rw-r-- 1 user2 root 0 2月 10 20:39 a.user2 root@kdyzm:/tmp/test#
可見三個用戶創建的三個文件的屬組都是目錄的屬組root,這樣的好處就是如果所有用戶的屬組都是相同的,那麼可以只修改該屬組的權限就能夠批量修改所有用戶對該目錄及子目錄的訪問權限,這在實際 項目開發中比較有用。
四、SBIT
當一個公共目錄擁有該權限之後,每個用戶都能夠在該目錄中創建和刪除自己的文件,但是不能夠刪除別人的文件。
chmod o+t FILENAME :給目錄加上SBIT權限 chmod o-t FILENAME :將目錄的SBIT權限刪掉
實際上該功能是很常見的,比如/tmp目錄就擁有SBIT權限,這樣所有用戶都能夠在該目錄中添加和刪除自己的文件,但是卻不能刪除別人的文件。
1.首先使用root用戶創建/tmp/test目錄並賦予寫權限
root@kdyzm:/tmp# mkdir test root@kdyzm:/tmp# chmod o+w ./test/
2.切換用戶並分別創建文件
root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ touch a.user1 user1@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# su user2 user2@kdyzm:/tmp/test$ touch a.user2 user2@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# ll total 8 drwxr-xrwx 2 root root 4096 2月 10 20:59 ./ drwxrwxrwt 13 root root 4096 2月 10 20:59 ../ -rw-rw-r-- 1 user1 user1 0 2月 10 20:59 a.user1 -rw-rw-r-- 1 user2 user2 0 2月 10 20:59 a.user2
3.嘗試使用user1刪除user2創建的文件
root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ rm a.user2 rm: remove write-protected regular empty file ‘a.user2’? y user1@kdyzm:/tmp/test$ ls a.user1 user1@kdyzm:/tmp/test$
結果發現能夠刪除掉,但是如果給目錄加上SBIT權限之後就不一樣了,user1將不能刪除user2的文件:
root@kdyzm:/tmp/test# chmod o+t /tmp/test/ root@kdyzm:/tmp/test# ll total 8 drwxr-xrwt 2 root root 4096 2月 10 20:59 ./ drwxrwxrwt 13 root root 4096 2月 10 21:06 ../ -rw-rw-r-- 1 user1 user1 0 2月 10 20:59 a.user1 root@kdyzm:/tmp/test# rm * root@kdyzm:/tmp/test# ll total 8 drwxr-xrwt 2 root root 4096 2月 10 21:06 ./ drwxrwxrwt 13 root root 4096 2月 10 21:06 ../ root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ touch a.user1 user1@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# su user2 user2@kdyzm:/tmp/test$ touch a.user2 user2@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ rm a.user a.user1 a.user2 user1@kdyzm:/tmp/test$ rm a.user2 rm: remove write-protected regular empty file ‘a.user2’? y rm: cannot remove ‘a.user2’: Operation not permitted user1@kdyzm:/tmp/test$