【问题标题】:file writing permission error as user www-data作为用户 www-data 的文件写入权限错误
【发布时间】:2015-08-11 09:11:18
【问题描述】:

我正在尝试通过以用户 www-data 运行 python 脚本来写入文件。当我使用以下命令运行脚本时:

sudo python my_script.py

它写得很好。当我将 PHP 脚本作为 www-data 运行时,它不会写入。权限:

folder(PiControl....contains status_log file): drwxrwxrwx
file(status_log....the file I am trying to write to): -rwxrwxrwx User:www-data group:www-data

写入文件 Python 代码:

#!/usr/bin/python
import datetime

status="on"

with open("status_log", "a") as myfile:
    myfile.write("{} {} {}".format("<br>light is now:", status,datetime.datetime.now()))

我创建了一个网页按钮来运行文件

谁能告诉我这里要改什么?

【问题讨论】:

  • 无论文件在哪里,www-data 是否都可以访问上面的所有文件夹?如果祖父母或曾祖父母仍被锁定,则让文件及其直接父级可写是无关紧要的。
  • 我有一个从我桌面上的文件夹到我的 www/ 目录的符号链接来提供网页。需要允许来自我桌面上的文件夹的路径还是来自实际 www/ 文件夹的路径?
  • 你能把写文件的两个脚本的部分贴出来吗?
  • 符号链接不能绕过权限。 www-data 用户将需要访问您的主目录,这是您真正不应该做的事情...... www-data 应该是最低必要的 privs 帐户。让它访问系统上的其他东西是个坏主意。
  • 是的,我意识到这是非常不安全的.....我只是在玩 Python 和树莓派

标签: php python permissions


【解决方案1】:

因为当 PHP 读取 status_log 他们在我的本地目录中找到它时,我从我的主目录中对我的 web 文件进行了符号链接,当 www-data 写入它时(通过上面的 Python)它在 /var/ 中创建了文件www,而不是我试图从中读取它的 /home。

解决方案是将正在读取的文件的路径更改为它的位置:/var/www

【讨论】: