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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *