ОП.05Права доступа, владельцы и umaskзанятие 6Материалы

Часть 7 из 7

Практическая работа · Каталог проекта shop

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

  1. 7.1 Роли и каталоги
  2. 7.2 Задания
  3. 7.3 Проверка результата

7.1 Роли и каталоги

Команда делает интернет-магазин shop. Разработчики alex и bella вместе пишут код и выкладывают сборки, аналитик chris читает готовые сборки. Каталог uploads общий для разработчиков, но каждый удаляет только свои файлы. Каждая роль получает только нужные ей права — принцип минимальных привилегий из занятия 5.

  • alex

    разработчик: пишет код в src, публикует сборки в releases

    shop-dev
  • bella

    разработчица: работает в src вместе с alex, загружает файлы в uploads

    shop-dev
  • chris

    аналитик: читает опубликованные сборки, к коду доступа не имеет

    только личная группа
  • root

    администратор: создаёт каталоги, меняет владельцев

    через sudo
КаталогВладелец и группаПраваЧто получается
/srv/shop/srcroot · shop-dev2770 · drwxrws---разработчики читают и пишут, новые файлы получают группу shop-dev, остальным закрыто
/srv/shop/releasesroot · shop-dev2775 · drwxrwsr-xразработчики публикуют, все остальные только читают
/srv/shop/uploadsroot · shop-dev3770 · drwxrws--Tразработчики кладут файлы, удалить может только владелец файла

Файлы, созданные через sudo -u, получают маску вызвавшего пользователя: в Ubuntu это 0002, поэтому новые файлы в src открыты группе на запись. Секретный файл config.env закрывают явно, командой chmod 600.

7.2 Задания

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

№ЗаданиеПодсказка
1Создайте группу shop-dev и учётные записи alex, bella, chris с домашними каталогами и оболочкой bash. Добавьте alex и bella в shop-dev.groupadd, useradd -m -s, usermod -aG
2Создайте каталоги /srv/shop/src, /srv/shop/releases, /srv/shop/uploads и назначьте им группу shop-dev.mkdir -p и фигурные скобки, chgrp
3Установите права по таблице: src — 2770, releases — 2775, uploads — 3770. Проверьте строки ls -l.chmod; перед заданием переведите числа в буквы сами
4От имени alex создайте src/app.py с одной строкой, от имени bella допишите в него вторую строку.sudo -u alex bash -c '…', tee -a
5От имени alex создайте src/config.env и закройте его правами 600. Убедитесь, что bella его не читает.chmod 600 внутри bash -c
6От имени alex опубликуйте releases/v1.txt и передайте файл во владение bella.sudo chown
7Проверьте доступ chris: читает releases/v1.txt, не открывает src, не создаёт файлы в releases.sudo -u chris
8От имени bella положите файл в uploads и убедитесь, что alex не может его удалить.sticky-бит
9Запустите проверку sudo bash ~/Downloads/perms-lab-check.sh и добейтесь результата 14 из 14.скрипт в материалах занятия
В терминалеКаталоги проекта
  1. sudo groupadd shop-dev
    что делает

    Что делает команда. Создаёт группу разработчиков shop-dev.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    groupadd
    создать группу
    shop-dev
    имя новой группы
  2. for u in alex bella chris; do sudo useradd -m -s /bin/bash $u; done# три учётные записи
    что делает

    Что делает команда. Создаёт три учётные записи с домашними каталогами и оболочкой bash.

    По частям:

    for u in alex bella chris
    цикл: переменная u по очереди принимает значения alex, bella, chris
    do … done
    команды между do и done выполняются для каждого значения
    sudo useradd
    создать учётную запись с правами root
    -m
    создать домашний каталог
    -s /bin/bash
    оболочка после входа: /bin/bash
    $u
    вместо $u оболочка подставит текущее имя из списка
  3. sudo usermod -aG shop-dev alex
    что делает

    Что делает команда. Добавляет alex в группу shop-dev, сохраняя остальные группы.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    usermod
    изменить учётную запись
    -a
    добавить к имеющимся группам
    -G
    дополнительные группы; без -a прежний список заменяется целиком
    shop-dev
    группа
    alex
    чью запись изменить
  4. sudo usermod -aG shop-dev bella
    что делает

    Что делает команда. Добавляет bella в группу shop-dev.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    usermod
    изменить учётную запись
    -a
    добавить к имеющимся группам
    -G
    дополнительные группы; без -a прежний список заменяется целиком
    shop-dev
    группа
    bella
    чью запись изменить
  5. sudo mkdir -p /srv/shop/{src,releases,uploads}
    что делает

    Что делает команда. Создаёт каталог проекта и три подкаталога.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    mkdir
    создать каталог
    -p
    создать и промежуточные каталоги; без ошибки, если каталог уже есть
    /srv/shop/{src,releases,uploads}
    какой каталог создать (абсолютный путь; фигурные скобки: оболочка подставит каждый вариант)
  6. sudo chgrp shop-dev /srv/shop/{src,releases,uploads}
    что делает

    Что делает команда. Отдаёт три подкаталога группе shop-dev.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    chgrp
    сменить группу файла
    shop-dev
    новая группа
    /srv/shop/{src,releases,uploads}
    какой файл или каталог (абсолютный путь; фигурные скобки: оболочка подставит каждый вариант)
  7. sudo chmod 2770 /srv/shop/src
    что делает

    Что делает команда. Ставит каталогу кода setgid и права rwx владельцу и группе.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    chmod
    изменить права доступа
    2770
    первая цифра 2 — бит setgid; права числом: 7 — rwx владельцу, 7 — rwx группе, 0 — --- остальным
    /srv/shop/src
    какой файл или каталог (абсолютный путь)
  8. sudo chmod 2775 /srv/shop/releases
    что делает

    Что делает команда. Ставит каталогу сборок setgid: группа пишет, остальные читают.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    chmod
    изменить права доступа
    2775
    первая цифра 2 — бит setgid; права числом: 7 — rwx владельцу, 7 — rwx группе, 5 — r-x остальным
    /srv/shop/releases
    какой файл или каталог (абсолютный путь)
  9. sudo chmod 3770 /srv/shop/uploads
    что делает

    Что делает команда. Ставит каталогу загрузок setgid и sticky: удалять файл может только его владелец.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    chmod
    изменить права доступа
    3770
    первая цифра 3 — биты setgid и sticky; права числом: 7 — rwx владельцу, 7 — rwx группе, 0 — --- остальным
    /srv/shop/uploads
    какой файл или каталог (абсолютный путь)
  10. ls -l /srv/shop
    что делает

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

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    /srv/shop
    что показать (абсолютный путь)
  11. id alex; id bella; id chris
    что делает

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

    По частям:

    id alex
    номера и группы alex
    ;
    разделитель: выполнить следующую команду
    id bella
    номера и группы bella
    id chris
    номера и группы chris
Результат

три каталога группы shop-dev с правами drwxrwsr-x, drwxrws--- и drwxrws--T; chris не входит в shop-dev.

Снимок 7.1Ubuntu 24.04
  1. 1releases: группа пишет, остальные читают
  2. 2src: только группе
  3. 3uploads: sticky — удаляет только владелец файла
  4. 4у chris только личная группа
Каталоги проекта и группы участников эталонного решения.Весь снимок ↗

Каталоги проекта и группы участников эталонного решения.

Что показывает снимок. Три каталога проекта принадлежат группе shop-dev с правами 2775, 2770 и 3770; alex и bella в shop-dev, chris — только в личной группе.

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

В терминалеФайлы и тесты доступа
  1. sudo -u alex bash -c 'echo "print(1)" > /srv/shop/src/app.py'# alex создаёт файл
    что делает

    Что делает команда. От имени alex создаёт файл app.py с одной строкой.

    По частям:

    sudo -u alex
    выполнить от имени пользователя alex
    bash -c '…'
    запустить bash и выполнить команды из строки в кавычках
    echo "print(1)" > /srv/shop/src/app.py
    записать строку print(1) в новый файл; перенаправление > выполняет bash alex, поэтому права проверяются для alex
  2. echo 'print(2)' | sudo -u bella tee -a /srv/shop/src/app.py# bella дописывает
    что делает

    Что делает команда. От имени bella дописывает вторую строку в файл alex.

    По частям:

    echo 'print(2)'
    напечатать строку print(2)
    |
    передать её на вход следующей команде
    sudo -u bella
    выполнить от имени bella
    tee -a
    дописать полученный текст в конец файла
    /srv/shop/src/app.py
    файл alex: запись проверяется для bella
  3. sudo -u alex bash -c 'echo TOKEN=lab > /srv/shop/src/config.env; chmod 600 /srv/shop/src/config.env'# секрет только для alex
    что делает

    Что делает команда. От имени alex создаёт файл с секретом и закрывает его правами 600.

    По частям:

    sudo -u alex
    выполнить от имени пользователя alex
    bash -c '…'
    выполнить две команды из строки в кавычках
    echo TOKEN=lab > …/config.env
    создать файл с секретом
    chmod 600 …/config.env
    оставить права только владельцу alex: rw-------
  4. sudo -u bella cat /srv/shop/src/config.env
    что делает

    Что делает команда. От имени bella пытается прочитать секрет alex.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    -u bella
    выполнить от имени пользователя bella
    cat
    вывести содержимое файла
    /srv/shop/src/config.env
    какой файл вывести (абсолютный путь)
  5. sudo -u alex bash -c 'echo release-1 > /srv/shop/releases/v1.txt'# публикация
    что делает

    Что делает команда. От имени alex публикует файл сборки v1.txt.

    По частям:

    sudo -u alex
    выполнить от имени пользователя alex
    bash -c '…'
    запустить bash и выполнить команду из строки в кавычках
    echo release-1 > /srv/shop/releases/v1.txt
    создать файл сборки v1.txt в каталоге публикаций
  6. sudo chown bella /srv/shop/releases/v1.txt# передать bella
    что делает

    Что делает команда. С правами root передаёт v1.txt во владение bella.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    chown
    сменить владельца (и группу) файла
    bella
    новый владелец
    /srv/shop/releases/v1.txt
    какой файл или каталог (абсолютный путь)
  7. sudo -u chris cat /srv/shop/releases/v1.txt
    что делает

    Что делает команда. От имени chris читает опубликованную сборку.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    -u chris
    выполнить от имени пользователя chris
    cat
    вывести содержимое файла
    /srv/shop/releases/v1.txt
    какой файл вывести (абсолютный путь)
  8. sudo -u chris ls /srv/shop/src
    что делает

    Что делает команда. От имени chris пытается открыть каталог кода.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    -u chris
    выполнить от имени пользователя chris
    ls
    вывести содержимое каталога
    /srv/shop/src
    что показать (абсолютный путь)
  9. sudo -u bella touch /srv/shop/uploads/photo.jpg
    что делает

    Что делает команда. От имени bella кладёт файл в общий каталог загрузок.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    -u bella
    выполнить от имени пользователя bella
    touch
    создать пустой файл
    /srv/shop/uploads/photo.jpg
    какой файл (абсолютный путь)
  10. sudo -u alex rm /srv/shop/uploads/photo.jpg# чужой файл в uploads
    что делает

    Что делает команда. От имени alex пытается удалить файл bella.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    -u alex
    выполнить от имени пользователя alex
    rm
    удалить файл
    /srv/shop/uploads/photo.jpg
    что удалить (абсолютный путь)
  11. sudo ls -l /srv/shop/src /srv/shop/releases
    что делает

    Что делает команда. С правами root выводит файлы кода и сборок с владельцами и правами.

    По частям:

    sudo
    выполнить команду от имени другого пользователя, по умолчанию root
    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, группа, размер
    /srv/shop/src
    что показать (абсолютный путь)
    /srv/shop/releases
    что показать (абсолютный путь)
Результат

bella дописала строку в файл alex; config.env ей закрыт; chris читает сборку и не открывает src; alex не удаляет файл bella.

Снимок 7.2Ubuntu 24.04
  1. 1bella дописала строку: группа shop-dev пишет в app.py
  2. 2config.env с правами 600 закрыт для bella
  3. 3chris читает опубликованную сборку
  4. 4src закрыт для chris
  5. 5sticky-бит: alex не удаляет файл bella
  6. 6v1.txt теперь принадлежит bella
  7. 7app.py — группа shop-dev, config.env — 600
Тесты доступа: общий файл, закрытый секрет, сборка для аналитика, защищённая загрузка.Весь снимок ↗

Тесты доступа: общий файл, закрытый секрет, сборка для аналитика, защищённая загрузка.

Что показывает снимок. bella дописала строку в файл alex, config.env ей закрыт; chris прочитал сборку и не открыл src; alex не смог удалить файл bella; v1.txt принадлежит bella.

Где это пригодится. Каждый результат объясняется одним правом или битом — такую таблицу причин записывают в отчёт.

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

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

В терминалеПроверка
  1. sudo bash ~/Downloads/perms-lab-check.sh# проверка по 14 пунктам
    что делает

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

    По частям:

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

все пункты OK, итог 14 из 14.

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

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

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

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

Порядок действийУборка после работы
  1. 1
    Проверьте, что лежит в каталогах: sudo ls -R /srv/shop /srv/shared.
  2. 2
    Удалите каталоги: sudo rm -r /srv/shop /srv/shared.
  3. 3
    Удалите учётные записи с домашними каталогами: for u in alex bella chris; do sudo userdel -r $u; done.
  4. 4
    Удалите группу: sudo groupdel shop-dev.

Итоги части 7

  • Каталог проекта: группа команды, 2770 для закрытой работы, 2775 для публикации, 3770 для общей папки загрузок.
  • setgid даёт новым файлам группу проекта, маска 0002 — запись для группы, chmod 600 закрывает секреты.
  • Тесты доступа выполняются от имени каждого пользователя через sudo -u.

В отчётСнимки каталогов проекта, тестов доступа и проверки 14 из 14.

Что сдать

Отчёт report.md с девятью снимками экрана по шаблону из материалов. Номера UID и GID, даты и размеры в вашей системе будут отличаться от снимков урока.

СнимокТемаЧто написать под снимком
01-ls-l.pngСтрока ls -lПодпишите поля одной строки: тип, три тройки, владелец, группа.
02-dir-rx.pngКаталог без x и без rОбъясните каждую ошибку: что запрещено без x и без r.
03-dir-w.pngУдаление и право wПочему удаление файла решает каталог, а не файл.
04-chmod.pngchmod буквами и числомПереведите три своих примера из букв в число и обратно.
05-chown.pngВладелец и группаПочему chown без sudo запрещён, а chgrp на свою группу разрешён.
06-umask.pngumaskПрава файла и каталога при маске 0027 — расчёт по тройкам.
07-shop-dirs.pngКаталоги проектаЧто означает каждая буква в drwxrws--T.
08-shop-access.pngТесты доступаКакой бит или право объясняет каждый результат.
09-shop-check.pngПроверкаИтог проверки; какие пункты потребовали исправления.

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

  • 2опыты с правами файла и каталога: r, w, x и удаление — части 1–2
  • 2chmod буквами и числом, перевод своих примеров — часть 3
  • 2chown и chgrp, umask с расчётом по тройкам — части 4–5
  • 2каталоги проекта с setgid и sticky — задания 1–3
  • 2тесты доступа и проверка 14 из 14 — задания 4–9

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

Перед сдачей

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

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

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

Котёнок сидит на клавиатуре ноутбука, подпись: «я чето нажала и всё исчезло»

Права своего проекта

Возьмите проект из домашнего задания занятия 5 или любой другой — сайт, бот, приложение — и составьте для него таблицу прав в файле permissions.md.

  • Шесть объектов: три каталога и три файла, среди них один секрет и один исполняемый скрипт.
  • Для каждого: владелец, группа, права буквами и числом и одно предложение — почему так.
  • Какую маску umask вы поставите команде и какие права получат новые файлы и каталоги.
  • Где в проекте нужен sticky-бит или запись ACL, и почему без неё нельзя обойтись. Если нигде — объясните, почему.

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

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

Материалы

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