[英]Switch user in a init script?
这是我在Ubuntu工作站上的初始化脚本。 我需要以root身份运行另一个用户命令,但我无法理解它应该如何完成。 sudo -u
或su newuser
似乎都不起作用。
剧本:
respawn
console none
start on runlevel [2345]
stop on runlevel [06]
script
su "anotherUser" -c ./myCommand
end script
我用这个:
su -l $MUSER -c "myCommand args..."
更新 :由于对此答案感兴趣,我在这里解释我使用它的方式。
我们像普通的linux用户一样运行服务器,而不是root。 用户名包含三个部分:
服务,客户,阶段
这样我们就可以在一个Linux操作系统中为多个客户运行多个服务。
示例:foo_bar_p客户“bar”和“p”的服务“foo”表示生产
这是init脚本的一部分。 init脚本可以作为root或foo_bar_p用户执行:
# /etc/init.d/foo_bar_p-celeryd
# scriptname contains linux username
SCRIPT_NAME=`basename "$0"`
SYSTEM=${SCRIPT_NAME%*-celeryd}
U=`id -nu`
if [ ! $U == $SYSTEM ]; then
if [ $U == "root" ]; then
# use "-l (login)" to delete the environment variables of the calling shell.
exec su -l $SYSTEM -c "$0 $@"
fi
echo "Script must be run from $SYSTEM or root. You are '$U'"
rc_exit 1
fi
# OK, now I am foo_bar_p
cd
. $HOME/.bashrc
....
对于新贵,使用:
setuid myuser
exec command args
su可能是一种更普遍的方法,但在使用sudo的一些常见发行版中也可以这样做:
sudo -u $MUSER $COMMAND $ARGS
(只是重读你的问题并没有意识到这对你不起作用,但它在init脚本中对我有用)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.