我想以没有密码的其他用户身份从主 ubuntu shell 运行脚本。
我有完全的 sudo 权限,因此我尝试了这个:
sudo su -c "Your command right here" -s /bin/sh otheruser
然后我必须输入我的密码,但我不确定该脚本现在是否真的在该用户下运行。
我如何确认该脚本现在确实在该用户下运行?
答案1
您可以使用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.
(从 Ubuntu 19.10 开始,-H
不再需要,因为这是默认行为。请参阅:自 19.10 以来,sudo 如何以不同的方式处理 $HOME?)
-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
无需密码。请参阅此回答。
如果您将 auth 文件修改为以下内容,则属于组的任何用户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
答案2
如果您想使用 su 而不是 sudo,我相信您可以使用如下命令:
su - <username> -c "<commands>"
-
将模拟指定用户的登录-c
告诉它你想运行一个命令
ps. 不幸的是我无法用这种方法使用 rvm 安装 ruby,但这可能无关紧要。
答案3
上述答案对我确实很有用,但要回答实际问题......
我如何确认该脚本现在确实在该用户下运行?-
使用:
ps -ef | grep <command-name>
输出应该包括你的脚本和执行它的实际用户。使用 BSD 类系统(例如 MAC)的用户可以通过以下方式找到类似的信息:
ps aux | grep <command-name>
答案4
我也遇到了同样的问题。只需输入命令,screen -dmS testscreen
这将在您的非 sudo 用户帐户上创建一个独立的屏幕,然后您可以记录它并检查该屏幕是否存在screen -ls
。