datetime:2022-01-08 14:34:00
author:nzb

Linux权限管理

ACL权限

  • ACL权限的简介和开启方式

    • 任何一个文件在一个时刻只能有一个所有者和所属组

    • ACL权限用来解决文件的权限身份不够用的情况

    • ACL权限需要分区支持:

      • dumpe2fs -h /dev/sda5/ 查看是否支持acl选项,如果不支持。

        /dev/sda5/ 为df -h 查看根分区对应的文件系统

      • 可以临时开启:mount -o remount,acl /

        重新挂载根分区,并挂载加入acl权限

      • 或者永久开启:vim /etc/fstab,然后重启系统

        在根分区的defaults后面加个:,act 慎用:任何错误都会导致挂载失败

    • ACL权限类似于windows的权限设置方法,就是不考虑user,group和others的权限设置,单独添加一个用户或者一个用户组对一个文件或者目录的权限

  • 查看与设定ACL权限

    • getfacl

      查看ACL的权限:getfacle 文件名

    • setfacl

      设置ACL的权限:setfacl [选项 ] 文件名

      • setfacl -m u/g/m:用户名/组名/不写权限 文件名:设定文件的ACL权限

        • setfacl -m u:用户名:权限 文件名:设定文件用户的ACL权限

          为用户分配ACL权限,使用“u:用户名:权限”格式 例:setfacl -m u:user1:rwx /test/

        • setfacl -m g:组名:不写权限 文件名:设定文件用户组的ACL权限

          为组分配ACL权限,使用“g:组名:权限”格式

      • setfacl -x :删除指定的ACL权限

      • setfacl -b :删除所有的ACL权限

      • setfacl -d :设定默认ACL权限

      • setfacl -k :删除默认ACL权限

      • setfacl -R :递归设定ACL权限

  • 最大有效权限与删除ACL权限

    • 最大有效权限mask:可以通过getfacl 文件名来查看ACL的权限,里面有mask,可以通过控制mask的值来修改默认最大有效权限。

    • 需要注意的是mask权限不会影响当前文件所有者,只会影响ACL权限和所属组的权限

    • setfacl -x u/g:用户名/组名 文件名:删除文件指定的ACL权限

    • setfacl -b 文件名:删除文件所有ACL权限

  • 默认ACL和递归ACL权限(只能针对目录)

    • setfacl -m d:u/g: 用户名/组名:权限 文件名:设定父目录的默认ACL权限,父目录里所有的新建文件都会继承父目录的ACL权限

      d参数就是设置默认的ACL权限

    • setfacl -k:删除父目录的默认ACL权限

    • setfacl -m [选项] -R 文件名:递归设定文件夹的ACL权限

      setfacl -m u:test:rx -R 文件名

