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