PHP создать поддельный TTY для sudo - PullRequest
1 голос
/ 03 ноября 2011

Вкратце;

PHP-скрипт должен запускаться /etc/init.d/nagios reload, добавлен apache ALL = (nagios) NOPASSWD: /etc/init.d/nagios в файл sudo-ers, но для использования SUDO PHP потребуется TTY (я не хочу удалять Defaults requiretty, поэтому я хочу «подделать» или создайте TTY для сценария PHP, чтобы он мог перезагрузить Nagios.

RedHat 6, PHP 5.3

1 Ответ

2 голосов
/ 27 апреля 2012

Это можно сделать - опцию sudo requiretty относительно легко победить, поэтому она сама по себе не добавляет особой безопасности.Если вы действительно уверены, что хотите оставить его включенным (может быть, вам нужно поддерживать запуск скрипта в системах пользователей, для которых requiretty включен по умолчанию?), Тогда создание tty может быть правильным решением.

Это, вероятно, будет огромной болью в прямом PHP, хотя.Я искал справочные документы на php.net, и я не вижу никаких признаков того, что у него есть какие-либо встроенные служебные функции для выделения или использования ptys.Если вы действительно хотите сделать это на чистом PHP, вам, вероятно, понадобится обратиться к исходному коду glibc для вызова forkpty () (включая другие зависимости, которые у него есть, такие как openpty (), getpt (), grantpt (),unlockpt () и т. д.).По своей сути это будет включать в себя open () с использованием псевдотерминального главного устройства в / dev / ptmx для получения дескриптора главного файла PT, выполнения chown и ioctl TIOCSPTLCK, а затем определения, какое устройство в / dev / pts является соответствующим ведомым устройством.откройте его.

Но я бы настоятельно рекомендовал использовать часть tty подделки вне PHP, возможно, путем добавления некоторого скрипта-обертки sudo в Python (который имеет несколько удобных функций в pty).модуль ) или даже bash + что-то вроде socat .

...