檔案與目錄的預設許可權與隱藏許可權【轉vbird】

來源:互聯網
上載者:User

標籤:

 

一個檔案有若干個屬性, 包括讀寫運行(r, w, x)等基本許可權,及是否為目錄 (d) 與檔案 (-) 或者是連結檔 (l) 等等的屬性! 要修改屬性的方法在前面也約略提過了(chgrp, chown, chmod) ,本小節會再加強補充一下!

除了基本r, w, x許可權外,在Linux的Ext2/Ext3檔案系統下,我們還可以配置其他的系統隱藏屬性, 這部份可使用 chattr 來配置,而以 lsattr 來查看,最重要的屬性就是可以配置其不可修改的特性!讓連檔案的擁有者都不能進行修改! 這個屬性可是相當重要的,尤其是在安全機制上面 (security)!

 

檔案預設許可權:umask

OK!那麼現在我們知道如何建立或者是改變一個目錄或檔案的屬性了,不過, 你知道當你建立一個新的檔案或目錄時,他的預設許可權會是什麼嗎?呵呵!那就與 umask 這個玩意兒有關了!那麼 umask 是在搞什麼呢?基本上, umask 就是指定 『目前使用者在建立檔案或目錄時候的許可權預設值』, 那麼如何得知或配置 umask 呢?他的指定條件以底下的方式來指定:

[[email protected] ~]# umask0022             <==與一般許可權有關的是後面三個數字![[email protected] ~]# umask -Su=rwx,g=rx,o=rx

查閱的方式有兩種,一種可以直接輸入 umask ,就可以看到數字型態的許可權配置分數, 一種則是加入 -S (Symbolic) 這個選項,就會以符號類型的方式來顯示出許可權了! 奇怪的是,怎麼 umask 會有四組數字啊?不是只有三組嗎?是沒錯啦。 第一組是特殊許可權用的,我們先不要理他,所以先看後面三組即可。

在預設許可權的屬性上,目錄與檔案是不一樣的。從第六章我們知道 x 許可權對於目錄是非常重要的! 但是一般檔案的建立則不應該有啟動並執行許可權,因為一般檔案通常是用在於資料的記錄嘛!當然不需要啟動並執行許可權了。 因此,預設的情況如下:

  • 若使用者建立為『檔案』則預設『沒有可運行( x )許可權』,亦即只有 rw 這兩個項目,也就是最大為 666 分,預設許可權如下:
    -rw-rw-rw-

  • 若使用者建立為『目錄』,則由於 x 與是否可以進入此目錄有關,因此預設為所有許可權均開放,亦即為 777 分,預設許可權如下:
    drwxrwxrwx

要注意的是,umask 的分數指的是『該預設值需要減掉的許可權!』因為 r、w、x 分別是 4、2、1 分,所以羅!也就是說,當要拿掉能寫的許可權,就是輸入 2 分,而如果要拿掉能讀的許可權,也就是 4 分,那麼要拿掉讀與寫的許可權,也就是 6 分,而要拿掉運行與寫入的許可權,也就是 3 分,這樣瞭解嗎?請問你, 5 分是什嗎?呵呵! 就是讀與啟動並執行許可權啦!

如果以上面的例子來說明的話,因為 umask 為 022 ,所以 user 並沒有被拿掉任何許可權,不過 group 與 others 的許可權被拿掉了 2 (也就是 w 這個許可權),那麼當使用者:

  • 建立檔案時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
  • 建立目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

不相信嗎?我們就來測試看看吧!

[[email protected] ~]# umask0022[[email protected] ~]# touch test1[[email protected] ~]# mkdir test2[[email protected] ~]# ll -rw-r--r-- 1 root root     0 Sep 27 00:25 test1drwxr-xr-x 2 root root  4096 Sep 27 00:25 test2

 

umask的利用與重要性:專題製作

想像一個狀況,如果你跟你的同學在同一部主機裡面工作時,因為你們兩個進行中同一個專題, 老師也幫你們兩個的帳號建立好了相同群組的狀態,並且將 /home/class/ 目錄做為你們兩個人的專題目錄。 想像一下,有沒有可能你所製作的檔案你的同學無法編輯?果真如此的話,那就傷腦筋了!

這個問題很常發生啊!舉上面的案例來看就好了,你看一下 test1 的許可權是幾分? 644 呢!意思是『如果 umask 訂定為 022 ,那建立的資料只有使用者自己具有 w 的許可權, 同群組的人只有 r 這個可讀的許可權而已,並無法修改喔!』這樣要怎麼共同製作專題啊!您說是吧!

