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


26

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

svnadmin create /svn/repository

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

Answers:


24

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


1
是的,看来我忘了脚本的基本规则了……RTFM。谢谢!
布伦登·杜根

15
尝试此操作,我得到了错误This account is currently not available.
rubo77

我也收到此错误,但futbolsalas15的以下回答可以正常工作。
安德鲁

18
使用su - www-data -s /bin/bash -c 'your_command',使这项工作。用户www-data具有外壳程序,/usr/sbin/nologin因此如果没有该-s参数,它将导致错误消息。
彼得

63

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

 sudo -u www-data command

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


4
哇,为什么这不是选定的答案?花了我很长时间才找到这个。
Captain Hypertext

3

用途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.

2
应该注意的是,su命令不适用于禁用了登录名的帐户(例如www-data)。您必须使用sudo。
Frantumn

2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.