Запись:
[yt]
[vk]
[r]ead - файл: читать, директория: просматривать содержимое (ls)
[w]rite - файл: изменять содержимое, директория: создавать новые файлы
e[x]ecute - файл: исполнять, директория: заходить в нее (cd)
[u]ser - владелец файла (может быть только один)
[g]roup - любая группа пользователей (может быть только одна)
[o]ther - все остальные
[a]ll - все
-
[-] Обычный файл – наиболее распространенный тип файлов, который хранит данные в том или ином виде. Ядро UNIX не делает различий между текстовыми и двоичными файлами. Любая интерпретация содержимого файла полностью возлагается на прикладную программу, обрабатывающую файл.
-
[d] Файл каталога. Файлы этого типа содержат имена других файлов и ссылки на информацию о них. Любой процесс, обладающий правом на чтение каталога, может проверить его содержимое, но только ядро обладает правом на запись в файл каталога. Чтобы внести изменения в каталог, процессы должны пользоваться функциями, обсуждаемыми в данной главе.
-
[b] Специальный файл блочного устройства. Этот тип файлов обеспечивает буферизованный ввод вывод для таких устройств, как дисковые устройства с фиксированным размером блока.
-
[c] Специальный файл символьного устройства. Этот тип файлов обеспечивает небуферизованный ввод вывод для устройств с переменным размером блока. Все устройства в системе являются либо специальными файлами блочных устройств, либо специальными файлами символьных устройств.
-
[p] FIFO, или именованный канал. Этот тип файлов используется для организации обмена информацией между процессами.
-
[s] Сокет. Этот тип файлов используется для организации обмена информацией между процессами через сетевые соединения. Сокеты можно применять и для обмена информацией между процессами на одной и той же машине.
-
[l] Символическая ссылка. Файлы этого типа представляют собой ссылки на другие файлы.
При запуске программы используются effective uid и effective gid, то есть влияют права не того пользователя (группы), кто создал файл, а того, кто запускает.
[s]uid - установка этого бита позволяет запускать программу от имени владельца файла. То есть какие-то программы можно, например, запускать от имени суперпользователя (ls -l /usr/bin/passwd
).
[s]gid - установка этого бита на файл позволяет запускать файл от имени группы, владеющей файлом. Если бит установлен на директории, то все файлы созданные в этой директории будут иметь группу такую же как у директории
s[t]icky - установка этого бита запрещает удалять файлы директории/файл всем, кроме root и владельца файла/директории. (ls -ld /tmp/
)
В символьном виде строка прав состоит из 10 символов (9 символов права и 1 на тип):
- --- --- ---
^ \|/ \|/ \|/
| | | |
Тип | | |
| | |
Права | |
владельца | |
| |
Права |
группы |
|
Права
остальных
-
[-, d, b, c, p, s, l] один в зависимости от типа файла отсюда.
-
[-, r]: '-' у владельца нет прав на чтение, 'r' у владельца есть права на чтение
-
[-, w]: '-' у владельца нет прав на запись, 'w' у владельца есть права на запись
-
[-, x, s, S]: '-' у владельца нет прав на исполнение, 'x' у владельца есть права на исполнение, 's' при запуске использовать права владельца, а не того, кто запускает (у владельца есть права на запуск), 'S' при запуске использовать права владельца (у владельца нет права на запуск)
-
[-, r]: '-' у группы нет прав на чтение, 'r' у группы есть права на чтение
-
[-, w]: '-' у группы нет прав на запись, 'w' у группы есть права на запись
-
[-, x, s, S] '-' у группы нет прав на исполнение, 'x' у группы есть права на исполнение, 's' файл будет запускаться от имени группы / в директории файлы будут создаваться в правами группы (у группы есть права на исполнение), 'S' аналогично, но у группы нет прав на исполнение
-
[-, r]: '-' у остальных нет прав на чтение, 'r' у остальных есть права на чтение
-
[-, w]: '-' у остальных нет прав на запись, 'w' у остальных есть права на запись
-
[-, x, t, T] '-' у остальных нет прав на исполнение, 'x' у остальных есть права на исполнение, 't' - файл нельзя удалить (у остальных есть права на исполнение), 'T' - файл нельзя удалить (у остальных нет прав на исполнение)
Действует всегда только один набор прав: или для владельца, или для группы, или для остальных.
Сначала проверяется совпадают ли владелец файла и effective UID процесса, если да, то выбирается набор прав для владельца.
Дальше проверяется, совпадает ли группа файла и effective GID процесса, если да, то выбирается набор прав для группы.
Иначе выбираются права для остальных.
На каждом шаге можно проверять права с помощью ls -l myfile.txt
Создадим файл:
echo 'mytext' > myfile.txt
Запретим себе читать его:
chmod u-r myfile.txt
Проверим, что не можем читать:
cat myfile.txt
Должны получить permission denied. Так как применились права владельца а мы у владельца забрали права на чтение.
Поменяем владельца на root:
sudo chown root myfile.txt
Теперь проверим, что имеем доступ:
cat myfile.txt
Должно сработать. Мы теперь не являемся владельцами файла, поэтому права владельца не применяются. В для группы и для остальных права на чтение есть
drwxr-xr-x
Директория, владелец может делать что угодно. Остальные группа и остальные могут только заходить в нее и просматривать содержимое
-r-xr--r--
Обычный файл. Читать могут все. Исполнять только владелец.
Строку прав можно представить как 4 8-ричных числа.
8-ричное число состоит из 3х бит.
3 числа отвечают за права user, group, other - 100 соответствует r--, 101 соответствует r-x, 111 - rwx.
Четвертое число (пишется на первом месте) отвечает за специальные биты. Первая позиция отвечает за user, вторая за group, третья за остальных. Например, если для user мы имеем rwx [111], а в специальных битах находится 100, то в символьном виде запишется rws (x заменится на s).
Права можно записывать сразу в восьмиричной системе счисления:
000 - --- - 0
001 - --x - 1
010 - -w- - 2
011 - -wx - 3
100 - r-- - 4
101 - r-x - 5
110 - rw- - 6
111 - rwx - 7
Соответственно, можно записывать права так: 7777, 5666 или, опуская специальные биты: 777 (всем все можно), 400 (читать может только владелец).
Чтобы изменить права, нужно воспользоваться командой chmod
.
Можно задавать права в восьмиричном виде (будут права rwsrwsrwt):
chmod 7777 file.txt
Если опустить какую-то цифру, то она будет считаться 0. То есть
chmod 777 file
сделает то же самое, что и
chmod 0777 file
и права будут rwxrwxrwx
chmod опции категория|действие|флаг файл
Добавить права на выполнение всем:
chmod +x file
Добавить права на выполнение владельцу:
chmod u+x file
Забрать права на чтение у всех:
chmod a-r file
Установить владельцу права в точности на чтение и исполнение:
chmod u=rx file
Установить SUID:
chmod u+s file