一、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-)