Запуск exec от имени другого пользователя - PullRequest
14 голосов
/ 17 января 2011

Можно ли запустить exec () от имени другого пользователя (на моем компьютере он работает как www-data). Я хочу выполнить скрипт, которому нужен доступ к файлам, которые не принадлежат www-данным.

Ответы [ 4 ]

6 голосов
/ 17 января 2011

Если у вас есть доступ к конфигурации сервера (при условии, что это Apache), вы можете рассмотреть возможность использования suPHP .В конфигурации виртуального хоста вы можете явно указать пользователя и группу, для которой выполняется скрипт PHP:

<VirtualHost 192.168.1.1:80>
...
suPHP_UserGroup user group
...
</VirtualHost>

Этот параметр доступен для конфигураций suPHP, созданных с параметром --with-setid-mode=paranoid.

Другим способом изменения идентификатора пользователя будет posix_setuid(), для которого требуются соответствующие привилегии.Это означало бы запуск ваших PHP-скриптов с именем root , что является серьезной проблемой безопасности.

4 голосов
/ 17 января 2011

У меня было такое же требование несколько лет назад, когда требовалось несколько сценариев PHP для связи с последовательным портом. Первый последовательный порт, как правило, / dev / ttyS0, принадлежит root и находится в групповом соединении.

Для первоначальной настройки я добавил своего пользователя apache в групповой набор. Сценарии PHP могли напрямую общаться с последовательным портом без проблем. Однако только один экземпляр сценария может одновременно открыть последовательный порт, поэтому это решение не может работать.

Затем я создал демон, обеспечивающий слой между последовательным портом и сценариями PHP. Сценарии PHP будут общаться с демоном через именованный канал, а затем демон форматирует запросы и передает их на последовательный порт, выполняя небольшое кэширование.

Итак, либо добавьте www-данные, либо кем бы то ни было ваш пользователь apache, в группу, которой принадлежат эти файлы, предоставив разрешения на выполнение группы, или используйте прокси, как у меня. Если вас беспокоит безопасность, то я бы пошел с последним.

1 голос
/ 17 января 2011

Нет, не напрямую. Если вы используете Linux и у вас есть права, вы можете установить бит setuid в вашем файле.

Имейте в виду, что веб-сервер работает от имени другого пользователя по причине. Это очень важный механизм безопасности, и обходя его, вы можете вызвать уязвимость системы безопасности.

0 голосов
/ 17 января 2011

Вы можете изменить пользователя, под которым работает ваш сервер. Это можно легко сделать с помощью версии apache для Windows (apache запускается там как служба, и легко настроить пользователя, под которым работает apache).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...