wake-up-neo.com

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

我正在按照 我写的这篇博客文章 中所述自动执行Subversion存储库和相关网站的创建。我遇到了一些问题,我需要向www-data用户运行以下命令:

svnadmin create /svn/repository

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

26
Brendon Dugan

只需使用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用户的无登录政策)

24
johnshen64

使用“ su”可能是要求输入密码,而www-data没有密码。我建议使用命令Sudo

 Sudo -u www-data command

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

64
futbolsalas15

使用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.
3
MikeyB

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用户的不登录策略)

2
Iceman