03.01.2011

Почему на хостинге нельзя ставить права 666/777 и откуда берутся советы поставить такие права?

Если не вдаваться в подробности, то это резко занижает уровень безопасности Ваших файлов. Тем не менее ни один сайт не станет более работоспособным, если повысить права до 777.


Технические подробности:
Что значат сами цифры в таких тройках.
простые:
0 - право отсутствует
1 - право на запуск
2 - право на изменение содержимого
4 - право на чтение содержимого
сборные:
5 - право на чтение и запуск (5=4+0+1)
6 - право на чтение и изменение (6=4+2+0)
7 - право на чтение, изменение и запуск (7=4+2+1)

В трехзначных цифрах как например 777, первая цифра значит права для владельца файла(директории), вторая для членов группы, которой принадлежит файл и третья для всех остальных. То есть, например, в правах 751 владелец файла имеет права на чтение, запись и исполнение; участник одной группы с файлом имеет право на чтение и исполнение (на правку не имеет); а все остальные только на исполнение файла (но даже прочитать содержимого они не смогут).





Таким образом, делая третью цифру 6 или 7, Вы даете всем посторонним людям право на изменение содержимого файла. Именно так появляются iframe и прочие вредоносные части Вашего сайта. Существует расхожее мнение, что без 777 не запустится сайт. Так было раньше, когда использовали mod_php (aka PHP как модуль Apache), потому что Apache мог работать под своим именем, а так как владелец файла - Вы, то на Apache распространялась третья цифра. Но с приходом таких технологий как mpm-itk, suphp и FastCGI теперь Apache обрабатывает файлы от имени этого же пользователя и на него стала действовать не третья, а первая цифра. Таким образом между 777 и 700 никакой разницы для Apache не стало. Apache даже никогда не посмотрит на третью цифру. Но права 0 (запрет на все) резко повышают безопасность и не дают возможность правки Ваших файлов злонамеренными посетителями сайта.


Все еще не впечатлило и не испугало? Тогда посмотрите насколько унизительным может быть взлом сайта через такие права. Вам всадят полноценный шелл c99shell. Примерно так будет выглядеть прогулка по Вашим сайтам. Буквально променад:




В этом же блоге есть статья, как удобнее собрать все, включая базу данных и файлы в один скромненький архивчик. Теперь Вы выставили 777 и подобным образом Ваш сайт может себе скачать совершенно любой посторонний человек, не обладая ни одним паролем к FTP или SSH.
Кроме того, можно вместо c99shell использовать JTerm и тогда будут доступны еще и консольные команды.


Откуда берутся советы по установке "высокодоступных" прав? Как правило идут они от разработчиков CMS на PHP. А далее разносятся толпами малограмотных леммингов по форумам. Мир PHP в крайней степени отличается высоким уровнем халатности и разгильдяйства. В большинстве случаев программисты, которые пишут код на PHP, по молодости лет торопыги и хотят, чтобы все побыстрее работало и пишут код не заботясь о его безопасности. "Советы" раздают щедро налево и направо, прекрасно понимая, что ответственность им за слова нести не требуется (мне иногда кажется, что все политики выходят из похапэшников - слишком велико сходство в плане понимания ответственности).
На практике все шишки собирает пользователь CMS, который последовал вредным советам, а также это не редко эхом отдается по хостеру, который ни в чем не виноват. Мне как человеку из мира хостинга, это видеть в двойне обидно.
Мне довелось один раз через посредника разговаривать с таким разработчиком. Его аргумент был, что у нас плохой хостинг, раз мы не можем обеспечить такую защиту. Но как можно обеспечить защиту самоубийцы? Он же все равно втихаря где-нибудь самоубьется, если уж он так решил. Вы должны помнить, что спасение утопающего - дело рук самого утопающего. Поддержка безопасности подразумевает, что все вовлеченные люди следуют ее правилам. Если хотя бы одно звено его не соблюдает, то это дыра. И рано или поздно через нее пройдут.



Каков же вывод? А таков, что если есть возможность, то нужно перейти на FastCGI, MPM-ITK или suPHP, но если нет, то хотя бы сменить владельца на www-data (для Debian-like) или apache (для RHEL-like) и все равно скрутить права к 600/700. Хотябы с cron'а Вас не достанут.


Комментариев нет:

Отправить комментарий