文件特殊权限

  • SetUID:在所有者的x位置上变成了s
    针对二进制文件

    • passwd命令拥有SetUID权限,所以普通用户能修改自己密码

    • 四个条件缺一不可:

      • 只有二进制文件(例如命令和脚本文件)才能设定SUID权限

      • 命令执行者必须对该程序有x权限

      • 命令执行者会在执行的时候获得该程序文件的属主身份

      • SUID权限只在该程序执行过程中生效,也就是身份改变旨在程序执行过程中有效

    • 我们通常会看到4777,2777,1777的权限标识,依次是加了SUID,SGID,SBIT权限

      4代表SUID 2代表SGID 1代表SBIT

    • 设定SetUID的方法

      4代表SUID

      • chmod 4755 文件名

      • chmod u+s 文件名

    • 取消SetUID的方法

      • chmod 755 文件名

      • chmod u-s 文件名

    • 可以用chmod来赋予和删除SUID

    • SetUID是非常危险的,一个命令只要有了s权限,例如passwd命令,普通用户就可以通过执行这个命令获得passwd的属主身份,也就是进入root权限。

      比如:给vim加了SetUID后,普通用户就会有root权限,例如:修改/etc/passwd文件,非常危险。

      • 关键目录应严格控制写权限(普通写权限,不是SetUID权限)。比如“/”、“/usr”等

      • 用户的密码设置要严格遵守密码三原则

      • 对系统中默认应该具有SetUID权限的文件作出备份,定时检查有没有这之外的文件被设置了SetUID权限

  • SetGID:在所属组的x位置上变成了s

    针对二进制文件和目录

    • 针对二进制文件,四个条件缺一不可:

      • 只有可执行的二进制文件才能设置

      • 命令执行者必须对该程序有x权限

      • 命令执行者会在执行的时候获得该程序文件的所属组身份

      • SUID权限只在该程序执行过程中生效,也就是所属组身份改变旨在程序执行过程中有效

    • 注:例如/usr/bin/locate命令

    • 针对目录,三个条件缺一不可:

      • 普通用户必须对此目录拥有r和x权限,才能进入该目录

      • 普通用户在此目录中的有效组会变成此目录的所属组

      • 若普通用户对此目录拥有w权限时,新建的文件的默认组不是文件自己的初始组,而是这个目录自己的所属组

    • 可以用chmod来赋予和删除SGID

      • 设定SetGID的方法

        2代表SGID

        • chmod 2755 文件名/二进制文件

        • chmod g+s 文件名/二进制文件

      • 取消SetGID的方法

        • chmod 2755 文件名/二进制文件

        • chmod g-s 文件名/二进制文件

  • Sticky BIT(黏着位):在其他人的x位置上变成了t

    针对目录

    • 三个条件缺一不可:

      • 只有目录才能设定SBIT权限

      • 普通用户必须对该目录有x和w权限

      • 有了SBIT,普通用户即使有目录的w权限,也不能删除其他用户建立的文件

    • 设定SBIT的方法

      1代表SBIT

      • chmod 1755 文件名

      • chmod o+s 文件名

    • 取消SBIT的方法

      • chmod 1755 文件名

      • chmod o-s 文件名

  • 需要注意的安全性

    • 需要定期对系统中含有SUID或者SGID权限的文件进行检查,如果有异常多出来的含有该权限的文件,如果多出来了,是一个极大的安全隐患,需要手工清除。

文件系统属性chattr权限

  • chattr(change file attributes on a linux file system)

    • 格式:chattr [+-=] [选项] 文件或目录名

      • 符号

        • +:增加权限

        • -:删除权限

        • =:等于某权限

      • 选项

        • i:

          • 1.对文件:不允许任何用户(包括root用户)对文件进行任何修改,只能读

          • 2.对目录:任何用户(包括root用户)只能在目录下修改文件内容,但是不能删除和创建文件

        • a:

          • 1.对文件:任何用户(包括root用户)只能对文件增加数据,但是不能删除和修改现有数据

          • 2.对目录:任何用户(包括root用户)只能在目录中建立和修改文件里的内容,但是不能删除文件

  • lsattr

    查看文件系统属性:lsattr 选项 文件名

    • lsattr -a 文件名:显示所有文件和目录

    • lsattr -d 文件名:若文件时目录,仅列出目录自己的属性

系统命令sudo权限

  • 之前学的是对文件的操作权限,sudo是对系统命令的权限。

  • sudo权限是root把本来只能超级用户执行的命令赋予普通用户的执行

  • root权限先执行命令visudo命令

    实际修改的是:/etc/sudoers文件

  • 在这一行root ALL=(ALL) ALL下面添加

    • root ALL=(ALL) ALL

      给用户

      • 格式:用户名 被管理主机的地址 = (可使用的身份)授权命令(绝对路径)

      • 第一个ALL:允许在命令在哪台计算机上执行

      • 第二个ALL:把前面的用户转变成这个身份,一般不用

      • 第三个ALL:所有命令,应该写具体权限

    • %wheel ALL=(ALL) ALL

      给组

      • %组名 被管理主机的地址=(可使用的身份)授权命令 (绝对路径)
    • 例如:jack ALL=/sbin/shutdown -r now:授权jack能重启服务器的权限

  • sudo -l:查看自己能用那些sudo命令

  • sudo:执行sudo命令:sudo [绝对路径命令]

  • 注意:vim命令不用设置sudo给普通用户,否则会拥有root的所有权限,非常危险

results matching ""

    No results matching ""