文件默認權限:umask
你知道當建立一個新的文件或目錄時,它的默認屬性是什麼嗎?那就與umask有關了。那麼,umask是什麼呢?基本上,umask就是指定“當前用戶在建立文件或目錄時候的屬性默認值”。那麼,如何得知或設置umask呢?它以下面的方式來指定條件:
[root@linux ~]# umask0022[root@linux ~]# umask -Su=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
我們來測試看看。
[root@linux ~]# umask0022[root@linux ~]# touch test1[root@linux ~]# mkdir test2[root@linux ~]# ll -rw-r--r-- 1 root root 0 Jul 20 00:36 test1drwxr-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。
[root@linux ~]# umask 002[root@linux ~]# touch test3[root@linux ~]# mkdir test4[root@linux ~]# ll -rw-rw-r-- 1 root root 0 Jul 20 00:41 test3drwxrwxr-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的默認屬性了,怎麼可能突然間冒出來了?所以,這個地方要特別小心