BASH 脚本,su 到 www-data 执行单个命令

BASH 脚本,su 到 www-data 执行单个命令

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

svnadmin create /svn/repository

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

答案1

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


为未来的观众更新

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

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

(@Petr 提到了关于-s标记以适应www-data用户无登录策略的宝贵意见)

答案2

使用 'su' 可能是要求输入密码,而 www-data 没有密码。我推荐以下命令sudo

 sudo -u www-data command

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

答案3

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用户无登录策略的宝贵评论)

答案4

使用su

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.

相关内容