Это можно сделать - опцию 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 .