Что означает chmod 777 на папку или файл

linux chmod 777 права

Все начинающие линуксоиды сталкиваются с тем, что требуется рекурсивно установить chmod 777 на папку. С этим сталкиваются и веб-мастеры, когда приходится редактировать права доступа на веб-каталог. Понятно, что на этот момент ничего не понятно — что делать? Я расскажу и покажу что делает простая команда «chmod 777» в ОС Linux и надо 10 раз подумать, прежде чем устанавливать разрешения 777 на файлы или папки.

Права доступа к файлам в Linux

Концепция прав доступа в операционных системах семейства Linux подразумевает контроль доступа к файлам средствами операционной системы с использованием разрешений, атрибутов и прав собственности на файлы. Кстати, в Линуксе папка — это такой же файл, потому права каталогов и файлов в принципе не различаются между собой. Каждый файл принадлежит определенному пользователю и группе и имеет права доступа для трех разных классов пользователей:

  • Владелец файла.
  • Члены группы.
  • Остальные (все остальные).

Вот три типа разрешений для файлов. Они используются для каждого класса пользователей и указывают каким пользователям разрешено читать файл, записывать в файл (то есть редактировать) или выполнять файл (executable).

Разрешение на чтение: r – read

— Файл доступен для чтения. Если установлено разрешение на чтение, пользователь может открыть файл в редакторе для просмотра.
— Каталог доступен для просмотра содержимого. Если такое разрешение на чтение установлено для каталога, то пользователь может просмотреть список файлов внутри каталога. Например, с помощью команды ls .

Разрешение на запись: w- write

— Файл можно изменить или модифицировать. Если установлено разрешение на запись, то пользователь может изменить его содержимое в редакторе и сохранить изменения.
— Каталога доступен для изменения. Пользователь может удалить или переименовать имеющиеся в папке файлы, а так же создать в ней новый.

Разрешение на выполнение: x — execute

— Файл можно запустить. Актуально для исполняемый файлов.
— Каталог можно открыть. Например, с помощью команды cd. Без разрешения на выполнение войти в папку не получится.

Как посмотреть права доступа Linux

Универсальный способ просмотра прав доступа к файлам, который работает во всех ОС Linux, а так же FreeBSD или Android — это команда ls. Вот пример её выполнения:

chmod 777 linux команда

В моём примере команда ls выполнена с ключами -l и -h, позволяющие вывести файлы списками и с нормально отображающимся размером. Давайте подробнее рассмотрим вывод команды для одного конкретного файла:

права доступа к файлам linux

Первый символ — это тип файла. Варианты:
* обычный файл ( — );
* каталог ( d );
* символическая ссылка ( l );
* либо какой-то другой специальный тип файла.
Затем идут девять символов, которые как раз представляют права доступа к файлу: три тройки по три символа каждая.
* Первая тройка — разрешения прав доступа владельца;
* Вторая тройка — разрешения прав доступа группы;
* Третья тройка — разрешения прав доступа для всех остальных.

Chmod 777 на файл или папку — что означают эти цифры?!

Вот мы подобрались к самому интересному моменту! С правами вроде бы всё ясно, но при чём тут права 777 — что значат эти цифры вообще?! А фишка в том, что разрешение файла может быть представлено не только в символьном формате, а ещё и в числовом формате!

Чтобы просмотреть права доступа к файлу в числовом (восьмеричном) представлении, используйте команду stat :

stat -c %a file.log
644


Номер разрешения обычно состоит из трех (иногда четырех) цифр от 0 до 7. Первая цифра — это права владельца файла, вторая цифра — группа владельца файла, третья цифра — права всех остальных пользователей.

Разрешения на запись, чтение и выполнение имеют следующее числовое значение:

r (чтение) = 4
w (запись) = 2
x (выполнить) = 1
нет разрешений = 0

Цифра разрешений для определенного класса пользователей представляет собой сумму значений разрешений для этого класса.

Каждая цифра номера разрешений может быть суммой 4, 2, 1 и 0. Вот возможные комбинации, которые могут встретится:

0 (0 + 0 + 0) — Нет прав.
1 (0 + 0 + 1) — Разрешено только выполнение.
2 (0 + 2 + 0) — Разрешена только запись.
3 (0 + 2 + 1) — Права на запись и выполнение файла.
4 (4 + 0 + 0) — Разрешено только чтение.
5 (4 + 0 + 1) — Разрешены чтение и выполнение.
6 (4 + 2 + 0) — Разрешены чтение и запись.
7 (4 + 2 + 1) — Разрешены чтение, запись и выполнение. Максимальный доступ.

Таким образом права 777 предоставляют максимальный доступ к файлу или папке для абсолютно всех пользователей без ограничений.

Теперь давайте рассмотрим наиболее часто встречающиеся примеры:

Для файла установлены права 644.

Владелец: rwx = 4 + 2 + 0 = 6
Группа: rx = 4 + 0 + 0  = 4
Другое: rx = 4 + 0 + 0 = 4

Примечание:

Когда используется четырехзначный номер прав для файла, то первая цифра имеет следующее значение:

setuid = 4
setgid = 2
sticky bit = 1
без изменений = 0

Setuid – это бит разрешения, позволяющий пользователю запускать исполняемый файл с правами владельца этого файла. Яркий пример — команда sudo.
Setgid — аналог setuid с той разницей, что файл будет запускаться пользователем от имени группы, которая владеет файлом.
Sticky Bit — если этот бит установлен для папки, то файлы в этой папке могут быть удалены только их владельцем.

Почему надо использовать chmod 777 с осторожностью

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

Владение файлом меняется с помощью команды chown. Права доступа к файлу — с помощью команды chmod .

Самая частая ошибка — это когда пользователь рекурсивно меняет права доступа для всех файлов и подкаталогов в каталоге.  Я неоднократно встречался с тем, что начинающие веб-мастеры делали chmod -R 777 для папки /var/www. Так делать нельзя! Если у вас возникла проблема с разрешениями на вашем веб-сервере, то не надо сразу рекурсивно устанавливать права 777! В большинстве случаев на веб-сервере  на файлы ставятся права 644, а на доступ к каталогу — 755. Делается это следующим образом:

chown -R linuxize: /var/www
find /var/www -type d -exec chmod 755 {} ;
find /var/www -type f -exec chmod 644 {} ;

Примечание:
— Права доступа к файл может менять только пользователь root, владелец файла или же другой пользователь с привилегиями sudo.
— Будьте крайне внимательны и осторожны при использовании команды chmod, особенно при рекурсивном изменении прав доступа.

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