OLDJman
@OLDJman

Как запустить PHP скрипта с правами root?

Доброй зимы Вам!

Начну сразу по сути. У меня Os X Yosemite. Включил встроенный Apache и разблокировал встроенный же PHP.

При выполнении скриптов, работающих с файлами на компьютере, выскакивает ошибка доступа. Она благополучно лечится, если в папке, с которой работаю, указать права на чтение и запись (если второй требуется).
Скрипт запускаю из браузера Mozilla последней версии (хотя в Safari тоже самое).

Опытным путем было замечено, что скрипт запускается от имени Любых Пользователей. (собственно их права и переназначаю)

Отсюда суть вопроса. Как мне запускать php скрипт от имени меня, пользователя данной системы, у которого по умолчанию стоят права на чтение и запись, чтобы вручную не приходилось постоянно менять права доступа Любых Пользователей, от чьего имени запускается скрипт?
И почему он запускается от имени Любых Пользователей, ведь я его в системе запускаю через браузер вручную? (наверняка, это связано с политикой безопасности, но я пока не проникся всеми нюансами, если не сложно, кратко расскажите)

На данный момент есть решение, просто в нужных мне папках вручную прописать права доступа, но это не верно, ведь есть пользователь в системе, Я, под которым свободно все файлы меняю. Мне кажется логичным под ним производить все изменения.

Заранее спасибо за ответы и теплого Вам солнца.

UPD - раскрытое решение для не посвященных

Мне сложно было применить все то, что ниже описали, так как я видимо еще совсем нуб.
Оба решения были верные, я выбрал запуск сервера Apache от имени пользователя
Для этого я в конфигурации php посмотрел под каким именем пользователя запускается мой сервер Apache (создаем файл php c функцией phpinfo() и открываем его в браузере, в таблице Configuration ищем колонку User/Group, в ней прописано имя пользователя, в моем случае это был _www)
Далее заходим в файл /etc/apache2/httpd.conf и ищем там ваше имя пользователя. У меня это была строка 181 User _www
строка 182 Group _www
Значение _www изменил на свое имя пользователя, сохранил и перезагрузил Apache.
Все, теперь он работает с правами read/write
ВНИМАНИЕ 1 - пишите имя пользователя без лишних знаков, так, как оно есть, моя первая ошибка была, прописать _имяпользователя. Разумеется сервер даже не запустился. Убрав подчеркивание, все получилось.
ВНИМАНИЕ 2 - осознавайте, что вы делаете. Дело в том, что ниже правильно написали, данные права, в моем случае администратора, дают вам запись и чтение почти всех файлов на компьютере, и если вас взломают, то злоумышленник получит почти полный доступ к компьютеру. У меня локальный сервер, и мне это нужно, плюс после конца работы, я выключаю Apache. Однако, безопасность Unix систем в первую очередь гарантируется жестким разграничением чего можно, а чего нельзя. Не стоит лишний раз нарушать это правило.

Спасибо за внимание
  • Вопрос задан
  • 6180 просмотров
Решения вопроса 2
nazarpc
@nazarpc
Open Source enthusiast
Браузер к серверу не имеет никакого отношения, запрос принимает Apache. Посмотрите в конфиге Apache (предположительно файл envvars) параметры APACHE_RUN_USER и APACHE_RUN_GROUP.
Указывать там root категорически не рекомендую, так как скачанная тема WP с вирусом сможет форматнуть вам систему или ещё чего поинтересней.
Файлы вы копируете от имени своего пользователя - то есть права изначально стоят вашего пользователя. Вообще-то можете поставить в конфиге своего пользователя, но вновь таки, у скрипта будет доступ к вашей домашней папке и созданным вами файлам, так что думать что запускать всё равно нужно.
Ответ написан
Ваша задача аналогичная той, что решают разработчики сайтов на PHP, меняя файлы по ftp/sftp. И здесь есть два пути:

  • Позволить всем пользователям записывать в папки и файлы сайта
  • Работать под тем пользователем, что и PHP/Apache

Как выяснить под каким пользователем работает PHP у вас зависит от конфигурации. Где нужно смотреть конфиги Apache, где php-fpm. Обычно, если об Apache разговор, PHP работает по тем же пользователем, что и Apache (но есть разные способы, типа http-itk, это изменить).

Промежуточный варианта здесь - работать от имени той же группы, что и PHP. Тогда на запись нужно давать доступ не всем подряд, а только владельцу и группе.

Ваша ситуация отличается от типовой тем, что у Вас хостинг расположен на той же машине, что и средства разработки. Но сути это не меняет. Решение тоже самое.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Безотносительно того, что это ОЧЕНЬ ГЛУПАЯ затея - можно поставить apache2-mpm-itk, и в вхосте в AssignUserID прописать root root.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы