Мне нужно разрешить скрипт PHP на моем локальном веб-сервере, чтобы SSH подключался к другому компьютеру для выполнения определенной задачи с некоторыми файлами. Мой httpd
работает как _www
с низкими разрешениями, поэтому установка прямого SSH без пароля затруднительна, если не сказать неуместна.
Способ, которым я делаю это сейчас, состоит в том, чтобы иметь минимальный PHP-скрипт, который sudo-exec (как и я) является сценарием оболочки, который находится вне корня документа. Сценарий оболочки, в свою очередь, вызывает (как и я) код PHP, который выполняет фактическую работу SSH, и печатает его вывод. Вот код.
read_remote_files.php
(скрипт, который я вызываю из моего браузера):
exec('sudo -u me -n /home/me/run_php.sh /path/to/my_prog.php', $results);
print $results;
/home/me/run_php.sh
(работает как я, вызывает все, что ему дают):
php $1 2>&1
sudoers
:
_www ALL = (me) NOPASSWD: /home/me/run_php.sh
Это все работает, так как my_prog.php называется как я и может SSH как я. Кажется, это не слишком небезопасно, поскольку run_php.sh
нельзя вызвать напрямую из браузера (вне корня документа). У меня проблема в том, что my_prog.php
не вызывается как программа HTTP, поэтому не имеет доступа к переменным среды HTTP (DOCUMENT_ROOT и т. Д.).
Два вопроса:
- Я делаю это слишком сложным?
- Есть ли простой способ для моего окончательного сценария получить переменные HTTP?
Спасибо!
Andy