在 Bash 脚本中切换用户

在 Bash 脚本中切换用户

我想执行一个 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]如果您需要“目标”用户的环境。

相关内容