我想执行一个 bash 脚本,该脚本切换用户,然后执行一系列命令。这些用户都没有 root 权限。我想我必须编辑 sudoers 文件以授予用户 1(执行脚本的用户)权限,以便能够以用户 2 身份登录而无需输入密码。我一直在寻找这个例子,但一直没找到。
提前致谢。
答案1
在此示例中:
- 运行脚本的用户 = fred
- 用户脚本想要以 = boris 的身份运行某些命令
- 脚本要运行的命令为 boris = /bin/cat & /bin/rm
在 sudoers 文件(visudo)中有:
fred ALL=(boris) NOPASSWD:/bin/cat, (boris) NOPASSWD:/bin/rm
然后在脚本中:
#!/bin/sh
sudo -u boris cat /home/boris/privatefile
sudo -u boris rm /home/boris/privaterubbish
如果你想允许 fred 执行任何以 boris 身份在 sudoers 中使用此命令:
fred ALL=(boris) NOPASSWD:ALL
答案2
将一系列命令放入一个文件中,使其以 开头#!/bin/sh
,并使其可执行。然后使用 授予用户运行该脚本的权限visudo
。
注意:这很可能为他们提供运行任何命令的出口。另一种方法是编写一个执行相关命令的 C 程序。即便如此,您也需要小心谨慎,例如清理用户可能用来偷运的环境变量,以使您的命令以您未曾预料到的方式执行。
答案3
根据我的经验,sudoers 文件非常具有自我文档性;它充满了注释和示例。您可以像 @reinierpost 提到的那样,获得非常详细的权限,并且您应该知道,通过授权他们使用 sudo,您实际上是在授予此用户超级用户权限。
如果您只是想允许用户运行任意命令,您可能会添加类似以下内容:
origuser ALL = (ALL) ALL
或者如果你想绕过密码提示
origuser ALL = NOPASSWD: ALL
就切换用户而言,您可以使用sudo -u [command]
,或者sudo -u -i [command]
如果您需要“目标”用户的环境。