shell - nohup - 权限被拒绝

标签 shell nohup

我正在尝试让 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/

相关文章:

ubuntu - 身份验证 localhost 失败,尽管有 ssh-keys

java - 日志文件中的奇怪消息 @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^

linux - 如何捕获多个命令的输出?

bash - 即使测试失败,TravisCI构建也会成功

linux - Bash - 在目录及其 sbdirectories 中查找多个特定文件夹并重命名这些特定文件夹

linux脚本移动目录中的文件和数据

nohup - nohup,因为后台任务不返回提示

linux - 后台作业在没有 nohup/disown 的情况下更改为守护进程?

linux - 当终端关闭时,Laravel 5.6 在后台的队列处理停止

linux - shell脚本检查 `service httpd restart`命令状态?