所以,當我們需要建立檔案給同群組的使用者共同編輯時,那麼 umask 的群組就不能拿掉 2 這個 w 的許可權! 所以羅, umask 就得要是 002 之類的才可以!這樣建立的檔案才能夠是 -rw-rw-r-- 的許可權模樣喔! 那麼如何配置 umask 呢?簡單的很,直接在 umask 後面輸入 002 就好了!

[[email protected] ~]# umask 002[[email protected] ~]# touch test3[[email protected] ~]# mkdir test4[[email protected] ~]# ll -rw-rw-r-- 1 root root     0 Sep 27 00:36 test3drwxrwxr-x 2 root root  4096 Sep 27 00:36 test4

所以說,這個 umask 對於建立檔案與目錄的預設許可權是很有關係的!這個概念可以用在任何伺服器上面, 尤其是未來在你架設檔案伺服器 (file server) ,舉例來說, SAMBA Server 或者是 FTP server 時, 都是很重要的觀念!這牽涉到你的使用者是否能夠將檔案進一步利用的問題喔!不要等閑視之!

在預設的情況中, root 的 umask 會拿掉比較多的屬性,root 的 umask 預設是 022 , 這是基於安全的考量啦~至於一般身份使用者,通常他們的 umask 為 002 ,亦即保留同群組的寫入權力! 其實,關於預設 umask 的配置可以參考 /etc/bashrc 這個檔案的內容,不過,不建議修改該檔案。

 

檔案隱藏屬性:

什嗎?檔案還有隱藏屬性?光是那九個許可權就快要瘋掉了,竟然還有隱藏屬性,真是要命~ 但是沒辦法,就是有檔案的隱藏屬性存在啊!不過,這些隱藏的屬性確實對於系統有很大的協助的~ 尤其是在系統安全 (Security) 上面,重要的緊呢!不過要先強調的是,底下的chattr命令只能在Ext2/Ext3的檔案系統上面生效, 其他的檔案系統可能就無法支援這個命令了。底下我們就來談一談如何配置與檢查這些隱藏的屬性吧!

chattr (設定檔隱藏屬性)
[[email protected] ~]# chattr [+-=][ASacdistu] 檔案或目錄名稱選項與參數:+   :添加某一個特殊參數,其他原本存在參數則不動。-   :移除某一個特殊參數,其他原本存在參數則不動。=   :配置一定,且僅有後面接的參數A  :當配置了 A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間 atime     將不會被修改,可避免I/O較慢的機器過度的存取磁碟。這對速度較慢的電腦有協助S  :一般檔案是非同步寫入磁碟的(原理請參考第五章sync的說明),如果加上 S 這個     屬性時,當你進行任何檔案的修改,該更動會『同步』寫入磁碟中。a  :當配置 a 之後,這個檔案將只能添加資料,而不能刪除也不能修改資料,只有root      才能配置這個屬性。 c  :這個屬性配置之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,     但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)d  :當 dump 程式被啟動並執行時候,配置 d 屬性將可使該檔案(或目錄)不會被 dump 備份i  :這個 i 可就很厲害了!他可以讓一個檔案『不能被刪除、改名、配置連結也無法     寫入或新增資料!』對於系統安全性有相當大的助益!只有 root 能配置此屬性s  :當檔案配置了 s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟     空間,所以如果誤刪了,完全無法救回來了喔!u  :與 s 相反的,當使用 u 來設定檔時,如果該檔案被刪除了,則資料內容其實還     存在磁碟中,可以使用來救援該檔案喔!注意:屬性配置常見的是 a 與 i 的配置值,而且很多配置值必須要身為 root 才能配置#請嘗試到/tmp底下建立檔案,並加入 i 的參數,嘗試刪除看看。[[email protected] ~]# cd /tmp[[email protected] tmp]# touch attrtest     <==建立一個空檔案[[email protected] tmp]# chattr +i attrtest <==給予 i 的屬性[[email protected] tmp]# rm attrtest        <==嘗試刪除看看rm: remove write-protected regular empty file `attrtest‘? yrm: cannot remove `attrtest‘: Operation not permitted  <==操作不許可# 看到了嗎?呼呼!連 root 也沒有辦法將這個檔案刪除呢!趕緊解除配置!請將該檔案的 i 屬性取消![[email protected] tmp]# chattr -i attrtest

