nohup - 许可被拒绝

时间:2012-12-18 04:24:40

标签: shell nohup

我正在尝试为Ubuntu上的OrientDB(数据库)启动一个启动脚本。

目前这是导致问题的因素:

ORIENTDB_DIR="/usr/local/orientdb"
ORIENTDB_USER="www-user"
sudo -u $ORIENTDB_USER sh -c "cd \"$ORIENTDB_DIR/bin\"; /usr/bin/nohup server.sh 1>../log/orientdb.log 2>../log/orientdb.err &"

如果我启动脚本,则会产生以下结果:

sh: 1: cannot create ../log/orientdb.log: Permission denied

以下是设置:

  • www-user位于sudoers文件中
  • server.sh并且上面发布的任何shell脚本都具有root的执行权限。
  • 如果我将脚本更改为: sudo -u $ORIENTDB_USER sh -c "cd \"$ORIENTDB_DIR/bin\"; /usr/bin/nohup pwd 1>/home/www-user/test.log &"test.log显示/usr/local/orientdb/bin/作为工作目录。
  • /usr/local/orientdb/log存在,但是是一个空文件夹。

鉴于以上情况以及我使用sudo提升用户的事实,为什么权限仍被拒绝?

2 个答案:

答案 0 :(得分:0)

尝试将脚本的最后一行重写为:

sudo -u $ORIENTDB_USER sh -c "/usr/bin/nohup \"$ORIENTDB_DIR\"/bin/server.sh 1> \"$ORIENTDB_DIR\"/log/orientdb.log 2> \"$ORIENTDB_DIR\"/log/orientdb.err &"

如果仍然不起作用,则www-user可能没有/usr/local/orientdb/log的写入权限(请注意,您说/usr/local/orientdb/logs存在,但是是一个空文件夹:其中一个最后有一个s

答案 1 :(得分:0)

您可能误解sudo一点 - sudo并不一定会提升用户的权利;事实上,它可能会减少他们拥有的权利。当您传递sudo -u标志时,它将更改为该用户。如果该用户拥有更多权限 - 例如root(默认情况下-u未通过) - 那么您将获得更多权利。如果用户拥有较少的权限 - 例如nobody,那么您的权利就会减少。您说log目录具有以下权限:

drwxrwxr-x 2 root root 4096 Dec 11 10:13 /usr/local/orientdb/log

然而,您正在更改为www-user用户。 www-user用户,除非它是root组的一部分(不太可能),否则将无法写入该目录:它只能由所有者和组写入,www-user显然不是root用户,www-user可能不属于root组。

简而言之,如果要提升到-u,请不要传递root(及其相关参数)。