2016-08-19 4 views
0

Сегодня я столкнулся с странным поведением, которое я не понимаю.
Я пытаюсь создать каталог на локальном диске с помощью скрипта PHP 7.0 с использованием функции mkdir(), но он вызывает ошибку «разрешено».PHP от пользователя root, разрешение mkdir отклонено

В моем опыте (хотя и очень мало) это всегда означало, что пользователь, выполняющий PHP-скрипт, не имеет права писать в каталог. Это имеет смысл для меня и, как правило, не является проблемой при разработке веб-приложений. Пользователь PHP по умолчанию при использовании Apache - www-data, и у меня нет проблем с ним.

В этом случае, хотя я использую Zend Framework 2 и, в частности, я использую его консольные маршруты, поэтому я не прохожу через Apache (исправьте меня, если я ошибаюсь). Я вызываю мой сценарий как:

php index.php route name [--options] 

с моим пользователем (который не корень но это sudoer). Проблемы возникают, если я выхожу из функции PHP get_current_user(), потому что вместо ожидаемого имени пользователя я получаю «root». Не только это, но я получаю «доступ запрещен» при использовании mkdir() в следующем каталоге:

drwxr-xr-x 2 www-data www-data 4096 Aug 19 21:21 logs 

То, что я понял из этого является то, что я, вероятно, я не суперпользователя, как PHP, кажется, предполагает. Если я запустил сценарий с 'sudo' спереди, я могу создать нужные папки, но разрешения не совпадают с теми, которые я указываю в моей функции mkdir(). Если я пишу mkdir('path', 0777) я тогда получаю:

drwxr-xr-x 3 root root 

Это я не понимаю. Итак, если кто-то может помочь мне понять, что я делаю неправильно, я был бы очень благодарен. Имейте в виду, что тот факт, что я перехожу через Zend Framework 2, может повлиять на это поведение (хотя я не заинтересован в том, чтобы так думать).

Заранее благодарю вас за ваше время.

Редактировать.

Я только что понял, что я не сказал вам, какова моя конечная цель, поэтому я сейчас расскажу о вещах в контексте, извините.

То, что я пытаюсь сделать, это использовать этот скрипт (запускать либо из корня или моего пользователя, предпочтительно от моего пользователя), чтобы создать эти папки внутри

/var/www 

и к затем сможете читать и записывать файлы (и, возможно, другие папки) в эти справочники со стандартным пользователем , который в моем случае - www-data

+0

Возможно, selinux вызывает проблемы? – Machavity

+0

Не знаете, почему get_current_user() возвращает «root», однако правильно, что ваш пользователь не должен писать в этот каталог журналов. Я предполагаю, что вы не в группе www-data, и это не доступно для всего мира. В качестве примечания, пожалуйста, не создавайте 777 каталогов. Я понимаю, что это было для тестирования, но используйте группы UNIX или setfacl. – jedifans

+0

Ах, хорошая старая рекомендация «не использовать 777». Я понимаю, спасибо. Я просто использую его как способ помочь мне легче определить проблему, не беспокоясь о разрешениях (на vm, ничего важного в этом, на моем компьютере, так что не волнуйтесь). Я отредактировал этот вопрос, так что, возможно, вы можете помочь мне в дальнейшем –

ответ

0

ваш php запускается как расширение apache и использует разрешения apache. Если вам нужно создать папку под именем root, вы можете создать для нее скрипт cron, который будет отслеживать изменения в каком-либо файле и создавать каталог с правами root. Другой способ сделать это, используя suid extension, но это немного сложно.

+0

Он заявляет в том, что он запускает скрипт из командной строки с правами root. –

+0

Привет, спасибо за ваш ответ. Я редактировал свой вопрос с некоторой дополнительной информацией о том, какова моя фактическая цель, чтобы вы могли помочь мне немного больше. Я не могу решить свою проблему с вашим текущим ответом –

Смежные вопросы