Linux 文件目录特殊权限设定(SUID,SGID,SBIT)
Linux文件及目錄的權限設定,除了我們孰知的讀寫執行(rwx)之外,還有一些特殊的權限設定用來滿足特定的目錄。這些特殊權限的設定主要是SUID,SGID以及SBIT。這幾個值并非一個單獨的rwx,而是在文件或目錄上的x權限上做動作,來達到實現文件或目錄特殊權限的目的。本文主要描述這3個特殊權限的用法以及umask。
一、文件類型及權限
1、文件類型
如下示例文件,
[root@desktop ~]# ###演示環境 [root@desktop ~]# more /etc/redhat-release Red Hat Enterprise Linux Server release 7.2 (Maipo)crw--w----. 1 root tty 4, 1 Jul 7 09:12 /dev/tty1 brw-rw----. 1 root disk 8, 1 Jul 7 09:11 /dev/sda1 lrwxrwxrwx. 1 root root 3 Oct 14 2016 ex -> vim srwx------. 1 root root 0 Mar 10 16:08 mongodb-27001.sock drwx------. 2 root root 4.0K Oct 14 2016 keyring-GLsfkK -rw-r--r--. 1 root root 49K Oct 14 2016 install.log通過上面列出的文件描述,我們將最左邊部分按9-0進行表示,如下
9876543210
則相應的表示位的含義如下:
第9位
?? 表示文件類型,可以為p、d、l、s、c、b和-:
?? ?? p表示命名管道文件
?? ?? d表示目錄文件
?? ?? l表示符號連接文件
?? ?? -表示普通文件
?? ?? s表示socket文件
?? ?? c表示字符設備文件
?? ?? b表示塊設備文件
第8-6位
?? 表示當前文件的屬主(所有者)
第5-3位
?? 表示文件的屬組(用戶組)
第2-0位
?? 表示其它組所擁有的權限
2、權限
權限的表現形式為rwx:
?? r表示可讀,可以讀出文件的內容
?? w表示可寫,可以修改文件的內容
?? x表示可執行,可運行這個程序,對于目錄為可以進入該目錄
二、SUID,SGID,Sticky Bit
特殊權限指的是針對第一點描述的rwx權限之外的權限,即x執行權限可以發生變化為s或者S等。
由于文件存在屬主與屬組,因此也就有屬主與屬組的s或者S權限。
1、SUID
SUID 是 Set User ID的縮寫
SUID: 當運行某程序時,相應進程的屬主是程序文件自身的屬主,而不是啟動者;
??chmod u+s FILE
??chmod u-s FILE
??如果FILE本身原來就有執行權限,則SUID顯示為s;否則顯示S;
??簡言之,當我們啟動某個二進制程序,該程序調用了其他非對象,此對象非啟動者所有,也不具備相應權限時,此時無法成功執行。但是當我們為這個二進制程序賦予了SUID,則被調用的這個對象會被臨時賦予該對象的所有者權限
下面直接演用鳥哥的示例來描述這個問題
# ls -hltr /usr/bin/passwd /etc/shadow
-rwsr-xr-x. 1 root root 31K Feb 22 2012 /usr/bin/passwd ###權限為rws
———-. 1 root root 950 Aug 25 2016 /etc/shadow
密碼文件/etc/shadow只有root用戶擁有修改權限,那其他用戶是如何修改自身密碼的呢,那就是由于命令passwd擁有SUID權限
??a、vbird 對於 /usr/bin/passwd 這個程序來說是具有 x 權限的,表示 vbird 能運行 passwd;
??b、passwd 的擁有者是 root 這個帳號;
??c、vbird 運行 passwd 的過程中,會『暫時』獲得 root 的權限;
??d、/etc/shadow 就可以被 vbird 所運行的 passwd 所修改。
但如果 vbird 使用 cat 去讀取 /etc/shadow 時,他能夠讀取嗎?因為 cat 不具有 SUID 的權限,所以 vbird 運行 『cat /etc/shadow』 時,是不能讀取 /etc/shadow 的。
如下示意圖來說明:
對于上面的情形,假定希望vbird用戶能夠通過cat訪問/etc/shadow,腫么實現呢,那就是賦予s權限啊
# ls -hltr /bin/cat -rwxr-xr-x. 1 root root 48K Nov 22 2013 /bin/cat # chmod u+s /bin/cat # ls -hltr /bin/cat -rwsr-xr-x. 1 root root 48K Nov 22 2013 /bin/cat ###屬主的x權限變成了s權限 $ cat /etc/shadow | head -3 root:$6$3KDwLJ7Cb.J2.ZMcmhHqThe/YvQ1tQtQOZX5gfbyOg/N.jl7OBzV.ZAzVzA/:17163:0:99999:7::: bin:*:15980:0:99999:7::: daemon:*:15980:0:99999:7:::STID使用總結
??SUID 權限僅對二進制程序(binary program)有效;
??運行者對于該程序需要具有 x 的可運行權限;
??本權限僅在運行該程序的過程中有效 (run-time);
??運行者將具有該程序擁有者 (owner) 的權限。
STID使用示例:添加非oracle用戶到dba, oinstall組
2、SGID
SGID 是 Set Group ID的縮寫,SUID是在文件的所有者級別,而SGID則是在用戶組級別生效,即
??SGID 對二進制程序有用;
??程序運行者對于該程序來說,需具備 x 的權限;
??運行者在運行的過程中將會獲得該程序用戶組權限
SGID: 運行某程序時,相應進程的屬組是程序文件自身的屬組,而不是啟動者所屬的基本組;
??chmod g+s FILE
??chmod g-s FILE
對于具有SGID的目錄,除了可執行的二進制程序外,支持一些群組特性。
假定當前服務器存在用戶組 dbateam以及用戶oracle mysql sybase
現在希望這個3個用戶能夠共享某一個特定的掛載目錄,都有相應的權限進行讀寫以及能夠編輯讀寫其他用戶創建的文件
3、Sticky Bit
Sticky Bit: 在一個公共目錄,每個都可以創建文件,刪除自己的文件,但不能刪除別人的文件;
chmod o+t DIR
chmod o-t DIR
4、基于數字方法權限設定
對于文件目錄的權限設定,可以基于數字的方法設定,如以下:
r:4
w:2
x:1
由于有了特殊權限位,因此在rwx的基礎之上,又增加了一個新的位,即除了前面描述的方法之外,基于數字方法設定也可以。
SUID:4
SGID:2
SBIT:1
假設要將一個文件權限改為『-rwsr-xr-x』時,由于s在使用者權限中,所以是 SUID ,因此, 在原先的 755 之前還要加上 4 ,也就是:『 chmod 4755 filename 』來配置!
此外,還有大 S 與大 T 的產生喔!大 S 與大 T 是由于被設定的文件或目錄上的user, group 以及 others 都沒有 x 這個可運行的標志( 因為 666 嘛 ),所以,這個 S, T 代表的就是『空的』啦!即文件或目錄的擁有者都無法運行了,哪里來的權限給其他人使用?當然就是空的啦! ^_^
三、umask
umask指的就是文件或目錄的默認權限。當我們登陸到服務器之后,需要創建文件或者目錄,缺省的情況下,會為當前文件或目錄設定一個權限,那這個權限到底是什么呢?那就由umask的值來確定。我們知道,基于文件或目錄的權限包含了所屬用戶,所屬組以及其他組,因此,至少需要三個位來設定。結合上面描述的SUID,SGID,SBIT這組,也就是說需要4個位來設定umask。下面直接通過演示來理解umask的用法及作用。
當前umask為0022,也就是說新創建的目錄和文件需要減掉0022這些權限 即需要減掉-----w--w-,因此新創建的目錄和文件的權限應當如下:文件: (-rw-rw-rw-) - (-----w--w-) = -rw-r--r-- 目錄: (drwxrwxrwx) - (-----w--w-) = drwxr-xr-x###演示 [root@desktop ~]# umask 0022 [root@desktop ~]# echo "test mask">/tmp/project/umask.01 [root@desktop ~]# ls -hltr /tmp/project/ total 4.0K -rw-r--r--. 1 root root 10 Aug 15 09:43 umask.01假定umask 為 0003 ,所以拿掉的權限為 --------wx,因此: 文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r-- 目錄: (drwxrwxrwx) - (--------wx) = drwxrwxr--[root@desktop ~]# umask 0003 [root@desktop ~]# umask 0003 [root@desktop ~]# mkdir -pv /tmp/temp01 mkdir: created directory ‘/tmp/temp01’ [root@desktop ~]# ls -hltr /tmp |grep temp drwxrwxr--. 2 root root 6 Aug 15 09:55 temp01既然umask有4個位,能否在第一位也設定值呢,答案是否定的。無法設定特殊位。 [root@desktop ~]# umask 4003 -bash: umask: 4003: octal number out of range [root@desktop ~]# umask 1003 -bash: umask: 1003: octal number out of range [root@desktop ~]# umask 7003 -bash: umask: 7003: octal number out of range總結
以上是生活随笔為你收集整理的Linux 文件目录特殊权限设定(SUID,SGID,SBIT)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中芯国际发公告:高永岗辞任公司董事长 刘
- 下一篇: 贝壳找房app如何提现(北京二手房出售买