Shell nohup-拒绝许可
我正试图在Ubuntu上为OrientDB(一个数据库)创建一个启动脚本 这是当前导致问题的线路:Shell nohup-拒绝许可,shell,nohup,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 &" 如
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
以下是设置:
在sudoers文件中www-user
和上面发布的任何shell脚本都具有root用户的执行权限server.sh
- 如果我将脚本更改为:
,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 -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
)你可能有点误解了sudo
-sudo
不一定能提升用户的权利;事实上,这可能会减少他们拥有的权利。当您传递sudo
-u
标志时,它将更改为该用户。如果该用户拥有更多权限-root
,例如(默认值If-u
),则您将获得更多权限。如果用户拥有较少的权限-例如,无人
,则您将拥有较少的权限。您说过log
目录具有以下权限:
drwxrwxr-x 2 root root 4096 Dec 11 10:13 /usr/local/orientdb/log
然而,您正在更改为www用户
用户。www用户
用户,除非它是root
组的一部分(不太可能),否则将无法写入该目录:它只能由所有者和组写入,www用户
显然不是root
用户,www用户
可能不是root
组的一部分
简而言之,如果要提升到
root
,sudo
并不总是提升用户,请不要传递-u
(及其相关参数)sudo
更改用户,最常见的更改为root
,但您正在将其更改为www-user
,这可能比您当前的用户特权更低。@icktoofay:创建www-user
后,我将其添加到sudoers:usermod-aG-sudo-www-user
。这意味着www用户
可以将sudo转换为根
,对吗?这取决于您的sudo
配置。可能是的。但这不是我想说的。我是说sudo
with-u
不会提升到root
,而是切换到该用户。如果您想改为root
,请关闭-u
及其参数。如果我关闭-u username
,我仍然会看到权限被拒绝错误。嗯……如果您运行ls-ld/usr/local/orientdb/log
,会怎么样?很抱歉,文件夹是log
,而不是logs
:)在我使用您的更改后,我仍然看到权限被拒绝:sh:1:无法创建/usr/local/orientdb/log/orientdb.log:权限被拒绝