- Sysadminium
- Права доступа к файлам
- Права доступа к каталогам
- Кто выполняет действия над файлами
- Смотрим права файлов и каталогов
- Настраиваем права — chmod
- Числовые значения прав
- Смена владельца и группы владельцев — chown
- Рекурсивная смена прав и владельцев
- Как дать права на папку пользователю Linux
- Права пользователя на папку Linux
- Выводы
Sysadminium
В этой статье изучим стандартные права доступа к файлам в Linux. Научимся одним пользователям давать доступ к файлам, а у других его забирать.
Права доступа к файлам
Debian или Ubuntu — это многопользовательские операционные системы, и у разных пользователей разные права. Например, один пользователь может читать и создавать одни файлы, а второй может делать тоже самое но с другими файлами, ну а третий пользователь сможет проделать это и с первыми и со вторыми файлами.
Помимо чтения и редактирования файлов, их возможно запускать, если это файлы программ или скрипты.
Получается, с файлами можно делать три стандартные действия: читать (r), редактировать (w), запускать (x). Это и есть стандартные права доступа к файлам в Linux.
Дополнительно, документацию для Debian по правам доступа, на английском языке, можете почитать тут.
Права доступа к каталогам
В Linux все является файлами и каталоги это тоже файлы, об этом я рассказывал в этой статье. С каталогами можно выполнять те же действия, что и с файлами:
- прочесть каталог (r), то есть посмотреть список файлов, например с помощью утилиты ls;
- отредактировать каталог (w):
- создать новый файл, например с помощью mkdir или touch;
- удалить файл с помощью rm;
- переместить файл в другой каталог с помощью mv;
Это стандартные права доступа к каталогам в 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] 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 можно в отдельной статье.
Иногда возникает необходимость дать определенному пользователю или программе возможность доступа к папке. На первый взгляд, это может показаться сложным, но решается все довольно просто. В этой статье мы разберем как дать права на папку пользователю Linux.
Права пользователя на папку Linux
Как я уже сказал, права делятся на три категории для владельца, для группы и для всех остальных. Таким образом, мы можем дать пользователю доступ к папке несколькими способами:
- Изменить права для всех — тогда все пользователи получат доступ к нашей папке, в том числе и нужный пользователь. Но, обычно, так никто не делает, потому что это небезопасно и в производственных системах важные данные могут попасть в чужие руки;
- Изменить владельца папки на нашего пользователя — по умолчанию владелец имеет полные права на папку, то есть запись и чтение. Если мы сделаем владельцем нашего пользователя, то он автоматически получит все права, а другие пользователи по-прежнему не смогут получить доступ к папке. Но такой вариант тоже не совсем правильный, потому что, обычно, у папки уже есть владелец и изменив владельца мы уберем у него доступ;
- Добавить к папке группу и добавить в нее пользователя — самый верный путь. Файл или папка может принадлежать определенной группе пользователей, но только одной, и мы можем установить для этой группы отличающиеся от владельца права. Но в группу можно добавить несколько пользователей, поэтому мы никого не оставляем без доступа. По умолчанию, для всех файлов устанавливается группа владельца, но это можно очень просто изменить.
Теперь давайте разберем как это реализуется на практике. Допустим, у нас есть папка /storage, владельцем которой является пользователь /root:
У папки такие права, что записывать в нее данные может только root, а другие пользователи могут их только смотреть. Нам надо предоставить к ней доступ на запись и чтение пользователю sergiy. Сейчас у него такого доступа нет:
Давайте создадим группу storage и добавим в нее пользователя sergiy:
sudo groupadd storage
sudo usermod -aG storage sergiyСмотрим список групп нашего пользователя:
После добавления пользователя в группу нужно перелогиниться, чтобы система увидела это изменение. Затем меняем группу нашей папки на storage:
sudo chgrp storage /storage
Если нужно дать права на папку в Linux еще какому-нибудь пользователю, то достаточно добавить его в эту группу. Посмотрим список пользователей группы:
Теперь наша папка выглядит вот так:
Осталось подправить права для группы, нужно дать разрешение на чтение и запись:
Затем пользователь sergiy сможет записывать и читать файлы из этой папки, а все остальные пользователи только читать.
Выводы
В этой небольшой статье мы рассмотрели дать права пользователю linux на доступ к папке. Для серверов это может быть достаточно частой задачей, поскольку пользователи — это не только люди, использующие систему, но и программы, выполняемые от имени того или иного пользователя. А это создает еще одно применение для этой системы прав. Если у вас остались вопросы, спрашивайте в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.