мне нужна помощь с судо-А
команда в сценарии оболочки. Опция -A предназначена для AskPass. Согласно справочная страница sudo:
Обычно, если sudo запрашивает пароль, он считывает его из пользовательского
Терминал. Если указана опция -A (askpass),
графическая) вспомогательная программа выполняется для чтения пароля пользователя и
вывести пароль на стандартный вывод. Если SUDO_ASKPASS
установлена переменная окружения, она указывает путь к хелперу
программа.
Меня интересует AskPass, потому что я использую apache2 (v 2.4.41) на сервере Ubuntu 16.04. Веб-страница Apache должна выполнить сценарий оболочки. Веб-страница выполняет скрипт от имени пользователя www-данные
. Но скрипт должен запускать другую программу, которую можно запустить только от имени пользователя. пользователь1
. Так что мне нужно sudo --AskPass
так что пользователь www-данные
может запустить пользователя пользователь1
код.
Моя установка: следуя таким примерам, как здесь и здесь, я написал эти два скрипта в /var/www/html/
каталог:
user1@myUbuntu:/var/www/html$ ls -l
-rwxr-xr-x 1 www-data TestUsers 29 фев 28 11:34 passwdScript.sh
-rwxrwxr-x 1 www-data TestUsers 2009 28 февраля 11:32 webpageScript.sh
user1@myUbuntu:/var/www/html$
(Группа TestUsers
включает пользователей www-данные
и пользователь1
.) Немного passwdScript.sh
script предназначен для отправки пароля user1 на STD OUT:
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ больше passwdScript.sh
#!/бин/ш
эхо 'мой пароль'
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ ./passwdScript.sh
мой пароль
user1@myUbuntu:/var/www/html$
(Да, я знаю, что это очень небезопасно, но я буду единственным человеком, использующим этот сервер. Меня беспокоит только функциональность.)
Хорошо: теперь, когда все вышеперечисленное настроено, вот мой веб-страницаScript.sh
скрипт, который предназначен для вызова sudo --AskPass
:
echo "Сценарий выполняется."
экспортировать SUDO_ASKPASS="/var/www/html/passwdScript.sh"
эхо "Тест :: $SUDO_ASKPASS"
cd /home/user1/путь/к/другому/каталогу
pwd
sudo -u user1 --askpass $SUDO_ASKPASS 'runUser1Script.exe'
echo "Выполнение скрипта завершено."
Вот менее впечатляющий вывод:
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ sudo -u www-data ./webpageScript.sh
Скрипт работает.
Тест :: /var/www/html/passwdScript.sh
/home/user1/путь/к/другому/каталогу
Извините, попробуйте еще раз.
Извините, попробуйте еще раз.
sudo: 3 попытки неправильного ввода пароля
Закончил выполнение скрипта.
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$
Таким образом, очевидно, sudo --аскпароль
команда не принимает пользователь1
пароль. Я пробовал варианты этой команды весь день. Кто-нибудь видит, что я делаю неправильно?