3

我正在尝试在 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用来提升用户的事实,为什么仍然拒绝许可?

4

2 回答 2

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在末尾有一个)

于 2012-12-18T04:54:54.477 回答
0

您可能sudo有点误解——sudo不一定提升用户的权利;事实上,这可能会减少他们拥有的权利。当您传递标志时,它将更改为该用户sudo-u如果该用户拥有更多权限——root例如​​(默认的 if-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.

于 2012-12-19T02:19:50.833 回答