Shell nohup-拒绝许可

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 &" 如

我正试图在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
提升用户的事实,为什么权限仍然被拒绝?

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

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:权限被拒绝