Ответ
В Linux права доступа к файлам и директориям управляются тремя базовыми разрешениями для трех категорий пользователей.
Базовые разрешения (в octal-нотации):
- Чтение (r, значение 4): Для файла — просмотр содержимого. Для директории — чтение списка файлов (
ls). - Запись (w, значение 2): Для файла — изменение содержимого. Для директории — создание, удаление, переименование файлов внутри неё.
- Исполнение (x, значение 1): Для файла — возможность запустить его как программу или скрипт. Для директории — право войти в неё (
cd).
Категории пользователей:
- Владелец (user/u) — пользователь, которому принадлежит файл.
- Группа (group/g) — группа-владелец файла.
- Остальные (others/o) — все остальные пользователи системы.
Примеры и команды:
# Установить права: владелец — читает/пишет/исполняет, группа — читает/исполняет, остальные — только читают.
chmod 754 myscript.sh # Результат: rwxr-xr--
# Посмотреть права в детальном листинге
ls -l myscript.sh
# -rwxr-xr-- 1 devops ops 120 May 15 10:00 myscript.sh
Специальные биты:
- SUID (Set User ID, значение 4000): Файл с установленным SUID выполняется с правами своего владельца, а не запустившего его пользователя. Пример —
/usr/bin/passwd.chmod u+s /path/to/binary # или chmod 4755 - SGID (Set Group ID, значение 2000): Для файла — аналогично SUID, но для группы. Для директории — новые файлы внутри наследуют группу директории, а не создателя.
- Sticky Bit (значение 1000): Для директории (например,
/tmp) файлы внутри может удалить только их владелец или root.chmod +t /shared_directory # или chmod 1777
В сценариях DevOps я часто использую chmod для настройки прав на скрипты развертывания, конфигурационные файлы (например, 640 для конфигов с секретами) и общие директории для данных приложений.