鸟哥的关于 suid sgid sbit 这些特殊权限 (二)

鸟哥文章很多,偶尔看到些,没觉得什么特别的。 今天看到这篇, 觉得太棒了,收藏、转贴了。

原文地址:  http://linux.vbird.org/linux_basic/0220filemanager.php#suid_sgid_sbit 


  • SUID/SGID/SBIT 權限設定

前面介紹過 SUID 與 SGID 的功能,那麼如何設定檔案使成為具有 SUID 與 SGID 的權限呢? 這就需要第六章的數字更改權限的方法了! 現在你應該已經知道數字型態更改權限的方式為『三個數字』的組合, 那麼如果在這三個數字之前再加上一個數字的話,最前面的那個數字就代表這幾個權限了!

  • 4 為 SUID
  • 2 為 SGID
  • 1 為 SBIT

假設要將一個檔案權限改為『-rwsr-xr-x』時,由於 s 在使用者權限中,所以是 SUID ,因此, 在原先的 755 之前還要加上 4 ,也就是:『 chmod 4755 filename 』來設定!此外,還有大 S 與大 T 的產生喔!參考底下的範例啦!

Tips:
注意:底下的範例只是練習而已,所以鳥哥使用同一個檔案來設定,你必須瞭解 SUID 不是用在目錄上,而 SBIT 不是用在檔案上的喔!
鸟哥的关于 suid sgid sbit 这些特殊权限 (二)_第1张图片
[root@www ~]# cd /tmp
[root@www tmp]# touch test                  <==建立一個測試用空檔
[root@www tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的權限
-rwsr-xr-x 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的權限
-rwsr-sr-x 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!
-rwxr-xr-t 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 權限
-rwSrwSrwT 1 root root 0 Sep 29 03:06 test

最後一個例子就要特別小心啦!怎麼會出現大寫的 S 與 T 呢?不都是小寫的嗎? 因為 s 與 t 都是取代 x 這個權限的,但是你有沒有發現阿,我們是下達 7666 喔!也就是說, user, group 以及 others 都沒有 x 這個可執行的標誌( 因為 666 嘛 ),所以,這個 S, T 代表的就是『空的』啦!怎麼說? SUID 是表示『該檔案在執行的時候,具有檔案擁有者的權限』,但是檔案 擁有者都無法執行了,哪裡來的權限給其他人使用?當然就是空的啦! ^_^

而除了數字法之外,妳也可以透過符號法來處理喔!其中 SUID 為 u+s ,而 SGID 為 g+s ,SBIT 則是 o+t 囉!來看看如下的範例:

# 設定權限成為 -rws--x--x 的模樣:
[root@www tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x 1 root root 0 Aug 18 23:47 test

# 承上,加上 SGID 與 SBIT 在上述的檔案權限中!
[root@www tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Aug 18 23:47 test

(二)   下面是find命令中有关于 permision的部分:


選項與參數:
3. 與檔案權限及名稱有關的參數:
   -name filename:搜尋檔案名稱為 filename 的檔案;
   -size [+-]SIZE:搜尋比 SIZE 還要大(+)或小(-)的檔案。這個 SIZE 的規格有:
                   c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
                   還要大的檔案,就是『 -size +50k 』
   -type TYPE    :搜尋檔案的類型為 TYPE 的,類型主要有:一般正規檔案 (f),
                   裝置檔案 (b, c), 目錄 (d), 連結檔 (l), socket (s), 
                   及 FIFO (p) 等屬性。
   -perm mode  :搜尋檔案權限『剛好等於』 mode 的檔案,這個 mode 為類似 chmod
                 的屬性值,舉例來說, -rwsr-xr-x 的屬性為 4755 !
   -perm -mode :搜尋檔案權限『必須要全部囊括 mode 的權限』的檔案,舉例來說,
                 我們要搜尋 -rwxr--r-- ,亦即 0744 的檔案,使用 -perm -0744,
                 當一個檔案的權限為 -rwsr-xr-x ,亦即 4755 時,也會被列出來,
                 因為 -rwsr-xr-x 的屬性已經囊括了 -rwxr--r-- 的屬性了。
   -perm +mode :搜尋檔案權限『包含任一 mode 的權限』的檔案,舉例來說,我們搜尋
                 -rwxr-xr-x ,亦即 -perm +755 時,但一個檔案屬性為 -rw-------
                 也會被列出來,因為他有 -rw.... 的屬性存在!

範例五:找出檔名為 passwd 這個檔案
[root@www ~]# find / -name passwd
# 利用這個 -name 可以搜尋檔名啊!

範例六:找出 /var 目錄下,檔案類型為 Socket 的檔名有哪些?
[root@www ~]# find /var -type s
# 這個 -type 的屬性也很有幫助喔!尤其是要找出那些怪異的檔案,
# 例如 socket 與 FIFO 檔案,可以用 find /var -type p 或 -type s 來找!

範例七:搜尋檔案當中含有 SGID 或 SUID 或 SBIT 的屬性
[root@www ~]# find / -perm +7000 
# 所謂的 7000 就是 ---s--s--t ,那麼只要含有 s 或 t 的就列出,
# 所以當然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三個權限,
# 因此,就是 +7000 ~瞭乎?

上述範例中比較有趣的就屬 -perm 這個選項啦!他的重點在找出特殊權限的檔案囉! 我們知道 SUID 與 SGID 都可以設定在二進位程式上,假設我想要找出來 /bin, /sbin 這兩個目錄下, 只要具有 SUID 或 SGID 就列出來該檔案,你可以這樣做:

[root@www ~]# find /bin /sbin -perm +6000

因為 SUID 是 4 分,SGID 2 分,總共為 6 分,因此可用 +6000 來處理這個權限! 至於 find 後面可以接多個目錄來進行搜尋!


(三)  權限與指令間的關係:

我們知道權限對於使用者帳號來說是非常重要的,因為他可以限制使用者能不能讀取/建立/刪除/修改檔案或目錄! 在這一章我們介紹了很多檔案系統的管理指令,第六章則介紹了很多檔案權限的意義。在這個小節當中, 我們就將這兩者結合起來,說明一下什麼指令在什麼樣的權限下才能夠運作吧!^_^

一、讓使用者能進入某目錄成為『可工作目錄』的基本權限為何:

  • 可使用的指令:例如 cd 等變換工作目錄的指令;
  • 目錄所需權限:使用者對這個目錄至少需要具有 x 的權限
  • 額外需求:如果使用者想要在這個目錄內利用 ls 查閱檔名,則使用者對此目錄還需要 r 的權限。

二、使用者在某個目錄內讀取一個檔案的基本權限為何?

  • 可使用的指令:例如本章談到的 cat, more, less等等
  • 目錄所需權限:使用者對這個目錄至少需要具有 x 權限;
  • 檔案所需權限:使用者對檔案至少需要具有 r 的權限才行!

三、讓使用者可以修改一個檔案的基本權限為何?

  • 可使用的指令:例如 nano 或未來要介紹的 vi 編輯器等;
  • 目錄所需權限:使用者在該檔案所在的目錄至少要有 x 權限;
  • 檔案所需權限:使用者對該檔案至少要有 r, w 權限

四、讓一個使用者可以建立一個檔案的基本權限為何?

  • 目錄所需權限:使用者在該目錄要具有 w,x 的權限,重點在 w 啦!

五、讓使用者進入某目錄並執行該目錄下的某個指令之基本權限為何?

  • 目錄所需權限:使用者在該目錄至少要有 x 的權限;
  • 檔案所需權限:使用者在該檔案至少需要有 x 的權限
例題:
讓一個使用者 vbird 能夠進行『cp /dir1/file1 /dir2』的指令時,請說明 dir1, file1, dir2 的最小所需權限為何?
答:
執行 cp 時, vbird 要『能夠讀取來源檔,並且寫入目標檔!』所以應參考上述第二點與第四點的說明! 因此各檔案/目錄的最小權限應該是:
  • dir1 :至少需要有 x 權限;
  • file1:至少需要有 r 權限;
  • dir2 :至少需要有 w, x 權限。

例題:
有一個檔案全名為 /home/student/www/index.html ,各相關檔案/目錄的權限如下:
drwxr-xr-x 23 root    root    4096 Sep 22 12:09 /
drwxr-xr-x  6 root    root    4096 Sep 29 02:21 /home
drwx------  6 student student 4096 Sep 29 02:23 /home/student
drwxr-xr-x  6 student student 4096 Sep 29 02:24 /home/student/www
-rwxr--r--  6 student student  369 Sep 29 02:27 /home/student/www/index.html
請問 vbird 這個帳號(不屬於student群組)能否讀取 index.html 這個檔案呢?
答:
雖然 www 與 index.html 是可以讓 vbird 讀取的權限,但是因為目錄結構是由根目錄一層一層讀取的, 因此 vbird 可進入 /home 但是卻不可進入 /home/student/ ,既然連進入 /home/student 都不許了, 當然就讀不到 index.html 了!所以答案是『vbird不會讀取到 index.html 的內容』喔!

那要如何修改權限呢?其實只要將 /home/student 的權限修改為最小 711 ,或者直接給予 755 就可以囉! 這可是很重要的概念喔!

(四)  權限與指令間的關係:

我們知道權限對於使用者帳號來說是非常重要的,因為他可以限制使用者能不能讀取/建立/刪除/修改檔案或目錄! 在這一章我們介紹了很多檔案系統的管理指令,第六章則介紹了很多檔案權限的意義。在這個小節當中, 我們就將這兩者結合起來,說明一下什麼指令在什麼樣的權限下才能夠運作吧!^_^

一、讓使用者能進入某目錄成為『可工作目錄』的基本權限為何:

  • 可使用的指令:例如 cd 等變換工作目錄的指令;
  • 目錄所需權限:使用者對這個目錄至少需要具有 x 的權限
  • 額外需求:如果使用者想要在這個目錄內利用 ls 查閱檔名,則使用者對此目錄還需要 r 的權限。

二、使用者在某個目錄內讀取一個檔案的基本權限為何?

  • 可使用的指令:例如本章談到的 cat, more, less等等
  • 目錄所需權限:使用者對這個目錄至少需要具有 x 權限;
  • 檔案所需權限:使用者對檔案至少需要具有 r 的權限才行!

三、讓使用者可以修改一個檔案的基本權限為何?

  • 可使用的指令:例如 nano 或未來要介紹的 vi 編輯器等;
  • 目錄所需權限:使用者在該檔案所在的目錄至少要有 x 權限;
  • 檔案所需權限:使用者對該檔案至少要有 r, w 權限

四、讓一個使用者可以建立一個檔案的基本權限為何?

  • 目錄所需權限:使用者在該目錄要具有 w,x 的權限,重點在 w 啦!

五、讓使用者進入某目錄並執行該目錄下的某個指令之基本權限為何?

  • 目錄所需權限:使用者在該目錄至少要有 x 的權限;
  • 檔案所需權限:使用者在該檔案至少需要有 x 的權限
例題:
讓一個使用者 vbird 能夠進行『cp /dir1/file1 /dir2』的指令時,請說明 dir1, file1, dir2 的最小所需權限為何?
答:
執行 cp 時, vbird 要『能夠讀取來源檔,並且寫入目標檔!』所以應參考上述第二點與第四點的說明! 因此各檔案/目錄的最小權限應該是:
  • dir1 :至少需要有 x 權限;
  • file1:至少需要有 r 權限;
  • dir2 :至少需要有 w, x 權限。

例題:
有一個檔案全名為 /home/student/www/index.html ,各相關檔案/目錄的權限如下:
drwxr-xr-x 23 root    root    4096 Sep 22 12:09 /
drwxr-xr-x  6 root    root    4096 Sep 29 02:21 /home
drwx------  6 student student 4096 Sep 29 02:23 /home/student
drwxr-xr-x  6 student student 4096 Sep 29 02:24 /home/student/www
-rwxr--r--  6 student student  369 Sep 29 02:27 /home/student/www/index.html
請問 vbird 這個帳號(不屬於student群組)能否讀取 index.html 這個檔案呢?
答:
雖然 www 與 index.html 是可以讓 vbird 讀取的權限,但是因為目錄結構是由根目錄一層一層讀取的, 因此 vbird 可進入 /home 但是卻不可進入 /home/student/ ,既然連進入 /home/student 都不許了, 當然就讀不到 index.html 了!所以答案是『vbird不會讀取到 index.html 的內容』喔!

那要如何修改權限呢?其實只要將 /home/student 的權限修改為最小 711 ,或者直接給予 755 就可以囉! 這可是很重要的概念喔!



你可能感兴趣的:(鸟哥的关于 suid sgid sbit 这些特殊权限 (二))