這個命令是很重要的,尤其是在系統的資料安全上面!由於這些屬性是隱藏的性質,所以需要以 lsattr 才能看到該屬性呦!其中,個人認為最重要的當屬 +i 與 +a 這個屬性了。+i 可以讓一個檔案無法被更動,對於需要強烈的系統安全的人來說, 真是相當的重要的!裡頭還有相當多的屬性是需要 root 才能配置的呢!

此外,如果是 log file 這種的登入檔,就更需要 +a 這個可以添加,但是不能修改舊有的資料與刪除的參數了!

 

lsattr (顯示檔案隱藏屬性)
[[email protected] ~]# lsattr [-adR] 檔案或目錄選項與參數:-a :將隱藏檔的屬性也秀出來;-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;-R :連同子目錄的資料也一併列出來! [[email protected] tmp]# chattr +aij attrtest[[email protected] tmp]# lsattr attrtest----ia---j--- attrtest

使用 chattr 配置後,可以利用 lsattr 來查閱隱藏的屬性。不過, 這兩個命令在使用上必須要特別小心,否則會造成很大的困擾。例如:某天你心情好,突然將 /etc/shadow 這個重要的密碼記錄檔案給他配置成為具有 i 的屬性,那麼過了若干天之後, 你突然要新增使用者,卻一直無法新增!別懷疑,趕快去將 i 的屬性拿掉吧!

 

檔案特殊許可權: SUID, SGID, SBIT
[[email protected] ~]# ls -ld /tmp ; ls -l /usr/bin/passwddrwxrwxrwt 7 root root 4096 Sep 27 18:23 /tmp-rwsr-xr-x 1 root root 22984 Jan  7  2007 /usr/bin/passwd

不是應該只有 rwx 嗎?還有其他的特殊許可權( s 跟 t )啊?啊.....頭又開始昏了~ @[email protected] 因為 s 與 t 這兩個許可權的意義與帳戶和進程較為相關!底下的說明先看看就好,如果看不懂也沒有關係, Crowdsourced Security Testing道s放在哪裡稱為SUID/SGID以及如何配置即可!

 

Set UID

當 s 這個標誌出現在檔案擁有者的 x 許可權上時,例如剛剛提到的 /usr/bin/passwd 這個檔案的許可權狀態:『-rwsr-xr-x』,此時就被稱為 Set UID,簡稱為 SUID 的特殊許可權。 那麼SUID的許可權對於一個檔案的特殊功能是什麼呢?基本上SUID有這樣的限制與功能:

  • SUID 許可權僅對二進位程式(binary program)有效;
  • 運行者對於該程式需要具有 x 的可運行許可權;
  • 本許可權僅在運行該程式的過程中有效 (run-time);
  • 運行者將具有該程式擁有者 (owner) 的許可權。

講這麼硬的東西你可能對於 SUID 還是沒有概念,沒關係,我們舉個例子來說明好了。 我們的 Linux 系統中,所有帳號的密碼都記錄在 /etc/shadow 這個檔案裡面,這個檔案的許可權為:『-r-------- 1 root root』,意思是這個檔案僅有root可讀且僅有root可以強制寫入而已。 既然這個檔案僅有 root 可以修改,那麼鳥哥的 vbird 這個一般帳號使用者能否自行修改自己的密碼呢? 你可以使用你自己的帳號輸入『passwd』這個命令來看看,嘿嘿!一般使用者當然可以修改自己的密碼了!

唔!有沒有衝突啊!明明 /etc/shadow 就不能讓 vbird 這個一般帳戶去存取的,為什麼 vbird 還能夠修改這個檔案內的密碼呢? 這就是 SUID 的功能啦!藉由上述的功能說明,我們可以知道

  1. vbird 對於 /usr/bin/passwd 這個程式來說是具有 x 許可權的,表示 vbird 能運行 passwd;
  2. passwd 的擁有者是 root 這個帳號;
  3. vbird 運行 passwd 的過程中,會『暫時』獲得 root 的許可權;
  4. /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 對於目錄也是無效的~這點要特別留意。

 

Set GID

當 s 標誌在檔案擁有者的 x 項目為 SUID,那 s 在群組的 x 時則稱為 Set GID, SGID 羅!是這樣沒錯!^_^。 舉例來說,你可以用底下的命令來觀察到具有 SGID 許可權的檔案喔:

[[email protected] ~]# ls -l /usr/bin/locate-rwx--s--x 1 root slocate 23856 Mar 15  2007 /usr/bin/locate

 

SGID 對二進位程式有用;與 SUID 不同的是,SGID 可以針對檔案或目錄來配置!如果是對檔案來說, SGID 有如下的功能:

  • 程式運行者對於該程式來說,需具備 x 的許可權;
  • 運行者在啟動並執行過程中將會獲得該程式群組的支援!

