我有一台用于无头 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
运行是非常可怕的。当然,有一种方法可以让你的脚本在不需要特权的情况下运行,作为普通用户,我强烈建议你尝试弄清楚,而不是为了这个目的而诉诸密码。python
root
root
sudo