У меня есть PHP-скрипт, который создает папку на моем сервере. Доступ к этой папке предполагается через Apache, и пользователи могут просматривать ее в Интернете.
Теперь, если я создаю эту папку, будучи root, все работает как надо, я могу просматривать html / php, когда захожу на сайт.
Если я создаю эту папку, будучи пользователем Apache (или выполняя свой скрипт), я могу создать папку, поместить все файлы внутрь, но когда я попал на свою веб-страницу, он отобразит:
You don't have permission to access / on this server.
Сейчас я не так много знаю об Apache, но для меня самое простое решение - передать права на мою папку root. Я пытаюсь набрать:
chown root:root /blabla/myfolder
и пишет:
chown: changing ownership of 'myfolder/': Operation not permitted
Это почему ?
Спасибо
Другие, кажется, отвечают на ваш подразумеваемый вопрос «как мне это исправить?» И хорошо с этим справляются, поэтому я подумал, что отвечу на ваш реальный вопрос «почему это?».
Отказ от права доступа к файлу через chown, то есть передача его другому пользователю, по уважительным причинам запрещено всем пользователям без полномочий root. Рассмотрим следующую последовательность:
cp /bin/bash ~/naughty
Теперь у вас есть копия bash в вашем домашнем каталоге. Вы владеете им. Ничего страшного.
chmod 4755 ~/naughty
Теперь у вас есть копия bash, которую может запустить любой, и любой, кто ее запустит, станет вами, потому что вы установили бит SUID в двоичном файле, и вы являетесь владельцем файла. Не так хорошо, как хотелось бы.
chown root:root ~/naughty
Поздравляем, вы только что внедрили свою систему; у вас есть копия оболочки, которая является SUID для root и может быть запущена кем угодно.
Есть и другие причины, по которым возможность отказаться от файла является плохой, например, это мешает дисковым квотам, если кто-то может создать большой файл, а затем передать его другому пользователю. Но убийственная причина - это та, что указана выше, и единственный способ заткнуть эту дыру (не избавляясь от SUID, что является прекрасной идеей, но сложно сделать) - это сказать, что никто, кто не является root, не может передать файл другому пользователю. .
Вам не нужно менять владельца и группу на root в папке, и вы не можете. Однако вы можете предоставить разрешения на чтение для группы и других с помощью:
chmod go+r foldername
Пример:
yvaine:~ rilindo$ ls -la | grep test
drw------- 2 rilindo staff 68 Dec 5 01:10 test
yvaine:~ rilindo$ chmod go+r test
yvaine:~ rilindo$ ls -la | grep test
drw-r--r-- 2 rilindo staff 68 Dec 5 01:10 test
Однако, если это пустая папка, возможно, что по умолчанию в Apache отключен просмотр каталогов. В этом случае вы можете добавить или изменить где-нибудь в своей строфе:
Options +Indexes
Обратите внимание, что обычно рекомендуется отключать просмотр каталогов, если для этого нет веской причины.