Итак, Вы хорошо разобрались с владением файлами. Теперь поговорим о другой стороне медали: правах доступа к файлам. Вспомним наш пример:
hacker@perm:~$ mkdir ctf_directory
hacker@perm:~$ touch school_file
hacker@perm:~$ ls -l
total 4
-rw-r--r-- 1 hacker hacker 0 May 22 13:42 school_file
drwxr-xr-x 2 hacker hacker 4096 May 22 13:42 ctf_directory
hacker@perm:~$
Напомним: первый символ обозначает тип файла. Следующие девять символов — это непосредственно права доступа к файлу или каталогу, разделённые на три группы по три символа: первая тройка задаёт права пользователя-владельца (теперь Вы это знаете!), вторая — права группы-владельца (и это тоже!), третья — права всех остальных (например, других пользователей и групп).
Каждый символ в группе из трёх обозначает отдельный вид права доступа:
r — пользователь/группа/остальные могут читать файл
(или просматривать содержимое каталога)
w — пользователь/группа/остальные могут изменять файл
(или создавать/удалять файлы в каталоге)
x — пользователь/группа/остальные могут выполнять файл как программу
(или переходить в каталог, например с помощью `cd`)
- — нет прав
Для school_file строка прав доступа rw-r--r-- расшифровывается следующим образом:
r: пользователь-владелец (пользователь hacker) может читать файл
w: пользователь-владелец (пользователь hacker) может записывать в файл
-: пользователь-владелец (пользователь hacker) не может выполнять файл
r: пользователи группы-владельца (группа hacker) могут читать файл
-: пользователи группы-владельца (группа hacker) не могут записывать в файл
-: пользователи группы-владельца (группа hacker) не могут выполнять файл
r: все остальные пользователи могут читать файл
-: все остальные пользователи не могут записывать в файл
-: все остальные пользователи не могут выполнять файл
Теперь посмотрим на стандартные права доступа к /flag:
hacker@perm:~$ ls -l /flag
-r-------- 1 root root 53 Jul 4 04:47 /flag
hacker@perm:~$
Здесь установлен только один бит: право на чтение (r) для пользователя-владельца (в данном случае root). Члены группы-владельца (группа root) и все остальные пользователи не имеют никакого доступа к файлу.
Возможно, Вы задаётесь вопросом: как же работали задания с chgrp, если у группы не было доступа к файлу? Дело в том, что в тех заданиях права доступа были выставлены иначе:
hacker@perm:~$ ls -l /flag
-r--r----- 1 root root 53 Jul 4 04:47 /flag
hacker@perm:~$
Группа имела доступ! Именно поэтому смена группы через chgrp позволяла прочитать файл.
Права доступа к файлам, как и владельца, можно изменять. Для этого служит команда chmod (change mode — «сменить режим»). Базовый синтаксис chmod:
chmod [OPTIONS] MODE FILE
Режим MODE можно задать двумя способами: как изменение существующих прав доступа или как полную их замену. Сначала мы рассмотрим первый способ: изменение существующих прав. chmod позволяет тонко настраивать права доступа с помощью формата КТО+/-ЧТО, где КТО — пользователь, группа или остальные, а ЧТО — чтение, запись или выполнение.
Например, чтобы добавить (+) право чтения (read) для пользователя-владельца (user), нужно указать режим u+r. Запись (w) и выполнение (x) для группы (g) и остальных (o) (или для всех сразу, a) задаются аналогичным образом. Ещё примеры:
u+r — как показано выше, добавляет право чтения для пользователя
g+wx — добавляет права записи и выполнения для группы
o-w — снимает право записи для остальных пользователей
a-rwx — снимает все права для пользователя, группы и всех остальных
Таким образом:
root@perm:~# mkdir ctf_directory
root@perm:~# touch school_file
root@perm:~# ls -l
total 4
-rw-r--r-- 1 root root 0 May 22 13:42 school_file
drwxr-xr-x 2 root root 4096 May 22 13:42 ctf_directory
root@perm:~# chmod go-rwx *
root@perm:~# ls -l
total 4
-rw------- 1 hacker root 0 May 22 13:42 school_file
drwx------ 2 root root 4096 May 22 13:42 ctf_directory
root@perm:~#
Закрепим знания практикой.
В этом задании Вам нужно изменить права доступа к файлу /flag, чтобы его можно было прочитать. Как правило, для изменения прав доступа требуется быть владельцем файла, однако в этом уровне команда chmod всемогущая: Вы можете менять права доступа к любому файлу, даже от имени пользователя hacker. Это огромные полномочия!
Файл /flag принадлежит root, и Вы не можете это изменить, но Вы можете сделать его доступным для чтения. Вперёд!