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)
- BIOS/UEFI: Прошивка на материнской плате, которая проводит самотестирование (POST) и находит загрузочное устройство.
- Bootloader (GRUB2): Маленькая программа, которая находится в самом начале диска. Ее задача — загрузить ядро Linux в оперативную память. GRUB позволяет выбрать, какую ОС или какое ядро загружать.
- Kernel: Ядро инициализируется, определяет все оборудование, монтирует корневую файловую систему в режиме "только чтение".
- 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` в обратную сторону. Но перед восстановлением всегда делайте бэкап текущего состояния, на случай если что-то пойдет не так!