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

时间:2013-07-09 18:57:22

标签: macos shell sudoers

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

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

2 个答案:

答案 0 :(得分:6)

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

无法正常登录。我得到一个解析错误来自一行中#和%字符之间缺少的简单空格我错误地评论了#%sudo ALL = NOPASSWD:/pathtoscripts/script.sh。 我必须使用install / liveCD再次安装hardrive文件系统来恢复它,将原始文件放回原位并卸下卷以记录更改。

由于上述原因,我首先不推荐这种方法,因为它修改了/ etc / sudoers权限关键文件。选择第一个可用的替代方案,除非:

  • 您可以在PC外备份好数据

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

  • 你知道/ etc / sudoers文件的正确的SYNTAX ,试验和解析错误可能会花费你很多时间和/或努力/崩溃......

阅读其他帖子,我设法让它在我的系统上运行,通过组管理权限:

我创建了群组mygroup

sudo groupadd mygroup

我添加了将执行脚本的用户myuser

sudo usermod -a -G mygroup myuser

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

%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文件(在文件的 END ):

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

如果脚本只能由少数现有用户myuser1,myuser2启动,则始终只能添加到/ etc / sudoers(文件的 END )行: / p>

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

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

答案 1 :(得分:0)

我能够通过在/ etc / sudoers文件中添加以下内容来完成这项工作:

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

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

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

相关问题