• Linux 权限位详解




    1. Linux 权限位

    对于权限,有点绕,因为文件的权限和目录的权限是有一些区别的。


    在Linux中,有5种权限,分别是,r、w、x、s、t。

    • 可读权限:r
    • 可写权限:w
    • 可执行权限:x
    • Setuid:s(Set User ID)
    • Setgid:s(Set Group ID)
    • 粘滞位:t

    下面依次讲解权限位:



    1.1 可读权限


    对于文件,可读权限:

    • 用字符表示:r

    • 用八进制表示:4

    • 可以对读取文件里的内容


    对于目录,可读权限:

    • 用字符表示:r
    • 用八进制表示:4
    • 可以列出目录下的内容






    1.2 可写权限


    对于文件,可写权限:

    • 用字符表示:w

    • 用八进制表示:2

    • 可以对文件进行更改


    对于目录,可写权限:

    • 用字符表示:w
    • 用八进制表示:2
    • 可以在目录下创建文件或目录






    1.3 可执行权限


    对于文件,可写权限:

    • 用字符表示:x

    • 用八进制表示:1

    • 可以执行该文件(脚本或命令)


    对于目录,可写权限:

    • 用字符表示:x
    • 用八进制表示:1
    • 可以cd进入该目录






    1.4 Setuid

    这是一个特殊的权限位,


    对于文件,Setuid:

    • 用字符表示:s
    • 用八进制表示:4000

    Setuid最常用的是配合执行权限x使用,例如,系统中内置命令passwd,它默认是带有s权限位,passwd命令的主要功能是修改用户的密码,而修改密码的流程是:

    1. 将加密后的哈希值写入到/etc/passwd文件对应的用户条目中。
    2. 使用pwconv工具转换到/etc/shadow文件中。
    3. 而普通用户是没有权限修改/etc/passwd/etc/shadow文件

    在普通用户尝试执行passwd,该passwd的所有者是root并且设置了Suid,因此passwd以root身份执行。


    当你查看进程时,你会发现,进程不是普通用户,而是passwd工具的所有者(root)






    1.5 Setgid

    这是一个特殊的权限位,


    对于目录,Setgid:

    • 用字符表示:s
    • 用八进制表示:2000

    当一个目录拥有sgid权限时,其他用户在该目录下创建文件或目录后,它会继承目录的id,即创建的文件或目录的属组为父目录的属组。

    [root@self data]# mkdir project
    [root@self data]# chmod 2777 project/
    [root@self data]# ls -lh
    total 0
    drwxrwsrwx 2 root root 6 Apr 20 23:42 project
    [root@self data]# su bob
    [bob@self data]$ mkdir project/test_for_bob
    [bob@self data]$ ls -lh project/
    total 0
    drwxrwsr-x 2 bob root 6 Apr 20 23:42 test_for_bob
    






    1.6 粘滞位

    这是一个特殊的权限位,


    对于目录粘滞位:

    • 用字符表示:t
    • 用八进制表示:1000

    /tmp目录就是使用了粘滞位t,其作用是,在该目录下创建文件或目录后,仅允许其作者(所有者)进行删除操作。其他用户无法删除。






    2. Linux 权限表






    3. ls -l 输出详解

    例如:lrwxrwxrwx. 1 root root 7 Oct 3 02:33 bin -> usr/bin


    • 第一个字符的含义:

      • -:常规文件
      • b:块特殊文件
      • c:字符特殊文件
      • C:高性能(”连续数据“)文件
      • d:目录
      • D:门(Solaris 2.5及以上版本)
      • l:符号链接
      • M:离线(”前已“)文件(Cray DMF)
      • n:网络专用文件(HP-UX)
      • p:FIFO(命名管道)
      • P:断开(Solaros 10及以上)
      • s:套接字
      • ?:其他文件
    • 第二个字符的含义:

      • r:属主的读权限
    • 第三个字符的含义:

      • w:属主的写权限
    • 第四个字符的含义:

      • x:属主的执行权限

      • S:设置了SUID,没有执行权限

      • s:设置了SUID,具有执行权限

    • 第五个字符的含义:

      • r:属组的读权限
    • 第六个字符的含义:

      • w:属主的写权限
    • 第七个字符的含义:

      • x:属组执行权限

      • S:设置了SGID,没有执行权限

      • s:设置了SGID,具有执行权限

    • 第八个字符的含义:

      • r:其他人的读权限
    • 第九个字符的含义:

      • w:其他人的写权限
    • 第十个字符的含义:

      • x:其他人的执行权限
      • T:设置了粘滞位,没有执行权限
      • t:设置了粘滞位,具有执行权限
    • 第十一个字符的含义:

      • .:没有任何其他替代访问方法的SELinux安全上下文(没有设置ACL)
      • +:具有任何其他组合访问方法的SELinux安全上下文(设置了ACL)
    • 第十二个字符的含义:该文件的硬链接数量

    • 第十三个字符的含义:该文件的属主

    • 第十四个字符的含义:该文件的属组

    • 第十五个字符的含义:该文件的大小

    • 第十六到第十八个字符的含义:最后一次修改的时间

    • 第十九个字符的含义:文件或目录的名称

    • 第二十个字符的含义:链接符号

    • 第二十一个字符的含义:链接文件的源文件






    4. umask 掩码


    umask是一个内置命令。其作用是指定创建的文件或目录的默认权限。

    使用方法:umask [-S|-p] [mode]

    • -S:打印出字符权限位
    • -p:打印八进制数权限位(默认)

    使用不加任何参数的umask会打印出八进制的权限:默认0022

    • 第一个数字表示:特殊权限位的八进制数
    • 第二个数字表示:属主的八进制数的反掩码
    • 第三个数字表示:属组的八进制数的反掩码
    • 第四个数字表示:其他人的八进制数的反掩码

    例如:手动更改,可使用八进制,也可以使用字符表示

    [root@localhost data]# umask 
    0022
    [root@localhost data]# mkdir test_dir
    [root@localhost data]# touch test_txt
    [root@localhost data]# ls -lh
    total 0
    drwxr-xr-x 2 root root 6 Apr 21 01:34 test_dir
    -rw-r--r-- 1 root root 0 Apr 21 01:34 test_txt
    [root@localhost data]# rm -rf *
    [root@localhost data]# umask 0777
    [root@localhost data]# mkdir test_dir
    [root@localhost data]# touch test_txt
    [root@localhost data]# ls -lh
    total 0
    d--------- 2 root root 6 Apr 21 01:37 test_dir
    ---------- 1 root root 0 Apr 21 01:37 test_txt
    

    注意:尽管你的umask设置为0000,后续创建文件的权限依然是666。出于安全着想,执行权限必须手动添加。所以你会看到,目录权限为777,而文件权限为666



  • 相关阅读:
    Shader 结构体中语义的理解
    计算包围盒中心坐标
    c#脚本控制shader
    PS2键盘 + LCD12864 实验
    基于M9K块配置ROM的LCD12864图片显示实验
    LCD12864 液晶显示-汉字及自定义显示(串口)
    LCD12864 液晶显示-汉字及自定义显示(并口)
    基于Verilog HDL 的数字电压表设计
    基于Verilog HDL的ADC0809CCN数据采样
    触发器(基本的SR触发器、同步触发器、D触发器)
  • 原文地址:https://www.cnblogs.com/liuhedong/p/10739718.html
Copyright © 2020-2023  润新知