Права доступа к файлам и папкам в Linux и Android. Настройка, изменение, ACL.

Поскольку ОС GNU-Linux (просто Linux далее) с самого начала разрабатывалась как многопользовательская, в ней предусмотрен такой механизм, как права доступа к файлам и папкам. Он позволяет разграничить полномочия пользователей, работающих в системе. В частности, права доступа позволяют отдельным пользователям иметь “личные” файлы и папки. Например, если пользователь "user" создал в своей домашней папке файлы, то он является владельцем этих файлов и может определить права доступа к ним для себя и остальных пользователей. Он может, например, полностью закрыть доступ к своим файлам для остальных пользователей, или разрешить им читать свои файлы, запретив изменять и исполнять их.


Самым простым способом настройки прав доступа к файлам и папкам является работа с меню "Свойства файла" в Вашем файловом менеджере (см. иллюстрацию). Подробности, включая тонкую настройку прав доступа в консоли Linux - далее.

Содержание

Права доступа к файлам и папкам в ОС Linux: устройство и настройка

Правильная настройка прав доступа позволяет повысить надёжность операционной системы, защитив от изменения или удаления важные системные файлы. Наконец, поскольку внешние устройства с точки зрения операционной системы Linux также являются объектами файловой системы, механизм прав доступа можно применять и для управления доступом к устройствам. У любого файла в системе есть владелец - один из пользователей, однако, каждый файл одновременно принадлежит и некоторой группе пользователей системы. Каждый пользователь может входить в любое количество групп, и в каждую группу может входить любое количество пользователей из числа определённых в операционной системе. Механизм групп может применяться для организации совместного доступа нескольких пользователей к определённым ресурсам. Например, на сервере организации для каждого проекта может быть создана отдельная группа, в которую войдут учётные записи (имена пользователей) сотрудников, работающих над этим проектом. При этом файлы, относящиеся к проекту, могут принадлежать этой группе и быть доступными для её членов. Права доступа определяются по отношению к трём типам действий: чтение, запись и исполнение. Эти права доступа могут быть предоставлены трём классам пользователей: владельцу файла (пользователю), группе, которой принадлежит файл, а также всем остальным пользователям, не входящим в эту группу.

  • Право на чтение даёт пользователю возможность читать содержимое файла или, если такой доступ разрешён к папке, просматривать её содержимое.
  • Право на запись даёт пользователю возможность записывать или изменять файл, а право на запись для папки - возможность создавать новые файлы или удалять файлы из этой папки.
  • И наконец, право на исполнение позволяет пользователю запускать файл как программу или сценарий командной оболочки (разумеется, это действие имеет смысл лишь в том случае, если файл является программой или сценарием). Для папок право на исполнение имеет особый смысл - оно позволяет сделать данную папку текущей, т. е. “перейти” в неё, например, командой "cd".

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


Права доступа к файлам и папкам в ОС Linux могут распределять не только сами пользователи вручную, но и некоторые системные процессы: например - механизм монтирования файловых систем. Таким образом права доступа ко вновь подключенным частям файловой системы будут изначально определяются системными правилами.

Права доступа к файлам и папкам в ОС Android

Имея в своей основе ядро Linux, Android-Linux (просто Android далее) использует те же самые модель и механизмы распределения прав к фалам и папкам в системе, что и традиционные дистрибутивы Linux. ОС Android, будь то официальная стандартная прошивка устройства или модифицированная версия Android CyanogenMod, например, включают в себя простейшие консольные программные утилиты GNU для управления правами доступа к файлам и папкам: chmod, chown и т.п.

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

Информация о правах доступа к файлам и папкам в ОС Linux

Чтобы получить информацию о правах доступа к файлам и папкам в консоли Linux, используйте команду ls с ключом -l. При этом будет выведена подробная информация о файлах и папках, в которой будут, среди прочего, отражены права доступа.

ls -l (имя_файла)
-rw-r--r-- 1 user users 1024 Mar 13 19:05 имя_файла
  • Первое поле в этой строке (-rw-r--r--) отражает права доступа к файлу "имя_файла".
  • Третье поле указывает на владельца файла ("user").
  • Четвёртое поле указывает на группу, которая владеет этим файлом ("users").

