Запуск 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).

Какую конфигурацию сервера вы используете?