舉例來說,上面的 /usr/bin/locate 這個程式可以去搜尋 /var/lib/mlocate/mlocate.db 這個檔案的內容 (詳細說明會在下節講述), mlocate.db 的許可權如下:

[[email protected] ~]# ll /usr/bin/locate /var/lib/mlocate/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 的許可權後,他將具有如下的功能:與 SUID 非常的類似,若我使用 vbird 這個帳號去運行 locate 時,那 vbird 將會取得 slocate 群組的支援, 因此就能夠去讀取 mlocate.db 啦!非常有趣吧!

  • 使用者若對於此目錄具有 r 與 x 的許可權時,該使用者能夠進入此目錄;
  • 使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
  • 用途:若使用者在此目錄下具有 w 的許可權(可以建立檔案),則使用者所建立的新檔案,該新檔案的群組與此目錄的群組相同。

SGID 對於專案開發來說是非常重要的!因為這涉及群組許可權的問題。

 

Sticky Bit

這個 Sticky Bit, SBIT 目前只針對目錄有效,對於檔案已經沒有效果了。 SBIT 對於目錄的作用是:

  • 當使用者對於此目錄具有 w, x 許可權,亦即具有寫入的許可權時;
  • 當使用者在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該檔案

換句話說:當甲這個使用者於 A 目錄是具有群組或其他人的身份,並且擁有該目錄 w 的許可權, 這表示『甲使用者對該目錄內任何人建立的目錄或檔案均可進行 "刪除/更名/搬移" 等動作。』 不過,如果將 A 目錄加上了 SBIT 的許可權項目時, 則甲只能夠針對自己建立的檔案或目錄進行刪除/更名/移動等動作,而無法刪除他人的檔案。

舉例來說,我們的 /tmp 本身的許可權是『drwxrwxrwt』, 在這樣的許可權內容下,任何人都可以在 /tmp 內新增、修改檔案,但僅有該檔案/目錄建立者與 root 能夠刪除自己的目錄或檔案。這個特性也是挺重要的啊!你可以這樣做個簡單的測試:

  1. 以 root 登陸系統,並且進入 /tmp 當中;
  2. touch test,並且更改 test 許可權成為 777 ;
  3. 以一般使用者登陸,並進入 /tmp;
  4. 嘗試刪除 test 這個檔案!

 

SUID/SGID/SBIT 許可權配置

 現在你應該已經知道數字型態更改許可權的方式為『三個數字』的組合, 那麼如果在這三個數字之前再加上一個數位話,最前面的那個數字就代表這幾個許可權了!

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

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

[[email protected] ~]# cd /tmp[[email protected] tmp]# touch test                  <==建立一個測試用空檔[[email protected] tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的許可權-rwsr-xr-x 1 root root 0 Sep 29 03:06 test[[email protected] tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的許可權-rwsr-sr-x 1 root root 0 Sep 29 03:06 test[[email protected] tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!-rwxr-xr-t 1 root root 0 Sep 29 03:06 test[[email protected] 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 的模樣:[[email protected] tmp]# chmod u=rwxs,go=x test; ls -l test-rws--x--x 1 root root 0 Aug 18 23:47 test# 承上,加上 SGID 與 SBIT 在上述的檔案許可權中![[email protected] tmp]# chmod g+s,o+t test; ls -l test-rws--s--t 1 root root 0 Aug 18 23:47 test

 

觀察檔案類型:file

如果你想要知道某個檔案的基本資料,例如是屬於 ASCII 或者是 data 檔案,或者是 binary , 且其中有沒有使用到動態函式庫 (share library) 等等的資訊,就可以利用 file 這個命令來檢閱喔! 舉例來說:

[[email protected] ~]# file ~/.bashrc/root/.bashrc: ASCII text  <==告訴我們是 ASCII 的純文字檔啊![[email protected] ~]# file /usr/bin/passwd/usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped# 運行檔的資料可就多的不得了!包括這個檔案的 suid 許可權、相容於 Intel 386# 等級的硬體平台、使用的是 Linux 核心 2.6.9 的動態函式庫連結等等。[[email protected] ~]# file /var/lib/mlocate/mlocate.db/var/lib/mlocate/mlocate.db: data  <== 這是 data 檔案!

透過這個命令,我們可以簡單的先判斷這個檔案的格式為何喔!

檔案與目錄的預設許可權與隱藏許可權【轉vbird】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.