Другие поля описаны в документации к команде ls (ls --help). Последовательность "-rw-r--r--" условно разбивается на четыре секции (-/rw-/r--/r--): один первый символ и каждые три последующих, отражающих права доступа для владельца файла, членов группы пользователей владельцев файла, а также для всех остальных пользователей, соответственно. Символ "r" - сокращение от "read" (англ. "читать"), а "w" - сокращение от "write" (англ. "писать"). Таким образом, пользователь "user" из примера (см. выше) имеет право на чтение и запись (изменение) файла, пользователи, состоящие в группе "users", так же как и все прочие, среди прав доступа имеют только право чтения (просмотра) файла.


  • Первый символ из последовательности "-" обозначает тип файла. Символ "-" означает, что это - обычный файл, который не является папкой (в этом случае первым символом было бы "d" - англ. "directory" - "папка"), псевдо-файлом устройства (было бы "c" или "b"), ссылкой ("l").
  • После символа "w" третьим в последовательности каждой секции мог бы стоять символ "x", означающий наличие прав на исполнение (англ. "execute", "исполнять") файла. Однако символ "-", стоящий здесь вместо "x", указывает, что "user" не имеет права на исполнение этого файла. Это разумно, если файл не является программой или папкой. В то же время, пользователь, зарегистрировавшийся в системе как "user", при желании может предоставить себе право на исполнение данного файла, поскольку является его владельцем.

Изменение прав доступа к файлам и папкам в ОС Linux

Ниже перечислены важнейшие команды для решения задач, связанных с изменением прав доступа к файлам и папкам операционной системы Linux.

  • chmod - изменение прав доступа к файлу или папке
  • chown - изменение владельца файла
  • chgroup - изменение группы, которой принадлежит файл
chmod 664 имя_файла
Команда сделает файл "имя_файла" доступным для записи и тем, кто состоит в группе "users". Каждая из цифр кода 664 - одна из последних трёх секций последовательности "-rw-rw-r--" (см. выше), но в цифровом виде.

Цифры кода получаются методом сложения чисел, условно обозначающих одно из прав доступа:

  • 1 - только выполнение (--x)
  • 2 - только запись (-w-)
  • 4 - только чтение (r--)
  • 6 - чтение и запись (rw-)
  • 7 - vчтение, запись и выполнение (rwx)
chown user1 имя_файла
Команда сменит пользователя файла на "user1".
chown user1:others имя_файла
Сменит И группу владельцев файла на "others".
chgroup others имя_файла
Команда для смены группы владельцев отдельно.

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

Расширенные настройки прав доступа ОС Linux: "Access Control Lists" (ACL)

Многие современные дистрибутивы Linux используют механизм ACL ("Access Control Lists", англ. "списки контроля доступа"), позволяющий расширить используемые права доступа к файлам и папкам, дополняя их специализированными настройками доступа для определённых пользователей и групп. Таким образом, например, могут быть защищены монтируемые пользователями диски (оптические носители, "флэш"-карты и т.п.): принадлежа администратору компьютера - пользователю root, папки с адресами вида "/media/user/disk" могут быть доступны для чтения и записи смонтировавшему диск пользователю. Если такие расширенные настройки прав доступа используются для управления каким-либо файлом или папкой, при выводе списка файов командой ls -al, в поле прав доступа такого файла Вы обнаружите знак "+" в последовательности типа "drwxr-x---+".

getfacl имя_файла
Команда выведет дополнительные расширенные права файла или папки "имя_файла".
setfacl -b имя_файла
Очистит (!) настройки расширенных прав доступа.
setfacl -m u:user:x / g:group:r имя_файла
Установит дополнительные расширенные права выполнения и чтения для пользователя "user" / или группы "group" - соответственно.

Для того, чтобы узнать, используется ли в вашей ОС Linux механизм расширения прав доступа к файлам и папкам, чаще всего достаточно уточнить наличие соответствующего программного пакета ("acl" - в случае с Debian Linux, например).