Запуск exec как другого пользователя
Можно ли запустить exec() в качестве другого пользователя (в моем поле он работает как www-data). Я хочу выполнить script, которому нужен доступ к файлам, которые не принадлежат www-данным.
Ответы
Ответ 1
У меня было аналогичное требование несколько лет назад, что потребовалось несколько PHP-скриптов, чтобы поговорить с последовательным портом. Первым последовательным портом обычно является /dev/ttyS 0, принадлежащий root и в групповом dialout.
Для моей начальной настройки я добавил своего пользователя apache к групповому dialout. Сценарии PHP могли напрямую разговаривать с последовательным портом без проблем. Однако только один экземпляр script может открыть последовательный порт в любой момент времени, поэтому это решение не сработает.
Затем я создал демон, обеспечивающий уровень между последовательным портом и скриптами PHP. Сценарии PHP будут разговаривать с демоном по именованному каналу, и тогда демон будет отформатировать запросы и передать их на последовательный порт - выполняя немного кэширования на этом пути.
Таким образом, либо добавляйте www-данные, либо независимо от вашего пользователя apache, группе, которая владеет этими файлами, предоставляет разрешения на выполнение группы или использует прокси-сервер, как и я. Если безопасность касается вас, тогда я поеду с последним.
Ответ 2
Если у вас есть доступ к конфигурации сервера (предполагается, что это Apache), вы можете использовать suPHP. В конфигурации виртуального хоста вы можете явно указать пользователя и группу, для которых выполняется PHP скрипт:
<VirtualHost 192.168.1.1:80>
...
suPHP_UserGroup user group
...
</VirtualHost>
Этот параметр доступен для конфигураций suPHP, построенных с помощью опции --with-setid-mode=paranoid
.
Другим способом изменить идентификатор пользователя будет posix_setuid()
, для которого требуются соответствующие привилегии. Это означало бы запуск ваших PHP-скриптов как root, что является проблемой безопасности serios.
Ответ 3
Нет, не напрямую. Если вы работаете на Linux-машине и имеете права, вы можете установить бит setuid в свой файл.
Имейте в виду, что веб-сервер работает по-разному. Это очень важный механизм безопасности, и, обойдя его, вы можете вызвать уязвимость безопасности.
Ответ 4
Вы можете изменить пользователя, под которым работает ваш сервер. Это можно легко сделать, используя версию apache для windows (apache работает там как служба, и легко настроить пользователя, под которым выполняется apache).
Какую конфигурацию сервера вы используете?