BASH 脚本,su 到 www-data 用于单个命令

Bre*_*gan 35 ubuntu su bash svn

我正在致力于自动创建 subversion 存储库和相关网站,如我写的这篇博文中所述。我在向 www-data 用户运行以下命令的部分遇到了问题:

svnadmin create /svn/repository
Run Code Online (Sandbox Code Playgroud)

在脚本的开头有一个检查,以确保它以 root 或 sudo 身份运行,并且该命令之后的所有内容都需要以 root 身份运行。有没有一种好方法可以将那个命令作为 www-data 运行然后切换回 root 来完成?

小智 69

'su' 可能是请求密码,而 www-data 没有密码。我推荐命令sudo

 sudo -u www-data command
Run Code Online (Sandbox Code Playgroud)

条件是你的用户必须是root,或者在sudoers文件中配置

  • 哇,为什么这不是选定的答案?我花了太长时间才找到这个。 (5认同)

joh*_*n64 34

只需su - www-data -c 'svnadmin create /svn/repository'在由 root 运行的脚本中使用即可。这样 www-data 用户仅运行此命令。


为未来的观众更新

如果您收到"This account is currently not available"错误,请考虑使用:

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

(@Petr 关于-s标志的宝贵提及以适应www-data用户的无登录政策)

  • 使用 `su - www-data -s /bin/bash -c 'your_command'` 来完成这项工作。用户 www-data 有 shell `/usr/sbin/nologin`,所以没有 `-s` 参数会导致错误消息。 (19认同)
  • 尝试此操作时,我收到错误消息“此帐户当前不可用。” (16认同)

Ice*_*man 5

2种可能的方法


1)sudo命令:

在大多数情况下,您可以访问该sudo命令,因此解决方案很简单:

sudo -u target_user target_command


2)su命令(如果未安装 sudo。Ex. alpine-linux images):

su - target_user -c 'target_command'

如果您收到“此帐户当前不可用”错误,则表明该用户的无登录(shell 访问)策略已生效。如果是这样,请考虑使用:

su - target_user -s /bin/bash -c 'target_command'

(基于@Petr关于-s标记的宝贵评论,以适应www-data用户的无登录政策)