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

31 Июля 2018

Поскольку Linux является многопользовательской системой, где реализован механизм разграничения прав для отдельных пользователей с разным уровнем доступа. Например, для администрирования и внесения необходимых изменений в любой файл или разрешения только на доступ к данным без возможности их редактирования. Сегодня мы рассмотрим, как на Linux дать права на папку пользователю. Для этого используется команда chmod, а также ряд других сопутствующих. Используйте эту инструкцию при работе с Linux-сервером

Общая информация о правах доступа

Всего предусмотрено три варианта прав:

  • чтение, обозначаемое буквой ®,
  • запись, используется (w),
  • запуск файла (x).

Но это касается только файлов. Если речь идет о каталогах, то под правом доступа подразумевается, что пользователь сможет его открыть и просмотреть содержимое.

Администратор сервера может разделять пользователей по группам и давать каждой из них (либо же индивидуально каждому по имени) отдельные права доступа. При этом нужно понимать, что root админа не касаются эти права, он имеет неограниченный доступ на просмотр и изменение файлов.

Узнать Linux права пользователя на папку очень просто. Для этого используется команда:

ls -l имя каталога 

Наглядно её использование можно увидеть на следующем примере:

ls -l certs.xml

После введения такой команды вы получите в ответ:

-r-r-- 1 denis 2115693 Jun 11 12:11 certs.xml

Расшифровывается написанное так:

  • — (1 символ) — символьное обозначение файла, если каталог, то буква d;
  • r-(максимально 3 символа) — отображают непосредственно права доступа, то есть — чтение, запись и запуск на выполнение, в данном примере пользователь может лишь читать файл, внесение изменений и запуск запрещены;
  • r- (максимум 3 символа) — аналогично предыдущему, но показывают права уже группы владельцев, куда входит данный пользователь, соответственно, они могут читать файл, но не могут его отправлять на выполнение или изменять;
  • — (еще 3 символа) — показывают права доступа для других пользователей, то есть данный файл никто кроме администратора не сможет даже прочитать, при попытке зайти в него будет выведено на экран сообщение Access denied.

В операционной системе Linux права пользователя на папку можно задать при помощи команды chmod. Это можно сделать одним из двух способов — символьным или абсолютным. В первом случае задаются символы, которые обозначают для пользователя возможности работы с файлами — r, w, x (чтение, редактирование и запись). Но в UNIX намного практичнее использовать абсолютный метод. В чем он заключается можно детально разобраться на примере:

 rw-r--

Этот набор символов означает, что пользователь может лишь читать и изменять файл (r и w). При этом члены его группы могут лишь открывать его для просмотра, а посторонние и вовсе не имеют к данным доступа.

Теперь давайте возьмем лишь права только владельца файла: rw-. Ему разрешено чтение, держим в памяти 1, а также редактирование, запоминаем ещё 1. Поскольку запуск запрещен, то добавляем 0 и получаем в итоге цифру 110. Если её перевести из двоичной системы в восьмеричную, то выйдет 6. Для перевода других чисел вы всегда сможете воспользоваться приведенной ниже таблицей.

Таблица 1. Преобразование из двоичной в восьмеричную систему

Двоичная система Восьмеричная система Двоичная система Восьмеричная система
000 0 100 4
001 1 101 5
010 2 110 6
011 3 111 7

Если по подобию разобрать на числа права группы владельца, то выйдет 100. При его переводе в восьмеричную систему останется 4. У посторонних набор и вовсе прост — 000. При переводе останется просто 0. Итак, общие права доступа для данного файла — 640 и чтобы их установить, требуется лишь внести команду следующего формата:

chmod 640 имя_файла 

Чаще всего в практике применяются следующие варианты чисел для команды:

  • 644 — владелец читает и редактирует файл, в то время как другие лишь могут просмотреть содержимое;
  • 666 — доступ для чтения и перезаписи для всех;
  • 777 — полный допуск, включая запуск для выполнения, имеющийся у любого пользователя.
Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Символьный метод оптимальнее только в одном случае, если необходимо быстро сделать файл скрипта (script) исполнимым. Например, для этого потребуется лишь прописать команду:

chmod +x script

А если нужно запретить выполнение, то просто укажите -х, это будет выглядеть так:

chmod -x script

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

 man chmod.

Изменение владельца проводится командой chown

Выводится она (ls -l) следующим образом:

-r-r-- 1 denis 2115693 Jun 11 12:11 certs.xml

После установки прав доступа требуется ввести имя пользователя и данные его группы. С помощью такой команды можно в Linux расширить права на папку пользователю владельцу — denis, если его группа носит одноименное название. Но если вам нужно передать файл другому владельцу, то необходимо для этого использовать chown. Наглядно она выглядит так:

chown пользователь файл

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

Изменение атрибутов и запрет на редактирование

Для смены атрибутов выбранного файла применяется команда chattr. Используя «+» можно добавить атрибут, а с помощью «-» наоборот его убрать. Для примера давайте возьмем:

# chattr +i /boot/grub/menu.lst

Введение такой команды приведет к тому, что файл нельзя редактировать, менять его имя или даже удалять. Установить атрибут «i» может лишь суперпользователь или процесс CAP_LINUX_IMMUTABLE. Удаление данного атрибута производится командой:

# chattr -i /boot/grub/menu.lst

Полезным является и атрибут «j». Он предназначен, чтобы вносимые в файл данные предварительно были записаны в журнал файловой системы. Функционировать такой атрибут будет только в системах, имеющих опции data=ordered или data=writeback. Если изначально использовано data=journal, то данные уже автоматически сохраняются и он ничего не изменит.

Прочие важные атрибуты:

  • А — запрещает обновление записи atime, которая фиксирует время доступа к измененному файлу;
  • с — атрибут, необходимый для сжатия содержащихся в файле данных, что удобно при необходимости экономить дисковое пространство;
  • а — позволяет исключительно добавлять новые данные;
  • D — моментальная запись информации на диск;
  • d — опция создания резервной копии программой dump;
  • u — упрощает восстановление случайно удаленного с диска файла;
  • X и Z — экспериментальные атрибуты, используемые в служебных администраторских целях.

Для установки любого атрибута можно воспользоваться chattr, а посмотреть права на папку Linux пользователя получится командой lsattr. Другие атрибуты есть в справочнике — man chattr.

Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent