2

我希望员工组中没有管理员/根权限的用户在不提示输入密码的情况下运行以下脚本。这是在 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!"

您的想法,建议最受赞赏!

4

2 回答 2

6

警告在使用管理用户权限和权限的 /etc/sudoers 文件时,我崩溃了Ubuntu。

无法正常登录了。我收到了一个解析错误,原因是我错误地注释了 #%sudo ALL=NOPASSWD: /pathtoscripts/script.sh 的一行中的 # 和 % 字符之间缺少一个简单的空格。我不得不通过 install/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
于 2014-01-03T20:55:04.443 回答
0

我可以通过将以下内容添加到我的 /etc/sudoers 文件来完成这项工作:

%staff ALL=/opt/scripts/restart-smb

然后当然使脚本可执行(我忘记了)。

仍然需要密码(没关系),但可以工作。

于 2013-07-10T17:36:23.327 回答