【问题标题】:Write permissions denied even after 777即使在 777 之后写入权限也被拒绝
【发布时间】:2014-06-30 03:57:48
【问题描述】:

我正在运行一个 python CGI 脚本,它必须在目录位置创建一个视频。

平台:Ubuntu 14.04 64-bit

Python 版本:2.7.6

脚本正在由用户运行:www-data

我有一个目录mydirmydir 的权限是 777(递归)。此目录归用户所有:www-data 和组www-data。 Python 脚本在mydir 的子目录中创建了一个新目录,但是引发了一个异常:

IOError: [Errno 13] Permission denied: 'path/to/file.ext'

我观察到创建的新目录令人惊讶地具有以下状态:

drwxrwxr-x 3 me   me   4096 <Timestamp> newdir

当我早些时候检查时,该进程由www-data 运行,但现在该文件夹归我登录的当前用户所有。 (此处由'me' 表示)。 此外,所有权限都已设置,除了检查其他权限r-x。没有写权限。这证明引发的异常是合理的。

我尝试了os.umask(0000)os.chmod('mydir',0777)。第一个没有任何影响。第二个,我不知何故没有权限。有人可以帮忙吗?这个问题真的很烦人。我在这里错过了什么?

注意:python文件的触发方式如下:cronjob调用PHP文件,该文件经过处理后向Python脚本发送post请求。

编辑:请让我知道@MattDMo 的解决方案是否有效(我不会对其进行测试,因为我已经改变了我的方法)。如果有人发现它有效,我会将其标记为已接受。

【问题讨论】:

  • 我已经搜索过了。但没有找到解决办法
  • cron 作业是否由 www-data 运行?
  • 你是在cron作业中使用curl还是php,这可以改变运行整个作业集的用户。
  • @MattDMo 否,cron 作业不是由 www-data 运行的。我观察到,如果我从当前登录的用户设置cron 作业,则文件夹归该用户所有。我还使用root 运行cron 作业,然后文件夹归root 所有。
  • @thebwt 我正在使用php 调用cron 作业中的文件。我看到所有者发生了变化,因为当我编写日志文件时,它归 www-data 所有,但新文件夹归创建 cron 作业 meroot 的用户所有。

标签: python cgi permission-denied


【解决方案1】:

看起来您需要做的就是编辑您的crontab 并将www-data 添加为用户:

*/5 * * * * www-data php call_python.php

这也可以通过命令行运行crontab-u 选项来完成,该选项指定要更改其crontab 的用户的名称:

sudo crontab -u www-data -e

【讨论】:

  • 谢谢!我实际上改变了我的方法。我从我的系统中切断了CGI 部分。我做了一些重构。现在我直接调用python脚本,将PHP操作移植到Python本身。
  • 我不会将上述答案标记为已接受,因为我尚未对其进行测试。如果有人发现这行得通,请告诉我。
猜你喜欢
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2019-10-05
  • 1970-01-01
  • 2015-12-05
  • 2019-01-13
  • 1970-01-01
相关资源
最近更新 更多