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     即表明拥有读、可执行权限
# 以此类推...
  • 对于文件shell

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

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

  • root用户对全部文件和目录具备r读权限服务器

  • root用户对全部目录具备x可执行权限,即进入目录的权限code

  • root用户能够更改全部文件或目录的r w x权限递归

修改文件rwx权限

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

  • 语法开发

    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

相关文章
相关标签/搜索