В этой статье изучим стандартные права доступа к файлам в 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/

А после прав, в выводе 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.