以另一个没有密码的用户身份运行Shell脚本


245

我想以没有密码的其他用户身份从主ubuntu shell运行脚本。

我具有完整的sudo特权,因此尝试了以下操作:

sudo su -c "Your command right here" -s /bin/sh otheruser

然后,我必须输入密码,但是我不确定该脚本现在是否真正在该用户下运行。

如何确认该脚本现在确实在该用户下运行?

Answers:


354

您可以使用su或来做到这一点,而sudo无需两者都做。

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

相关部分man sudo

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

su如果您是root用户,则只能在不提供密码的情况下切换用户。见迦勒的答案

您可以修改/etc/pam.d/su文件以允许su没有密码。看到这个答案

如果将身份验证文件修改为以下内容,则属于该组的任何用户somegroupsu可以otheruser不使用密码。

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

然后从终端测试

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser

4
您能否也添加如何做呢su
rubo77

2
这要求我输入密码:-(
IanVaughan 2015年

1
@IanVaughan,使用(sudo)的默认配置,除非您以root身份运行,否则系统会要求您输入密码。您可以将sudo配置为“允许用户A以用户B身份运行cmd C,而无需输入密码”。参见help.ubuntu.com/community/Sudoers
geirha

1
以超级用户身份运行时,提示输入密码。有什么建议么?
Nate

1
@NamGVU请记住,顺序很重要。如果您的sudoers的规则更进一步,为您的用户或您所属的组设置了其他权限,则该规则将覆盖您的NOPASSWD规则。
盖尔哈

100

如果您想使用su而不是sudo,我相信您可以使用以下方法:

su - <username> -c "<commands>"
  • - 将模拟指定用户的登录
  • -c 告诉您要运行命令

ps。不幸的是,我无法使用rvm通过这种方法安装ruby,但这可能无关。


5
我需要添加sudo开头,否则它将要求我输入密码。
IanVaughan 2015年

2
没有这绝对是行不通的sudo。与sudo一起使用,例如:sudo su - www-data -c "touch /tmp/test"成功创建了一个文件,如www-data
rubo77 '16

要使用“ su”,您需要root密码,“ sudo”的目的是避免这种情况。如果您具有上述使用“ su”的root密码,则应该可以正常工作。
塞缪尔·奥斯隆(SamuelÅslund)

6

以上答案对我来说确实很有用,但可以回答实际问题...

我如何确认该脚本现在确实在该用户下运行?-

采用:

ps -ef | grep <command-name>

输出应包括您的脚本和执行该脚本的实际用户。类似BSD的系统(例如MAC)上的人可以通过以下方式找到类似的信息:

ps aux | grep <command-name>

Linux用户可以使用ps aux。
Dean Howell

@DeanHowell; 的确如此,但是MAC用户不能使用“ ps -ef”,并且“ ps aux”是BSD选项,仅当具有兼容性功能时才可用,而“ ps -ef”是标准的Unix / POSIX选项。
塞缪尔·奥斯隆德'18

2

我有同样的问题。只需键入命令,screen -dmS testscreen这将在您的非sudo用户帐户上创建一个分离的屏幕,然后您可以对其进行登录并检查该屏幕是否在那里screen -ls

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.