Пара 5: Пользователи, права доступа и файловые объекты
90 минут · 3 курс, ML.
Содержание и результат
Читать права Linux и устранять отказ в доступе без chmod 777.
План занятия
0–10: контекст и исходная задача. 10–40: устройство и механизмы. 40–55: демонстрация команд. 55–80: лабораторная работа. 80–90: разбор результата и фиксация исправлений.
Практика выполняется в своей учебной папке и на localhost. Подготовка окружения описана в lab/README.md.
Владелец, группа, остальные
Доступ проверяется для конкретного пользователя и объекта.
ls -l показывает тип, права, владельца и группу. Девять битов rwx разбиты на владельца, группу и остальных. Для файла r — читать, w — менять содержимое, x — запускать. Для каталога x позволяет проходить по пути, r — перечислять имена, w вместе с нужными правами позволяет менять записи. Удаление определяется правами родительского каталога, а не только правом записи самого файла. Это важный поворот для студентов: права — не характеристика «могу всё», а правила конкретной операции. Сначала выясняем пользователя id и путь namei -l, затем меняем минимальные права.
Аналогия: пропуск в коридор и ключ от комнаты — разные разрешения.
Числа прав
4 = чтение, 2 = запись, 1 = выполнение.
Числовая запись суммирует биты: 6 означает чтение и запись, 5 — чтение и выполнение, 7 — всё. 640 даёт владельцу rw, группе r и остальным ничего; 750 подходит для каталога или программы с ограниченным доступом. Символьная запись chmod u+x иногда понятнее числа, потому что добавляет конкретное право. umask ограничивает начальные права новых файлов, но не исправляет существующие. Не превращаем 777 в универсальный рецепт: это часто маскирует неправильного владельца, путь или пользователя процесса. В WSL изучаем права на Linux-файловой системе в /home, поведение /mnt/c может зависеть от параметров монтирования.
Права не шифруют файл и не защищают от администратора системы.
sudo и секреты
Повышаем привилегии только для обоснованной операции.
sudo запускает разрешённую команду с другой идентичностью, часто root. Root может повредить систему; наличие sudo не означает, что его нужно ставить перед python или git. Секреты не кладём в репозиторий и не показываем на общем экране. .env — просто файл, а не защищённое хранилище. Ограничьте права учебного файла chmod 600 и добавьте .env в .gitignore позже. В учебных упражнениях применяем фиктивные значения. Если реальный секрет попал в историю Git, удалить строку недостаточно: секрет нужно отозвать и заменить. Здесь это принцип, а не требование настраивать корпоративный vault.
Аналогия: мастер-ключ не используют, чтобы открыть собственный письменный стол.
Команды и наблюдения
Окружение: Ubuntu / Bash.
cd ~/devops-course/sandbox
printf "demo-only
" > private.env
chmod 600 private.env
ls -l private.env
id
printf "#!/usr/bin/env bash
printf 'hello\n'
" > hello.sh
chmod u+x hello.sh
./hello.sh
Значение demo-only не является настоящим секретом. Обсудите разницу ./hello.sh и bash hello.sh: во втором случае файл читает интерпретатор.
Ожидаемый результат: private.env имеет -rw-------; hello.sh запускается после добавления x владельцу.
Вариант для macOS
Основные rwx и chmod переносимы. namei -l отсутствует: проверяйте каждый родительский каталог через ls -ld, а ACL через ls -le. macOS дополнительно применяет ACL, privacy-разрешения и системные защиты; Permission denied не всегда объясняется только девятью битами.
id
ls -l private.env
chmod 600 private.env
chmod u+x hello.sh
ls -lde . private.env
Практика: Исправить доступ по доказательствам
- Создайте run.sh без executable-бита; воспроизведите отказ через ./run.sh.
- Проверьте владельца и права, исправьте только право запуска владельца.
- Создайте вложенный каталог и уберите u+x; покажите проблему прохода, затем восстановите право.
- Объясните, почему chmod 777 и sudo bash не являются хорошим исправлением.
Результат: До/после прав и объяснение причины каждого отказа.
Проверка: Скрипт работает без sudo; секретный учебный файл имеет права 600.
Неисправность для разбора: Ошибка возникает на родительском каталоге, а не на самом файле.
Решение и диагностика
Проверьте id, ls -l run.sh, namei -l путь. Для собственного файла chmod u+x run.sh. Для собственного каталога chmod u+x nested. Не делайте рекурсивную смену прав на домашней папке. Если студент случайно ограничил каталог, сохраняйте открытый терминал и восстанавливайте права конкретного каталога из его родителя.
Основные выводы
- Владелец rw, группа r, остальные без прав.
- Пользователя процесса, объект, родительские каталоги и нужную операцию.
Самостоятельная работа
Описать минимальные права для кода, конфигурации и каталога данных учебного сервиса.