zoukankan      html  css  js  c++  java
  • Linux-权限管理

    基本权限

    Linux文件系统的基本权限有四个标识:r(readable)w(writable)x(executable)以及-(none)

    
    # 查看/etc目录的权限
    [root@wqh06 ~]# ll -d /etc 
    drwxr-xr-x. 76 root root 8192 Apr  4 10:46 /etc
    
    # 分解第一列字符
      d        rwx                r-x                r-x                      .
    # 目录     属主权限位(U)       属组权限位(G)       其他用户权限位(O)         与selinux有关
    # U,G,O 即 User,Group,Other
    # 最后的一个 `.` ,如果selinux开机自启,那么创建的文件都会有此后缀,想消除需要彻底关闭selinux(/etc/selinux/config)
    

    字母 含义 对应八进制(octal)权限
    r(read) 读取权限 100(4)
    w(write) 写入权限 010(2)
    x(execute) 执行权限 001(1)
    -(没有权限) 没有权限 000(0)

    修改基本权限

    基本权限是针对属主、属组、其他用户修改的,修改方式如下。

    # ugo方式
    chmod   //修改文件目录权限rwx  -R 递归修改
    
    [root@wqh06 ~]# touch file
    [root@wqh06 ~]# chmod a=rwx file
    [root@wqh06 ~]# chmod a+rwx file
    [root@wqh06 ~]# ll file
    -rwxrwxrwx 1 root root 0 Mar 20 21:19 file
    
    [root@wqh06 ~]# chmod a=-rwx file
    [root@wqh06 ~]# chmod a-rwx file
    [root@wqh06 ~]# ll file
    ---------- 1 root root 0 Mar 20 21:19 file
    
    [root@wqh06 ~]# chmod u+rw,g+r,o+rx file
    [root@wqh06 ~]# ll file
    -rwxrwxrwx 1 root root 0 Mar 20 21:19 file
    [root@wqh06 ~]# chmod u=rwx,g=rw,o=rx file
    [root@wqh06 ~]# ll file
    -rwxrw-r-x 1 root root 0 Mar 20 21:19 file
    
    # number方式
    mkdir dir       //建立目录
    touch dir/file  //建立文件
    
    # 用八进制数赋予权限
    chmod 777 dir/   //修改dir目录权限为777
    chmod u+rwx,g+rwx,o+rwx 
    chmod 666 dir/file     //修改file文件权限为666
    chmod u+rw,g+rw,o+rw 
    
    # -R递归
    chmod -R 766 dir/  //修改目录及子目录权限
    

    rwx权限对文件的影响

    r:文件可以读取内容,不能写,不能执行,可以cat,less
    w:文件可以写入内容,但是追加只能>>,不能vim,因为不能读取内容,所以不能修改文件内容,只能覆盖
    x:啥也不能干,因为没有读权限。所以无法执行文件中的内容(代码逻辑)
    rw:可读,可写,不能执行
    rx:可读,可执行,不能写
    rwx:可读,可写,可执行
    
    注意:文件的rwx权限,只能针对文件内容,如果想要删除,或者移动,那么跟文件所在目录的权限有关
    # 可以把目录想成一个文件,不过这个文件存放的是目录内的文件元数据
    

    rwx权限对目录的影响

    r:可以查看目录下所有的文件名,但是看不见文件的详细信息(元数据)
    rx:加上x权限,就可以看见文件的详细信息(元数据)      # 目录权限中最常见的
    wx:可以创建,可以删除,不能查看
    rw:可以查看目录下的文件,但是不能删除,不能移动,不能拷贝(和单独的r是一个效果)
    rwx:删除文件,创建文件,移动文件,拷贝文件,查看
    w:啥也不是,无法添加文件,无法删除文件(因为少了x)
    x:啥也不是(但若知道目录下的一个具体文件名,可以cat文件内容)    
    

    修改属主和属组

    基本权限的设定,主要是针对属主和属组,然后是其他用户。对于一个文件或者目录拥有什么权限,
    取决于你是谁(是这个文件/目录的属主、属组还是其他用户)。

    属主属组修改命令chown
    chown   # 更改属主以及属组     -R:递归修改
    
    # 修改属主
    chown user01 dir/      # 修改所属主为user01
    ll -d dir/             # 检查属主
    drwxr-xr-x 2 user01 root 4096 MAR 31 00:50 dir/
    
    
    # 修改属组
    chown .adm dir/         # 方法一:修改所属组为adm
    chgrp adm dir/          # 方法二:修改所属组为adm
    ll -d dir/              # 检查属组
    drwxr-xr-x 2 bin adm 4096 MAR 31 00:50 dir/
    
    
    # 修改属主和属组(一起修改)
    chown root.root dir/        # 只修改此目录属主和属组为root
    chown -R root.root dir/     # 递归修改目录及目录下的所有文件属主和属组为root
    
    # 对于 -R 递归这个选项,chmod 有,chown 有,chgrp 也有,大家都有,才是真的有
    

    特殊权限

    SUID

    引入一个例子,当我们在普通用户登录Linux系统的情况下修改自己的密码时,系统命令passwd做了什么?经过了什么流程?
    我们知道所有用户信息、密码信息都保存在/etc/passwd/etc/shadow文件中,也就是普通用户使用passwd命令变更自身密码时,
    要修改/etc/passwd/etc/shadow文件。
    然而对于普通用户而言,我们是没有权限修改这两个文件的(属于其他用户,观察其他用户权限位):

    那我们是怎么修改了自身的密码?并将信息更新到上面的两个文件中的呢?

    我们再看看我们使用的passwd命令,找到原因:

    观察这个文件的属主权限位!居然有一个s!
    这就是特殊权限之一的s(SetUID),顾名思义,它出现在属主权限位, 一般对应的是可执行文件。
    如果一个可执行文件在属主权限位上的x位有s(SetUID)权限
    ,那么任何用户(root不受影响)执行这个文件时,都会以该文件的属主的身份去执行。

    # SUID授权
    # chmod ugo方式
    [root@wqh06 ~]# chmod u+s 文件或目录
    
    # chmod number方式 4000
    [root@wqh06 ~]# chmod 4755 abc
    [root@wqh06 ~]# chmod 4000 abc
    
    注意:当授权文件,原本属主位上有x权限时,是小写s,原本属主位上没有x权限时,是大写S
    

    SGID

    将目录权限位设置成SGID后,在其目录下继续创建文件时,其所属组(只有所属组)与该目录保持一致。
    使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。主要目的即共享目录

    # SGID授权
    # chmod ugo方式
    [root@wqh06 ~]# chmod g+s /tmp/test/
    
    # chmod number方式 2000
    [root@wqh06 ~]# chmod 2755 /tmp/test/
    注意:当授权目录,原本属组位上有x权限时,是s,原本属组位上没有x权限时,是S
    

    SBIT(Sticky Bit)

    SBIT(Sticky Bit)翻译为粘滞位,目前只对目录有效。上面的SUID/SGID都是针对属主权限位、属组权限位的。
    SBIT可想而知,是针对与其他用户权限位设置的。其他用户权限位的x位,变成了t,就是粘滞位。

    设置粘滞位的目的是什么?
    一句话,为了各个普通用户在此目录下,可以随意创建、修改、删除属于自己的文件,但不能够删除其他用户的文件。

    一个目录其他用户权限位最常见的属性是r-x,如果我们想让其他用户(或者所有用户)都可以在这个目录下随意创建、修改、删除自己的文件(公共站点),
    那么就需要将它的权限位设置成rwx,此时会出现一个问题,如果是rwx,那么任意一个普通用户都可以修改和删除其他人在这个目录(公共站点)的文件。
    加了t后,除了root以外,其他每个普通用户只能在这个目录下创建、修改、删除自己的文件,不能删除其他用户(只针对用户,不针对组)的文件。

    注意:如果在/tmp目录下,普通用户user01的文件,其他用户权限位是rwx,那么换一个普通用户user02还是可以任意修改的。

    # SBIT授权
    # chmod ugo方式
    [root@wqh06 ~]# chmod o+t /opt
    
    # chmod number方式 2000
    [root@wqh06 ~]# chmod 1755 /opt
    注意:当授权目录,原本其他用户权限位上有x权限时,是t,原本其他用户权限位上没有x权限时,是T
    

    权限掩码umask

    我们在创建一个文件/目录时,没有指定过它们的具体权限位,那系统是怎么分配权限位的呢?
    由此引出权限掩码umask,在root用户下查看umask值为0022。

    一般情况下,目录用0777减去它,文件用0666减去它,就能得到默认的目录/文件权限。
    二般情况下,umask的值不是0022,是0023呢?
    目录用0777减去它,权限位:0754
    文件用0666减去它,权限位理应是0643,但文件的八进制权限位(后三位)不能有奇数,有奇数要+1,所以是0644

    # umask为0022时
    [root@wqh06 ~]# umask
    0022
    
    mkdir dir	 // 目录权限的计算
    0777
    0022
    ----
    0755
    
    touch file 	 // 文件权限的计算
    0666
    0022
    ----
    0644
    
    # umask为0033时
    [root@wqh06 ~]# umask 0033
    mkdir dir	 // 目录权限的计算 
    0777
    0033
    ----
    0744
    touch file 	 // 文件权限的计算
    0666
    0033
    ----
    0644
    
    # umask为0045时
    [root@wqh06 ~]# umask 0045
    mkdir dir	 // 目录权限的计算 
    0777
    0045
    ----
    0732
    
    mkdir dir	 // 文件权限的计算 
    0666
    0045
    ----
    0622
    
    # umask计算,当umask中出现奇数时:目录计算方式不变,但是奇数位的结果要+1
    
    

    权限掩码umask的设置

    实际上,umask的默认值并不一直是0022,这个umask的值是从/etc/profile中设置加载的。
    如图所示,如果用户UID大于199,并且用户名组名相同,那么权限掩码是0002,否则是0022

    验证:

  • 相关阅读:
    课程教学网站(大三上课设)
    mybatis+servlet
    第一个struct2(Hello_World)
    servlet入门
    mybatis入门项目
    XML
    状态模式的介绍及状态机模型的函数库javascript-state-machine的用法和源码解析
    10个JavaScript难点
    markdown基本语法
    Mac OSX 平台安装 MongoDB
  • 原文地址:https://www.cnblogs.com/zzzwqh/p/12631328.html
Copyright © 2011-2022 走看看