天天看點

Linux檔案預設權限:umask

現在,我們知道如何建立或者是改變一個目錄或檔案的屬性了,不過,你知道,當建立一個新的檔案或目錄時,它的預設屬性是什麼嗎?那就與umask有關了。那麼,umask是什麼呢?基本上,umask就是指定“目前使用者在建立檔案或目錄時候的屬性預設值”。那麼,如何得知或設定umask呢?它以下面的方式來指定條件: [[email protected] ~]# umask

0022

[[email protected] ~]# umask -S

u=rwx,g=rx,o=rx 檢視方式有兩種,一種是直接輸入umask,可以看到數字類型的權限設定分數,一種是加入 -S(Symbolic)參數,就會以符号類型的方式顯示權限。奇怪的是,怎麼umask會有4組數字啊?不是隻有3組嗎?沒錯。第一組是特殊權限用的,我們先不要理它,是以先看後面3組即可。

在預設權限的屬性上,目錄與檔案是不一樣的。由于我們不希望檔案具有可執行的權力,預設情況中,檔案是沒有可執行(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] ~]# umask

0022

[[email protected] ~]# touch test1

[[email protected] ~]# mkdir test2

[[email protected] ~]# ll 

-rw-r--r-- 1 root root    0 Jul 20 00:36 test1

drwxr-xr-x 2 root root 4096 Jul 20 00:36 test2 看見了吧?确定屬性是沒有錯的。假如要讓與使用者同使用者組的人也可以存取檔案呢?也就是說,假如dmtsai是users使用者組的人,而dmtsai做的檔案希望讓users同使用者組的人也可以存取,這也是在團隊開發計劃時常常會考慮到的權限問題。在這樣的情況下,umask自然不能取消group的w權限,也就是說,我們希望制作出來的檔案應該是 -rw-rw-r-- 的模樣,是以,umask應該是002才好(僅去掉others的w權限)。如何設定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 Jul 20 00:41 test3

drwxrwxr-x 2 root root 4096 Jul 20 00:41 test4 是以,這個umask對于檔案與目錄的預設權限是很有關系的。這個概念可以用在任何伺服器上,尤其是将來在架設檔案伺服器(file server),比如SAMBA伺服器或FTP伺服器時,都很重要。這牽涉到使用者是否能夠将檔案進一步利用的問題。不要等閑視之。

例題四:假設umask為003,請問使用該umask,建立的檔案與目錄權

限是什麼?

答:

umask為003,是以去掉的屬性為 --------wx,是以:

檔案:(-rw-rw-rw-) - (--------wx) = -rw-rw-r--

目錄:(drwxrwxrwx) - (--------wx) = drwxrwxr--

提示:有關umask與權限的計算方式中,教科書喜歡使用二進制方式來進行AND與NOT計算,不過,筆者比較喜歡使用符号方式計算,聯想比較容易。但是,有的書籍或BBS上,有人喜歡使用檔案預設屬性666與目錄預設屬性777來與umask進行相減計算。這是不好的。以例題4來看,如果使用預設屬性相加減,則檔案變成:666-003=663,即 -rw-rw--wx,這是完全不對的。想想看,原本檔案就已經去除x的預設屬性了,怎麼可能突然間冒出來了?是以,這個地方要特别小心。

在預設的情況中,root的umask會去掉比較多的屬性,root的umask預設是022,這是基于安全的考慮。一般身份使用者通常的umask為002,即保留同使用者組的寫入權力。其實,關于預設umask的設定可以參考 /etc/bashrc檔案的内容,不過,建議不要修改該檔案,可以參考第11章提到的環境參數設定檔案(~/.bashrc)的說明。

From: http://hi.baidu.com/fengyun409/item/82cd158ffe7f67c8b17154e7

繼續閱讀