Answers:
您可以使用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
没有密码。看到这个答案。
如果将身份验证文件修改为以下内容,则属于该组的任何用户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而不是sudo,我相信您可以使用以下方法:
su - <username> -c "<commands>"
-
将模拟指定用户的登录-c
告诉您要运行命令ps。不幸的是,我无法使用rvm通过这种方法安装ruby,但这可能无关。
sudo
开头,否则它将要求我输入密码。
sudo
。与sudo一起使用,例如:sudo su - www-data -c "touch /tmp/test"
成功创建了一个文件,如www-data
以上答案对我来说确实很有用,但可以回答实际问题...
我如何确认该脚本现在确实在该用户下运行?-
采用:
ps -ef | grep <command-name>
输出应包括您的脚本和执行该脚本的实际用户。类似BSD的系统(例如MAC)上的人可以通过以下方式找到类似的信息:
ps aux | grep <command-name>
su
?