允许用户通过/etc/sudoers和权限运行脚本

3
我希望员工组的用户在没有管理员/超级用户权限的情况下能够运行以下脚本,而无需输入密码。这是在OSX操作系统中。
请注意,/usr/sbin/serveradmin需要root/sudo特权。
我已经尝试将以下内容添加到我的/etc/sudoers文件中,但它不起作用。该脚本具有755权限。
%staff ALL=NOPASSWD: /usr/sbin/serveradmin stop smb,/usr/sbin/serveradmin start smb
%staff ALL=NOPASSWD: /bin/sh /opt/scripts/restart-smb

这是一个shell脚本:
#!/bin/bash
#
# This script simply restarts SMB (Samba)
#
echo "Stopping SMB..."
/usr/sbin/serveradmin stop smb
echo "Pausing for 30 seconds..."
/bin/sleep 30
echo "Starting SMB..."
/usr/sbin/serveradmin start smb
echo "Script complete!"

非常感谢您的想法和建议!

Dan


你是否尝试指定命令运行的用户?这样你在sudo规则中的语法应该是%staff ALL=(root)NOPASSWD: ...等等。 - undefined
2个回答

8

警告:当管理用户权限和权限时,如果玩弄/etc/sudoers文件,我使Ubuntu崩溃了。

无法进行正常登录。我遇到了一个解析错误,来自一行我错误地注释掉的#%sudo ALL=NOPASSWD: /pathtoscripts/script.sh字符之间缺少一个简单的空格。我不得不使用安装/ liveCD将硬盘文件系统重新挂载,将原始文件放回原处并卸载卷以记录更改。

由于上述原因,我不建议使用此方法,首先因为它会修改关键文件/etc/sudoers的权限。除非:

  • 您在PC外部有良好的数据备份

  • 您不怕冒险修复/重新安装系统

  • 您知道/etc/sudoers文件的正确语法,尝试和解析错误可能会花费大量时间和/或努力/崩溃...

阅读其他帖子后,我成功地在我的系统上运行它,通过组管理权限:

我创建了mygroup组

sudo groupadd mygroup

我添加了用户myuser,该用户将执行脚本。

sudo usermod -a -G mygroup myuser

我在/etc/sudoers的末尾添加了该条目,否则特权将被前面的行覆盖(注意语法)

%mygroup ALL=NOPASSWD: /mypath/to/myscripts/myscript.sh

上述脚本myscript.sh必须具有执行权限。
sudo ugo+x /mypath/to/myscripts/myscript.sh

这个脚本将能够被用户myuser直接启动,无需再提示输入密码。

sudo /mypath/to/myscripts/myscript.sh

或者,脚本可以以相同的方式在另一个脚本中启动。


我发现另一种方法,不需要创建组,在/etc/sudoers文件中添加以下行(在文件末尾):

%sudo ALL=NOPASSWD: /mypath/to/myscripts/myscript.sh

如果脚本只能由几个现有的用户myuser1、myuser2启动,那么可以在/etc/sudoers文件末尾添加以下行:

myuser1 ALL=(ALL) NOPASSWD: /mypath/to/myscripts/myscript.sh

myuser2 ALL=(ALL) NOPASSWD: /mypath/to/myscripts/myscript.sh

许多Linux系统都有一个名为“visudo”的命令,用于编辑/etc/sudoers*文件。这可以最大程度地减少使您的系统无法运行的可能性。 - undefined

0
我通过在我的/etc/sudoers文件中添加以下内容成功地使这个工作起来:
%staff ALL=/opt/scripts/restart-smb

当然,要让脚本可执行(我忘了这一点)。
仍然需要密码(没关系),但是可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接