Назад | Перейти на главную страницу

Как передать право собственности на root, не будучи root? (необходимо для Apache)

У меня есть 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

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