无法从 PHP 运行生成的 python(selenium)脚本

无法从 PHP 运行生成的 python(selenium)脚本

我有一台用于无头 selenium 测试的 Ubuntu 机器。

我通过 PHP 在 /var/www/tmp/random123name.py 中生成一个 python 脚本并执行它们。从命令行用户运行该脚本时有效,从 Web(apache www-data:www-data 用户)运行则失败。

该脚本调用了一些系统/python模块:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from time import sleep, strftime
import os, json
from pyvirtualdisplay import Display

此代码返回 1:

$python = "sudo /usr/bin/python /var/www/tmp/random123name.py";
exec($python, $output, $return);
echo "OUT<pre>".print_r($output,1)."</pre>"; #returns empty
echo "RET<pre>".print_r($return,1)."</pre>"; #returns 1

我以这种方式修改了 /etc/sudoers,但没有成功:

www-data ALL=(ALL:ALL) NOPASSWD: /usr/bin/python

我也试过

www-data ALL=(ALL:ALL) NOPASSWD: /usr/bin/python /var/www/tmp/

将 www-data 添加到 dialout 组并进行了一些其他尝试。感谢您的支持。

答案1

我解决了:退出回 youruser/root 是不够的,您需要退出 ssh 会话并重新打开它以加载 visudo 工作所需的一切。

答案2

正如您自己所发现的,更改不会sudoers应用于正在运行的会话,只会应用于新会话。因此您需要注销并再次登录才能看到它。

但更重要的是,你不应该sudo为此目的而需要密码,允许用户以无密码身份www-data运行是非常可怕的。当然,有一种方法可以让你的脚本在不需要特权的情况下运行,作为普通用户,我强烈建议你尝试弄清楚,而不是为了这个目的而诉诸密码。pythonrootrootsudo

相关内容