Права файлов и каталогов: где запрещён доступ
Чтение и практика ~10 мин
Не всегда виноват файл, названный в ошибке Permission denied. Отказ может возникнуть
на любом каталоге его пути. В двух практических заданиях вы найдёте запрет по
наблюдениям, измените нужное право и проверите, что чужим ничего не открыли.
Где проходить: в терминале браузера, после входа в аккаунт. Подготовка уже выполнена. Скачивать файлы, устанавливать Linux или запускать скрипты подготовки на своём компьютере не нужно. Зачёт сохраняется после кнопки «Проверить»; он остаётся после сброса песочницы и виден при входе с другого устройства.
Сначала жалоба, потом команда
Вы вошли как student. В учебной папке есть отчёт, личный файл и скрипт show.sh,
который печатает отчёт. Теперь bash ~/rp-perm/show.sh отвечает Permission denied.
До правок запишите две гипотезы. Какое наблюдение отличит «отчёт нельзя читать» от «до отчёта нельзя добраться»? Почему запуск от root не проверит вашу гипотезу?
Три класса доступа
id показывает имя и группы. В ls -l после типа объекта идут три тройки прав:
владелец, группа, остальные. Например, -rw-r----- означает чтение и запись
владельцу, чтение группе, отсутствие доступа остальным.
Применяется один подходящий класс. Если вы владелец, отсутствие чтения у владельца
не компенсируется чтением для группы, в которую вы входите. В этой практике все
учебные файлы принадлежат student; изменять владельца не требуется.
| Право | У файла | У каталога |
|---|---|---|
r | Читать содержимое | Перечислять имена внутри |
w | Менять содержимое | Менять записи внутри, вместе с x |
x | Запускать как программу | Проходить через каталог и обращаться по имени |
Для чтения reports/summary.txt нужны r у файла и x у каждого каталога пути,
включая домашний. Видеть имя через ls reports ещё не означает иметь доступ к файлу.
Для bash show.sh право x у самого скрипта не требуется: скрипт читает bash.
Наблюдения, которые различают причины
В открытой песочнице попробуйте:
id
bash ~/rp-perm/show.sh
ls -l ~/rp-perm/reports
ls -ld ~/rp-perm/reports
namei -l ~/rp-perm/reports/summary.txt
ls -l reports показывает файлы внутри, а ls -ld reports — сам каталог.
namei -l разбирает весь путь. Если просмотр обрывается до прав файла, сначала
исследуйте каталоги. Если путь проходим, проверьте право чтения у владельца файла.
Сравните гипотезы с выводом. Не делайте вывод о причине только по последнему слову
Permission denied: симптом у двух вариантов одинаковый.
Менять ровно нужное
В символьной записи chmod буква u — владелец, g — группа, o — остальные.
Например, chmod u+r путь добавляет чтение владельцу, chmod u+x каталог — проход
через каталог. Остальные классы при таких командах не расширяются.
Выберите объект и право по наблюдению. Затем снова запустите скрипт и посмотрите
stat -c '%a %n' ~/rp-perm/private.txt: личный файл должен сохранить 600.
Кнопка «Проверить» отдельно проверит доступ, исходное содержимое и отсутствие
лишних разрешений. Команда chmod -R 777 может убрать симптом, но нарушает условия.
В этой лабе нет sudo, а терминал работает как обычный student. Root часто
может обойти обычные биты доступа, поэтому успешное чтение от root не доказывает,
что скрипт исправлен для ученика. Проверяющий процесс запускает чтение как student.
Две попытки и передача смены
- Почините отчёт. Если застряли, слева есть три ступени подсказок.
- Пройдите другой вариант. Повтор первого ремонта не устраняет его причину. У каждого варианта свой зачёт в программе курса.
- Напишите 4–6 строк: что отказало, каким наблюдением это подтверждено, что изменили, что сохранили, как проверили и что осталось неизвестным.
Гипотезу и записку вы оцениваете сами: автоматическая проверка подтверждает состояние песочницы. Сброс возвращает исходные файлы и права; уже полученный зачёт сохраняется.
Проверка понимания
ls reportsпоказывает имя, аls -l reports— вопросы и ошибку. Какое право проверите?- Скрипт работает после запуска от root. Исправлен ли доступ для
student? - Почему нужно проверить
private.txt, даже если отчёт уже печатается?
Ответы становятся наблюдаемыми в двух вариантах: проход по пути, чтение от нужного пользователя и сохранность доступа — три разные проверки.
Разбор после своей попытки
В первом варианте каталоги проходимы, но у владельца summary.txt нет чтения.
chmod u+r ~/rp-perm/reports/summary.txt возвращает его. Во втором варианте файл
читаем, но у reports нет прохода: chmod u+x ~/rp-perm/reports возвращает x.
Команда первого варианта во втором не поможет добраться до файла.
Если список имён виден, а свойства файлов не читаются, проверьте x на каталоге.
Чтение от root не доказывает доступ от student. Проверка private.txt нужна, чтобы
ремонт одного объекта не открыл личный файл посторонним.
Дальше можно вернуться к файлам и путям или процессам и сервисам.
Источники: path_resolution(7), chmod(1).
Прочитали и разобрались? Отметьте урок — прогресс сохранится в этом браузере.
Права: отчёт недоступен
Лабы проходятся на компьютере. Отправьте ссылку себе, чтобы открыть её там.