Что такое Chmod, какие права доступа назначать файлам и папкам (777, 755, 666) и как это сделать через PHP
Сегодня я хотел бы поговорить о правах доступа к файлам и папкам (читайте что такое файл). Это понятие пришло в мир вебмастеринга из linux (Unix) подобных систем, на которых работает большинство хостингов.
Да и само название Chmod является наименованием программы в linux, которая позволяет назначить права доступа различным объектам. А раз ваш сайт установлен на сервере под управлением linux (Unix) той или иной вариации, то и работа с объектами вашего вебсайта будет подчинена правилам, установленным операционными системами linux (Unix).
В Windows фактически для всех файлов устанавливаются максимальные полномочия, что, собственно, и приводит к засилью вирусов на сайтах и наших компьютерах, а так же, в свою очередь, не дает умереть с голоду владельцам антивирусных компаний. В linux (Unix) системах дело обстоит иначе – все сложнее, но одновременно и безопаснее. Если все настроить правильно и со знанием дела, то можно существенно повысить безопасность своего вебсайта.
Базовые понятия прав доступа к файлам и папкам
Если же все пустить это дело на самотек и не заморачиваться с установкой нужных привилегий, то вероятность взлома вашего ресурса или заражения его вредоносным кодом будет очень велика. Хорошо, если вы осуществляли резервное копирование (бэкап) всех ваших данных, а если нет?!
Поэтому лучше сразу же, не откладывая в долгий ящик, произвести настройку и изменение Чмод для всех важных объектов вашего движка, исходя из принципа минимализма. Т.е. давать объектам минимально необходимые для корректной работы вебсайта права.
Давайте сначала разберемся в сути вопроса, чтобы понимать, что именно и каким образом мы настраиваем. Итак, приступим. Права доступа разделяются по отношению к файлам и к директориям. Обозначаются они одинаково, но означают немного разное.
В свою очередь, по отношению к файлам возможно:
- r — право на чтение данных.
- w — на изменение содержимого (запись – только изменение содержимого, но не удаление).
- x — на исполнение файла.
Остановимся чуть подробнее на возможности исполнения файла. Дело в том, что в linux любой файлик может быть исполнен. Является ли он исполнительным — определяется не по его расширению (понятие расширение отсутствует в файловой системе Unix), а по правам доступа Chmod. Если у какого-либо файлика установлено право на исполнение “X”, то это означает, что его можно запустить на выполнение.
По отношению к директориям возможно:
- r — право на чтение директории (можно прочитать содержимое директории, т.е. получить список объектов, находящихся в ней)
- w — на изменение содержимого директории (можно создавать и удалять объекты в ней, причем, если вы имеете право на запись, то удалять вы сможете даже те файлы, которые вам не принадлежат)
- x — на вход в директорию (оно всегда проверяется в первую очередь, и даже если вы имеете все нужные привилегии на объект, который закопан глубоко в цепочке каталогов, но не имеете атрибут “X” для доступа хотя бы к одной директории на пути к этому файлике, то к нему вы так и не пробьетесь )
В системах Линукс все это раздает главный администратор компьютера, доступ к которому он получает путем ввода пароля. И если большинство объектов будут иметь права только для чтения, то вирусам на таком компьютере делать будет практически нечего, т.к. они не смогут себя туда ни записать, ни затем исполниться. Именно этого результата нам нужно добиться, выставляя нужные Chmod на объекты нашего сайта.
Привилегии для групп пользователей
Сами привилегии подразделяются на три категории в зависимости от того, кто обращается к объекту:
- «user» — u (непосредственно владелец файлика)
- «group» — g (член той же группы, к которой принадлежит владелец)
- «world» — o (все остальные)
Сервер определяет, к какой группе пользователей вас отнести в момент подключения вас к серверу. Когда вы, например, подключаетесь к серверу по протоколу FTP, то вы входите под своим именем пользователя (и паролем), и тогда сервер относит вас к группе «user» («u)».
Прочие пользователи, которые тоже подключаются по FTP к серверу, будут отнесены к группе «group» («g»), а посетитель, который приходит к вам на вебсайт, используя свой браузер, попадает в группу «world» («o»).
Вариации трех возможных значений «r», «w» и «x» для трех категорий «u», «g» и «o» и определяют Chmod к файлам. Если не задана какая-то категория, то она заменяется знаком дефисом «-». Привилегии указываются последовательно в заданном порядке:
- сначала права для владельца — «u»
- затем для группы — «g»
- и в конце — для всех остальных — «o»
После того, как сервер отнесет посетителя к определенной группе, он предоставляет ему права на действия с объектами, после чего посетитель сможет прочитать, записать или выполнить файл (в зависимости от того, что разрешено делать с данным объектом его группе).
Чтобы посмотреть содержимое каталога, он должен иметь атрибут чтения «r» (для той группы, к которой сервер отнес посетителя). Чтобы создать файлик или папку в уже существующей необходимо, чтобы этот существующий каталог имел атрибут на запись «w».
Для наглядности давайте разберем пример, где владелец файла («user» — «u») имеет все права: на чтение, запись в него и исполнение, а все остальные пользователи только привилегию на чтение. Запись таких Chmod будет выглядеть так: «rwx r-- r--».
Рассмотрим ее в деталях: «rwx» (эта запись задает права на объект для владельца — «u»), «r--» (эта запись задает права на тот же объект, но в случае, если посетитель отнесен сервером к группе — «g»), «r--» (эта запись задает привилегии на объект для всех остальных пользователей — «o»).
Чем отличаются права файлов и папок
Получается, что существует три группы пользователей и три возможных действия с объектами. Еще не запутались? Разложим все сказанное выше по полочкам в виде табличек. Сначала наглядно посмотрим, чем они отличаются:
«Права» | « Файл» | «Папка» |
r | Просмотр содержимого | Можно прочитать содержимое каталога |
w | Изменение содержимого | Можно изменять содержимое каталога — писать и удалять объекты |
x | Запуск файлика на выполнение | Позволяет зайти в каталог и обратиться к его файликам |
А так же табличка, показывающая разнообразные комбинации Chmod для разных типов объектов:
«Права» | «Файл» | «Папка» |
--- | Ничего нельзя делать | Доступ к каталогу и его подкаталогам запрещен |
r-- | Можно читать содержимое | Можно прочитать содержимое каталога |
rw- | Можно видеть и изменять содержимое | Можно добавить, удалить, изменить файл каталога |
rwx | Читать, изменять и выполнять файлик | Можно читать, удалять, изменять файлики, сделать каталог текущим, т.е. “войти” в этот каталог. |
r-x | Можно прочитать, либо выполнить | Можно зайти в каталог и прочитать его содержимое, удалять или добавлять файлы нельзя. |
— x | Выполнить, если файлик двоичный | Пользователь может выполнить двоичный файл о существовании которого ему известно, зайти или прочитать каталог запрещено |
Chmod, выраженные в цифрах (777, 400, 666, 755, 444)
Вы видите, что здесь для описания прав доступа применяются записи с использованием латинских букв и дефисов, но вы, наверное, уже сталкивались с тем, что обычно Chmod задают в цифровом виде, например, всем известная комбинации: 777, разрешающая все и всем.
Действительно, привилегии так же обозначают и цифрами:
- r (читать) заменяют на 4
- w (запись) заменяют на 2
- x (исполнение) заменяют на 1
- 0 означает – ничего не делать (то, что в буквенной записи обозначается дефисом)
Давайте опять вернемся к примеру записи, приведенному мною чуть ранее: rwx r-- r--
. Если заменить в ней буквы и дефисы на цифры, в соответствии с только что описанным правилом и при этом сложить цифры в каждой тройке, то получим цифровой вид этой записи: 744
.
Т.е. получается, что сумма этих цифр и показывает Чмод по отношению к файлам или папке. Например:
- 7 (rwx) = 4 + 2 +1 (полные права)
- 5 (r-x)= 4 + 0 + 1 (чтение и выполнение)
- 6 (rw-) = 4 + 2 + 0 (чтение и запись)
- 4 (r--) =4 + 0 + 0 (только чтение)
- и т.д.
В этой таблицы приведены все возможные комбинации привилегий записанные в цифровом виде:
«Права» | «Цифровая форма» | «Символьная форма» |
Ничего нельзя делать | 0 | --- |
Только чтение | 4 | r-- |
Только запись | 2 | — w- |
Только выполнение | 1 | — x |
Чтение и запись | 6 | rw- |
Чтение и выполнение | 5 | r-x |
Чтение, запись, выполнение | 7 | Rwx |
А теперь давайте рассмотрим различные комбинации записи в цифрах, применительно к группам пользователей:
«Права» | «Владелец» | «Группа» | «Остальные» |
777 | читать записывать исполнять | читать записывать исполнять | Читать записывать исполнять |
776 | читать записывать исполнять | читать записывать исполнять | Читать записывать |
775 | читать записывать исполнять | читать записывать исполнять | Читать исполнять |
774 | читать записывать исполнять | читать записывать исполнять | Читать |
766 | читать записывать исполнять | читать записывать | Читать записывать |
655 | читать записывать | читать исполнять | Читать исполнять |
644 | читать записывать | читать | Читать |
Вы сами (кроме того случая, когда получаете доступ к сайту по FTP) и все остальные посетители вашего ресурса, относитесь к группе “word” (все остальные), поэтому для работы с вебсайтом нам нужно в первую очередь смотреть на последнюю (третью) цифру данной записи.
Для того, чтобы при работе пользователя с сайтом «запускался файл» скрипта, достаточно будет, чтобы на него были установлены права, начиная от «4» (r-- – только чтение) (5,6,7 тоже подойдут, но это будет лишнее в плане безопасности).
Для каталога же, в котором лежит файлик этого скрипта, нужно выставить минимум «5» (r-x — можно зайти в каталог и прочитать его содержимое, удалять или добавлять нельзя). 7 тоже подойдет, но тоже будет уже лишним в плане безопасности.
Если нужно, чтобы скрипт не только читался, но и «записывал» какие-то данные (например, введенные посетителем), то минимальные права на «папку» по-прежнему будут «5», но для «файлика» уже понадобится «6» (читать и записывать).
Скорей всего на сервере, куда вы скопировали содержимое движка вашего сайта, будут установлены следующие Chmod к объектам:
Папки | 755 | владелец (user) может всё, группа и все остальные могут только читать каталоги и заходить в них, но им запрещено записывать файлики, изменять названия и стирать их в директориях. (rwxr-xr-x) |
Файлы | «644» | владелец (user) может читать и изменять файлики, исполнять ему их запрещено, всем остальным запрещено их изменять и исполнять, остальные могут только читать. «(rw-r--r--)» |
Если бы у вас был ресурс, состоящий из одних html страниц, то можно было бы все так и оставить. Но современные сайты построены на движках, и там могут быть объекты, в которые нужно производить запись от имени посетителей из группы «world» — o (все остальные). Это могут быть каталоги, используемые для кэширования страниц или те, в которые по ходу работы с сайтом будут загружаться картинки и др.
Само собой, что если вы зайдете на сайт по FTP, то сможете произвести запись в эти файлики или директории, но работая с вебинтерфейсом как обычный пользователь у вас могут возникнуть проблемы. Поэтому к установке тех или иных прав надо подходить избирательно:
755 | для всех директорий, в которых должны записываться файлики, но не надо регулярно их стирать |
777 | для папок, в которые должны записываться и стираться файлы (например, для кеша) |
644 | для простых файлов, используемых только для чтения (.html, .php и др.) |
666 | для файлов, в которые может понадобится осуществлять запись (например, с базами данных .dat) |
Как назначить Chmod посредством PHP
Как же все это можно реализовать на практике для своего сайта? В принципе, все просто. Для назначения прав доступа можно использовать программу Ftp клиента, например, FileZilla:
Но если Чмод на какие-либо файлы поменять не получается, то можно попробовать назначить их PHP средствами. Вы можете воспользоваться следующим кодом:
<? chmod ("file_name_1.php", 0666); chmod ("file_name_2.php", 0666); chmod ("directory_name_1", 0777); chmod ("directory_name_2", 0777); ?>
Вам надо будет заменить file_name_x.php и directory_name_x на реальные имена файлов и папок, Чмод к которым вы хотите изменить. Соответственно, для файликов установится 666, а для каталогов — 777. Поместите это PHP код в файлик с помощью любого текстового блокнота (рекомендую бесплатно скачать Notepad plus plus) и дайте ему расширение .php, ну, например, как prava.php.
prava.php скопируйте по FTP в ту директорию, в которой не получается штатными средствами назначить права доступа. В адресной строке браузера пропишите путь до prava.php (например, https://ktonanovenkogo.ru/prava.php) и нажмите «Пуск» или энтер на клавиатуре. Все, теперь привилегии будут стопроцентно изменены средствами PHP.
Для Joomla, сразу после ее установки, можно выставить 777 на следующие директории:
administrator/backups/ administrator/cache/ administrator/components/ administrator/modules/ administrator/templates/ cache/ components/ images/ images/banners/ images/stories/ language/ language/en-GB/ language/ru-RU/ media/ modules/ plugins/ plugins/content/ plugins/search/ plugins/system/ templates/
После того, как вы установите для Джумлы все расширения и произведете окончательные настройки, Chmod к большинству из приведенных выше директорий следует в целях повышения безопасности сайта вернуть к 755. Оставить 777 нужно будет на каталоги с кешем, с бекапом и с картинками.
Для файлов движка, находящихся в корне сайта, кроме sitemap.xml, лучше установить 444 (для всех групп посетителей только чтение). На seting.php иногда советуют даже установить 400.
Точно такие же советы могу дать и по поводу установки прав доступа на объекты в движках SMF и WordPress. Желательно, по возможности, оставлять на постоянной основе для директорий 755 (кроме оговоренных выше каталогов кеша, картинок, бекапа и может быть еще каких-то, по мере необходимости), а для файликов — 644.
На файлы в корне сайта лучше поставить 444.
Если при работе с сайтом возникнет проблема с невозможностью записи настроек в какой-нибудь файлик или невозможностью создать какую нибудь директорию, то можно временно поставить на них большие права (777, например), а потом все вернуть обратно (от греха подальше). И ни в коем случае не стоит оставлять (для простоты работы с сайтом) необоснованно завышенные Chmod.
Комментарии и отзывы (40)
Зачем назначать для объектов, находящихся в корне сайта права доступа 444, если владелец может изменить их?
Интетесно узнать более подробнее о назначениях директорий
administrator/backups/
administrator/cache/
cache/
Макс, логично, конечно же, владелец может все, вне зависимости от выставленных прав (собственно, вы же сами их и меняете). Но в целях безопасности так делают. Я не знаю всех тонкостей взлома сайта, но такие рекомендации я слышал неоднократно. Думаю, что существует возможность злоумышленнику прикинуться владельцем.
Указанные вами папки используются различными расширениями, реализующими функции кеширования и создания резервных копий данных.
Интересно на сколько безопасно можно пользоваться встроенной возможностью передачи файлов по ftp в joomla?
Макс, не знаю насчет безопасности самого FTP в Joomla, сначала я даже не знал зачем оно там надо. Только недавно прочитал, что настроив доступ по FTP через Joomla можно не давать полного доступа на каталоги, куда нужно установить расширения. Или если нужно конфигурационный файл подкорректировать. Это сделано для облегчения жизни администратора сайта.
Да это очень удобно! Сат пользуюсь только в целях страховки регулярно выключаю эту возможность, надо узнать может это лишняя мера =)
права задаются всегда относительно того, от какого юзера в системе запущен апач.
у меня на ВСЕ папки, ВКЛЮЧАЯ кэш 775, отлично работает.
на файлы 644.
Значит можно смело ставить755 и 644,думаю. Да? Если админ только я.
Marusya говорит, что:
... и под твоей учеткой работает Апач. Если так — то ДА.
Дмитрий спасибо! Отличная статья. Все подробно «разжёвано». Для новичков это очень ценно.
Я так доконца и не понял как определяется группа, если чел находится в 2-х или более. Люди из какой именно группы будут также иметь права доступа к файлу ?
Подскажите, пожалуйста, на какие папки надо открыть доступ для работы файлового контейнера, например remository или docman
Подскажите, пожалуйста, на какие папки надо открыть доступ для работы файлового архива??
В файле configuration.php лежит и логин, и пароль к FTP. Если поставить права 444, то все смогут прочесть его? Тогда остаётся только вариант 400?
Андрей говорит, что:
Интересно, кто тогда сможет зайти на Ваш сайт? По-моему, Вы получите проблему с доступностью сайта.
Всё умно и просто написано, фактически все вопросы задаваемые мной в браузере приводят на новенького, действительно во всех статьях всё разжёвано до мелочей, просто круто!!! Если заработаешь миллион — ты того стоишь! Огромное уважение и спасибо!
Спасибо, толковая статья! Я новичок в этих делах. Не могу зайти на сайт tfile.ru написано 500- Internal Server Error. Чтобы исправить надо выставить права 755 и 644. А как это сделать практически? Куда и как зайти, для этого файла не могу понять. Будьте добры подскажите.
вот я доигрался с правами, теперь в админ панель жумлы вообще не могу войти. Что делать, кто подскажет? Сайт работает, фтп пускает нормально.
Александр: Filezilla в помощь. Открываешь сайт, подводить мышь к файлу. Правый щелчок и выбрать права доступа.
Здравствуйте,
При при переносе сайта с локального сервера в интернет возникли проблемы с чмод на папки, то есть в разделе "Помощь — Информация о системе — папки недоступны на запись, хотя 755. Помогает, только когда меняю на 777. Это нормально вообще с точки зрения безопасности или нужно решать вопрос с техподдержкой хостинга?
Такой вопрос при установки нового модуля, шаблона, компонента выходит ошибка 500. Что это может быть.
Удается установить вручную, но после активации модуля — та же ошибка на сайте 500.
Здравствуйте, вопрос таков...
Я прочитал статью. У себя на фтп сайта chmodы отрегулировал.
Но браузер директорию всё равно не открывает.
Forbidden
You don't have permission to access /abc/ on this server.
Где я чего не доглядел?
Здравствуйте! У меня на блоге выставлены следующие права доступа:
root directory 700
wp-includes/ 700
.htaccess 600
wp-admin/index.php 600
wp-admin/js/ 700
wp-content/themes/ 700
wp-content/plugins/ 700
wp-admin/ 700
wp-content/ 700
WP — Security Scan орет благим матом. Все подчеркнул красным. Ответьте, пожалуйста, чем грозят мне такие права? Что в них плохого?
Заранее благодарю за ответ!
Совсем ничего не понятно где устанавливается доступ к файлам. А тупо доверять FileZilla, которая неизвестно что и где пропишет нет желания. Как будто сговорились, ни слова о главном, копипастите что-ли друг у друга информацию один в один и ничего по существу.
Самурай, возможно вам надо больше почитать про это, а доверять инструменту Вам в любом случае прийдется, не зилле так другому).
«Оставить 777 нужно будет на папки с кешем, с бекапом и с картинками.»
Для чего картинкам такие широкие привилегии, разве картинки могут быть исполняемыми? Не опасно ли ставить полные права на картинки для всех (публичных) пользователей?
Спасибо большое за статью. Помогло. Проблема решена.
Здравствуйте! Помогите, пожалуйста, советом: пытаюсь запустить инстал скрипта, стандартно заполняю
DB host
DB username
DB password
DB name
но как только нажимаю далее — все данные просто исчезают...
Заранее благодарен за ответ!
А Скрипт то какой?И Ссылку на скрипт
Спасибо помогло. Нужно было поменять права на изображение, а с помощью filezila не получалось. Оказывается как просто если знать что делать.
А акие последствия если поставить доступ к корневой папке не 755, а 750?
Не знаю как они взламывают, что они там ломают, но на .htaccess стоял 644 — в итоге в него прописали код переадресации на скачивание вирусного Adobe Flash Player, причем только для мобильных устройсв. В итоге блог заблокирован провайдером МТС в регионе Москва и Подмосковье — узнал совершенно случайно вводя название блога в браузере ноутбука, а там курсивом приписка о блокировке. Вышел с планшета и чуть не офигел.
Выставил 444
Я благодарю вам, только с ваших примеров ко мне дошло эти 777 )), так как u+rwx осилил, а с восьмеричной как то туго было. Спасибо большое за написанное.
Дмитрий, добрый день.
У меня плагин wp-dbmanager выдает" Ваши папки резервного копирования может быть видимым для публики Чтобы устранить эту проблему, переместите . Htaccess копирование БД" , но все дело в том, что я все сделала правильно и он находится в нужном месте, а эта надпись все равно выскакивает.Что же делать?
Но и это еще не все, когда захожу в админ панели в «резервное копирование базы данных» выдает вот такую запись "Проверка резервного копирования папки ( / home/users2 / / akinshol / домены / мой сайт / WP-содержание / резервное копирование БД ) ... Резервное копирование папки не существует. Пожалуйста, создайте папку для резервного копирования БД 'в папке' / home/users2/a/akinshol/domains/мой сайт.ru/wp-content и CHMOD его '777 'или изменить местоположение папки резервного копирования под DB вариант. резервного копирования папка не доступна для записи. Пожалуйста, CHMOD его '777 '. Но папка backup-bd у меня существует. Я уже ничего не понимаю, спасите меня пожалуйста! ))))
Заранее благодарна.
Здравствуйте. Подскажите , пожалуйста. Перенесли на том же хостинге сайт на другой сервер. И теперь, если стоят права на папку 700, то она все равно открывается, вернее ее содержимое, через браузер.
А на другом хостинге есть сайт, в нем на папку стоят chmod 700 , и файлы в ней не открываются. У меня вопрос. Имеет ли право хостер делать нестандартные интерпретации на своем сервере? Ведь все поставлено с ног на голову. Они объясняют это тем, что Скрипты теперь исполняются от имени пользователя площадки, а не от пользователя wwwserver.
Помогите, пожалуйста советом. Как объясниться с хостером?
Люди подскажите что делать? Ломанули сайт на движке джумла и теперь не магу зайти в админку, Ввожу логин и пароль но открывается чистый лист. Что не так?
Спасибооо.
Спасибо тебе Человечище! Я тоже в 40 лет иду по твоим стопам. И это ЕДИНСТВЕННЫЙ встреченный мною ресурс где все написано человеческим языком. Чувствуется МЭИ)))
Немного не хватает тут — расшифровки букв р-реад , в-врайт, х-не знаю? м.б. экзе?
r — право на чтение данных.
w — на изменение содержимого (запись – только изменение содержимого, но не удаление).
x — на исполнение файла
Зная англооснову гораздо проще понимать, в основном у вас это прописывается кстати, тут только...
Добрый день в статье есть ошибка во второй таблице с верху:
--x Пользователь может выполнить двоичный файл о существовании которого ему известно, зайти или прочитать каталог запрещено
это не верно зайти как раз таки пользователь может, и увидеть дерево каталогов, но прочитать содержимое не может.
«В Windows фактически для всех файлов устанавливаются максимальные полномочия» — бредовоеhttp://windata.ru/windows-7/bezopasnost-7/prava-dostupa-k-fajlam-i-papkam-v-windows-7/ заявление. На самом деле в Windows можно настроить права доступа к любой папке или файлу как захочешь — информации по этой теме в интернете — море.
Например: http://windata.ru/windows-7/bezopasnost-7/prava-dostupa-k-fajlam-i-papkam-v-windows-7/
мое почтение...
меня интересует такой вопрос: если я выставлю права на папку 777, а затем в hptaccess разрешу доступ только определенным ip, это будет работать?
ситуация следующая: в папки сапы и других бирж с правами закачиваются вирусняки и прочая дрянь. Изменить права на 755 или другое я не могу: робот биржы должен иметь возможность заходить и менять файлы. Следовательно я подумал о таком решении вопроса... но не знаю будет ли это работать...
Спасибо за статью, но немного не понимаю про права на каталог, и вложенный в него файл для тех или иных команд. К примеру, какие должны быть права на каталог и вложенный файл, если я хочу создать жесткую ссылку на файл, которая будет вести в вышележащий каталог? А если я хочу переместить файл в соседнюю ветку дерева? В конце концов, какие минимально возможные права на файл и каталог, если я хочу удалить этот каталог?
Ваш комментарий или отзыв