1. 程式人生 > >Linux 檔案目錄特殊許可權設定(SUID,SGID,SBIT)

Linux 檔案目錄特殊許可權設定(SUID,SGID,SBIT)

Linux檔案及目錄的許可權設定,除了我們孰知的讀寫執行(rwx)之外,還有一些特殊的許可權設定用來滿足特定的目錄。這些特殊許可權的設定主要是SUID,SGID以及SBIT。這幾個值並非一個單獨的rwx,而是在檔案或目錄上的x許可權上做動作,來達到實現檔案或目錄特殊許可權的目的。本文主要描述這3個特殊許可權的用法以及umask。

一、檔案型別及許可權

1、檔案型別

如下示例檔案,

[[email protected] ~]# ###演示環境
[[email protected] ~]# 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) 的許可權。

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

DBA牛鵬社(SQL/NOSQL/LINUX)

這裡寫圖片描述

相關推薦

Linux 檔案目錄特殊許可權設定(SUIDSGIDSBIT)

Linux檔案及目錄的許可權設定,除了我們孰知的讀寫執行(rwx)之外,還有一些特殊的許可權設定用來滿足特定的目錄。這些特殊許可權的設定主要是SUID,SGID以及SBIT。這幾個值並非一個單獨的rwx,而是在檔案或目錄上的x許可權上做動作,來達到實現檔案或目錄

Linux檔案特殊許可權SUIDSGIDSBIT

SUID 具有該許可權的檔案的所有者的x標誌會被s標誌取代。 該許可權僅對二進位制可執行檔案有效。 執行該檔案的使用者(當然這個使用者必須具有對該檔案的可執行許可權)將會暫時獲得該檔案所有者的許可權,這種效果僅在執行該檔案的過程中有效。 例項: 當普通使用者使用命令p

Linux檔案特殊許可權位SUIDSGID作用及程式設計設定/讀取

起 最近在搞android裡面的su(不是為了做root提權,那是別的部門乾的事)。學習了一些新東西,挺有意思。 以下文章假定你的android裝置已經被root了,有獲取root許可權的能力,或者在Linux環境下。 SU這個程式嘛,說簡單一點就是讓你的

java程式設計師菜鳥進階(十七)linux基礎入門(五)linux檔案/目錄許可權和歸屬管理

在linux中的每一個檔案或目錄都包含有訪問許可權,這些訪問許可權決定了誰能訪問和如何訪問這些檔案和目錄。相應的每一個檔案和目錄都有所屬的屬主和屬組,合理的設定檔案和目錄的屬組和屬主在檔案/目錄管理中佔據著很重要的地位,所以,今天我就和大家一起來看一下有關檔案/目錄的許可權和歸屬的相關設定

linux檔案目錄預設許可權

1,檔案的預設許可權是沒有x的,即檔案的最大預設許可權為666(-rw-rw-rw) 2,由於進入目錄和目錄的x許可權有關,故目錄的最大預設許可權為777(drwxrwxrwx) 檢視預設許可權需要使用umask命令: [[email protected] ~]

這三種特殊許可權suidsgid、sticky)

先看看這兩個檔案的許可權: [[email protected] ~]# ls -ld /usr/bin/passwd  /tmp drwxrwxrwt 4 root root  4096 Jun  2 17:33 /tmp -rwsr-xr-x 1 root root 22984 Jan  7 

Linux檔案特殊許可權SUIDSGIDSBIT

SUID:Set UID (s) 當s這個標誌出現在檔案的擁有者(owner)的x許可權上時,此時稱為Set UID,簡稱為SUID的特殊許可權。例如:/usr/bin/password [[email protected] ~]# ls -l /usr/bin

使用 ACL 設定使用者訪問指定檔案/目錄許可權 | Linux 中國

ACL 表示訪問控制列表(Access Control List,ACL),它為檔案系統提供了附

Linux檔案目錄許可權、隱藏屬性、特殊許可權

一、 Linux檔案及目錄許可權概念 1.1 檢視目錄或者檔案的許可權   “ls -al”命令可以檢視 1.2 目錄及檔案許可權分析 從上面的圖中可以看到,目錄或者檔案的屬性欄位為:   - - - - - - - - - - 從左至

