在Linux系统中,默认情况下root用户创建目录后的默认权限是755,创建文件后的默认权限是644,普通用户创建目录后的默认权限是775,创建文件后的默认权限是664。参见如下实验来验证。
首先使用root用户,在/root家目录下创建目录abc,再创建空文件xyz,然后查看其默认权限。
- [root@jump ~]# cd
- [root@jump ~]# mkdir abc
- [root@jump ~]# touch xyz
- [root@jump ~]# ls -ld abc xyz
- drwxr-xr-x 2 root root 6 Jan 5 09:34 abc
- -rw-r--r-- 1 root root 0 Jan 5 09:34 xyz
可见root用户创建目录的默认权限是644,即只能root用户可以在其创建的目录中创建、改名、删除目录下的文件或目录,root组的用户以及其他用户可以进入该目录但是不能对目录中的文件做删除类的操作。
然后使用普通用户zhang,在/home/zhang家目录下创建目录abc,再创建空文件xyz,最后查看其默认权限。
- [zhang@jump ~]$ pwd
- /home/zhang
- [zhang@jump ~]$ mkdir abc
- [zhang@jump ~]$ touch xyz
- [zhang@jump ~]$ ls -ld abc xyz
- drwxrwxr-x 2 zhang zhang 6 Jan 5 09:42 abc
- -rw-rw-r-- 1 zhang zhang 0 Jan 5 09:42 xyz
可见普通用户zhang创建目录的默认权限是664,即zhang用户以及所在zhang组的用户可以在其创建的目录中创建、改名、删除目录下的文件或目录,其他用户仅可以进入该目录但是不能对目录中的文件做删除类的操作。
之所以产生上面实验的结果是因为Linux系统中有一个内部命令umask可以设置权限掩码,对于root用户来说,其默认值是0022,先关注后三位,即022。可用umask命令查看umask变量的值。参见如下操作:
- [root@jump ~]# whoami
- root
- [root@jump ~]# umask
- 0022
对于普通用户,其默认umask值为0002,用umask命令查看结果如下所示:
- [zhang@jump ~]$ whoami
- zhang
- [zhang@jump ~]$ umask
- 0002
文件的默认权限是由满权限减去umask的后三位的值得到的,以root用户举例如下。
文件默认权限:满权限(666)-umask(022)=默认权限(644)。
目录默认权限:满权限(777)-umask(022)=默认权限(755)。
注意,因为普通文件一般无需执行,所以满权限被认为是666;而目录必须有x权限才可进入,所以满权限被认为是777。
umask命令通常是在/etc /profile文件中设置的,每个用户在登录时都会执行这个文件,文件中存在判断条件权限掩码会根据用户的性质来生成,如下所示profile文件中的umask部分内容:
- ......
- if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
- umask 002
- else
- umask 022
- fi
- ......
即当用户UID大于199且用户名和主组名相同时默认掩码为002(用户名和主组名相同的普通用户符合该条件),否则掩码为022(root用户符合该条件也包括了用户名和主组名不相同的普通用户)
另外,除了在系统中会使用umask命令,很多文件传输类服务,如FTP,在上传文件时也会设置umask值以配置默认权限。