我想从PHP运行Python脚本(说来话长),但我得到了一个PermissionError。但是,直接从命令行与PHP用户一起运行Python脚本似乎很好。
服务器以用户967(nginx)的身份运行,用户是pygroup组的成员。
下面是使用python文件(/var/www/py)的目录的权限:
-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打开一个在同一个目录中写入的文件:
#!/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运行它很好:
UID: 967
EUID: 967但是,如果我尝试使用来自另一个目录的以下PHP脚本来执行它:
<?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");然后得到以下输出:
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次尝试写一次。有什么问题吗?
发布于 2021-03-29 13:03:49
不仅是偶尔允许写入,SELinux有时也会报告错误。
解决方案:安装了大多数包更新,执行了SELinux日志的每一个故障排除建议,并重新启动了机器。之后,我不得不再次将SELinux设置为允许的。
这并不能解释为什么写作有时才起作用,但它现在总是起作用。
https://stackoverflow.com/questions/66749535
复制相似问题