我正在尝试让 OrientDB(一个数据库)在 Ubuntu 上运行的启动脚本。
目前这是导致问题的行:
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
提升用户权限,为什么权限仍然被拒绝?
最佳答案
您可能对 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
的一部分> 组。
简而言之,如果您想提升到 root
,请不要传递 -u
(及其相关参数)。
关于shell - nohup - 权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13926240/