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