Модуль 1 • Урок 2

Системное администрирование Linux

Вы получаете ключи от цифрового королевства. Полное руководство по управлению пользователями, процессами, безопасностью и ядром системы.

1. Вводный модуль по безопасности: Мышление Администратора

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

Три столпа безопасности Linux:

  • Разграничение доступа: Четкое разделение прав между пользователями, группами и процессами.
  • Минимализм: Чем меньше программ установлено и сервисов запущено, тем меньше потенциальных векторов для атаки. Не устанавливайте ничего лишнего.
  • Своевременные обновления: Большинство взломов происходит через давно известные уязвимости, для которых уже выпущены патчи. Регулярное обновление — ваша главная защита.
# Команда, которую вы должны выполнять регулярно (раз в день/неделю) sudo apt update && sudo apt upgrade -y

2. Основные операции в Bash и работа с файлами

Мы продолжаем совершенствовать наши навыки работы в терминале. Bash — это не просто командная строка, а полноценный язык программирования.

Поиск файлов: `find` и `locate`

find — мощнейший инструмент для поиска по множеству критериев. locate — очень быстрый поиск по заранее созданной базе имен файлов.

# Найти все файлы с расширением .log в директории /var/log find /var/log -name "*.log" # Найти все файлы, измененные за последние 24 часа, в домашней директории find ~ -mtime -1 # Найти все файлы, принадлежащие пользователю 'dev1' find / -user dev1 # Быстро найти, где находится файл конфигурации sshd_config locate sshd_config

Работа с текстом: `grep`, `sed`, `awk`

Эти три утилиты — швейцарский нож для обработки текста.

  • grep: Фильтрует строки, содержащие заданный шаблон.
  • sed: Потоковый редактор для замены текста в файлах и потоках.
  • awk: Мощный язык для обработки и анализа структурированного текста (например, логов).
# Найти все строки со словом "error" в лог-файле grep "error" /var/log/syslog # Заменить все вхождения "http" на "https" в файле config.txt sed 's/http/https/g' config.txt # Вывести первый и третий столбец из файла, разделенного пробелами awk '{print $1, $3}' data.txt

3. Учетные записи в Linux и групповые политики

Как мы уже знаем, основа безопасности — это управление пользователями. Каждый пользователь имеет уникальный ID (UID), а каждая группа — GID. Суперпользователь `root` всегда имеет UID 0.

Важные файлы:
/etc/passwd: Список пользователей (логин, UID, GID, домашняя папка, оболочка).
/etc/shadow: Хэши паролей пользователей. Доступен для чтения только root.
/etc/group: Список групп и их членов.
/etc/sudoers: Файл, определяющий, кто и какие команды может выполнять через `sudo`.

Примеры управления

# Создать пользователя, сразу добавив его в группу 'www-data' и задав ему оболочку /bin/bash sudo useradd -m -g users -G www-data -s /bin/bash newuser # Заблокировать учетную запись пользователя sudo usermod -L newuser # Разблокировать учетную запись sudo usermod -U newuser

Редактировать файл `sudoers` напрямую опасно. Всегда используйте команду sudo visudo, которая проверит синтаксис перед сохранением.

4. Управление доступом и привилегиями

Помимо стандартных прав `rwx`, существуют специальные права доступа, которые дают файлам временные суперспособности.

ПравоОписаниеПример
SUID (Set User ID)При запуске файл выполняется с правами владельца файла, а не того, кто его запустил.Команда `passwd`. Обычный пользователь может ее запустить, и она временно получит права `root`, чтобы изменить защищенный файл `/etc/shadow`.
SGID (Set Group ID)При запуске файл выполняется с правами группы файла. Если установлено на директорию, все новые файлы в ней будут наследовать группу директории.Директория проекта, где все файлы должны принадлежать группе `developers`.
Sticky BitУстанавливается на директории. Позволяет всем создавать файлы, но удалять файл может только его владелец (или root).Директория `/tmp`. Любой может создать временный файл, но не может удалить чужой.
# Установить SUID бит на программу (опасно!) sudo chmod u+s /usr/local/bin/my_app # Установить SGID на директорию проекта sudo chmod g+s /var/www/project # Установить Sticky Bit sudo chmod +t /shared_folder

5. Управление вводом/выводом и конвейерная обработка

Это сердце философии UNIX: "Пишите программы, которые делают что-то одно и делают это хорошо. Пишите программы, которые бы работали вместе". Конвейер `|` — это клей, который соединяет эти программы.

У каждого процесса есть три стандартных потока:

  • stdin (0) - стандартный ввод (обычно клавиатура).
  • stdout (1) - стандартный вывод (обычно экран).
  • stderr (2) - стандартный вывод ошибок (обычно экран).
# Найти 5 самых больших файлов в системе и вывести их # du -> sort -> head sudo du -ah / 2>/dev/null | sort -rh | head -n 5 # Объяснение: # sudo du -ah / : Показать размеры всех файлов, начиная с корня. # 2>/dev/null : Перенаправить все ошибки (stderr) в "черную дыру", чтобы они не мешали. # | sort -rh : Отсортировать вывод по-человечески (h) и в обратном порядке (r). # | head -n 5 : Взять только первые 5 строк.

6. Загрузка ядра Linux и запуск User Space

Что происходит, когда вы нажимаете кнопку питания? Это сложный, но строго регламентированный процесс.

