权限被拒绝从脚本读取 www-data 所拥有的文件

权限被拒绝从脚本读取 www-data 所拥有的文件

我正在尝试从某个位置复制一个文件并使用 Python 脚本以另一个名称保存它,但出现了以下错误:

    with open(src, 'rb') as fsrc:
IOError: [Errno 13] Permission denied: '/tmp/nginx-files/0000000007'

很明显,执行该操作的脚本没有权限执行该操作。

以下是脚本的用户和组:

-rw-rw-r-- 1 www-data www-data 1504 Jun  3 16:27 main.py

文件的用户和组:

-rw-------  1 www-data www-data 40448 Jun  3 16:19 0000000007

文件所在目录的用户和组:

drwxrwxrwx  2 www-data www-data  4096 Jun  3 16:56 nginx-files

这些文件直接由nginx

我使用自己的用户帐户运行脚本

python main.py

我如何允许我的脚本读取此文件并防止出现权限错误?

答案1

在决定允许做什么时,重要的不是脚本的所有者,而是执行脚本的用户。

在您的问题/评论中,似乎您使用自己的用户帐户运行它,而不是www-data,因此脚本可以执行您作为用户可以执行的操作。

-rw-------  1 www-data www-data 40448 Jun  3 16:19 0000000007

此文件仅可由其所有者读取和写入www-data。以您的用户帐户运行的脚本显然无法访问它,因此您的 Python 脚本中出现权限错误。


因此我认为可以通过两种方式解决此问题:

  • 以 身份运行脚本www-data。如果您的帐户具有管理员权限,则可以使用 来完成此操作sudo。否则,需要进行一些特殊配置才能允许您以 身份运行www-data。但是,如果您有sudo权限,则变得非常简单:

    sudo -u www-data python main.py
    
  • 打开0000000007文件的权限,使其组也可以读取和写入,而不仅仅是所有者,但仍然不是所有人:

    sudo chmod g+rw 0000000007
    

    现在确保您自己的用户也是该www-data组的成员,以便它可以从这些组权限中获益:

    sudo adduser YOUR_USERNAME www-data
    

    此后,您必须注销并重新登录,以使用户帐户的组更改生效。

    现在您应该能够访问该文件,并且您在您的帐户下运行的任何脚本也能够访问。

相关内容