Upstart - 除非sudo,否则无法读取/ etc / shadow

时间:2014-11-01 14:29:22

标签: linux upstart

Upstart的以下脚本中,我无法在/etc/shadow阶段阅读pre-script,除非我使用$(echo mypass | sudo -S cat /etc/shadow | grep myusername)

如果我提供sudo传递,脚本工作正常,但是我想知道是否有办法在没有在conf文件中写入传递的情况下执行此操作?

节点example.conf

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

1 个答案:

答案 0 :(得分:1)

只有root才能访问shadow是有充分理由的:任何可以更改它的人都可以轻松获得root访问权限。有一段时间,甚至可以计算旧的MD5密码。结论:除非你绝对必须,否则不要使用/etc/shadow。基本上,这减少了更改密码的需要。

我不太确定您要实现的目标,但是grep $username /etc/passwd应该为您提供所需的所有信息之外的哈希密码。

新手脚本不必以root身份运行。无论用户是谁,都可以运行守护进程。这是使用setuid节(有一个相应的setgid)实现的。因此,您以root用户身份安装该服务,并让它删除权限。

另一种选择是使用user-job。请务必enable user-jobs

无论你做什么:不要操纵/etc/shadow