Сегодня я столкнулся с странным поведением, которое я не понимаю.
Я пытаюсь создать каталог на локальном диске с помощью скрипта 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
Возможно, selinux вызывает проблемы? – Machavity
Не знаете, почему get_current_user() возвращает «root», однако правильно, что ваш пользователь не должен писать в этот каталог журналов. Я предполагаю, что вы не в группе www-data, и это не доступно для всего мира. В качестве примечания, пожалуйста, не создавайте 777 каталогов. Я понимаю, что это было для тестирования, но используйте группы UNIX или setfacl. – jedifans
Ах, хорошая старая рекомендация «не использовать 777». Я понимаю, спасибо. Я просто использую его как способ помочь мне легче определить проблему, не беспокоясь о разрешениях (на vm, ничего важного в этом, на моем компьютере, так что не волнуйтесь). Я отредактировал этот вопрос, так что, возможно, вы можете помочь мне в дальнейшем –