Стандартные права доступа к файлам в Linux

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




Стандартные права доступа к файлам в Linux
Стандартные права доступа к файлам в Linux




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




Права, владелец и группа владельцев в выводе ls
Права, владелец и группа владельцев в выводе ls




Создадим файлы в каталоге и посмотрим на их права:




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













2022-01-20T10:49:03
Администрирование Linux