У меня есть машина Ubuntu для безголовых тестов на селен.
Я генерирую скрипт python в /var/www/tmp/random123name.py через PHP и выполняю их. Сценарий работает при запуске из командной строки пользователя, не работает при запуске из Интернета (apache www-data: www-data user).
Скрипт вызывает некоторые системные / 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-данные в группу dialout и другие попытки. Спасибо за Вашу поддержку.
Как вы сами выяснили, меняется на sudoers
не применяются к текущим сеансам, только к новым сеансам. Поэтому вам нужно выйти и снова войти, чтобы увидеть это.
Но что более важно, вам не нужно sudo
для этой цели и позволяя www-data
пользователь для запуска python
так как root
без пароля крайне страшно. Конечно, есть способ заставить ваш скрипт работать без необходимости root
привилегии, как обычный пользователь, и я настоятельно рекомендую вам попытаться понять это, а не прибегать к sudo
для этого.
Я решил: недостаточно выйти обратно в youruser / root, вам нужно выйти из сеанса ssh и снова открыть его, чтобы загрузить все необходимое для работы visudo.