junior
Как управлять правами доступа к файлам и каталогам?
Каждый файл и каталог в Linux имеет три набора прав доступа для трёх категорий: владелец (user), группа (group), остальные (others).
Права доступа
| Символ | Число | Для файла | Для каталога |
|---|---|---|---|
r |
4 | Чтение содержимого | Просмотр списка файлов |
w |
2 | Изменение содержимого | Создание/удаление файлов в каталоге |
x |
1 | Запуск как программы | Вход в каталог (cd) |
Пример вывода ls -l
Пример
-rwxr-xr-- 1 developer developers 8192 Apr 1 12:00 deploy.sh
│└┬┘└┬┘└┬┘
│ │ │ └── others: r-- (только чтение)
│ │ └────── group: r-x (чтение и выполнение)
│ └────────── owner: rwx (чтение, запись, выполнение)
└──────────── тип файла: - (обычный файл)
Изменение прав — chmod
Пример
# Символьный формат
chmod u+x script.sh # Добавить владельцу право на выполнение
chmod g-w file.txt # Убрать у группы право на запись
chmod o=r file.txt # Установить другим только чтение
chmod a+r file.txt # Добавить всем право на чтение
# Числовой (восьмеричный) формат
chmod 755 script.sh # rwxr-xr-x
chmod 644 config.yml # rw-r--r--
chmod 600 id_rsa # rw------- (только владелец)
# Рекурсивно для каталога
chmod -R 755 /opt/myapp
Изменение владельца — chown
Пример
sudo chown developer file.txt # Изменить владельца
sudo chown developer:developers file.txt # Изменить владельца и группу
sudo chown -R developer:developers /opt/myapp # Рекурсивно
Специальные биты
| Бит | Числовое значение | Описание |
|---|---|---|
| SUID (Set User ID) | 4000 | Файл запускается с правами владельца файла (например, /usr/bin/passwd) |
| SGID (Set Group ID) | 2000 | Файл запускается с правами группы. Для каталога — новые файлы наследуют группу каталога |
| Sticky bit | 1000 | В каталоге файлы может удалять только их владелец (используется в /tmp) |
Пример
chmod 4755 program # SUID
chmod 2755 shared_dir # SGID
chmod 1777 /tmp # Sticky bit
На собеседовании: интервьюер часто просит расшифровать
chmod 755или объяснить выводls -l. Частая ошибка — путать числовые значения прав (4=r, 2=w, 1=x). Знание sticky bit для/tmp— хороший бонус.