一、 umask介紹
Linux 系統用戶創建一個新的目錄或文件時,系統會默認會分配相應的權限。目錄或文件的權限是如何產生的呢?
1、這就是umask的功能,umask設置了用戶創建文件或目錄的默認權限。Linux 系統umask設置的默認權限屬於安全權限的臨界點,如果高於這個臨界點,文件的權限就太過危險,如果低於這個臨界點,文件的權限太過苛刻,操作麻煩。
2、Linux系統root系統管理員用戶默認umask值為0022,對應創建目錄默認權限為755,對應創建文件默認權限為644.Linux系統其它用戶默認uamsk值為0002, 對應創建目錄默認權限為775, 對應創建文件默認權限為664.
root系統管理員用戶創建文件和目錄:
[oldgirl@oldboy ~]$ whoami
oldgirl
[root@oldboy ~]# umask
0022
[root@oldboy ~]# mkdir test
[root@oldboy ~]# ls -ld /test/
drwxr-xr-x 2 root root 4096 Dec 1 11:47 /test/
[root@oldboy ~]# touch /test/file.txt
[root@oldboy ~]# ls -l /test/file.txt
-rw-r--r-- 2 root root 0 Dec 5 09:47 /test/file.txt
test普通用戶創建文件和目錄:
[test@oldboy ~]$ whoami
test
[test@oldboy ~]$ umask
0002
[test@oldboy ~]$ mkdir hello
[test@oldboy ~]$ ls -ld hello/
drwxrwxr-x 2 test test 4096 Dec 5 10:03 hello/
[test@oldboy ~]$ touch testfile.txt
[test@oldboy ~]$ ls -l testfile.txt
-rw-rw-r-- 1 test test 0 Dec 5 10:03 testfile.txt
Linux 系統umask默認值存在於bashrc系統文件:
[test@oldboy ~]$ sed -n '65,69p' /etc/bashrc
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
Linux 臨時設置umask默認值:(umask默認是四位,第一位是文件特殊權限位,可以暫時忽略):
[test@oldboy ~]$ umask 033
[test@oldboy ~]$ umask
0033
二、umask值對應文件權限計算方法(以系統管理員root用戶操作)
文件權限計算方法
文件的起始權限值 |
umask值 |
操作 |
計算后文件權限 |
舉例 |
666 |
022 (每位如果都是偶數) |
相減 |
644 |
范例1 |
666 |
033 (每位如果有奇數或偶數) |
相減(奇數位相減后在其原奇數位加1) |
644 |
范例2 |
666 |
325(每位如果有奇數或偶數) |
相減(奇數位相減后在其原奇數位加1) |
442 |
范例3 |
目錄權限計算方法
文件的起始權限值 |
umask值 |
操作 |
計算后文件權限 |
舉例 |
777 |
022 |
相減 |
755 |
范例1 |
777 |
033 |
相減 |
744 |
范例2 |
777 |
325 |
相減 |
452 |
范例3 |
范例1:
[root@oldboy ~]# umask
0022
[root@oldboy ~]# mkdir /oldboy
[root@oldboy ~]# touch /oldboy/test.sh
[root@oldboy ~]# ls -ld /oldboy/
drwxr-xr-x 2 root root 4096 Dec 5 11:16 /oldboy/
[root@oldboy ~]# ls -l /oldboy/test.sh
-rw-r--r-- 1 root root 0 Dec 5 11:16 /oldboy/test.sh
[root@oldboy ~]# stat /oldboy/ | awk -F '[: ]+' 'NR==4 {print $2}'
(0755/drwxr-xr-x)
[root@oldboy ~]# stat /oldboy/test.sh | awk -F '[: ]+' 'NR==4 {print $2}'
(0644/-rw-r--r--)
范例2:
[root@oldboy ~]# umask 033
[root@oldboy ~]# umask
0033
[root@oldboy ~]# mkdir /oldboy
[root@oldboy ~]# touch /oldboy/test.sh
[root@oldboy ~]# ls -ld /oldboy/
drwxr--r-- 2 root root 4096 Dec 5 11:26 /oldboy/
[root@oldboy ~]# ls -l /oldboy/test.sh
-rw-r--r-- 1 root root 0 Dec 5 11:26 /oldboy/test.sh
[root@oldboy ~]# stat /oldboy/ | awk -F '[: ]+' 'NR==4 {print $2}'
(0744/drwxr--r--)
[root@oldboy ~]# stat /oldboy/test.sh | awk -F '[: ]+' 'NR==4 {print $2}'
(0644/-rw-r--r--)
范例3:
[root@oldboy ~]# umask 325
[root@oldboy ~]# umask
0325
[root@oldboy ~]# mkdir /oldboy
[root@oldboy ~]# touch /oldboy/test.sh
[root@oldboy ~]# ls -ld /oldboy/
dr--r-x-w- 2 root root 4096 Dec 5 11:34 /oldboy/
[root@oldboy ~]# ls -l /oldboy/test.sh
-r--r---w- 1 root root 0 Dec 5 11:34 /oldboy/test.sh
[root@oldboy ~]# stat /oldboy/ | awk -F '[: ]+' 'NR==4 {print $2}'
(0452/dr--r-x-w-)
[root@oldboy ~]# stat /oldboy/test.sh | awk -F '[: ]+' 'NR==4 {print $2}'
(0442/-r--r---w-)