Linux umask值默认权限分配

1 Linux权限位说明

Linux umask值默认权限分配_第1张图片

Linux umask值默认权限分配_第2张图片

Linux文件或目录的权限位是由9个权限位来控制,每三位为一组,他们分别是文件属主(Owner)的读、写、执行,用户组(Group)的读、写、执行以及(Other)其它用户的读、写、执行:

r(read)可写权限,对应数字4

w(write)可写权限,对应数字2

x(execute)可执行权限,对应数字1

-(没有任何权限)对应数字0

2 默认权限分配的命令umask

# 参考博客: http://oldboy.blog.51cto.com/2561410/1060032

问题1:为什么默认权限目录755,默认文件权限644

不管是操作系统还是网站站点目录,安全权限的临界点:

1) 目录755,文件644是相对安全的权限

2)并且用户为root以及用户组root

以上权限兼顾了安全和使用,生产工作中一定要尽量要我们的文件和目录达到以上默认的权限,包括用户和属组都是root。

Linux系统默认权限的方针:允许浏览,查看,但是禁止创建和修改文件及文件内容以及执行。

对于网站服务来说,站点目录及子文件权限设置(d:755 f:644 root root)

而用户上传(图片、附件、头像等)的目录权限设置(d:755 f:644 www www)

可通过以下控制条件来控制用户上传的文件

1、程序:控制文件扩展名,如.log结尾的不能上传

2、http协议(请求方法.php禁止get)

3、磁盘挂载禁止上传可执行文件

问题2:若是希望默认创建的文件为000,目录为111,怎么能实现呢?

在Linux下文件的默认权限是由umask值决定的。

umask是通过八进制的数值来定义用户创建文件或目录的默认权限。

umask对应数值表示的是禁止的权限。具体的细节,文件和目录略有不同。

系统默认的umask值

[root@oldboy ~]# umask

0022

[test@oldboy ~]$ umask

0002

3测试不同umask值创建文件的权限

# 文件起始权限值:666

# umask 022

[root@oldboy oldboy]# umask

0022

[root@oldboy oldboy]# touch 1

[root@oldboy oldboy]# ll

total 0

-rw-r--r-- 1 root root 0 Dec 15 22:13 1

# umask 035

[root@oldboy oldboy]# umask 035

[root@oldboy oldboy]# umask

0035

[root@oldboy oldboy]# touch 2

[root@oldboy oldboy]# ll 2

-rw-r---w- 1 root root 0 Dec 15 22:15 2

# umask 002

[root@oldboy oldboy]# umask 002

[root@oldboy oldboy]# umask

0002

[root@oldboy oldboy]# touch 3

[root@oldboy oldboy]# ll 3

-rw-rw-r-- 1 root root 0 Dec 15 22:16 3

# 总结:

(1)若umask值全为偶数(如022),则创建文件的权限值为(666-022=644)

(2)若umask值有任意一位奇数(如035),即奇数位在相减后每位要加1,则创建文件的权限值为(666-035=631+011=642)

4 测试不同umask值创建目录的权限

# 目录起始权限值:777

# umask 022

[root@oldboy oldboy]# umask

0022

[root@oldboy oldboy]# mkdir 1

[root@oldboy oldboy]# ls -ld 1

drwxr-xr-x 2 root root 4096 Dec 15 22:22 1

# umask 035

[root@oldboy oldboy]# umask 035

[root@oldboy oldboy]# umask

0035

[root@oldboy oldboy]# mkdir 2

[root@oldboy oldboy]# ls -ld 2

drwxr---w- 2 root root 4096 Dec 15 22:23 2

# umask 032

[root@oldboy oldboy]# umask 032

[root@oldboy oldboy]# umask

0032

[root@oldboy oldboy]# mkdir 3

[root@oldboy oldboy]# ls -ld 3

drwxr--r-x 2 root root 4096 Dec 15 22:23 3

# 总结:

创建目录最终的权限值就是777减去umask值,没有奇偶数之分

5 永久修改umask值

# 可以修改如下配置文件内容

[root@oldboy oldboy]# sed -n '61,64p' /etc/profile

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then

    umask 002

else

    umask 022

这段脚本的意思就是当用户的UID大于199,且用户的UID和GID相等的情况下,改用户的umask值为002,反之为022

6 总结

umask一般都是放在用户相关SHELL的配置文件中,比如用户家目录下的.bashrc或.profile,也可以放在全局性的用户配置文件中,比如/etc/login.defs,还可以放在SHELL全局的配置文件中,比如/etc/profile或/etc/bashrc等;

umask放在相关的配置文件中,目的是当管理员创建用户时,系统会自动为用户创建文件或目录时配置默认的权限代码。

特别提示:

在一般的生产场景,umask的使用不多见,在此,我们了解下umask是怎么回事即可。

企业面试:

什么是umask,作用是什么,怎么计算文件和目录的默认权限:

你可能感兴趣的:(Linux)