第八章 权限管理
文章目录
ACL权限
ACL权限简介与开启
- ACL简介
当所有者, 所属组, 其他人这些身份不够分配权限时, 会用到ACL权限.
ACL权限不考虑身份, 直接给它权限即可.
- 开启ACL
dumpe2fs -h /dev/sda3
: 查看分区ACL权限是否开启
mount -o remount,acl /
: 临时开启, 让根分区支持acl权限
vi /etc/fstab
{
/ defaults,acl : 在根分区的defaults后手动加上acl, 开启acl权限
}
该文件是系统开机自动挂载文件.
添加完后重新挂载文件系统或重启系统, 使修改生效.
`mount -o remount /`
默认情况下, 分区ACL权限是开启的, 所以无需关心开启acl.
查看与设定ACL权限
- 查看
getfacl 文件名
: 查看文件的acl权限 - 设定
setfacl 参数 文件名
: 设定文件的acl权限
参数 :
-m : 设定ACL权限
格式 :
u:用户名:权限
setfacl -m u:centos:rx /tmp/test : 给用户
setfacl -m g:centos:rwx /tmp/test : 给用户组
最大有效权限与删除ACL权限
- 最大有效权限
setfacl -m m:rx 文件名
: 修改文件的mask权限
mask : 指定最大有效权限
设定acl权限, 需要和mask权限相与
才能得到用户的真正权限.
- 删除ACL权限
setfacl -x u:用户名 文件名
: 删除指定用户或组的acl权限
setacl -b 文件名
: 删除文件的所有acl权限
默认ACL权限和递归ACL权限
- 递归acl权限
setfacl -m u:用户名:权限 -R 目录
递归是父目录设定的权限, 子目录和子文件也会拥有.
- 默认acl权限
setfacl -m d:u:用户名:权限 目录
它的作用是父目录设定的acl权限, 新建的子目录和子文件都会有.
而现有的子文件和子目录不会有, 必须通过递归来实现.
递归和默认可以同时使用.
文件特殊权限
setuid
- 规则
只有可执行的二进制程序才能设定suid权限.
命令执行者要对该程序拥有执行( x )权限.
命令执行者在执行该程序时获得该程序文件属主的身份( 普通用户执行程序, 程序的属主为另一个用户, 则第一个用户获得第二个用户的身份 ).
setuid权限只在该程序执行过程中有效, 也就是说身份改变只在程序执行过程中有效.
- 举例
[root@localhost ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
rws : s是passwd命令拥有setuid权限.
[root@localhost ~]# ll /etc/shadow
----------. 1 root root 1264 Jan 6 20:18 /etc/shadow
密码管理的文件都在
/etc/shadow
中, 该文件的权限是000, 但是passwd的所有者是root, root对任何文件都拥有绝对权限, 所以普通用户修改密码是通过passwd命令的setuid权限来生效的.
- 添加suid权限
chmod 4755 abc
: 对abc文件添加suid权限
特殊权限一般不赋予7, 因为特殊权限针对的对象不同, 作用也不同, 赋予7则会导致某个特殊权限无法生效.
4 : suid
2 : sgid
1 : sbit
755 : 普通权限
前提是文件必须是可执行程序, 且文件的执行者拥有执行的权限.
- 删除suid权限
chmod 755 abc
: 删除abc文件的suid权限 - 危险的suid
系统的命令给了它suid权限是很危险的.
建议对系统默认具有suid权限的文件做一个列表, 定时检查有没有这个之外的文件被设置suid权限.
setgid
- sgid针对文件
与suid相似, 只是换用户身份变成了换组身份, 组的有效身份也是在执行过程中有效.
[root@localhost ~]# whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 40520 Apr 11 2018 /usr/bin/locate
--s : sgid权限
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 3823860 Jan 7 10:21 /var/lib/mlocate/mlocate.db
- 针对目录
普通用户必须对此目录拥有r和x权限, 才能进入此目录.
普通用户在此目录中的有效组会变成此目录的属组.
若普通用户对此目录拥有w权限时, 新建的文件的默认属组时这个目录的属组.
sticky bit
粘着sticky 位bit
- 规则
只针对目录.
普通用户要对该目录拥有w和x权限.
除了root, 有了粘着位, 其他普通用户只能删除自己在该目录下创建的文件, 不能删除其他用户创建的文件; 相反, 有了粘着位, 且用户有w权限时, 是可以删除该目录下的任何文件的.
- 设置和取消
chmod 1755 目录
或chmod o+t 目录
: 设置
chmod 755 目录
: 取消
文件系统属性chattr权限
change attribute
- 格式 :
chattr [+-=][参数] 文件或目录
+-=
: 增加删除等于权限 - 参数 :
-i
: 如果对文件设置 i 属性, 则不允许对文件进行删除、改名, 也不能添加和修改数据; 如果对目录, 则只能修改目录下的文件的数据, 不能创建和删除文件.对root也有效, root也可以将 i 属性删除, i 属性只是为了防止用户误操作.
-a
: 如果对文件设置a属性, 则只能在文件中添加数据, 不能删除和修改数据; 如果对目录, 则只允许在目录中建立和修改文件, 不允许删除.
- 查看文件系统属性
lsattr 参数 文件
- 参数 :
-a
: 显示所有内容.
-d
: 列出目录本身属性.
系统命令sudo权限
- 简介
sudo的操作对象是系统命令.
root 将一部分只能超级用户执行的命令赋予普通用户执行.
- 使用
visudo
通过命令修改信息, 该命令实际修改的是
/etc/sudoers
文件.
visudo
{
root ALL=(ALL) ALL
用户名 被管理主机的地址=( 可使用的身份 ) 授权命令( 绝对路径 )
1. ALL或IP地址指本机地址
2. (ALL)指把用户当成root对待, 可不写, 不写则为root
3. ALL指所有命令, 这里应写具体命令
%wheel ALL=(ALL) ALL
%组名
}
- 授权
visudo
{
centos ALL=/sbin/shutdown -r now
}
授权centos用户root身份, 以及执行shutdown -r now命令的权限.
- 普通用户执行
su - centos : 切换用户
sudo -l : 查看可用的sudo命令, 执行时输入centos用户的密码
sudo /sbin/shutdown -r now : 执行
执行时命令前加sudo, 且命令为绝对路径.
- 注意
给普通用户授权命令时, 尽量不要赋予他像vim等工具的命令的权限 ( 如果赋予, 则普通用户变成root身份来执行vim, 这样他是可以修改任何文件的, 是很危险的. )