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

Консоль Linux

В прошлом материале я упоминал права доступа к файлу, указывая 777, но не останавливался на том, что это такое. Давайте рассмотрим подробнее, как в Unix-подобных системах задаётся доступ к файлам.

Скажем сразу, что в отличие от Windows права доступа задаются намного проще и, что главнее, логичнее. Хотя шутки на эту тему тоже есть. Например, Леонид Каганов в «Письме отца Серафимия» писал:

Не зная, что такое «чмод», и опасаясь новой беды, я склонился над его плечом, чтоб видеть, какие кнопки он нажимает. Господи спаси и сохрани, клянусь всем святым, мне не померещилось! Сей волосатый муж набрал мое имя и «chmod 666»...

Владелец файла

Для начала обращу ваше внимание, что если в Windows владельцем файла является либо пользователь, либо операционная система, то в Unix-подобных ОС дело немного сложнее. Каждому файлу назначается не только пользователь владелец, но и группа. Для каждого пользователя группа создаётся по умолчанию, её название идентификатор совпадают с именем и ID пользователя. Номера идентификаторов начинаются с 1000.

Суперпользователь (root) также имеет свой идентификатор, который равен нулю. Идентификаторы от 1 до 999 используются в служебных целях (или получают различные приложения и системные службы).

Если вас заинтересовал этот момент, посмотрите содержимое файлов /etc/passwd и /etc/group в своей системе:

cat /etc/passwd
cat /etc/group

Вывод списка файлов также можно сделать подробным, указав в параметрах команды ключ «-l»:

ls -l

В первом столбике будут отображаться права доступа, затем число, а вот дальше как раз будет владелец и группа.

По умолчанию владельцем для файлов устанавливается пользователь, от имени которого был файл создан. Группа также устанавливается соответствующая этому пользователю.

Обращаю ваше внимание, что владелец и группа могут не совпадать, например, владельцем может быть «user1», а группа − «user2». Это нормальное явление, когда нужно более гибко настроить права доступа.

Как изменить владельца

Изменения владельца и группы можно сделать как из консоли, так и при помощи различных приложений. Например, практически во всех графических окружениях это позволяет диспетчер файлов (в используемом мной Cinnamon это Nemo, в KDE − Dolphin). Также это позволяет файловый менеджер Double Commander и прочие приложения.

Внимание! Для изменения владельца и группы для файла нужны права суперпользователя. В Ubuntu/Mint для этого перед командой надо набрать «sudo».

Для наглядности будем выполнять операцию из консоли, для этого в Cinnamon/GNOME/MATE нужно нажать Ctrl+Alt+T (если вы не меняли эту комбинацию клавиш). Для изменения владельца используется команда chown, которая так и расшифровывается (англ. «change owner»).

По умолчанию консоль запускается в домашней папке, здесь и будем пробовать. Для начала создадим папку для экспериментов:

mkdir testdir

Если мы выведем список файлов при помощи «ls -l», то увидим следующую строку (вместо «rizado» будет ваше имя пользователя):

drwxr-xr-x 2 rizado rizado 4096 мар 23 19:33 testdir

Теперь попробуем изменить владельца и группу, причём поставить их разными (слэш в конце имени папки необязателен, я использую для удобства − сразу видно, что не файл). Первым указывается владелец, затем через двоеточие группа:

sudo chown root:audio testdir/

Если после этого вывести список файлов, то строка будет иметь следующий вид:

drwxr-xr-x 2 root audio 4096 мар 23 19:33 testdir

Аналогично владельца можно изменить обратно (подставьте своё имя пользователя и группы):

sudo chown rizado:rizado testdir/

Для файлов меняется аналогично. Интересный момент, что при смене владельца и группы для папки эти значения для вложенных файлов и папок не меняются. Для обработки всех вложенных объектов нужно указать ключ «-R» (именно заглавную букву):

sudo chown root:root -R testdir/

