Intereting Posts
Получить образ базового продукта в Magento лучший подход для слайдера jQuery с динамическим представлением / следующим контентом? как придерживаться принципа Don't-Repeat-Yourself (DRY), когда будет слишком много if-then-else, делая код нечитаемым? WooCommerce: поле пароля учетной записи на странице проверки Symfony 2 – Лучшая практика для загрузки изображения на Amazon S3 Английская база данных словарей для MySQL – PHP Передача именованных параметров в php-функцию через call_user_func_array Возможно ли с помощью javascript найти последнее измененное время файла? Удаление одной кавычки из строки в php Использовать метод регистрации по умолчанию Alter Laravel? Как организовать просмотр страны / города / города в MVC Получить идентификатор транзакции заказа от authorize.net Авторизовать AIM Что означают эти два параметра для WScript? CakePHP: создание новой строки HABTM вместо обновлений Иногда маршруты Codeigniter не работают

Запуск exec как другого пользователя

Можно ли запустить 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).

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