Стандартные права доступа в Linux

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

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

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

Права назначаются для владельца файла, группы владельцев и всех остальных. Рекомендую ознакомится со статьями [Пользователи в Linux] и [Группы пользователей в Linux].

Получается, с файлами можно делать три стандартные действия: читать (r), редактировать (w), запускать (x). Это и есть стандартные права доступа к файлам в Linux.

Права доступа к каталогам

В Linux все является файлами и каталоги это тоже файлы. С каталогами можно выполнять те же действия, что и с файлами:

  • прочесть каталог (r), то есть посмотреть список файлов, например с помощью утилиты ls;
  • отредактировать каталог (w):
    • создать новый файл, например с помощью mkdir или touch;
    • удалить файл с помощью rm;
    • переместить файл в другой каталог с помощью mv;
  • войти в каталог, другими словами сделать его текущем (x) можно с помощью утилиты cd.

Кто выполняет действия над файлами

С возможными действиями над файлами и каталогами мы разобрались, теперь разберемся с теми, кто может эти действия совершать:

  • владелец файла или каталога (u). Владельцем файла является тот, кто его создал, или получил право владения им.
  • группа владельцев файла или каталога (g). Файл получает группу владельцев от первичной группы создателя файла, или группу владельцев может назначить пользователь root.
  • все остальные (o). То есть все пользователи или группы не являющиеся владельцем файла.
  • все пользователи (a). Владелец и группа владельцев и все остальные вместе взятые.

Таким образом получается такая система прав u=rwx / g=rwx / o=rwx. То-есть, что может делать с файлом его владелец, что может делать с файлом группа владельцев и что могут делать с файлом все остальные.

Все эти обозначения (u / g / o / a / rwx) понадобятся для управления правами доступа.

Смотрим права файлов и каталогов

Права файлов и каталогов можно посмотреть с помощью команды ls -l. Можно добавить опцию -d чтобы посмотреть права каталога, не спускаясь в этот каталог. Команда ls показывает права таким образом rwxr-xr-x, первые три символа это права для владельца, следующие для группы, следующие для всех остальных.

$ ls -ld test-dir/
drwxr-xr-x 2 alex alex 4096 апр 16 12:20 test-dir/
Стандартные права доступа к файлам в Linux

А после прав, в выводе ls -l, идут Владелец файла и Группа владельцев (alex alex).

Для примера можем посмотреть на права файлов:

$ ls -l test-dir/test.txt
-rw-r--r-- 1 alex alex 0 апр 16 12:23 test-dir/test.txt

Владелец файла (alex) может читать и редактировать файл. Группа владельцев (alex) может только читать этот файл. Все остальные тоже могут читать этот файл.

Вся настройка прав состоит в изменении владельца файла или группы владельцев, а также изменения их прав (rwx).

Установка прав — chmod

Синтаксис этой команды такой:

# chmod [ugoa] [+-=] [rwx] <file>
u - владелец
g - группа
o - все остальные
a - все

Знак + добавляет право, знак отнимает право, знак = устанавливает право для выбранной категории пользователей, убирая все остальные.

Например можем сделать так, чтобы каталог test-dir не могли читать все пользователи:

$ sudo chmod o-r test-dir/

$ ls -ld test-dir
drwxr-x--x 2 alex alex 4096 апр 16 12:23 test-dir

Командой chmod мы можем устанавливать права и отбирать их, я указал o-r, что означает у всех остальных (o) отнять (-) права на чтение (r).

Устанавливать права может либо владелец файла, либо пользователь root.

Но зайти в каталог все остальные пользователи все равно смогут, ведь на это осталось право (x).

$ ls -l /home/alex/test-dir
ls: невозможно открыть каталог '/home/alex/test-dir': Отказано в доступе

$ cd /home/alex/test-dir

Вот несколько примеров работы с командой chmod:

$ chmod o-rwx # забрать права на чтение, запись и исполнение для всех остальных
$ chmod o+rwx # дать права на чтение, запись и исполнение для всех остальных
$ chmod g+rx  # дать права для группы владельцев на чтение и исполнение
$ chmod a+r   # всем дать право на чтение
$ chmod ug+rw # владельцу и группе дать право на чтение и запись
$ chmod o=x   # всем остальным мы назначаем права на исполнение, rw удаляются если были

То есть мы вначале говорим кто (u или g или o или a), дальше указываем что сделать ( удалить право, + добавить право, = установить право), дальше указываем права (r или w или x, или их комбинации). При этом + отличается от = тем что, + добавляет право к уже имеющемся, а = заменяет.

Числовые значения прав

У прав есть числовые значения: r=4, w=2, x=1. Для удобства я подготовил следующую табличку:

ЦифраОписание прав для файлаОписание прав для каталогаСимвольные значения
0Нет доступаНет доступа---
1Право выполнять файлПраво входить в каталог (делать его текущем)--x
2Право редактировать файлПраво создавать новые файлы, удалять файлы, или переименовывать их в каталоге-w-
3Сумма прав (1+2)Сумма прав (1+2)-wx
4Право читать файлПраво смотреть список файлов в каталогеr--
5Сумма прав (4+1)Сумма прав (4+1)r-x
6Сумма прав (4+2)Сумма прав (4+2)rw-
7Сумма прав (4+2+1)Сумма прав (4+2+1)rwx

Используя chmod можно устанавливать права в числовых значениях, при этом нужно указывать сумму прав. Например права rw-r--r-- в числовом формате будут такими 644, то есть мы сложили права для владельца (r+w=6), дальше для группы и для всех остальных (r=4).

Вот как назначают права в числовом виде:

$ chmod 644 test-dir/test.txt

$ ls -l test-dir/test.txt
-rw-r--r-- 1 alex alex 0 апр 16 12:23 test-dir/test.txt

Смена владельца и группы владельцев — chown

Для того чтобы изменить владельца файла или группу владельцев используется команда chown. Владельца и группу владельцев сможет изменить только суперпользователь root.

Синтаксис команды chown следующий:

chown <username>:<groupname> <file>

Например:

$ sudo chown alex:testuser test-dir/test.txt

$ ls -l test-dir/test.txt
-rw-r--r-- 1 alex testuser 0 апр 16 12:23 test-dir/test.txt

Кстати, для административных действий я использую утилиту sudo, подробнее я писал про неё в статье [Использование sudo в Linux].

Можно изменить только владельца а группу не менять:

$ sudo chown alex test-dir/test.txt

А можно изменить только группу владельцев:

$ sudo chown :testuser test-dir/test.txt

Рекурсивная смена прав и владельцев

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

Для chown используется опция -R:

$ sudo chown -R alex:users test-dir/

$ ls -l test-dir/
итого 0
-rw-r--r-- 1 alex users 0 апр 16 12:23 test.txt

Для chmod также нужна опция -R:

$ sudo chmod -R 750 test-dir/

$ ls -ld test-dir/
drwxr-x--- 2 alex users 4096 апр 16 12:23 test-dir/

$ ls -l test-dir/
итого 0
-rwxr-x--- 1 alex users 0 апр 16 12:23 test.txt

Если понравилась статья, подпишись на мой канал в VK или Telegram.

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