Linux 笔记分享十一:sudo 权限
注意:特殊权限尽量少修改,容易出现安全隐患
一、SetUID权限
- 只有可以执行的二进制程序才能设定SUID权限
- 命令执行者要对该程序拥有x(执行)权限
- 命令执行者在执行改程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)(变成root)
- SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
1、设定SUID权限
chmod 4755 文件名
chmod u+s 文件名
4就代表所属用户SUID
2、关于非执行权限的文件赋予SUID权限
- 有执行权限的
chmod 4755 abc
ll
返回:
-rwsr-xr-x. 1 root root 0 7月 1 18:05 ==abc==
- 无执行权限的
chmod 4644 bcd
ll
返回:
-rwSr--r--. 1 root root 0 7月 1 18:05 ==bcd==
注意赋予特殊权限是
S
的,无效;只有s
是有效的可以理解为
s = S + x
关于有权限的,普通用户能够执行abc,则普通用户就能获取s权限,因为
-rwsr-xr-x
3、passwd命令
- 下面是passwd命令的权限
-rwsr-xr-x
- 下面是
/etc/shadow
密码文件的权限
----------
root拥有无视权限集的能力,即就算文件所属者没有任何权限,而所属者恰好又是root,则root能够强制操作文件
- 有关上面的解释
passwd
是拥有SUID权限的命令,由权限可以看出,普通用户可以执行passwd命令,因此在执行过程中,普通用户会变身为root,所以就能改没有任何权限的密码文件了
4、设定 SetUID 的方法
- 4 代表 SUID
chmod 4755 文件名
或者
chmod u+s 文件名
取消 SUID
chmod 0755 文件名
# 或者
chmod u-s 文件名
5、危险的 SetUID 命令
- 关键目录应严格控制写权限。比如
/
、/user
等 - 用户的密码设置要严格遵守密码三原则
- 对系统中默认应该具有 SetUID 权限的文件作一列表,定时检查有没有这之外的文件被设置了 SetUID 权限
举个例子
chmod 4755 /bin/vi
/bin/vi /etc/shadow
这样操作之后,所有用户,都可以打开 shadow 并进行修改,当然也能改 root 的密码,这就相当于把服务器送给别人了
记得改回来:chmod 0755 /bin/vi
所以不要手动给文件赋予 SetUID 权限
6、检测系统中额外出现的 SetUID 权限的脚本
#!/bin/bash
# 搜索系统中所有拥有 SUID 和 SGID 的文件,并保存到临时目录中
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
# 做循环,每次循环取出临时文件中的文件名
for i in $(cat /tmp/setuid.check)
do
# 对比这个文件名是否在模板文件中
grep $i /root/suid.log > /dev/null
if ["$?" != "0"]
# 检测上一个命令的返回值,如果不为 0,证明上一个命令报错
then
# 如果文件名不在模板文件中,则输出错误信息,并把报错输出到日志中
echo "$i isn't in listfile!" >> /root/suid_log_$(date +%F)
fi
done
# 清理缓存文件
rm -rf /tmp/setuid.check
二、SetGID 文件特殊权限
SetUID 仅能对执行的文件进行设置
SetGID 不仅能对执行的文件进行设置,也能对目录进行设置
1、SetGID 针对文件的作用
- 只有可执行的二进制程序才能设置 SGID 权限
- 命令执行者要对该程序拥有 x (执行)权限
- 命令执行在执行程序的时候,组身份升级为该程序文件的数组
- SetGID 权限同样只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
典型例子
ll /usr/bin/locate
返回
-rwx--s--x 1 root slocate 35612 8月 24 2010 /usr/bin/locate
locate
命令搜索的数据库
ll /var/lib/mlocate/mlocate.db
返回
-rw-r----- 1 root slocate 1838850 1月 20 04:29 /var/lib/mlocate/mlocate.db
我们看到 locate
所搜索的数据库,普通用户没有任何权限,则通过给 locate
添加 SetGID 权限,使得普通用户能够在执行时,加入 slocate
组,这时候就对数据库文件拥有的读的权限
2、SetGID 针对目录的作用
- 普通用户必须对此目录拥有 r 和 x 权限,才能进入此目录
- 普通用户在此目录中的有效组会变成此目录的属组
- 若普通用户对此目录拥有 w 权限时,新建的文件的默认属组是这个目录的属组
举个例子
root 用户执行以下命令
cd /tmp
mkdir test
ll # 查看 test 权限发现为 755
chmod 777 test
chmod 2777 test # 给 test 目录赋予 SGID 权限
普通用户进入此目录执行以下命令
cd /tmp/test
touch blos # 这个 blos 所属组不是普通用户所在组,而是 test 目录所在组
3、SetGID 设置
chmod 2777 文件或目录
# 或者
chmod g+s 文件或目录
三、Sticky BIT 权限
1、SBIT 粘着位权限
- 粘着位目前只对目录有效
- 普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录拥有写入权限
- 如果没有粘着位,普通用户拥有 w 权限,所有可以删除除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了 root 可以删除所有文件,普通用户就算拥有 w 权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
2、设置与取消粘着位
- 设置粘着位
chmod 1755 目录名
# 或者
chmod o+t 目录名
- 取消粘着位
chmod 0777 目录名
# 或者
chmod o-t 目录名
- 查看 SBIT 权限
drwxrwxrwt. 2 root root 4096 7月 1 22:57 test
- 典型例子
根目录下的 tmp 目录默认拥有 SBIT 权限
四、不可改变位权限(chattr 属性)
SBIT 的扩展,限制目录中其他用户文件,防止当前用户进入文件瞎改
1、chattr 命令格式
chattr [+-=] [选项] 文件或目录
+:增加权限
-:删除权限
=:等于某权限
- chattr 常用选项
i:insert 指插入,如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置 i 属性,那么只能修改目录下文件的数据,但不允许建立和删除文件,root 都不行
a:append 指追加,如果对文件设置 a 属性,那么 只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除,root 都不行
2、查看 chattr 属性
chattr +i abc
lsattr abc # 看目录用 lsattr -d 目录名
返回
----i--------e- abc
其中 i 代表 i 权限,e 呢是指文件系统(ext4)
- 注意
关于 a 属性,说是对文件只有追加能力,但是不能用 vi 工具进行操作,因为系统,无法判断,你是修改了还是追加了。所有只能用 echo bbbbb >> dt
本作品采用《CC 协议》,转载必须注明作者和本文链接