我正在尝试从某个位置复制一个文件并使用 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
此后,您必须注销并重新登录,以使用户帐户的组更改生效。
现在您应该能够访问该文件,并且您在您的帐户下运行的任何脚本也能够访问。