LINUX.ORG.RU
ФорумAdmin

У PHP не хватает прав на fopen

 , , ,


1

3

На локальной машине (линукс минт) организовал хостинг.

PHP выдает ошибку: PHP Warning: fopen(/var/..../section_pub_id.html): failed to open stream: Permission denied in ....

Ошибка, конечно, гуглится, но дают советы выставить права 777. Я считаю что это как-то не правильно, потому, что:

Захожу на купленный виртуальный хостинг по ssh и смотрю там права:

drwxr-xr-x 2 webuser customers 4096 Apr 23 17:52 .
drwxr-xr-x 3 webuser customers 4096 Jul 25  2014 ..
-rw-r--r-- 1 webuser customers 2779 May  7 16:22 section_pub_id.html

(тоесть никаких 777, и при этом все работает)

Теперь на локальной машине:

drwxr-xr-x 2 yadfeshhm yadfeshhm 4096 апр.  23 18:08 .
drwxr-xr-x 3 yadfeshhm yadfeshhm 4096 янв.  13 19:34 ..
-rw-r--r-- 1 yadfeshhm yadfeshhm 2571 апр.  23 18:08 section_pub_id.html

При установке вебсервера нагугливались советы по выставлению прав на папки и файлы проекта, которые я применил:

sudo find . -type d ! -perm 755 -exec chmod 755 {} \;
sudo find . -type f ! -perm 644 -exec chmod 644 {} \;

У меня подозрения, что я как-то неправильно поставил пых?

Для начала надо хотя бы узнать, от какого пользователя работает php.

<?php system('id'); ?>
если уж совсем все так тяжело. Дальше сам додумаешь?:)

xtraeft ★★☆☆
()
Последнее исправление: xtraeft (всего исправлений: 1)
Ответ на: комментарий от xtraeft

uid=33(www-data) gid=33(www-data) groups=33(www-data)

честно говоря в линуксе живу второй день. И о правах имею представление лишь отдаленное, уж извните))

Если объясните или пнёте меня в хороший мануал я буду оооооочень благодарен.

Судя по ответу system - пых работает из под www-data ? И у него конечно же нет прав к моим файлам? Может как то отнести этого www-data к какой-то группе? Пойду гуглить...

yadfeshhm
() автор топика
Ответ на: комментарий от yadfeshhm

Судя по ответу system - пых работает из под www-data ?

Да.

И у него конечно же нет прав к моим файлам?
drwxr-xr-x 2 yadfeshhm yadfeshhm

У пользователя yadfeshhm есть права на чтение-запись-выполнение, у остальных только чтение-выполнение.

Может как то отнести этого www-data к какой-то группе?

Можно:
a) Сделать www-data владельцем директории с сайтом (chown -R www-data /path/to/your/dir)
b) Дать всем rwx (777), но ты этого не хочешь и это в некоторых случаях не совсем корректно.
c) Разрешить группе запись в эту директорию и дать права группе www-data на нее (chgrp -R www-data /path/to/your/dir и chmod -R g+w /path/to/your/dir)

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

xtraeft ★★☆☆
()
Ответ на: комментарий от xtraeft

Дополню что нужно проверять права еще и на «вышестоящих» каталогах, может быть такое что дашь права www-data на чтение\выполнение, а на доступ в каталог, например, /var/ у него прав не будет и, как следствие, этот файл останется для него недоступным.

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

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 1)
5 апреля 2016 г.
Ответ на: комментарий от xtraeft

Пошел по пути a)

a) Сделать www-data владельцем директории с сайтом (chown -R www-data /path/to/your/dir)

При редактировании проекта и сохранении (на каждый файл) любого файла требует пароль. Это же не реально))) неужели выход только 777. Как дать права и для пользователя yadfeshhm и для www-data равнозначные и полные?

yadfeshhm
() автор топика
Ответ на: Пошел по пути a) от yadfeshhm

Тогда можно залогиниться под пользователем www-data (sudo -u www-data -s /bin/bash, либо su -s /bin/bash -l www-data из-под рута) и потом редактировать.

anonymous
()
Ответ на: Пошел по пути a) от yadfeshhm

При редактировании проекта и сохранении (на каждый файл) любого файла требует пароль. Это же не реально))) неужели выход только 777. Как дать права и для пользователя yadfeshhm и для www-data равнозначные и полные?


chown -R www-data:yadfeshhm /path/to/your/dir
chmod 0760 -R /path/to/your/dir

BaBL ★★★★★
()
Последнее исправление: BaBL (всего исправлений: 1)
Ответ на: комментарий от BaBL

А если пойти от обратного и настроить сам apache2

А если в /etc/apache2/envvars заменить пользователя и группу на себя?:

export APACHE_RUN_USER=iadfeshchm
export APACHE_RUN_GROUP=iadfeshchm

Вроде ничем не грозит и любым новым файлам ничего «чоунить» и «чмодить» не нужно, а? =)

yadfeshhm
() автор топика

Вроде ничем не грозит и любым новым файлам ничего «чоунить» и «чмодить» не нужно, а? =)

Ничем, просто если кто-то тебе php-shell зальет, получит доступ к всему твоему хомяку, всем документам, и, скорее всего, sudo у тебя тоже есть.

BaBL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.