日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 文件目录特殊权限设定(SUID,SGID,SBIT)

發布時間:2023/12/31 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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個用戶能夠共享某一個特定的掛載目錄,都有相應的權限進行讀寫以及能夠編輯讀寫其他用戶創建的文件

###以下創建一個組以及三個用戶,并將組作為用戶的附加組 # groupadd dbateam # useradd mysql -G dbateam # useradd oracle -G dbateam # useradd sybase -G dbateam###創建一個目錄并掛載 # mkdir -pv /dbateam # mount /dev/sdb1 /dbateam # ls -hltr / |grep dbateam drwxr-xr-x 2 root root 4.0K Aug 14 17:17 dbateam# ### Author : Leshami QQ/Weixin : 645746311 # ### Blog : http://blog.csdn.net/leshami###更改目錄的屬組為dbateam # chown -R :dbateam /dbateam/ # ls -hltr / |grep dbateam drwxr-xr-x. 2 root dbateam 6 Aug 14 17:17 dbateam###使用創建的用戶登陸并測試目錄權限,如下,無寫權限 [root@desktop ~]# su - sybase [sybase@desktop ~]$ echo "sysbase">/dbateam/sybase.01 -bash: /dbateam/sybase.01: Permission denied[root@desktop ~]# su - oracle [oracle@desktop ~]$ echo "oracle">/dbateam/oracle.01 -bash: /dbateam/oracle.01: Permission denied###對目錄授予寫入權限 [root@desktop ~]# chmod g+w /dbateam/ [root@desktop ~]# ls -hltr / |grep dbateam drwxrwxr-x. 2 root dbateam 6 Aug 14 17:17 dbateam###再次寫入文件,此時成功 [sybase@desktop ~]$ echo "sysbase">/dbateam/sybase.01 [sybase@desktop ~]$ ls -hltr /dbateam/sybase.01 -rw-rw-r--. 1 sybase sybase 8 Aug 14 17:25 /dbateam/sybase.01 ###如上,此時文件的屬主和屬組都是sybase,非附加組,也就是說其他用戶可以讀取,但是無法修改###下面為目錄設定SGID,如下,目錄屬組權限變為rws [root@desktop ~]# chmod g+s /dbateam/ [root@desktop ~]# ls -hltr / |grep dbateam drwxrwsr-x. 2 root dbateam 22 Aug 14 17:25 dbateam###再次寫入一個文件 [sybase@desktop ~]$ echo "sybase02" >/dbateam/sybase.02 [sybase@desktop ~]$ ls -hltr /dbateam/ total 8.0K -rw-rw-r--. 1 sybase sybase 8 Aug 14 17:25 sybase.01 -rw-rw-r--. 1 sybase dbateam 9 Aug 14 17:30 sybase.02 ###如上,此時文件sybase.02的所屬組變成了dbateam,而不是先前的sybase,此時其他用戶可以進行修改。###其他用戶嘗試修改 [oracle@desktop ~]$ echo "add oracle comment" >>/dbateam/sybase.02 [oracle@desktop ~]$ more /dbateam/sybase.02 sybase02 add oracle comment [oracle@desktop ~]$ ls -hltr /dbateam total 8.0K -rw-rw-r--. 1 sybase sybase 8 Aug 14 17:25 sybase.01 -rw-rw-r--. 1 sybase dbateam 28 Aug 14 17:32 sybase.02通過上面的例子得知, 當目錄的屬組具備了s權限后,該目錄下創建的文件不再以用戶自身的屬組(基本組)作為文件的屬組,而是上級目錄的屬組

3、Sticky Bit

Sticky Bit: 在一個公共目錄,每個都可以創建文件,刪除自己的文件,但不能刪除別人的文件;
chmod o+t DIR
chmod o-t DIR

###針對前面的示例,在公共目錄dbateam中,需要設定在該目錄創建文件的用戶只能刪除自身的文件,而不能刪除其他用戶創建的文件 [root@desktop ~]# chmod o+t /dbateam [root@desktop ~]# ls -hltr / |grep dbateam drwxrwsr-t. 2 root dbateam 38 Aug 14 17:30 dbateam###下面使用sybase用戶創建文件 [sybase@desktop ~]$ echo "don't touch">>/dbateam/sybase.03###下面使用oracle用戶來刪除文件 [oracle@desktop ~ ]$ cd /dbateam [oracle@desktop dbateam]$ ls -hltr -rw-rw-r--. 1 sybase sybase 8 Aug 14 17:25 sybase.01 -rw-rw-r--. 1 sybase dbateam 28 Aug 14 17:32 sybase.02 -rw-rw-r--. 1 sybase dbateam 12 Aug 15 09:08 sybase.03 [oracle@desktop dbateam]$ rm -rf sybase.03 rm: cannot remove ‘sybase.03: Operation not permitted ###此處提示沒有權限 [oracle@desktop dbateam]$ echo "Oraclefile">oracle.01 [oracle@desktop dbateam]$ rm oracle.01 ###此處可以刪除自身創建的文件

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 代表的就是『空的』啦!即文件或目錄的擁有者都無法運行了,哪里來的權限給其他人使用?當然就是空的啦! ^_^

演示 ###創建一個臨時目錄 [root@desktop ~]# mkdir -pv /tmp/project mkdir: created directory ‘/tmp/project’ [root@desktop ~]# ls -hltr /tmp |grep project drwxr-xr-x. 2 root root 6 Aug 15 09:28 project###為臨時目錄配置SUID,如下屬主位置產生了s [root@desktop ~]# chmod 4755 /tmp/project/ [root@desktop ~]# ls -hltr /tmp |grep project drwsr-xr-x. 2 root root 6 Aug 15 09:28 project###修改目錄權限為4766 [root@desktop ~]# chmod 4766 /tmp/project/ [root@desktop ~]# ls -hltr /tmp |grep project drwsrw-rw-. 2 root root 6 Aug 15 09:28 project###再次修改目錄權限,此時產生了大S和大T,因為屬組和其他組沒有x權限 [root@desktop ~]# chmod 7766 /tmp/project/ [root@desktop ~]# ls -hltr /tmp |grep project drwsrwSrwT. 2 root root 6 Aug 15 09:28 project

三、umask

umask指的就是文件或目錄的默認權限。當我們登陸到服務器之后,需要創建文件或者目錄,缺省的情況下,會為當前文件或目錄設定一個權限,那這個權限到底是什么呢?那就由umask的值來確定。我們知道,基于文件或目錄的權限包含了所屬用戶,所屬組以及其他組,因此,至少需要三個位來設定。結合上面描述的SUID,SGID,SBIT這組,也就是說需要4個位來設定umask。下面直接通過演示來理解umask的用法及作用。

當前umask0022,也就是說新創建的目錄和文件需要減掉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假定umask0003 ,所以拿掉的權限為 --------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既然umask4個位,能否在第一位也設定值呢,答案是否定的。無法設定特殊位。 [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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。