Мне нужно перезагрузить встроенную систему через веб-страницу локальной сети (скрипт CGI). У меня есть страница, построенная, и она вызывает скрипт на станции (которая является (apache) хостом веб-страницы). Этот сценарий должен вызывать команду перезагрузки, но он не работает.
Одна попытка была такая:
#!/bin/bash sudo reboot
Он работал, когда запускался из командной строки, когда входил телнет, но не при вызове CGI. Ошибка (с /var/log/apache2/error.log) была:
sudo: tty отсутствует и не задана программа askpass
Хорошо, достаточно справедливо. Я попытался добавить NOPASSWDв файл sudoers для правильного пользователя, но без сигары. Поэтому я попробовал этот метод, который я нашел в Интернете. Это также работало при запуске из командной строки, но не с сервера. Я подумал, что не получу ту же ошибку, так как это было через Telnet, и это не так.
#!/usr/bin/expect set name [lindex $argv 0] spawn telnet $name expect "login:" send "<user>\r" expect "Password:" send "Reformed\r" send "sudo reboot\r"
Ошибка была:
искаженный заголовок из скрипта. Неверный заголовок = ОШИБКА !!: WebInterfaceReboot
(если я жестко закодирую IP в скрипте, это выдаст мне ошибку Bad header=spawn telnet 192.168.0.79 #: WebInterfaceReboot send: spawn id exp6 not open while executing "send "<username>\r"" (file ./reboot2.sh" line 9))
Я включил ведение журнала cgi на сервере, и «подробный» журнал CGI больше не помог:
Примечание. «RebootButton» - это название кнопки, нажатой на странице для вызова сценария оболочки.
Я почти уверен, что это не настоящий CGI-скрипт, поскольку, когда я тестировал первую реализацию, скрипт явно работал. Какие изменения я должен внести в сценарий или установку, чтобы команда перезагрузки могла работать таким образом?
Разве это не будет работать с `sudo reboot` или` sudo shutdown -r now`, если вы добавите пользователя apache в sudoers и позволите ему выполнить `shutdown` без пароля? Я знаю, что вы пробовали нечто подобное, но я не могу сказать, добавили ли вы нужного пользователя в sudoers. От какого пользователя работает ваш веб-сервер?
terdon 11 лет назад
0
@terdon - Я пытался добавить «hhp», который является пользователем практически для всего. Как мне подтвердить пользователя apache?
SSumner 11 лет назад
0
`PS Aux | grep apache2`, должен быть один процесс, запускаемый `root`, а некоторые другие запускаются чем-то вроде` www-data`. Вы хотите `www-данные`.
terdon 11 лет назад
0
@terdon - так что мне нужно добавить пользователя "www-data" в файл sudoers с NOPASSWD для перезагрузки?
SSumner 11 лет назад
0
Да, это должно сделать это.
terdon 11 лет назад
1
1 ответ на вопрос
1
terdon
Веб-сервер работает от имени другого пользователя, именно этого пользователя вы хотите добавить sudoers. Чтобы узнать имя пользователя apache, запустите эту команду (вывод из моей системы должен быть похожим):
Итак, пользователь apache www-data, вы должны разрешить этому пользователю запускать перезагрузку без пароля (это не очень хорошая идея с точки зрения безопасности, но эй):
www-data ALL=NOPASSWD:/sbin/reboot
Безопасность должна быть в порядке - она находится в закрытой сети, а сайт уже защищен паролем
SSumner 11 лет назад
0
Я собираюсь принять, потому что я думаю, что это был правильный путь, но я изменил CGI, чтобы просто вызвать команду системной перезагрузки (`system (sudo reboot);`), которую, как я думал, я пробовал ранее, и она работает
SSumner 11 лет назад
0
@SSumner это работает, потому что вы добавили `www-data` в sudoers, верно?
terdon 11 лет назад
0