當 s 這個標誌出現在檔案擁有者的 x 許可權上時,例如剛剛提到的 /usr/bin/passwd 這個檔案的許可權狀態:『-rwsr-xr-x』,此時就被稱為 set uid,簡稱為 suid 的特殊許可權。 那麼suid的許可權對於乙個檔案的特殊功能是什麼呢?基本上suid有這樣的限制與功能:
講這麼硬的東西你可能對於 suid 還是沒有概念,沒關係,我們舉個例子來說明好了。 我們的 linux 系統中,所有帳號的密碼都記錄在 /etc/shadow 這個檔案裡面,這個檔案的許可權為:『-r-------- 1 root root』,意思是這個檔案僅有root可讀且僅有root可以強制寫入而已。 既然這個檔案僅有 root 可以修改,那麼鳥哥的 vbird 這個一般帳號使用者能否自行修改自己的密碼呢? 你可以使用你自己的帳號輸入『passwd』這個命令來看看,嘿嘿!一般使用者當然可以修改自己的密碼了!
唔!有沒有衝突啊!明明 /etc/shadow 就不能讓 vbird 這個一般帳戶去訪問的,為什麼 vbird 還能夠修改這個檔案內的密碼呢? 這就是 suid 的功能啦!藉由上述的功能說明,我們可以知道
vbird 對於 /usr/bin/passwd 這個程式來說是具有 x 許可權的,表示 vbird 能執行 passwd;
passwd 的擁有者是 root 這個帳號;
vbird 執行 passwd 的過程中,會『暫時』獲得 root 的許可權;
/etc/shadow 就可以被 vbird 所執行的 passwd 所修改。
但如果 vbird 使用 cat 去讀取 /etc/shadow 時,他能夠讀取嗎?因為 cat 不具有 suid 的許可權,所以 vbird 執行 『cat /etc/shadow』 時,是不能讀取 /etc/shadow 的。我們用一張示意圖來說明如下:
圖4.4.1、suid程式執行的過程示意圖
另外,suid 僅可用在binary program 上, 不能夠用在 shell script 上面!這是因為 shell script 只是將很多的 binary 執行檔叫進來執行而已!所以 suid 的許可權部分,還是得要看 shell script 呼叫進來的程式的配置, 而不是 shell script 本身。當然,suid 對於目錄也是無效的~這點要特別留意。
當 s 標誌在檔案擁有者的 x 專案為 suid,那 s 在群組的 x 時則稱為 set gid, sgid 羅!是這樣沒錯!^_^。 舉例來說,你可以用底下的命令來觀察到具有 sgid 許可權的檔案喔:
[root@www ~]# ls -l /usr/bin/locate與 suid 不同的是,sgid 可以針對檔案或目錄來配置!如果是對檔案來說, sgid 有如下的功能:-rwx--s--x 1 root slocate 23856 mar 15 2007 /usr/bin/locate
舉例來說,上面的 /usr/bin/locate 這個程式可以去搜尋 /var/lib/mlocate/mlocate.db 這個檔案的內容 (詳細說明會在下節講述), mlocate.db 的許可權如下:
[root@www ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db與 suid 非常的類似,若我使用 vbird 這個帳號去執行 locate 時,那 vbird 將會取得 slocate 群組的支援, 因此就能夠去讀取 mlocate.db 啦!非常有趣吧!-rwx--s--x 1 root slocate 23856 mar 15 2007 /usr/bin/locate
-rw-r----- 1 root slocate 3175776 sep 28 04:02 /var/lib/mlocate/mlocate.db
除了 binary program 之外,事實上 sgid 也能夠用在目錄上,這也是非常常見的一種用途! 當乙個目錄配置了 sgid 的許可權後,他將具有如下的功能:
sgid 對於專案開發來說是非常重要的!因為這涉及群組許可權的問題,您可以參考一下本章後續情境模擬的案例,應該就能夠對於 sgid 有一些了解的!^_^
這個 sticky bit, sbit 目前只針對目錄有效,對於檔案已經沒有效果了。 sbit 對於目錄的作用是:
換句話說:當甲這個使用者於 a 目錄是具有群組或其他人的身份,並且擁有該目錄 w 的許可權, 這表示『甲使用者對該目錄內任何人建立的目錄或檔案均可進行 "刪除/更名/搬移" 等動作。』 不過,如果將 a 目錄加上了 sbit 的許可權專案時, 則甲只能夠針對自己建立的檔案或目錄進行刪除/更名/移動等動作,而無法刪除他人的檔案。
舉例來說,我們的 /tmp 本身的許可權是『drwxrwxrwt』, 在這樣的許可權內容下,任何人都可以在 /tmp 內新增、修改檔案,但僅有該檔案/目錄建立者與 root 能夠刪除自己的目錄或檔案。這個特性也是挺重要的啊!你可以這樣做個簡單的測試:
以 root 登陸系統,並且進入 /tmp 當中;
touch test,並且更改 test 許可權成為 777 ;
以一般使用者登陸,並進入 /tmp;
嘗試刪除 test 這個檔案!
前面介紹過 suid 與 sgid 的功能,那麼如何配置檔案使成為具有 suid 與 sgid 的許可權呢?現在你應該已經知道數字型態更改許可權的方式為『三個數字』的組合, 那麼如果在這三個數字之前再加上乙個數字的話,最前面的那個數字就代表這幾個許可權了!
假設要將乙個檔案許可權改為『-rwsr-xr-x』時,由於 s 在使用者許可權中,所以是 suid ,因此, 在原先的 755 之前還要加上 4 ,也就是:『 chmod 4755 filename 』來配置!此外,還有大 s 與大 t 的產生喔!參考底下的範例啦!
tips:
注意:底下的範例只是練習而已,所以鳥哥使用同乙個檔案來配置,你必須了解 suid 不是用在目錄上,而 sbit 不是用在檔案上的喔!
[root@www ~]# cd /tmp最後乙個例子就要特別小心啦!怎麼會出現大寫的 s 與 t 呢?不都是小寫的嗎? 因為 s 與 t 都是取代 x 這個許可權的,但是你有沒有發現阿,我們是下達 7666 喔!也就是說, user, group 以及 others 都沒有 x 這個可執行的標誌( 因為 666 嘛 ),所以,這個 s, t 代表的就是『空的』啦!怎麼說? suid 是表示『該檔案在執行的時候,具有檔案擁有者的許可權』,但是檔案 擁有者都無法執行了,**來的許可權給其他人使用?當然就是空的啦! ^_^[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
而除了數字法之外,你也可以透過符號法來處理喔!其中 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
檔案特殊許可權
檔案特殊許可權 liunx學問博大精深,今天我們一起來學習一下比較有意思的三個特殊許可權,雖然我們平時不常用,但是我們必須得知道,因為他們的作用在linux作業系統的管理上起著舉足輕重的作用,我們可不能小看他們喲,我們今天的主句就是suid,sgid,sbit三個許可權的展示。一.setuid 1....
檔案特殊許可權
setuid 也叫 suid,它的特點如下 setuid 的典型應用場景是 passwd 命令。普通使用者可以用 passwd 命令修改自己的密碼,修改密碼實際上是修改 etc shadow檔案,而該檔案的許可權是 000,那麼這時就需要普通使用者暫時獲得 root 使用者的身份,來修改 etc s...
檔案特殊許可權
setuid setuid的功能 類似windows中的以管理員身份執行 只有可以執行的二進位制程式才能設定suid許可權 命令執行者要對該程式擁有x 執行 許可權 命令執行者在執行該程式時獲得該程式檔案屬主的身份 setuid許可權只在該程式執行過程中有效,也就是說身份改變只在程式執行過程中有效 ...