Перейти к содержимому

Практика 3. Файловые системы, пользователи, права и systemd


Цель работы

Изучить inode и ссылки, управление правами доступа, работу с пользователями и группами, основы systemd.


Часть 1. Inode и ссылки

Задание 1.1. Исследование inode

  1. Создайте тестовый файл и просмотрите его inode:

    Окно терминала
    echo "Hello, filesystem!" > ~/project/data/testfile.txt
    ls -i ~/project/data/testfile.txt
    stat ~/project/data/testfile.txt

    Запишите номер inode. Какую информацию выводит stat?

  2. Убедитесь, что два разных файла имеют разные inode:

    Окно терминала
    echo "File A" > ~/project/data/fileA.txt
    echo "File B" > ~/project/data/fileB.txt
    ls -i ~/project/data/fileA.txt ~/project/data/fileB.txt

Задание 1.2. Жёсткие ссылки

  1. Создайте жёсткую ссылку на файл:

    Окно терминала
    ln ~/project/data/testfile.txt ~/project/data/testfile_hard.txt
  2. Сравните inode оригинала и ссылки:

    Окно терминала
    ls -li ~/project/data/testfile.txt ~/project/data/testfile_hard.txt

    Что вы наблюдаете? Обратите внимание на количество ссылок (второй столбец).

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

    Окно терминала
    echo "Добавлено через hard link" >> ~/project/data/testfile_hard.txt
    cat ~/project/data/testfile.txt
  4. Удалите оригинальный файл. Доступна ли жёсткая ссылка?

    Окно терминала
    rm ~/project/data/testfile.txt
    cat ~/project/data/testfile_hard.txt # Работает!
    stat ~/project/data/testfile_hard.txt # Количество ссылок уменьшилось
  5. Попробуйте создать жёсткую ссылку на каталог:

    Окно терминала
    ln ~/project/data/ ~/project/data_link

    Что произойдёт? Почему?

Задание 1.3. Символические ссылки

  1. Создайте символическую ссылку:

    Окно терминала
    echo "Sym link target" > ~/project/data/target.txt
    ln -s ~/project/data/target.txt ~/project/data/symlink.txt
  2. Сравните inode:

    Окно терминала
    ls -li ~/project/data/target.txt ~/project/data/symlink.txt

    Чем отличаются inode? Обратите внимание на первый символ прав (l).

  3. Прочитайте, куда указывает ссылка:

    Окно терминала
    readlink ~/project/data/symlink.txt
  4. Создайте символическую ссылку на каталог:

    Окно терминала
    ln -s ~/project/src ~/project/src_link
    ls -la ~/project/src_link/
  5. Удалите целевой файл и проверьте ссылку:

    Окно терминала
    rm ~/project/data/target.txt
    cat ~/project/data/symlink.txt # Ошибка!
    ls -la ~/project/data/symlink.txt # Ссылка «повисла» (dangling)

Задание 1.4. Сравнительная таблица

Заполните таблицу на основе экспериментов:

СвойствоЖёсткая ссылкаСимволическая ссылка
Свой inode?
Через границы ФС?
На каталоги?
При удалении оригинала
Размер ссылки

Часть 2. Права доступа

Задание 2.1. Просмотр и изменение прав

  1. Создайте файл и просмотрите его права:

    Окно терминала
    touch ~/project/data/secret.txt
    ls -la ~/project/data/secret.txt

    Объясните вывод -rw-r--r--.

  2. Установите права в числовом формате:

    Окно терминала
    chmod 755 ~/project/data/secret.txt
    ls -la ~/project/data/secret.txt # -rwxr-xr-x
    chmod 600 ~/project/data/secret.txt
    ls -la ~/project/data/secret.txt # -rw-------
    chmod 644 ~/project/data/secret.txt
    ls -la ~/project/data/secret.txt # -rw-r--r--
  3. Установите права в символьном формате:

    Окно терминала
    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

  1. Проверьте текущую маску:

    Окно терминала
    umask
    umask -S # В символьном формате
  2. Создайте файл и каталог, проверьте права по умолчанию:

    Окно терминала
    touch ~/project/data/newfile.txt
    mkdir ~/project/data/newdir
    ls -la ~/project/data/newfile.txt ~/project/data/newdir

    Как umask влияет на права создаваемых файлов?

  3. Измените umask и проверьте:

    Окно терминала
    umask 077
    touch ~/project/data/private_file.txt
    mkdir ~/project/data/private_dir
    ls -la ~/project/data/private_file.txt ~/project/data/private_dir

    Какие права получили файл и каталог?

  4. Рассчитайте: если umask = 027, какие права получит новый файл? Новый каталог?

Задание 2.4. Специальные биты

  1. Изучите SUID на примере passwd:

    Окно терминала
    ls -la /usr/bin/passwd

    Обратите внимание на s в правах владельца. Зачем passwd нужен SUID?

  2. Изучите Sticky bit на /tmp:

    Окно терминала
    ls -ld /tmp

    Обратите внимание на t в правах. Что он означает для каталога?

  3. Установите SUID и Sticky bit на тестовые файлы:

    Окно терминала
    chmod u+s ~/project/data/secret.txt # SUID
    chmod +t ~/project/data/newdir # Sticky bit
    ls -la ~/project/data/secret.txt
    ls -ld ~/project/data/newdir

