В этой статье изучим стандартные права доступа к файлам в Linux. Научимся одним пользователям давать доступ к файлам, а у других его забирать.
Права доступа к файлам
Debian или Ubuntu — это многопользовательские операционные системы, и у разных пользователей разные права. Например, один пользователь может читать и создавать одни файлы, а второй может делать тоже самое но с другими файлами, ну а третий пользователь сможет проделать это и с первыми и со вторыми файлами.
Помимо чтения и редактирования файлов, их возможно запускать, если это файлы программ или скрипты.
Получается, с файлами можно делать три стандартные действия: читать (r), редактировать (w), запускать (x). Это и есть стандартные права доступа к файлам в Linux.
Дополнительно, документацию для Debian по правам доступа, на английском языке, можете почитать тут.
Права доступа к каталогам
В Linux все является файлами и каталоги это тоже файлы, об этом я рассказывал в этой статье. С каталогами можно выполнять те же действия, что и с файлами:
- прочесть каталог (r), то есть посмотреть список файлов, например с помощью утилиты ls;
- отредактировать каталог (w):
- создать новый файл, например с помощью mkdir или touch;
- удалить файл с помощью rm;
- переместить файл в другой каталог с помощью mv;
- войти в каталог, другими словами сделать его текущем (x) можно с помощью утилиты cd.
Это стандартные права доступа к каталогам в Linux.
Кто выполняет действия над файлами
С возможными действиями над файлами и каталогами мы разобрались, теперь разберемся с теми, кто может эти действия совершать:
- владелец файла или каталога (u). Владельцем файла является тот, кто его создал, или получил право владения им;
- группа владельцев файла или каталога (g). Файл получает группу владельцев от первичной группы создателя файла, или группу владельцев может назначить пользователь root;
- все остальные (o);
- a — все пользователи (a). Владелец и группа владельцев и все остальные вместе взятые.
Таким образом получается такая система прав u=rwx / g=rwx / o=rwx. То-есть, что может делать с файлом его владелец, что может делать с файлом группа владельцев и что могут делать с файлом все остальные.
Смотрим права файлов и каталогов
Права файлов и каталогов можно посмотреть с помощью команды ls -l. Можно добавить опцию -d чтобы смотреть права каталога, не спускаясь в этот каталог. Команда ls показывает права таким образом rwxr-xr-x, первые три символа это права для владельца, следующие для группы, следующие для всех остальных.
Давайте, для примера, создадим каталог test и посмотрим какие права он получил в Debian и в Ubuntu:
alex@ubu:~$ mkdir test alex@ubu:~$ ls -ld test/ drwxrwxr-x 2 alex alex 4096 янв 19 10:04 test/ alex@deb:~$ mkdir test alex@deb:~$ ls -ld test/ drwxr-xr-x 2 alex alex 4096 янв 19 13:05 test/
Разница между Ubuntu и Debian в том что, по умолчанию, каталог в Ubuntu создается с такими правами rwxrwxr-x, а в Debian с такими rwxr-xr-x. Это означает что в Debian пользователи входящую в группу владельцев этого каталога не смогут ничего удалить или создать в этом каталоге, а в Ubuntu смогут.
А после прав, в выводе ls -l, идут Владелец файла и Группа владельцев (alex alex).
Создадим файлы в каталоге и посмотрим на их права:
alex@ubu:~$ touch test/file1.txt alex@ubu:~$ touch test/file2.txt alex@ubu:~$ ls -l test/ total 0 -rw-rw-r-- 1 alex alex 0 янв 19 10:12 file1.txt -rw-rw-r-- 1 alex alex 0 янв 19 10:12 file2.txt alex@deb:~$ touch test/file1.txt alex@deb:~$ touch test/file2.txt alex@deb:~$ ls -l test/ итого 0 -rw-r--r-- 1 alex alex 0 янв 19 13:12 file1.txt -rw-r--r-- 1 alex alex 0 янв 19 13:12 file2.txt
Права на файлы в Ubuntu (rw-rw-r—) и в Debian (rw-r—r—) тоже немного отличаются. В Debian группа владельцев не может редактировать файл в отличии от Ubuntu.
Для назначения прав используют две утилиты:
- chmod для настройки прав (rwx);
- chown для смены владельца и группы владельцев файла.
Настраиваем права — chmod
Синтаксис этой команды такой:
# chmod [ugoa] [+-=] [rwx] <file> u - владелец g - группа o - все остальные a - все
Знак «+» добавляет право, знак «—» отнимает право, знак «=» устанавливает право для выбранной категории пользователей, убирая все остальные.
С прошлого урока у меня остался пользователь testuser:
alex@deb:~$ id testuser uid=1001(testuser) gid=1001(testuser) группы=1001(testuser)
Сделаем так, чтобы каталог test не могли читать все остальные и попробуем прочитать этот каталог под пользователем testuser:
alex@deb:~$ chmod o-r test/ alex@deb:~$ su testuser Пароль: testuser@deb:/home/alex$ ls -l test/ ls: невозможно открыть каталог 'test/': Отказано в доступе
Командой chmod мы можем устанавливать права и отбирать их, я указал o-r, что означает у всех остальных (o) отнять (-) права на чтение (r).
Устанавливать права может либо владелец файла, либо пользователь root.
Но зайти в каталог testuser все равно сможет:
testuser@deb:/home/alex$ cd test/ testuser@deb:/home/alex/test$ cd - /home/alex
Теперь попробуем прочитать каталог под пользователем alex:
testuser@deb:/home/alex$ exit exit alex@deb:~$ ls -l test/ итого 0 -rw-r--r-- 1 alex alex 0 янв 19 13:12 file1.txt -rw-r--r-- 1 alex alex 0 янв 19 13:12 file2.txt
Вот несколько примеров работы с командой 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).
Вот как назначают права в числовом виде:
alex@deb:~$ chmod 644 test/file1.txt alex@deb:~$ ls -l test/file1.txt -rw-r--r-- 1 alex alex 0 янв 19 13:12 test/file1.txt
Смена владельца и группы владельцев — chown
Теперь нужно разобраться, как менять владельцев у файлов, для этого нужно использовать утилиту chown. Владельца сможет сменить только суперпользователь.
alex@deb:~$ su - Пароль: root@deb:~# chown testuser:testuser /home/alex/test/ root@deb:~# ls -ld /home/alex/test/ drwxr-x--x 2 testuser testuser 4096 янв 19 13:12 /home/alex/test/ alex@ubu:~$ sudo su - [sudo] password for alex: root@ubu:~# chown testuser:testuser /home/alex/test/ root@ubu:~# ls -ld /home/alex/test/ drwxrwx--x 2 testuser testuser 4096 янв 19 10:12 /home/alex/test/
Так как в Ubuntu не задан пароль для root пользователя я использую sudo чтобы переключиться на него. Это я уже разбирал в этом курсе.
Команде «chown» нужно указать имя пользователя, потом двоеточие и имя группы. После проделанного пользователь testuser и группа testuser станут владельцами данного каталога.
Можно сменить только владельца а группу не менять:
root@deb:~# chown alex /home/alex/test/ root@deb:~# ls -ld /home/alex/test/ drwxr-x--x 2 alex testuser 4096 янв 19 13:12 /home/alex/test/
А можно сменить только группу владельцев:
root@deb:~# chown :testuser /home/alex/test/ root@deb:~# ls -ld /home/alex/test/ drwxr-x--x 2 alex testuser 4096 янв 19 13:12 /home/alex/test/
Как вы помните пользователь testuser не мог прочитать каталог test/, теперь он это сделать может, так как для группы у нас есть право читать этот каталог.
root@deb:~# su testuser testuser@deb:/root$ ls /home/alex/test/ file1.txt file2.txt testuser@deb:/root$ exit exit root@deb:~#
Рекурсивная смена прав и владельцев
Команды chmod и chown умеют работать рекурсивно, то есть изменять права на каталог, спуститься в этот каталог и изменить права на все файлы в нем, если в нем есть подкаталоги то пробежаться и по ним.
Для этого используется опция -R:
root@deb:~# chmod -R 644 /home/alex/test/ root@deb:~# chown -R alex:testuser /home/alex/test/ root@deb:~# ls -l /home/alex/test/ итого 0 -rw-r--r-- 1 alex testuser 0 янв 19 13:12 file1.txt -rw-r--r-- 1 alex testuser 0 янв 19 13:12 file2.txt