首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PermissionError运行Python时

从PermissionError运行Python时
EN

Stack Overflow用户
提问于 2021-03-22 15:54:18
回答 1查看 147关注 0票数 0

我想从PHP运行Python脚本(说来话长),但我得到了一个PermissionError。但是,直接从命令行与PHP用户一起运行Python脚本似乎很好。

服务器以用户967(nginx)的身份运行,用户是pygroup组的成员。

下面是使用python文件(/var/www/py)的目录的权限:

代码语言:javascript
复制
-rwxrwxr-x. 1 homeuser pygroup   119 Mar 22 15:18 test.py
-rw-rw-r--. 1 homeuser pygroup     2 Mar 22 15:24 x.txt

下面的Python test.py打开一个在同一个目录中写入的文件:

代码语言:javascript
复制
#!/usr/bin/env python3
import sys
import os

print("UID:", os.getuid())
print("EUID:", os.geteuid())

with open(os.path.join(sys.path[0],"x.txt"), "w") as f:
    pass

使用sudo -u nginx /var/www/py/test.py运行它很好:

代码语言:javascript
复制
UID: 967
EUID: 967

但是,如果我尝试使用来自另一个目录的以下PHP脚本来执行它:

代码语言:javascript
复制
<?php
echo "UID: " . posix_getuid() . "\n";
echo "EUID: " .  posix_geteuid() . "\n";
echo "Name: " . posix_getpwuid(posix_getuid())['name'] . "\n\n";
echo "Running python:\n";
echo shell_exec("/var/www/py/test.py 2>&1");

然后得到以下输出:

代码语言:javascript
复制
UID: 967
EUID: 967
Name: nginx

Running python:
UID: 967
EUID: 967
Traceback (most recent call last):
  File "/var/www/py/test.py", line 8, in <module>
    with open(os.path.join(sys.path[0],"x.txt"), "w") as f:
PermissionError: [Errno 13] Permission denied: '/var/www/py/x.txt'

这证实了PHP脚本是以用户nginx的身份运行的。但是它在从命令行运行时抛出一个错误,因为这个用户工作正常。

SELinux设置为允许的。Nginx和SELinux日志中也没有错误。我错过了什么?

更新 2021-03-23:它似乎不正常地工作.在从PHP调用python脚本时,大约每10次尝试写一次。有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-29 13:03:49

不仅是偶尔允许写入,SELinux有时也会报告错误。

解决方案:安装了大多数包更新,执行了SELinux日志的每一个故障排除建议,并重新启动了机器。之后,我不得不再次将SELinux设置为允许的。

这并不能解释为什么写作有时才起作用,但它现在总是起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66749535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档