1. BIOS/UEFI -> 2. Bootloader (GRUB) -> 3. Kernel -> 4. init (systemd)
                
  1. BIOS/UEFI: Прошивка на материнской плате, которая проводит самотестирование (POST) и находит загрузочное устройство.
  2. Bootloader (GRUB2): Маленькая программа, которая находится в самом начале диска. Ее задача — загрузить ядро Linux в оперативную память. GRUB позволяет выбрать, какую ОС или какое ядро загружать.
  3. Kernel: Ядро инициализируется, определяет все оборудование, монтирует корневую файловую систему в режиме "только чтение".
  4. init (systemd): Ядро запускает самый первый процесс с PID=1. В современных системах это `systemd`. С этого момента начинается запуск User Space. `systemd` читает свои конфигурационные файлы (`.service`, `.target`) и последовательно запускает все необходимые системные службы: сеть, графический интерфейс, SSH-сервер и т.д.

7. Управление процессами

Мы уже знаем, как "убивать" процессы. Давайте научимся управлять ими более тонко.

  • Приоритеты: Команда nice позволяет запустить процесс с пониженным приоритетом (чтобы он не мешал более важным задачам). renice позволяет изменить приоритет уже запущенного процесса.
  • Фоновый режим: Добавив `&` в конце команды, вы запустите ее в фоновом режиме, и терминал сразу освободится. Команда jobs покажет фоновые задачи, а fg вернет задачу на передний план.
# Запустить ресурсоемкое сжатие архива с низким приоритетом nice -n 19 tar -czf backup.tar.gz /large_directory # Сделать уже запущенный процесс с PID 4567 менее приоритетным sudo renice -n 10 -p 4567 # Запустить скрипт в фоне ./my_script.sh &

8. Управление системой (Systemd)

systemd — это не просто `init`, это целый комплекс для управления системой. Его основная единица — `unit`. Юниты бывают разных типов: `.service` (службы), `.target` (группы юнитов, аналоги "уровней запуска"), `.mount` (точки монтирования) и другие.

Файлы юнитов, которые вы создаете или изменяете, должны лежать в /etc/systemd/system/. Не трогайте системные юниты в /lib/systemd/system/.

# Посмотреть все запущенные юниты типа 'service' systemctl list-units --type=service --state=running # Посмотреть, от каких юнитов зависит сетевой сервис systemctl list-dependencies network.target # Перезагрузить конфигурацию systemd после создания нового юнита sudo systemctl daemon-reload

9. Установка и удаление программ (APT)

APT (Advanced Package Tool) — мощная система управления пакетами в Debian-based дистрибутивах (включая Ubuntu). Он работает с файлами `.deb`.

# Установить Nginx sudo apt install nginx # Удалить Nginx, но оставить его конфигурационные файлы sudo apt remove nginx # Удалить Nginx ПОЛНОСТЬЮ, включая конфиги sudo apt purge nginx # Почистить локальный кэш скачанных пакетов sudo apt clean # Удалить пакеты, которые были установлены как зависимости, но больше не нужны sudo apt autoremove

10. Логирование и мониторинг

Хороший администратор не ждет, пока система сломается. Он постоянно следит за ее "пульсом".

Ключевые утилиты мониторинга:

  • htop: Интерактивный монитор процессов (лучше, чем top).
  • df -h: Показывает свободное место на дисках.
  • du -sh *: Показывает размеры файлов и папок в текущей директории.
  • free -h: Показывает использование оперативной памяти и swap.
  • ss -tuln: Показывает, какие сетевые порты открыты и слушают соединения.

Логи — это ваша машина времени. journalctl — основной инструмент. Он позволяет фильтровать логи по времени, по сервису, по уровню приоритета (ошибки, предупреждения).

# Показать все ошибки (priority 3) с начала текущего дня journalctl -p 3 --since "today"

11. Механизмы управления безопасностью

Помимо прав доступа, в Linux есть и более продвинутые механизмы.

  • Firewall (UFW): Uncomplicated Firewall — простая "обертка" над сложным `iptables`. Позволяет легко настраивать правила для сетевого трафика.
  • SSH Hardening: Защита удаленного доступа. Ключевые меры: отключение входа для `root`, использование только ключевой аутентификации (отключение паролей), смена стандартного порта 22.
  • AppArmor / SELinux: Mandatory Access Control (MAC) системы. Они создают жесткие профили для каждой программы, определяя, к каким файлам и ресурсам она может обращаться, даже если запущена от имени `root`. Это сложная, но очень мощная защита.
# Пример базовой настройки UFW sudo ufw allow ssh # Разрешить подключения по SSH sudo ufw allow http # Разрешить HTTP sudo ufw allow https # Разрешить HTTPS sudo ufw enable # Включить файрвол

12. Резервное копирование и восстановление данных

Правило бэкапа 3-2-1: 3 копии данных, на 2 разных носителях, 1 из которых находится в другом географическом месте.

Автоматизация — ключ к надежным бэкапам. Для этого используется планировщик задач cron.

Команда sudo crontab -e открывает файл с расписанием задач для `root`. Каждая строка имеет формат: `минута час день_месяца месяц день_недели команда`.

# Пример строки в crontab: # Каждый день в 2:30 ночи запускать скрипт для резервного копирования 30 2 * * * /usr/local/bin/backup_script.sh

Сам скрипт `backup_script.sh` может содержать команды `rsync` для копирования данных, `tar` для архивации и `mysqldump` для бэкапа баз данных.

Восстановление — это просто `rsync` в обратную сторону. Но перед восстановлением всегда делайте бэкап текущего состояния, на случай если что-то пойдет не так!