Часть 3. Пользователи и группы

Задание 3.1. Исследование учётных записей

  1. Просмотрите информацию о текущем пользователе:

    Окно терминала
    whoami
    id
    groups
  2. Изучите файлы учётных записей:

    Окно терминала
    cat /etc/passwd | head -10
    cat /etc/group | head -10
    sudo cat /etc/shadow | head -5

    Объясните формат каждого файла. Почему /etc/shadow доступен только root?

Задание 3.2. Создание пользователей и групп

  1. Создайте нового пользователя:

    Окно терминала
    sudo useradd -m -s /bin/bash testuser
    sudo passwd testuser
  2. Создайте группу и добавьте пользователя:

    Окно терминала
    sudo groupadd developers
    sudo usermod -aG developers testuser
    id testuser
  3. Проверьте домашний каталог:

    Окно терминала
    ls -la /home/testuser/
  4. Переключитесь на пользователя и обратно:

    Окно терминала
    su - testuser
    whoami
    exit
  5. Удалите пользователя и группу (очистка):

    Окно терминала
    sudo userdel -r testuser
    sudo groupdel developers

Задание 3.3. sudo и принцип наименьших привилегий

  1. Проверьте настройки sudo:

    Окно терминала
    sudo cat /etc/sudoers
  2. Попробуйте выполнить привилегированную команду без sudo:

    Окно терминала
    cat /etc/shadow # Отказ в доступе
    sudo cat /etc/shadow # Работает
  3. Объясните: почему рекомендуется работать от обычного пользователя и использовать sudo только по необходимости?


Часть 4. Пакетный менеджер apt

Задание 4.1. Работа с пакетами

  1. Обновите список пакетов:

    Окно терминала
    sudo apt update
  2. Найдите пакет:

    Окно терминала
    apt search cowsay
  3. Установите пакет и узнайте, какие файлы он содержит:

    Окно терминала
    sudo apt install cowsay
    dpkg -L cowsay
    cowsay "Операционные системы"
  4. Просмотрите информацию о пакете:

    Окно терминала
    apt show cowsay
  5. Удалите пакет:

    Окно терминала
    sudo apt remove cowsay

Часть 5. systemd

Задание 5.1. Управление службами

  1. Просмотрите статус службы SSH:

    Окно терминала
    systemctl status sshd

    Объясните вывод: active/inactive, enabled/disabled.

  2. Просмотрите список всех запущенных служб:

    Окно терминала
    systemctl list-units --type=service --state=running
  3. Просмотрите логи службы:

    Окно терминала
    journalctl -u sshd --no-pager | tail -20
    journalctl -u sshd -f # Следить в реальном времени (Ctrl+C для выхода)

Задание 5.2. Изучение unit-файла

  1. Найдите unit-файл сервиса:

    Окно терминала
    systemctl cat sshd
  2. Объясните секции [Unit], [Service], [Install] и их основные директивы.


Мини-проект: создание systemd-сервиса

Создайте собственный systemd-сервис, который будет периодически записывать состояние системы в лог.

Шаг 1. Создайте скрипт /opt/syslogger/syslogger.sh:

sudo mkdir -p /opt/syslogger
sudo tee /opt/syslogger/syslogger.sh << 'EOF'
#!/bin/bash
LOG_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 60
done
EOF
sudo 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 Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/syslogger/syslogger.sh
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF

Шаг 3. Запустите и проверьте:

Окно терминала
sudo systemctl daemon-reload
sudo systemctl start syslogger
sudo systemctl status syslogger
sudo systemctl enable syslogger # Автозапуск при загрузке
# Проверить логи
sudo journalctl -u syslogger -f
cat /var/log/syslogger/system.log

Шаг 4. Остановите и отключите:

Окно терминала
sudo systemctl stop syslogger
sudo systemctl disable syslogger

Контрольные вопросы

  1. Что такое inode? Какую информацию он хранит? Почему имя файла не хранится в inode?
  2. Чем жёсткая ссылка отличается от символической? Почему нельзя создать жёсткую ссылку на каталог?
  3. Расшифруйте права rwxr-s--T. Что означают s и T?
  4. Что такое umask? Если umask = 022, какие права получит новый файл? Новый каталог?
  5. Зачем нужен SUID? Приведите пример утилиты с установленным SUID.
  6. Что такое принцип наименьших привилегий? Как он реализован в Linux?
  7. Чем отличаются /etc/passwd и /etc/shadow? Почему пароли вынесены в отдельный файл?
  8. Что такое systemd? Какова роль PID 1 в системе?
  9. Из каких секций состоит unit-файл systemd? Что означает WantedBy=multi-user.target?
  10. Объясните разницу между systemctl start, systemctl enable и systemctl restart.