Больше информации можно получить, набрав в консоли:

chown --help

или

man chown

Права доступа

Права доступа имеют всего 3 опции − чтение, запись и запуск на выполнение, устанавливаемые для владельца, группы и прочих пользователей. Для папки запуск на выполнение означает просмотр содержимого − списка файлов и вложенных папок.

Права можно задавать либо буквами r (read), w (Write) и x (eXecute), либо в двоичной системе (точнее в восьмеричной с использованием цифр от 0 до 7, но основано на двоичной системе).

Праву на чтение (r) соответствует значение 4, записи (w) − 2 и выполнению/просмотру файлов (x) − 1. Комбинируя эти значения, можно получать разные права. Например:

  • 6 (4 + 2) − чтение и запись в файл, либо чтение и запись файлов из папки, но для конкретных файлов права доступа определяются отдельно;
  • 5 (4 + 1) − чтение и выполнения файла, либо чтение из папки и просмотр её содержимого. Снова же, это не означает автоматического доступа к для вложенным объектам, а определяется их правами;
  • 7 (4 + 2 + 1) − полный доступ, чтение, запись файла или файлов в папку и выполнение файла или просмотр содержимого папки.

Первыми задаются права доступа для владельца, затем для группы и в конце для всех прочих.

Обычно для документов и файлов данных устанавливаются права 644 или 664. Это означает, что владелец может читать и изменять файл (включая удаление), члены группы в первом случае только читать, а во втором изменять, а все прочие − только читать.

Для исполняемых файлов и папок обычно задаются права 755 или 775. Значения те же, что и в предыдущем абзаце плюс присутствует право на выполнение или просмотр списка вложенных объектов.

Если задавать права доступа буквами, то указываются нужные права в виде rwx, а то, что нужно пропустить, заменяется дефисом. То есть, 644 соответствует rw-r--r--, а 755 − rwxr-xr-x.

Использовать цифры или буквы − не имеет значения, это дело привычки. Хотя, при использовании букв можно быстро дать или убрать право на запись, указав «+w» или «-w», что проще, чем вычислять в голове числовые значения. Лично я использую оба способа.

Изменение прав

Это действие также можно сделать в упомянутых выше приложениях или из консоли командой «chmod» ( англ. «change mode» − «изменить режим»). Продолжим эксперименты на созданной ранее папке. Для начала попробуем дать право доступа только себе:

chmod 700 testdir/

Для изменения доступа к своим файлам и папкам права суперпользователя не нужны, поэтому набираем команду без sudo. Смотрим результат при помощи «ls -l» и видим следующее:

drwx------ 2 rizado rizado 4096 мар 23 19:33 testdir

Буква «d» перед правами доступа означает «directory», указывая, что это папка, а не файл. Попробуем дать себе полный доступ, группе только чтение и просмотр содержимого, а остальным ничего:

chmod 750 testdir/

Результат

drwxr-x--- 2 rizado rizado 4096 мар 23 19:33 testdir

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

Для изменения прав доступа вложенных папок и файлов для папки аналогично смене владельца используется ключ «-R». Подробнее можно узнать, вызвав справку по команде:

man chmod

Вместо выводов

Чтобы удалить следы своих экспериментов, наберите в консоли:

rmdir testdir/

Возвращаясь к произведению Леонида Каганова, которое полностью можно прочитать на его сайте, мы можем понять, что же именно сделал сисадмин. Заменив цифры буквенными аналогами, получим rw-rw-rw-, что означает право на чтение и запись для всех, а вовсе не вызов Сатаны.

Учитывая, что речь шла о папке с сайтом, можно предположить, что право на запись должен был иметь как пользователь, как и приложение веб-сервера.

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

Один комментарий на «“Права доступа к файлам в Linux или что такое 666”»

  1. Далеко не у всех систем id юзверей начинаются с 1000.
    У того же альта они стартуют с 500.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *