ОП.05Пользователи, группы и sudoзанятие 5Материалы

Часть 7 из 7

Практическая работа · Модель доступа команды mobile-app

В этой части построим модель доступа для команды мобильного приложения: четыре роли, две группы, два общих каталога. Результат проверим таблицей тестов доступа и скриптом.

  1. 7.1 Роли и схема доступа
  2. 7.2 Задания
  3. 7.3 Проверка результата
  4. 7.4 Уборка после работы

7.1 Роли и схема доступа

Команда разрабатывает мобильное приложение. В ней руководитель разработки, разработчик, тестировщик и внешний сотрудник, которому доступ к проекту не положен. Исходный код лежит в /srv/mobile/src, отчёты тестирования — в /srv/mobile/reports. Каждая роль получает только те группы, которые нужны для её работы: так выполняется принцип минимальных привилегий из части 4.

  • lead

    руководитель разработки: работает с кодом и отчётами тестирования, администрирует сервер

    mobile-devmobile-qasudo
  • dev

    разработчик: пишет код в src, отчёты тестирования ему не нужны

    mobile-dev
  • qa

    тестировщик: пишет отчёты в reports, код не меняет

    mobile-qa
  • guest

    внешний сотрудник: доступа к каталогам проекта у него быть не должно

    только личная группа
КаталогГруппаПраваКто работает
/srv/mobile/srcmobile-dev2770 · drwxrws---lead, dev
/srv/mobile/reportsmobile-qa2770 · drwxrws---lead, qa

7.2 Задания

Задания выполняются в виртуальной машине от имени пользователя из группы sudo. Перед началом сделайте снимок состояния виртуальной машины в VirtualBox: если в группах или правах запутаетесь, к нему можно вернуться.

№ЗаданиеПодсказка
1Создайте группы mobile-dev и mobile-qa.groupadd
2Создайте учётные записи lead, dev, qa и guest с домашними каталогами и оболочкой bash; задайте каждой пароль.useradd -m -s, passwd
3Добавьте пользователей в группы по схеме ролей. lead добавьте ещё и в группу sudo.usermod -aG; группы можно перечислить через запятую
4Создайте каталоги /srv/mobile/src и /srv/mobile/reports, назначьте им группы mobile-dev и mobile-qa и права 2770.mkdir -p, chgrp, chmod
5Заполните таблицу тестов доступа: для каждого пользователя выполните ls и touch в обоих каталогах через sudo -u и запишите результат.ожидаемый результат впишите до запуска команды
6Запустите проверку sudo bash team-lab-check.sh и добейтесь результата 21 из 21.скрипт в материалах занятия
7Войдите как guest через su -, попробуйте выполнить sudo whoami и найдите запись об отказе в журнале.journalctl -t sudo
8Объясните в отчёте, почему постоянная работа под root опасна. Приведите три примера из занятия.часть 4, раздел «Принцип минимальных привилегий»

Таблица тестов доступа — результат задания 5. Ожидаемый результат записывают до запуска команды, затем сравнивают с фактическим. Если они не совпали, в схеме или в правах ошибка.

ПользовательКомандаОжидаетсяПолучено
devsudo -u dev touch /srv/mobile/src/main.ktразрешено…
devsudo -u dev ls /srv/mobile/reportsPermission denied…
qasudo -u qa ls /srv/mobile/src……
…………

7.3 Проверка результата

Скрипт team-lab-check.sh проверяет учётные записи, группы, права каталогов и доступ от имени каждого пользователя. Пробные файлы, которые он создаёт, скрипт сразу удаляет. Запускается скрипт через sudo, потому что проверяет доступ от имени других пользователей.

В терминалеСхема команды и проверка
  1. getent group mobile-dev mobile-qa sudo# участники групп
    что делает

    Что делает команда. Выводит строки трёх групп со списками участников.

    По частям:

    getent
    получить запись из системной базы данных
    group
    база групп
    mobile-dev
    какая запись
    mobile-qa
    какая запись
    sudo
    какая запись
  2. id lead dev qa guest# группы каждого пользователя
    что делает

    Что делает команда. Выводит номера и группы четырёх пользователей команды.

    По частям:

    id
    вывести номера пользователя и его группы
    lead
    чей номер показать
    dev
    чей номер показать
    qa
    чей номер показать
    guest
    чей номер показать
  3. ls -l /srv/mobile# группы и права каталогов
    что делает

    Что делает команда. Выводит каталоги проекта с группами и правами.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    /srv/mobile
    что показать (абсолютный путь)
  4. sudo bash ~/Downloads/team-lab-check.sh# проверка по 21 пункту
    что делает

    Что делает команда. Запускает скрипт проверки с правами root: он проверяет записи, группы, права и доступ каждого пользователя.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    bash
    запустить оболочку bash и выполнить команды из файла
    ~/Downloads/team-lab-check.sh
    файл скрипта (путь от домашнего каталога)
Результат

у каждого пользователя свои группы; каталоги принадлежат группам команды; скрипт выводит Итог: 21 из 21.

Снимок 7.1Ubuntu 24.04
  1. 1участники mobile-dev: lead и dev
  2. 2lead состоит в группе sudo
  3. 3у guest только личная группа
  4. 4каталоги принадлежат группам команды
Группы и каталоги эталонного решения.Весь снимок ↗

Группы и каталоги эталонного решения.

Что показывает снимок. У каждой роли свой набор групп; lead состоит в sudo; каталоги проекта принадлежат группам mobile-dev и mobile-qa.

Где это пригодится. Сравните вывод своих команд с эталоном: группы и права должны совпасть.

Снимок 7.2Ubuntu 24.04
Результат проверки эталонного решения.Весь снимок ↗

Результат проверки эталонного решения.

Что показывает снимок. Скрипт проверил учётные записи, группы, права каталогов и доступ каждого пользователя и вывел «Итог: 21 из 21».

Где это пригодится. Если какой-то пункт выводит НЕТ, найдите по названию пункта, что не совпало со схемой ролей.

7.4 Уборка после работы

Учебные учётные записи после сдачи работы удаляют: лишняя учётная запись с паролем — лишняя возможность войти в систему. Команда userdel принимает одно имя, поэтому для нескольких записей удобно использовать цикл for: он выполняет команду для каждого имени из списка по очереди.

Запись for u in lead dev qa guest anna boris; do sudo userdel -r $u; done читается так: переменная u по очереди принимает каждое имя из списка после in; между do и done стоит команда, которая выполняется для каждого значения; вместо $u оболочка подставляет текущее имя. В итоге выполняются шесть команд: sudo userdel -r lead, sudo userdel -r dev и так далее.

Порядок действийУдаление учебных записей
  1. 1
    Проверьте, какие записи будут удалены: id lead dev qa guest anna boris.
  2. 2
    Удалите записи с домашними каталогами: for u in lead dev qa guest anna boris; do sudo userdel -r $u; done.
  3. 3
    Удалите группы: sudo groupdel mobile-dev, sudo groupdel mobile-qa, sudo groupdel devteam.
  4. 4
    Удалите каталоги после проверки содержимого: sudo ls -R /srv/mobile /srv/devteam, затем sudo rm -r /srv/mobile /srv/devteam.

Итоги части 7

  • Роль определяет группы пользователя; каталог проекта принадлежит группе и закрыт для остальных.
  • Таблица тестов доступа сравнивает ожидаемый и фактический результат для каждого пользователя.
  • Права sudo получает только тот, кто администрирует систему.
  • Учебные учётные записи удаляют после работы.

В отчётСхема ролей и групп, таблица тестов доступа, снимок проверки и объяснение про работу под root.

Что сдать

Отчёт README.md с девятью снимками экрана и таблицу тестов доступа access-tests.md по шаблону из материалов. Номера UID и GID в вашей системе будут отличаться от снимков урока.

СнимокТемаЧто написать под снимком
01-id.pngУчётная записьПодпишите семь полей своей строки /etc/passwd.
02-shadow.pngpasswd и shadowПочему shadow закрыт для остальных пользователей.
03-groups.pngГруппыГде основная группа, где дополнительные.
04-sudo.pngПравила sudoКакое правило даёт вам права администратора.
05-team.pngКоманда mobile-appСовпадают ли группы со схемой ролей.
06-dirs.pngКаталоги проектаЧто означает каждая цифра в 2770.
07-access.pngТесты доступаРезультаты таблицы тестов доступа.
08-check.pngПроверкаИтог проверки; какие пункты потребовали исправления.
09-denied.pngОтказ sudo в журналеКто, когда и какую команду пытался выполнить.

Критерии оценки · 10 баллов

  • 2учётные записи и группы созданы по схеме ролей — задания 1–3
  • 2каталоги проекта: группы и права 2770 — задание 4
  • 2таблица тестов доступа: ожидаемый и фактический результат — задание 5
  • 2проверка 21 из 21 и запись об отказе в журнале — задания 6–7
  • 2объяснение, почему постоянная работа под root опасна, с тремя примерами — задание 8

По каждому пункту: 2 балла — результат получен и объяснён, 1 — результат без объяснения, 0 — результата нет или объяснение неверное.

Перед сдачей

Отмечено 0 из 5

Домашнее задание · занятие 5

Максим Николаевич не хочет задавать домашнее задание. Но очень хочет

Форма регистрации сообщает, что пароль уже занят другим пользователем; ниже подпись «Круто напрограммировали»

Модель доступа своего проекта

Возьмите проект, над которым вы работаете или хотели бы работать, — сайт, бот, мобильное приложение — и составьте для него модель доступа в файле access-model.md.

  • Четыре роли, для каждой — учётная запись, группы, каталоги, что роль может и чего не может.
  • Каталоги проекта в /srv с группой и правами числом и буквами.
  • Скрипт setup-team.sh, который создаёт группы, пользователей и каталоги. Запустите его в учебной виртуальной машине и приложите вывод id для каждого пользователя и ls -l каталогов.
  • Пять строк таблицы тестов доступа с ожидаемым и фактическим результатом.

Порядок сдачи

  • Файлыпапка lesson_03 в своём репозитории по шаблону os-environments-template: report.md, снимки в screenshots/, access-tests.md, access-model.md, setup-team.sh.
  • Ветка и PRветка hw-03, Pull Request в свою main.
  • Срокдо начала следующего занятия.
  • Критериипрактическая работа — 10 баллов по критериям выше; модель доступа принимается, если скрипт выполнен в виртуальной машине и вывод приложен.
  • ИИнейросеть можно попросить причесать формулировки и оформить таблицы в .md — я сам так делаю всегда, поэтому и вам запрещать не буду. Команды и вывод — только из вашей виртуальной машины.

Материалы

Открыть в отдельной вкладке ↗