【发布时间】:2021-06-19 07:17:16
【问题描述】:
我想从 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 次左右尝试写入工作。可能是什么问题?
【问题讨论】:
-
不确定。按此处的设计工作 - 但这是在 Ubuntu 上使用
www-data而不是 Centos/RHEL/... 和nginx。您确定您是以同一用户的身份调用 PHP 位吗? -
@tink 感谢您的测试。当 UID 的输出相同时,我怎么能以不同的用户身份调用 PHP 位?我不知道怎么检查。
标签: python php linux nginx permission-denied