Linux Upstart-无法读取ro/etc/shadow unelss sudo
在Linux Upstart-无法读取ro/etc/shadow unelss sudo,linux,upstart,Linux,Upstart,在Upstart中的以下脚本中,我无法在pre-script阶段读取/etc/shadow,除非我使用$(echo mypass | sudo-S cat/etc/shadow | grep myusername) 如果我提供我的sudo通行证,脚本就可以正常工作,但是我想知道是否有一种方法可以做到这一点,而不必在conf文件中写入我的通行证 node-example.conf 阴影只有根才能访问有一个很好的理由:任何可以更改它的人都可以轻松获得根访问权。经过一段时间,甚至可以计算旧的MD5密码
Upstart
中的以下脚本中,我无法在pre-script
阶段读取/etc/shadow
,除非我使用$(echo mypass | sudo-S cat/etc/shadow | grep myusername)
如果我提供我的sudo通行证,脚本就可以正常工作,但是我想知道是否有一种方法可以做到这一点,而不必在conf文件中写入我的通行证
node-example.conf
阴影只有根才能访问有一个很好的理由:任何可以更改它的人都可以轻松获得根访问权。经过一段时间,甚至可以计算旧的MD5密码。一句话:不要摆弄
/etc/shadow
,除非你必须这么做。基本上,这减少了更改密码的需要
我不太确定你想要实现什么,但是做一个grep$username/etc/passwd
应该会给你除了散列密码以外的所有信息
而且upstart脚本不必以root用户身份运行。作为任何一个用户运行守护进程都是完全正确的。这是通过使用节(有一个相应的setgid)实现的。因此,您以root用户身份安装该服务,并让它放弃特权
另一种选择是使用。你一定要小心
无论你做什么:不要摆弄
/etc/shadow
是的,如果你试图更改操作系统中的密码或用户名,它将请求sudo权限。我想Upstart脚本已经有sudo权限了。我尝试过使用/etc中的其他文件,但我无法读取任何文件,除非我提供我的sudo通行证。
description "Starting Node with Upstart and Forever"
start on filesystem or runlevel [2345]
stop on runlevel [06]
expect fork
respawn
respawn limit 5 30
console output
setuid myusername
env HOME=/home/myusername
env ARGS_FILE=/etc/shadow
. /etc/shadow
script
cd $HOME
exec forever start -a -l /tmp/forever.log -o /tmp/forever.stdout.log -e /tmp/forever.stderr.log --watch --watchDirectory /home/myusername/myapp/server /home/myusername/myapp/server/server.js
end script
pre-start script
ori='myusername:$6$P...'
# cur=$(echo mypass | sudo -S cat /etc/shadow | grep myusername) -> this works
cur=$(cat $ARGS_FILE | grep myusername) -> this doesn't work
if [ "$ori" = "$cur" ]
then encfs code
else rm -rf somefile
fi
end script