普通用户执行root权限命令

太白
2022-05-05 / 0 评论 / 1 点赞 / 1,307 阅读 / 888 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

我们经常会需要让普通用户干需要root权限的活,例如普通用户用spleeter命令修改系统日期等(其它命令雷同)。


如果需要授权的命令不在/sbin:/bin:/usr/sbin:/usr/bin目录中,则需要创建软链接(根据自己的实际情况进行调整)

# 这边以 spleeter 为例, 原脚本路径为 /root/anaconda3/bin/spleeter
ln -s  /root/anaconda3/bin/spleeter /usr/bin/spleeter
# 由于spleeter还会应用到ffmpeg、ffprobe,则也需要处理关联
ln -s /root/anaconda3/bin/ffmpeg /usr/bin/ffmpeg
ln -s /root/anaconda3/bin/ffprobe /usr/bin/ffprobe

方法一:修改“被操作命令”的权限

就是给date命令增加s权限位即设置setuid(4000),这样普通用户就可以执行spleeter命令了,缺点也是很明显的,相当于去掉了spleeter命令的root权限限制。
# 切换到root
su root

# 由root用户执行
chmod 4755 /usr/bin/spleeter
chmod 4755 /usr/bin/ffmpeg
chmod 4755 /usr/bin/ffprobe

方法二:编辑“sudo配置文件”,赋予权限

如图新增一行授权
vi /etc/sudoers

modify_quanxian

  • %testgroup:表示被授权的用户组
  • ALL=(root):表示组下用户以root权限执行
  • NOPASSWD:表示无需输入密码
  • /usr/bin/spleeter:表示可额外执行的命令(如有多个用英文逗号隔开)
需要注意的是,当我们为用户定义可以运行的命令时,必须使用完整的命令路径。这样做是完全出于安全的考虑,如果我们给出的命令只是简单的userad 而非 /usr/sbin/useradd,那么用户有可能创建一个他自己的脚本,也叫做userad,然后放在它的本地路径中,如此一来他就能够通过这个名为 useradd的本地脚本,作为root来执行任何他想要的命令了。这是相当危险的!
1

评论区