• Linux 权限管理


    权限管理 

    ls -l aa

     -rwxrwxrwx: 

         -表示文件

         左三位:定义user(owner)的权限 

         中三位:定义group的权限 

         右三位:定义other的权限

     

    进程安全上下文: 

     进程对文件的访问权限应用模型: 

        进程的属主与文件的属主是否相同,若相同,则应用属主权限 

        否则,则检查进程的属主是否属于文件的属组,如果是,则应用属组权限

    否则,就只能应用other的权限

     

    权限: 

     r  :  read    读

     w  :  write    写 

     x  :  excute  执行 

    文件: 

     r:可获取文件的数据 

     w:可修改文件文件的数据 

     x: 可将此文件运行为进程 

     

    目录: 

     r:可使用ls命令获取其下的所有文件列表

     w: 可修改此目录下的文件列表,既创建或删除文件 

     x:可cd至此目录中,并且可使用 ls -l 来获取所有文件的详细属性信息

      

    mode :rwxrwxrwx 

    ownership:  user,group

    权限管理命令:

    chmod命令

      

     三类用户: 

     u: 属主 

     g: 属组 

     o: 其他 

     a: 所有

     

     chmod [OPTION]... MODE[,MODE]... FILE...

    MODE

    表示法: 

     赋权表示法:直接操作一类用户的所有权限位:u=,g=,0=,a= ,  gu=,... 

     授权表示法:直接操作一类用户的一个权限位: u+,u-,g+,g-,a+,a-,o+,o- 

     

    chmod [OPTION]... OCTAL-MODE FILE...

    8进制权限位 

    chmod [OPTION]... --reference=RFILE FILE...

    引用参考文件权限到当前文件权限 

      

    注意:用户仅能修改属主为自己的那些文件的权限

     

    从属关系管理命令:chown,chgrp

    chown命令: (man chown)

    chown [OPTION]... [OWNER][:[GROUP]] FILE...
    chown [OPTION]... --reference=RFILE FILE...


    chgrp命令:

    chgrp [OPTION]... GROUP FILE... 

    chgrp [OPTION]... --reference=RFILE FILE...

      

     注意:仅管理员可修改文件的属主和属组

    umask:文件权限的反向掩码,遮罩码 

     文件: 666-umask 

     目录: 777-umask 

     注意:之所以文件要用666去减,表示文件默认不能拥有执行权限,如果减得结果中有执行权限,则需要加1 

     umask :022

    666-022=644    (文件加1了)

    777-022=755

    umask命令:

     umask:查看当前的umask 

     umask MASK:设置umask,仅对当前shell进程有效


    install 命令:

    install - copy files and set attributes

    复制文件并设置属性 

    install [OPTION]... [-T] SOURCE DEST                      

    install [OPTION]... SOURCE... DIRECTORY             

    install [OPTION]... -t DIRECTORY SOURCE...         

    install [OPTION]... -d DIRECTORY...  

                            

    复制文件 

       

     常用选项: 

         -m ,--mode=MODE: 设定目标文件权限,默认为 775 

         -o, --owner=OWNER: 设定目标文件属主 

         -g,--group=GROUP: 设定目标文件属组

       

     mktemp - create a temporary file or directory 

     mktemp [OPTION]... [TEMPLATE] 

     


    常用选项: 

     -d:创建临时目录

    注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来

      


      文件的权限

    1,文件的属性

    2,文件属性操作

        chown 设置文件的所有者

        chgrp 设置文件的属组

     

    修改文件的属主:chown

       用法:chown [OPTION]... [OWNER][:[GROUP]] FILE...

        OWNER      改变属主

        OWNER:    改变属主属组都为OWNER

        OWNER:GROUP  同时改变属主属组OWNER

           :GROUP  改变属组

        命令中的:号可以用.替换;

        -R 递归,同时递归目录文件的权限

    chown [OPTION]... --reference=RFILE FILE...

     功能:以文件RFILE的属组属主赋给FILE文件

         

    修改文件的属组:chgrp

     chgrp [OPTION]... GROUP FILE...

     chgrp [OPTION]... --reference=RFILE FILE...


    文件的权限主要针对三类对象进行定义:

     owner:属主,u

     group:属组,g

     other:其他,o

    每个文件针对每类访问者都定义了三种权限:

     r:读,readable

     w:写,writable

     x:执行,excutable

    这三种权限可以用8进制数字来表示

    ---         000         0

    --x        001         1

    -w-       010         2

    -wx       011         3

    r--         100         4

    r-x        101         5

    rw-       110         6

    rwx       111         7

    例如:

        640:rw-r-----

        rwxr-xr-x:755


    权限分为文件和目录两种

    文件:

     r:可使用文件查看类工具获取其内容

     w:可以修改其内容

     x:可以把此文件提请内核启动为一个进程

    目录:

     r:可以使用ls查看此目录中文件列表

     w:可在此目录中创建文件,也可以删除此目录中的文件

     x:可以使用ls -l 查看此目录中文件列表,可以cd进入此目录

     X:只给目录x权限,不给文件x权限


    权限操作命令:chmod

    chmod [OPTION]... MODE[,MODE]... FILE...

        MODE:

            修改一类用户的所有权限:u=,g=,o=,ug=,a-...

            修改一类用户某位或某些位权限:u+,g+,a-,o-...

       chmod [OPTION]... OCTAL-MODE FILE...

       chmod [OPTION]... --reference=RFILE FILE...

        参考RFILE文件的权限,将FILE的修改为同RFILE


    默认权限:umask:

    • umask值 可以用来保留在创建文件权限 

    • 新建FILE权限: 666-umask 如果所得结果某位存在执行(奇数)权限,则将其权限+1

    • 新建DIR权限: 777-umask 

    • 非特权用户umask是 002 

    • root的umask 是 022 

    • umask: 查看

    • umask #: 设定 

    • umask –S 模式方式显示 

    • umask –p 输出可被调用 

    • 全局设置: /etc/bashrc 用户设置:~/.bashrc

    666-123=543,所得结果存在执行(奇数)权限,则其权限+1 所以为 644  -rw-r--r--


    例如:

    1,复制/etc/fstab文件到/var/tmp下,设置文件所有者为 wangcai读写权限,所属组为sysadmins组有读写权限,其他人无权限

     

    2,误删除了用户wangcai的家目录,请重建并恢复该用户家目录 及相应的权限属性

    1. cp -r /etc/skel/. /home/wangcai
    2. chown -R  wangcai: /home/wangcai

    linux文件系统上的特殊权限

    特殊权限:

     SUID,SGID,Sticky

     三种常用权限:r,w,x  user,group,other

    安全上下文

     前提:

      进程有属主和属组,文件有属主和属组

    1.    任何一个可执行程序文件能不能启动为进程,进程的属组为发起者所属的组
    2.    启动为进程后,其进程的属主为发起者,进程的属组为发起者所属的组
    3.    进程访问文件时的权限,取决于进程的发起者
      1. 进程的发起者,同文件的属主,则应用文件属主权限
      2. 进程的发起者,属于文件属组,则应用文件属组权限
      3. 应用文件其他权限


    可执行文件上SUID权限:

         任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限

         启动为进程之后,其进程的属主问源程序文件的属主

        SUID只对二进制可执行程序有效

        SUID设置在目录上无意义

         权限设定:

            chmod u+s FILE...

            chmod u-s FILE...

    非root用户执行 cat /etc/shadow 会提示权限不足

    当root用户执行 chmod u+s /usr/bin/cat 时,然后运行,执行成功

    发现非root用户临时具有了可执行该文件的权限


    可执行文件上SGID权限

        任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限

        启动为进程后,其进程的属主为原程序文件的属组

        权限设定:

            chmod g+s FILE...

            chmod g-s FILE...

    目录上的SGID权限

        默认情况下,用户创建文件时,其属组为此用户所属的主组

        一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

        通常用于创建一个协作目录

        权限设定:

            chmod g+s FILE...

            chmod g-s FILE...

    Sticky位:

        具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权

        在目录设置Sticky位,只有文件的所有者或root可以删除该文件

        sticky 设置在文件上无意义

        权限设定:

            chmod o+t DIR...

            chmod o-t DIR...

        


    此特殊的权限也可以用数字来表示

       SUID SGID STICKY 

        000         0 

        001         1 

        010         2 

        011         3 

        100         4 

        101         5 

        110         6 

        111         7 

    权限放到最前方,比如 chmod 3666 /testdir/abc.txt

    权限位映射:

      SUID:user,占据属主的执行权限位

        s:属主拥有x权限

        S:属主没有x权限

      SGID:group,占据属组的执行权限位

        s:属组拥有x权限

         S:属组没有x权限

      Sticky:other,占据other的执行权限位

        t:其他拥有x权限

        T:其他没有x权限


    设置文件特定的属性

    chattr +i 使文件不能删除,改名,更改

     

    chattr +a 文件只能增加

     

    lsattr 显示特定属性


    访问控制列表

    ACL:Access Control List:可以实现灵活的权限管理

    除了文件的所有者,所属组和其他人,可以对更多的用户设置权限

    centos 7.0默认创建的xfs和ext4文件系统有ACL功能

    centos 7.x之前版本,默认手工创建的ext4文件系统无ACL功能,需要手动添加:

    1. tune2fs -o acl /dev/sdb1
    2. mount -o acl /dev/sbd1 /mnt

    ACL生效顺序:所有者,自定义用户,自定义组,其他人

    可以为多用户或者组的文件和目录赋予访问权限rwx

    1.     mount -o acl /directory
    2.     getfacl file|directory     查看文件或者目录的acl列表
    3.     setfacl -m u:cent:rwx file|directory 使用户cent拥有rwx权限
    4.     setfacl  -Rm g:sales:rwX directory 使组sales拥有目录下面的rwX权限
    5.     setfacl  -M  file.acl file|directory 通过文件来调用权限
    6.     setfacl  -m  g:salesgroup:rw file| directory 
    7.     setfacl  -m  d:u:wang:rx  directory 在目录下新建的文件就有该权限
    8.     setfacl  -x  u:wang  file |directory 删除用户权限
    9.     setfacl  -X file.acl  directory  通过文件来删除用户权限


    ACL文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限       

    getfacl 可看到特殊权限:flags

    默认ACL权限给了x,文件也不会继承x权限

    base ACL 不能删除

    setfacl -k dir 删除默认acl权限

    setfacl -b file 清除所有acl权限

    getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2

    mask 只影响除所有者和other的之外的人和组的最大权限

    mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限

    用户或组的设置必须存在于mask权限设定范围内才会生效

        setfacl -m mask::rx file

    --set 选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能像-m一样只是添加ACL就可以

    setfacl --set u::rw,u:cent:rw,g:;r,o:: -file 


    备份和恢复ACL

    主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数,但是tar等常见的备份工具是不会保留目录和文件的ACL信息

    比如:

    1.     getfacl -R /testdir/dir1 > acl.txt
    2.     setfacl -R -b /tmp/dir1 
    3.     setfacl -R  --set-file=acl.txt  /tmp/dir1 
    4.     getfacl -R /tmp/dir1

    比如:

    在/data/testdir里创建的新文件自动属于g1组,组g2的成 员如:alice能对这些新文件有读写权限,组g3的成员如 :tom只能对新文件有读权限,其它用户(不属于 g1,g2,g3)不能访问这个文件夹

    1. chgrp g1 testdir
    2. chmod g+s testdir
    3. setfacl -dm g:g2:rw testdir
    4. setfacl -dm g:g3:r testdir
    5. chmod o= testdir
  • 相关阅读:
    [刷题记录]牛客面试笔刷TOP101(一)
    Java-------实现类(进阶)
    LeetCode HOT 100 —— 102.二叉树的层序遍历
    分类预测 | MATLAB实现CNN卷积神经网络数据分类预测
    底层驱动day4作业
    【Qt事件】
    ssm Vue的家教平台系统java项目源码
    Wordpress模板主题中functions.php常用功能代码与常用插件(持续收集整理)
    用c语言来实现一个寻找迷宫出口的算法
    Linux上的中文输入法安装(Ubuntu + Kali五笔拼音)
  • 原文地址:https://blog.csdn.net/ly1358152944/article/details/126247637