Linux學習總結:特殊許可權SUIDSGIDSBIT

目錄 一、SUID 二、SGID 三、SBIT Linux中除了rwx許可權外,另外還有三種特殊許可權:SUID、SGID、SBIT 假如本來在該位上有x, 則這些特別標誌 (SUID, SGID,SBIT)顯示為小寫字母 (s,s,t)。否則顯示為大寫字母 (S,S,T) 。在

linux目錄許可權檢視與修改以及檔案目錄訪問許可權設定

檢視檔案許可權的語句:   在終端輸入: ls -l xxx.xxx (xxx.xxx是檔名)   那麼就會出現相類似的資訊,主要都是這些: -rw-rw-r--   一共有10位數   其中: 最前面那個 - 代表的是型別   中間那三個 rw- 代表的是所有者(user

Linux使用筆記: 設定Samba伺服器中新建檔案/目錄許可權

From: http://easwy.com/blog/archives/set-file-directory-attribute-for-linux-samba/ 通過Samba伺服器實現windows和Linux之間的檔案共享,相信是絕大多數人的選擇。通常我們都會使

Linux特殊許可權設定及ACL許可權

SUID、SGID和sticky-bit 檔案特殊許可權 特殊許可權 說明 SUID 當一個設定了SUID的檔案被執行時,該檔案將以其所有者的身份執行,而不是執行者的許可權。

.Neter玩轉Linux系列之二:Linux下的檔案目錄檔案目錄許可權

基礎篇 實戰篇 一、Linux下的檔案目錄 簡介:linux的檔案系統是採用級層式的樹狀目錄結構,在此 結構中的最上層是根目錄“/”,然後在此目錄下再建立 其他的目錄。深刻理解linux檔案目錄是非常重要的,如下圖所示: 將來你用哪個使用者登入,你就會在那個使用

Linux學習總結:特殊權限SUIDSGIDSBIT

sgid 進行 註意 權力 添加 linux中 動作 限制 字母 目錄 一、SUID 二、SGID 三、SBIT Linux中除了rwx權限外,另外還有三種特殊權限:SUID、SGID、SBIT 假如本來在該位上有x,?則這些特別標誌 (SUID,?SGID,SBIT)顯示

Linux特殊許可權SUID/SGID/SBIT

特殊許可權的介紹Set UID當s這個標誌出現在檔案所有者的x許可權上時,如/usr/bin/passwd這個檔案的許可權狀態:“-rwsr-xr-x.”,此時就被稱為Set UID,簡稱為SUID。那麼這個特殊許可權的特殊性的作用是什麼呢?1、SUID許可權僅對二進位制程式

Centos 檔案目錄訪問許可權設定

一、檔案和目錄許可權概述 在linux中的每一個檔案或目錄都包含有訪問許可權,這些訪問許可權決定了誰能訪問和如何訪問這些檔案和目錄。 通過設定許可權可以從以下三種訪問方式限制訪問許可權:只允許使用者自己訪問;允許一個預先指定的使用者組中的使用者訪問;允許系統中的任何

Linux--檔案/目錄 許可權及修改

首先所有許可權對於三類使用者分別設定: User(所有者) / Group(組群) / Others(其他)。 許可權也是有三種:Read / Write / eXecute,這三種許可權對於文件和目錄有不同的意義。 1. 對於文件: Read:可以檢視文件的內容 Wri

Linux 文件特殊權限 SUID SGID SBIT

我們 swd 讀取 root權限 sgid 能夠 可用 配置文件 name   文件除了常規的權限r, w, x 還有一些特殊的權限,s與t權限,具體的用處如下   1 SetUID   當s 這個標誌出現在文件所有者的x權限上時, 例如/usr/bin/passw

如何查找Linux中一些特殊數據類型定義比如pid_t和uid_t(轉)

分享 文件 技術分享 定義 log 相關 uid linux源碼 pid 1. 查看man手冊,找到pid_t,可以通過getpid函數來看 2. 打開sys/types.h 3. 打開bits/types.h 4.