Linux-权限详解

简介

我们总说Linux系统是相对安全可靠的,这与Linux系统有着严格的权限管理这一点是密不可分的。关于权限方面Linux有很多限制机制,包括我们常说的文件基本权限rwx, 访问控制权限ACL还有美国国防部参与开发的极为复杂的SELINUX 等 。不过我们最常用的,也必须掌握的就是这个文件的基本权限了。如果权限过高会增加服务器的风险。所以对于了解各种权限以及给用户、文件分配合理的权限十分重要!

查看文件rwx权限

# ls -l 命令的第一列
[root@God /]# ls -l
lrwxrwxrwx.   1 root root    7 Jun 21 11:20 bin -> usr/bin
drwxr-xr-x.  76 root root 8192 Jun 24 19:51 etc
drwxrwxrwt.   8 root root  283 Jun 24 19:53 tmp
...

# stat 命令查看
[root@God /]# stat -c %A /
dr-xr-xr-x
[root@God /]# stat -c %a /
555
# 解释一下这一串字符串的意思
# drwxr-xr-x
# 0123456789

# 第 0 位: 代表文件类型,常用的有 - 普通文件  d 目录  l 软链接(快捷方式)等  
# 第123位: 代表文件所属用户(u表示)的 rwx 权限
# 第456位: 代表文件所属组用户(g表示)的 rwx 权限
# 第789为: 代表其他用户(o表示)的 rwx 权限

# -   代表无此项权限
# r=4 代表读权限
# w=2 代表写权限
# x=1 代表可执行权限

# 7 = 4 + 2 + 1 即代表拥有读、写、可执行权限
# 6 = 4 + 2     即代表拥有读、写权限
# 5 = 4 + 1     即代表拥有读、可执行权限
# 以此类推...
  • 对于文件

    • r 表示可以读取文件中的内容
    • w 表示可以修改文件中的内容和文件的一些属性
    • x 表示可以执行文件,普通用户还需要有r权限才能正常执行
  • 对于目录

    • r 表示可以查询目录下的内容
    • w 表示可以修改目录结构的权限,如新建文件或目录,删除文件或目录等
    • x 目录没有执行一说,所以x表示可以进入目录
  • 删除文件、修改文件名的权限是受父目录的w权限控制的,和文件自身的权限无关

  • root用户对所有文件和目录具有r读权限

  • root用户对所有目录具有x可执行权限,即进入目录的权限

  • root用户可以更改所有文件或目录的r w x权限

修改文件rwx权限

chmod命令可用于更改文件的r读、w写、x执行权限

  • 语法

    chmod [选项] rwx的权限分值 文件或目录
    
    • 权限分值 r=4, w=2, x=1
    chmod [选项] 身份标识(+|-)(r|w|x) 文件或目录
    
    • 身份标识 u=user所属用户 , g=group所属组, o=other其他用户, a=all(u+g+o)所有用户
  • 选项

    • -R 递归处理,将指定目录下所有文件及子目录一并处理
    # 更改文件/local/myscript.sh的权限
    # 文件拥有者权限=7(r+w+x) 同组用户权限=5(r+x) 其他用户权限=5(r+x)
    chmod 755 /local/myscript.sh
    
    # 去掉其他用户对文件/local/myscript.sh的写权限
    chmod o-w /local/myscript.sh
    
    # 去掉其他用户对文件/local/myscript.sh的写权限,给同组用户加上执行权限
    chmod o-w,g+x /local/myscript.sh
    
    # 更改目录/local的权限
    chmod -R 754 /local
    

默认权限设置 umask

Linux下创建文件和目录时会有一个默认的权限,一般来讲,我们认为相对安全的权限值为:

  • 文件 644

  • 目录 755

[root@God ~]# touch testfile
[root@God ~]# stat -c %a testfile
644
[root@God ~]# mkdir testdir
[root@God ~]# stat -c %a testdir/
755

那么为什么默认的权限值会是这样的呢?就是因为umask权限掩码决定的!下面就好好讲一下这个umask

# 查看umask值
[root@God ~]# umask
0022

# 设置umask值,临时设置,仅针对本次会话
[root@God dir2]# umask 0011
[root@God dir2]# umask
0011

# 永久修改-全局设置-针对所有用户 修改 /etc/profile 文件
# 永久修改-针对当前用户 在 ~/.bashrc 文件设置

首先,我们先来了解一下什么是最大权限值

  • 用户创建文件,因为文件有x权限“很危险”,则不给x执行权限,所以文件默认的最大权限值666
  • 用户创建目录,则由于x权限与是否可以进入目录有关,即默认最大的权限值777

umask的系统默认值是0022 说一下0022的第一位数0,网上有百分之八十的文章都说是表示的特殊权限或粘滞位,然后说一般不予考虑。屁!你倒是考虑考虑啊,我是搜了很多资料,也没找到到底怎么使用(如果谁知道怎么用,请告诉我 = =)。其实,umask的本质就是一个不大于十进制512的八进制数字,所以第一位只能是0,至于为什么是不大于512? 你去换算一下十进制511的八进制数是多少……是不是感觉瞬间就明白了?而且,你如果设置umask的第一位不等于0时,会报错,而这个错的意思就是八进制越界!

[root@God dir2]# umask 1000
-bash: umask: 1000: octal number out of range

所以我们只看后三位022,我们用十进制算法用最大权限值去对应着位置去减,就得到了文件或目录的默认权限

  • 文件 666 - 022 = 6-0 6-2 6-2 = 644
  • 目录 777 - 022 = 7-0 7-2 7-2 = 755

那么有人(对,没错,就是我!)会问了,如果设置umask中的值有1,35,比如0035那按照这个算法,则文件默认不就有执行权限了么,岂不"很危险"?

  • 文件 666 - 035 = 6-0 6-3 6-5 = 631

对!所以,当文件根据umask计算默认权限时,如果遇到奇数,那么就会给这个数自动加1。也就意味着你无论umask的值设置为多少,新建的文件默认都不会有执行权限的!是不是很哇塞?

  • 文件 666 - 035 = 6-0 6-3 6-5 = 63(+1)1(+1) = 642

猜你喜欢

转载自www.cnblogs.com/qq1207501666/p/13190725.html
今日推荐