Практика 3. Файловые системы, пользователи, права и systemd
Цель работы
Изучить inode и ссылки, управление правами доступа, работу с пользователями и группами, основы systemd.
Часть 1. Inode и ссылки
Задание 1.1. Исследование inode
-
Создайте тестовый файл и просмотрите его inode:
Окно терминала echo "Hello, filesystem!" > ~/project/data/testfile.txtls -i ~/project/data/testfile.txtstat ~/project/data/testfile.txtЗапишите номер inode. Какую информацию выводит
stat? -
Убедитесь, что два разных файла имеют разные inode:
Окно терминала echo "File A" > ~/project/data/fileA.txtecho "File B" > ~/project/data/fileB.txtls -i ~/project/data/fileA.txt ~/project/data/fileB.txt
Задание 1.2. Жёсткие ссылки
-
Создайте жёсткую ссылку на файл:
Окно терминала ln ~/project/data/testfile.txt ~/project/data/testfile_hard.txt -
Сравните inode оригинала и ссылки:
Окно терминала ls -li ~/project/data/testfile.txt ~/project/data/testfile_hard.txtЧто вы наблюдаете? Обратите внимание на количество ссылок (второй столбец).
-
Измените содержимое через ссылку и проверьте оригинал:
Окно терминала echo "Добавлено через hard link" >> ~/project/data/testfile_hard.txtcat ~/project/data/testfile.txt -
Удалите оригинальный файл. Доступна ли жёсткая ссылка?
Окно терминала rm ~/project/data/testfile.txtcat ~/project/data/testfile_hard.txt # Работает!stat ~/project/data/testfile_hard.txt # Количество ссылок уменьшилось -
Попробуйте создать жёсткую ссылку на каталог:
Окно терминала ln ~/project/data/ ~/project/data_linkЧто произойдёт? Почему?
Задание 1.3. Символические ссылки
-
Создайте символическую ссылку:
Окно терминала echo "Sym link target" > ~/project/data/target.txtln -s ~/project/data/target.txt ~/project/data/symlink.txt -
Сравните inode:
Окно терминала ls -li ~/project/data/target.txt ~/project/data/symlink.txtЧем отличаются inode? Обратите внимание на первый символ прав (
l). -
Прочитайте, куда указывает ссылка:
Окно терминала readlink ~/project/data/symlink.txt -
Создайте символическую ссылку на каталог:
Окно терминала ln -s ~/project/src ~/project/src_linkls -la ~/project/src_link/ -
Удалите целевой файл и проверьте ссылку:
Окно терминала rm ~/project/data/target.txtcat ~/project/data/symlink.txt # Ошибка!ls -la ~/project/data/symlink.txt # Ссылка «повисла» (dangling)
Задание 1.4. Сравнительная таблица
Заполните таблицу на основе экспериментов:
| Свойство | Жёсткая ссылка | Символическая ссылка |
|---|---|---|
| Свой inode? | ||
| Через границы ФС? | ||
| На каталоги? | ||
| При удалении оригинала | ||
| Размер ссылки |
Часть 2. Права доступа
Задание 2.1. Просмотр и изменение прав
-
Создайте файл и просмотрите его права:
Окно терминала touch ~/project/data/secret.txtls -la ~/project/data/secret.txtОбъясните вывод
-rw-r--r--. -
Установите права в числовом формате:
Окно терминала chmod 755 ~/project/data/secret.txtls -la ~/project/data/secret.txt # -rwxr-xr-xchmod 600 ~/project/data/secret.txtls -la ~/project/data/secret.txt # -rw-------chmod 644 ~/project/data/secret.txtls -la ~/project/data/secret.txt # -rw-r--r-- -
Установите права в символьном формате:
Окно терминала chmod u+x ~/project/data/secret.txt # Добавить execute для владельцаchmod g-r ~/project/data/secret.txt # Убрать read для группыchmod o= ~/project/data/secret.txt # Убрать все права для остальныхchmod a+r ~/project/data/secret.txt # Добавить read для всехls -la ~/project/data/secret.txt
Задание 2.2. Задачи на расчёт прав
Определите числовое представление для следующих прав:
| Символьные права | Числовое представление |
|---|---|
rwxr-xr-- | ? |
rw-rw---- | ? |
rwx------ | ? |
r--r--r-- | ? |
rwxrwxrwx | ? |
Определите символьное представление:
| Числовое | Символьные права |
|---|---|
| 750 | ? |
| 664 | ? |
| 711 | ? |
| 444 | ? |
Задание 2.3. umask
-
Проверьте текущую маску:
Окно терминала umaskumask -S # В символьном формате -
Создайте файл и каталог, проверьте права по умолчанию:
Окно терминала touch ~/project/data/newfile.txtmkdir ~/project/data/newdirls -la ~/project/data/newfile.txt ~/project/data/newdirКак umask влияет на права создаваемых файлов?
-
Измените umask и проверьте:
Окно терминала umask 077touch ~/project/data/private_file.txtmkdir ~/project/data/private_dirls -la ~/project/data/private_file.txt ~/project/data/private_dirКакие права получили файл и каталог?
-
Рассчитайте: если
umask = 027, какие права получит новый файл? Новый каталог?
Задание 2.4. Специальные биты
-
Изучите SUID на примере
passwd:Окно терминала ls -la /usr/bin/passwdОбратите внимание на
sв правах владельца. Зачемpasswdнужен SUID? -
Изучите Sticky bit на
/tmp:Окно терминала ls -ld /tmpОбратите внимание на
tв правах. Что он означает для каталога? -
Установите SUID и Sticky bit на тестовые файлы:
Окно терминала chmod u+s ~/project/data/secret.txt # SUIDchmod +t ~/project/data/newdir # Sticky bitls -la ~/project/data/secret.txtls -ld ~/project/data/newdir
Часть 3. Пользователи и группы
Задание 3.1. Исследование учётных записей
-
Просмотрите информацию о текущем пользователе:
Окно терминала whoamiidgroups -
Изучите файлы учётных записей:
Окно терминала cat /etc/passwd | head -10cat /etc/group | head -10sudo cat /etc/shadow | head -5Объясните формат каждого файла. Почему
/etc/shadowдоступен только root?
Задание 3.2. Создание пользователей и групп
-
Создайте нового пользователя:
Окно терминала sudo useradd -m -s /bin/bash testusersudo passwd testuser -
Создайте группу и добавьте пользователя:
Окно терминала sudo groupadd developerssudo usermod -aG developers testuserid testuser -
Проверьте домашний каталог:
Окно терминала ls -la /home/testuser/ -
Переключитесь на пользователя и обратно:
Окно терминала su - testuserwhoamiexit -
Удалите пользователя и группу (очистка):
Окно терминала sudo userdel -r testusersudo groupdel developers
Задание 3.3. sudo и принцип наименьших привилегий
-
Проверьте настройки sudo:
Окно терминала sudo cat /etc/sudoers -
Попробуйте выполнить привилегированную команду без sudo:
Окно терминала cat /etc/shadow # Отказ в доступеsudo cat /etc/shadow # Работает -
Объясните: почему рекомендуется работать от обычного пользователя и использовать
sudoтолько по необходимости?
Часть 4. Пакетный менеджер apt
Задание 4.1. Работа с пакетами
-
Обновите список пакетов:
Окно терминала sudo apt update -
Найдите пакет:
Окно терминала apt search cowsay -
Установите пакет и узнайте, какие файлы он содержит:
Окно терминала sudo apt install cowsaydpkg -L cowsaycowsay "Операционные системы" -
Просмотрите информацию о пакете:
Окно терминала apt show cowsay -
Удалите пакет:
Окно терминала sudo apt remove cowsay
Часть 5. systemd
Задание 5.1. Управление службами
-
Просмотрите статус службы SSH:
Окно терминала systemctl status sshdОбъясните вывод: active/inactive, enabled/disabled.
-
Просмотрите список всех запущенных служб:
Окно терминала systemctl list-units --type=service --state=running -
Просмотрите логи службы:
Окно терминала journalctl -u sshd --no-pager | tail -20journalctl -u sshd -f # Следить в реальном времени (Ctrl+C для выхода)
Задание 5.2. Изучение unit-файла
-
Найдите unit-файл сервиса:
Окно терминала systemctl cat sshd -
Объясните секции
[Unit],[Service],[Install]и их основные директивы.
Мини-проект: создание systemd-сервиса
Создайте собственный systemd-сервис, который будет периодически записывать состояние системы в лог.
Шаг 1. Создайте скрипт /opt/syslogger/syslogger.sh:
sudo mkdir -p /opt/sysloggersudo tee /opt/syslogger/syslogger.sh << 'EOF'#!/bin/bashLOG_DIR="/var/log/syslogger"mkdir -p "$LOG_DIR"
while true; do TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') CPU_LOAD=$(uptime | awk -F'load average: ' '{print $2}') MEM_USED=$(free -h | awk '/Mem:/ {print $3 "/" $2}') PROC_COUNT=$(ps aux --no-headers | wc -l) DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}')
echo "$TIMESTAMP | CPU: $CPU_LOAD | MEM: $MEM_USED | PROCS: $PROC_COUNT | DISK: $DISK_USAGE" >> "$LOG_DIR/system.log" sleep 60doneEOFsudo chmod +x /opt/syslogger/syslogger.shШаг 2. Создайте unit-файл /etc/systemd/system/syslogger.service:
sudo tee /etc/systemd/system/syslogger.service << 'EOF'[Unit]Description=System Logger ServiceAfter=network.target
[Service]Type=simpleExecStart=/opt/syslogger/syslogger.shRestart=on-failureRestartSec=5StandardOutput=journalStandardError=journal
[Install]WantedBy=multi-user.targetEOFШаг 3. Запустите и проверьте:
sudo systemctl daemon-reloadsudo systemctl start sysloggersudo systemctl status sysloggersudo systemctl enable syslogger # Автозапуск при загрузке
# Проверить логиsudo journalctl -u syslogger -fcat /var/log/syslogger/system.logШаг 4. Остановите и отключите:
sudo systemctl stop sysloggersudo systemctl disable sysloggerКонтрольные вопросы
- Что такое inode? Какую информацию он хранит? Почему имя файла не хранится в inode?
- Чем жёсткая ссылка отличается от символической? Почему нельзя создать жёсткую ссылку на каталог?
- Расшифруйте права
rwxr-s--T. Что означаютsиT? - Что такое umask? Если umask = 022, какие права получит новый файл? Новый каталог?
- Зачем нужен SUID? Приведите пример утилиты с установленным SUID.
- Что такое принцип наименьших привилегий? Как он реализован в Linux?
- Чем отличаются
/etc/passwdи/etc/shadow? Почему пароли вынесены в отдельный файл? - Что такое systemd? Какова роль PID 1 в системе?
- Из каких секций состоит unit-файл systemd? Что означает
WantedBy=multi-user.target? - Объясните разницу между
systemctl start,systemctl enableиsystemctl restart.