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