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

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

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


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

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

#1 楼

您可以使用susudo来做到这一点,而无需两者。

 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用户,则只能在不提供密码的情况下切换用户。请参阅Caleb的答案

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

如果将身份验证文件修改为以下内容,则属于somegroup组的任何用户都可以在没有密码的情况下将su更改为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
 


评论


您能不能也加上su来做这件事?

–rubo77
2014年10月6日12:33

这要求我输入密码:-(

– IanVaughan
15年7月20日在12:39

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

– Geirha
15年7月21日在12:54

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

–内特
15年11月28日在0:26

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

– Geirha
19 Mar 28 '19在7:12

#2 楼

如果您想使用su而不是sudo,我相信您可以使用类似这样的东西:

su - <username> -c "<commands>"





-将模拟登录指定的用户

-c告知您要运行命令

评论


我需要在开头添加sudo,否则它会要求我输入密码。

– IanVaughan
15年7月20日在12:42

没有sudo,这绝对无法工作。使用sudo可以正常工作,例如:sudo su-www-data -c“ touch / tmp / test”成功将文件创建为www-data

–rubo77
16-09-24在8:41

要使用“ su”,您需要root密码,“ sudo”的目的是避免这种情况。如果您具有上述使用“ su”的root密码,则应该可以正常工作。

–塞缪尔·阿斯伦(SamuelÅslund)
17年6月30日在7:51

“不幸的是,我无法使用rvm通过这种方法安装ruby”:当我使用此命令时,结果路径是裸露的(例如/ bin:/ usr / bin),所以我的命令(类似于rvm)是找不到。

– PLG
20 Nov 11在18:25



#3 楼

上面的答案对我来说确实很有用,但是
回答实际问题...


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


使用:

ps -ef | grep <command-name>


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

ps aux | grep <command-name>


评论


Linux用户可以使用ps aux。

–迪恩·豪威尔(Dean Howell)
18/09/20在20:08

@DeanHowell;是的,但是MAC用户不能使用“ ps -ef”,并且“ ps aux”是BSD选项,仅当具有兼容性功能时才可用,而“ ps -ef”是标准的Unix / POSIX选项。

–塞缪尔·阿斯伦(SamuelÅslund)
18/09/22在10:26

#4 楼

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

#5 楼

确保使用命令sudo su切换到root用户,然后使用命令
su user -s <command>

例如:su www-data -s bin/magento cache:clean

#6 楼

您可以使用sudo执行此操作。首先,您需要修改/etc/sudoers文件以添加一条规则,该规则允许hudson用户成为该脚本的另一个用户。假设您有一个需要运行user1/usr/local/bin/my_script.sh帐户。
运行visudo修改sudoers文件。
然后,使用以下sudo命令从hudson运行脚本。
非常重要您使用visudo修改sudoers文件,以便在将文件放置到位之前检查文件是否有错误。另外,建议您快速阅读man sudoers,以便在将其添加到配置之前清楚地了解上述内容。

评论


您应该显示将插入到sudoers文件中的实际行。

–WinEunuuchs2Unix
20/11/11在18:51