我正在尝试为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
提升用户的事实,为什么权限仍被拒绝?
答案 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
(及其相关参数)。