umask值用於設置用戶在創建文件時的默認權限,當我們在系統中創建目錄或文件時,目錄或文件所具有的默認權限就是由umask值決定的。
對於root用戶,系統默認的umask值是0022;對於普通用戶,系統默認的umask值是0002。執行umask命令可以查看當前用戶的umask值。
1 [frank@frankserver ~]# umask 2 3 0022
umask值一共有4組數字,其中第1組數字用於定義特殊權限,我們一般不予考慮,與一般權限有關的是后3組數字。
默認情況下,對於目錄,用戶所能擁有的最大權限是777;對於文件,用戶所能擁有的最大權限是目錄的最大權限去掉執行權限,即666。因為x執行權限對於目錄是必須的,沒有執行權限就無法進入目錄,而對於文件則不必默認賦予x執行權限。
對於root用戶,他的umask值是022。當root用戶創建目錄時,默認的權限就是用最大權限777去掉相應位置的umask值權限,即對於所有者不必去掉任何權限,對於所屬組要去掉w權限,對於其他用戶也要去掉w權限,所以目錄的默認權限就是755;當root用戶創建文件時,默認的權限則是用最大權限666去掉相應位置的umask值,即文件的默認權限是644。
可以通過下面的測試操作來了解umask值。
1 [frank@frankserver ~]# mkdir directory1 #創建測試目錄 2 3 [frank@frankserver ~]# ll -d directory1 #目錄的默認權限是755 4 5 drwxr-xr-x. 2 root root 4096 5月 8 13:08 directory1 6 7 [frank@frankserver ~]# touch file1 #創建測試文件 8 9 [frank@frankserver ~]# ll file1 #文件的默認權限是644 10 11 -rw-r--r--. 1 root root 0 5月 8 13:09 file1
通過umask命令可以修改umask值,比如將umask值設為0077。
1 [frank@frankserver ~]# umask 0077 2 3 [frank@frankserver ~]# umask 4 5 0077
此時創建的目錄默認權限為700,文件默認權限是600:
1 [frank@frankserver ~]# mkdir directory2 2 3 [frank@frankserver ~]# ll -d directory2 4 5 drwx------. 2 root root 4096 5月 8 13:14 directory2 6 7 [frank@frankserver ~]# touch file2 8 9 [frank@frankserver ~]# ll file2 10 11 -rw-------. 1 root root 0 8月 8 13:14 file2
考慮一下,如果將umask值設為0003,那么此時創建的目錄或文件的默認權限是多少?
正確的結果應該是:目錄的默認權限是774,文件的默認權限是664。在計算默認權限時,不應用最大權限直接減去umask值,而是將umask值所對應的相應位置的權限去掉,這樣才能得到正確的結果。
umask命令只能臨時修改umask值,系統重啟之后umask將還原成默認值。如果要永久修改umask值,需要修改/etc/profile文件或是修改/etc/bashrc文件,例如要將默認umask值設置為027,那么可以在文件中增加一行“umask 027”。
/etc/profile和/etc/bashrc都可以用於設置用戶登錄系統時自動執行某些操作,他們的區別是/etc/profile只在用戶第一次登錄時被執行,而/etc/bashrc則在用戶每次登錄加載Bash Shell時都會被執行。
因而,如果是修改/etc/profile文件,將只對新創建的用戶生效;而如果是修改/etc/bashrc文件,則對所有用戶都生效。