В Linux разрешения назначаются пользователям и группам. Каждый пользователь может быть членом разных групп, и членство в этих группах дает пользователю конкретные дополнительные разрешения. Каждый файл и каталог принадлежат определенному пользователю и определенной группе. Таким образом, разрешения для пользователей и групп, которые определили файл, также определяются для соответствующих владельцев.
Когда мы создаем новые файлы или папки, они принадлежат к группе, к которой мы принадлежим, и к нам. Когда пользователь хочет получить доступ к содержимому каталога Linux, он должен сначала пройти через каталог, требуя, чтобы пользователь имел разрешения на выполнение этой папки. Без этого разрешения пользователь не сможет получить доступ к содержимому каталога и вместо этого получит сообщение об ошибке Permission denied
.
┌──(k1ber㉿kali)-[~]
└─$ ls -l
total 16
drw-r--r-- 2 k1ber k1ber 4096 Apr 3 11:20 BlockedDir
drwxr-xr-x 2 k1ber k1ber 4096 Apr 3 11:19 Desktop
drwxr-xr-x 2 k1ber k1ber 4096 Apr 3 11:19 Documents
drwxr-xr-x 2 k1ber k1ber 4096 Apr 3 11:19 Downloads
┌──(k1ber㉿kali)-[~]
└─$ ls -la BlockedDir/
ls: cannot access 'BlockedDir/secrets.txt': Permission denied
ls: cannot access 'BlockedDir/..': Permission denied
ls: cannot access 'BlockedDir/help.txt': Permission denied
ls: cannot access 'BlockedDir/.': Permission denied
total 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
-????????? ? ? ? ? ? help.txt
-????????? ? ? ? ? ? secrets.txt
Важно отметить, что разрешения на выполнение необходимы для обхода каталога, независимо от уровня доступа пользователя. Кроме того, разрешения на выполнение в каталоге не позволяют пользователю выполнять или изменять какие-либо файлы или содержимое в папке, только для обхода и доступа к содержимому каталога. Для выполнения файлов в каталоге пользователю необходимо выполнить разрешения для соответствующего файла. Чтобы изменить содержимое каталога (создать, удалить или переименовать файлы и подкаталоги), пользователю необходимы разрешения на запись в каталог. Вся система разрешений в системах Linux основана на восьмеричной системе счисления, и в основном существует три различных типа разрешений, которые могут быть назначены файлу или директории:
r
) - Read (Чтение)w
) - Write (Запись)x
) - Execute (Выполнение)Разрешения могут быть установлены для владельца, группы и других лиц:
┌──(k1ber㉿kali)-[~]
└─$ ls -l /home/
total 8
d rwx r-x r-x 9 k1ber k1ber 4096 Apr 3 11:20 k1ber
- --- --- --- | | | | |__________|
| | | | | | | | |_ Дата
| | | | | | | |__________ Размер файла
| | | | | | |_______________ Группа
| | | | | |____________________ Пользователь
| | | | |_______________________ Количество жестких ссылок
| | | |_ Разрешения остальных (чтение,выполнение)
| | |_____ Разрешения группы (чтение,выполнение)
| |_________ Разрешения владельца (чтение,запись, выполнение)
|____________ Тип файла (- = Файл, d = Папка, l = Ссылка, ... )
Изменение разрешений происходит с помощью команды chmod
. Для указания группы разрешений используется:
u
- владелец, g
- группа, o
- другие, a
- все, также +
или -
для добавления или удаления назначенных разрешений.
Пример выдачи разрешения для запуска файла help.txt
всем пользователям:
┌──(k1ber㉿kali)-[~/BlockedDir]
└─$ ls -l
total 8
-rw-r--r-- 1 k1ber k1ber 4 Apr 3 11:20 help.txt
-rw-r--r-- 1 k1ber k1ber 5 Apr 3 11:20 secrets.txt
┌──(k1ber㉿kali)-[~/BlockedDir]
└─$ chmod +x help.txt
┌──(k1ber㉿kali)-[~/BlockedDir]
└─$ ls -l
total 8
-rwxr-xr-x 1 k1ber k1ber 4 Apr 3 11:20 help.txt
-rw-r--r-- 1 k1ber k1ber 5 Apr 3 11:20 secrets.txt
Пример запрета на чтения для всех остальных, кто не является пользователем k1ber или не состоит в группе k1ber для файла secrets.txt
:
┌──(k1ber㉿kali)-[~/BlockedDir]
└─$ chmod o-r secrets.txt
┌──(k1ber㉿kali)-[~/BlockedDir]
└─$ ls -l
total 8
-rwxr-xr-x 1 k1ber k1ber 4 Apr 3 11:20 help.txt
-rw-r----- 1 k1ber k1ber 5 Apr 3 11:20 secrets.txt
┌──(k1ber㉿kali)-[~/BlockedDir]
└─$ su kali
Password:
┌──(kali㉿kali)-[/home/k1ber/BlockedDir]
└─$ cat secrets.txt
cat: secrets.txt: Permission denied
Чтобы изменить владельца и/или групповые назначения файла или каталога, мы можем использовать команду chown
. Синтаксис выглядит следующим образом:
┌──(k1ber㉿kali)-[~]
└─$ chown <пользователь>:<группа> <файл/папка>