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

Dan*_*Dan 1 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
Run Code Online (Sandbox Code Playgroud)

这是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!"
Run Code Online (Sandbox Code Playgroud)

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

小智 6

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

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

由于上述原因,我不会首先推荐这种方法,因为它修改了/ etc/sudoers权限关键文件.除非:

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

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

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

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

我创建了组mygroup

sudo groupadd mygroup
Run Code Online (Sandbox Code Playgroud)

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

sudo usermod -a -G mygroup myuser
Run Code Online (Sandbox Code Playgroud)

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

%mygroup ALL=NOPASSWD: /mypath/to/myscripts/myscript.sh
Run Code Online (Sandbox Code Playgroud)

上面的脚本myscript.sh必须具有执行权限

sudo ugo+x /mypath/to/myscripts/myscript.sh
Run Code Online (Sandbox Code Playgroud)

然后,用户myuser可以直接启动此脚本,如下所示,不再提示输入密码

sudo /mypath/to/myscripts/myscript.sh
Run Code Online (Sandbox Code Playgroud)

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


我找到了另一种没有创建组的方法,添加到/ etc/sudoers文件(在文件的END)行:

%sudo ALL=NOPASSWD: /mypath/to/myscripts/myscript.sh
Run Code Online (Sandbox Code Playgroud)

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

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

myuser2 ALL=(ALL) NOPASSWD: /mypath/to/myscripts/myscript.sh
Run Code Online (Sandbox Code Playgroud)