Администрирование Linux: Процессы, права и сервисы

Глубокое погружение в системное администрирование Linux, фокусирующееся на управлении пользователями, разграничении прав доступа и управлении жизненным циклом сервисов через systemd. Курс формирует критические навыки управления ресурсами и безопасностью системы, необходимые для Junior DevOps инженера.

1. Многопользовательская модель Linux: управление учетными записями пользователей и группами

Многопользовательская модель Linux: управление учетными записями пользователей и группами

В 1970-х годах, когда зарождалась операционная система Unix, компьютер был не персональным гаджетом, а огромной и дорогой машиной, за которой одновременно работали десятки инженеров. Чтобы они не удаляли файлы друг друга и не могли случайно выключить систему, пока коллега проводит расчеты, была создана строгая иерархия доступа. Linux унаследовала эту модель практически без изменений. Сегодня, даже если вы единственный владелец ноутбука с Ubuntu, в вашей системе «живут» десятки пользователей, о которых вы можете не подозревать. Понимание того, как Linux идентифицирует субъектов и распределяет их по группам, — это фундамент, без которого невозможно настроить ни веб-сервер, ни базу данных, ни безопасность облачного кластера.

Идентификация субъектов: UID и GID

Для человека пользователь — это логин, например, ivan или admin. Для ядра Linux имен не существует. Система оперирует исключительно числами — идентификаторами пользователей (User ID, UID) и идентификаторами групп (Group ID, GID). Когда вы запускаете процесс, ядро проверяет именно ваш UID, чтобы решить, имеете ли вы право прочитать файл или отправить сигнал другому процессу.

Существует три основные категории идентификаторов, которые определяют роль субъекта в системе:

  • Суперпользователь (root): Его UID всегда равен . Это «бог» системы, на которого не распространяются стандартные ограничения прав доступа. Root может прочитать любой файл, завершить любой процесс и изменить любую настройку.
  • Системные пользователи: Обычно имеют UID в диапазоне от до (в разных дистрибутивах границы могут варьироваться, например, до ). Эти учетные записи не принадлежат людям. Они создаются для работы конкретных сервисов: веб-сервера (www-data), базы данных (postgres), почтового агента (mail). Это реализация принципа наименьших привилегий: если хакер взломает веб-сервер, запущенный от пользователя www-data, он получит доступ только к файлам сайта, но не сможет зайти в домашние папки пользователей или изменить системные конфиги, так как у www-data нет на это прав.
  • Обычные пользователи: Их UID начинаются с и выше. Это реальные люди, которые заходят в систему по SSH или через графический интерфейс.
  • Группы (GID) работают по аналогичному принципу. Группа — это логическое объединение пользователей для упрощения управления доступом. Вместо того чтобы выдавать права на папку с логами десяти разным администраторам по отдельности, мы создаем группу admins и даем права ей.

    Анатомия учетных записей: файлы /etc/passwd и /etc/shadow

    Вся информация о пользователях хранится в текстовых файлах, которые можно редактировать вручную, хотя делать это не рекомендуется. Главный «справочник» системы — /etc/passwd. Несмотря на название, паролей в нем давно нет (по соображениям безопасности), но в нем описана структура каждой учетной записи.

    Каждая строка в /etc/passwd содержит семь полей, разделенных двоеточием. Рассмотрим на примере: alice:x:1001:1001:Alice Smith,Office 101:/home/alice:/bin/bash

    * alice: Логин (Username). * x: Заглушка для пароля. Раньше здесь хранился хеш пароля, но теперь буква x указывает системе, что хеш нужно искать в защищенном файле /etc/shadow. * 1001: Числовой UID. * 1001: Основной (Primary) GID. При создании любого файла пользователем alice, этот файл будет принадлежать данной группе. * Alice Smith,Office 101: Поле GECOS. Здесь может быть полное имя, номер телефона или любая справочная информация. * /home/alice: Домашний каталог. Место, где пользователь оказывается после входа. * /bin/bash: Командная оболочка (Shell). Программа, которая запускается при входе. Если здесь указано /usr/sbin/nologin или /bin/false, пользователь не сможет войти в интерактивную консоль — это стандарт для системных аккаунтов.

    Пароли же хранятся в /etc/shadow. Доступ к этому файлу имеет только root, так как в нем содержатся хеши паролей. Если злоумышленник получит хеш, он сможет запустить перебор (брутфорс) на своем оборудовании. Структура /etc/shadow сложнее и включает параметры безопасности: дату последней смены пароля, минимальный и максимальный срок действия пароля, период предупреждения об истечении.

    > «Безопасность системы определяется не сложностью алгоритма шифрования, а строгостью разграничения доступа к ключевым файлам конфигурации». > > The Art of Unix Programming

    Управление группами: файл /etc/group

    Группы в Linux бывают двух видов:

  • Основная (Primary group): Указывается в /etc/passwd. У пользователя может быть только одна основная группа.
  • Дополнительные (Secondary/Supplementary groups): Пользователь может состоять в неограниченном количестве дополнительных групп. Это позволяет гибко настраивать доступы: например, разработчик может входить в группу developers (для работы с кодом), docker (для запуска контейнеров) и sudo (для администрирования).
  • Файл /etc/group выглядит так: docker:x:998:alice,bob,charlie

    Здесь docker — имя группы, x — пароль группы (почти никогда не используется), 998 — GID, а далее через запятую список пользователей, для которых эта группа является дополнительной. Важно помнить: если вы добавили пользователя в новую группу, изменения вступят в силу только при следующем входе пользователя в систему (создании новой сессии).

    Инструментарий администратора: создание и модификация

    Для управления пользователями существуют низкоуровневые утилиты (useradd, groupadd) и более дружелюбные скрипты-обертки (adduser). В профессиональной среде принято использовать базовые утилиты, так как они ведут себя предсказуемо во всех дистрибутивах.

    Создание пользователя

    Команда useradd по умолчанию создает «голого» пользователя без домашней папки и пароля. Для полноценного создания аккаунта обычно используют флаги: sudo useradd -m -s /bin/bash -G sudo,docker devops_engineer

    Разберем параметры: * -m: Создать домашний каталог (обычно /home/username). * -s: Указать оболочку (Shell). * -G: Список дополнительных групп (через запятую, без пробелов).

    После создания необходимо задать пароль командой sudo passwd devops_engineer. Без этого войти под учетной записью будет невозможно, так как в /etc/shadow поле пароля будет помечено как заблокированное.

    Модификация и удаление

    Если нужно добавить существующего пользователя в группу, используется usermod. Здесь критически важен флаг -a (append — добавить). sudo usermod -aG vboxusers alice Если вы забудете -a и напишете просто usermod -G vboxusers alice, система заменит все дополнительные группы пользователя на одну указанную. Это классическая ошибка новичка, приводящая к потере прав sudo.

    Удаление пользователя выполняется командой userdel. Флаг -r (recursive) позволяет удалить пользователя вместе с его домашним каталогом и почтовым ящиком. Без этого флага в системе останутся «файлы-сироты», принадлежащие UID, которого больше нет в /etc/passwd.

    Механизм повышения привилегий: sudo и su

    В Linux не принято работать под учетной записью root постоянно. Это опасно: одна опечатка в команде rm -rf / может уничтожить систему. Вместо этого используется механизм временного получения прав.

    Команда su (Substitute User)

    su позволяет полностью переключиться на другого пользователя. Если вызвать su - без аргументов, система попросит пароль суперпользователя и откроет новую оболочку от имени root. Минус этого подхода в том, что администратору нужно знать пароль root, а в больших компаниях это создает проблемы с безопасностью и аудитом (непонятно, кто именно совершил действие, так как все работают под одним root).

    Команда sudo (Substitute User and Do)

    sudo — более современный и безопасный подход. Она позволяет выполнить конкретную команду с правами root, используя свой собственный пароль. Преимущества sudo: * Логирование: Каждое действие через sudo записывается в системный журнал (/var/log/auth.log или journalctl). * Гибкость: Через файл /etc/sudoers можно разрешить пользователю выполнять только конкретные команды (например, только перезагружать веб-сервер), а не давать полный доступ.

    Настройка прав sudo осуществляется через команду visudo. Никогда не редактируйте /etc/sudoers обычным текстовым редактором. visudo проверяет синтаксис файла перед сохранением. Если вы допустите ошибку в этом файле, вы можете полностью заблокировать возможность получения прав root в системе.

    Типичная строка в sudoers: %admin ALL=(ALL:ALL) ALL Это означает: все пользователи группы admin (% означает группу) на всех хостах (ALL) от имени любого пользователя и любой группы ((ALL:ALL)) могут выполнять любые команды (ALL).

    Оболочки и окружение: почему это важно для администрирования

    Когда пользователь входит в систему, запускается Shell, указанный в /etc/passwd. Самый популярный — bash, но существуют также zsh, fish, sh. Оболочка — это не просто интерпретатор команд, это среда.

    Для системного администратора критически важно понимать разницу между login shell и non-login shell.

  • Login shell: Запускается при входе по SSH или в консоли. Она считывает файлы конфигурации /etc/profile и ~/.bash_profile.
  • Non-login shell: Запускается, когда вы просто открываете новый терминал внутри графической оболочки или запускаете скрипт. Она читает ~/.bashrc.
  • Частая проблема: вы добавили путь к новой программе в переменную PATH в файле ~/.bashrc, но при запуске задачи через планировщик или по SSH программа «не находится». Это происходит потому, что переменные окружения не были подгружены соответствующим типом оболочки.

    Практические аспекты: работа с системными пользователями

    При установке сервисов, например Nginx, в системе автоматически появляется пользователь www-data. У него нет пароля, у него нет домашней папки в привычном понимании (обычно это /var/www), и его оболочка установлена в /usr/sbin/nologin.

    Если вам как администратору нужно выполнить команду от имени этого пользователя (например, чтобы проверить, имеет ли веб-сервер доступ к конкретному файлу), вы не можете просто сделать su www-data, так как у него нет пароля. В этом случае используется sudo: sudo -u www-data ls -la /var/www/html Флаг -u (user) позволяет выполнить команду от имени любого субъекта. Это важнейший инструмент отладки прав доступа.

    Управление жизненным циклом учетных записей

    В крупных организациях управление пользователями не ограничивается командами useradd. Встает вопрос безопасности: что если сотрудник уволился, а его доступ не закрыли?

    Для этого в Linux предусмотрены механизмы блокировки: * passwd -l username: Заблокировать пароль (Lock). В /etc/shadow перед хешем пароля добавится восклицательный знак, что сделает невозможным вход по паролю. * chage -E 2023-12-31 alice: Установить дату истечения срока действия учетной записи. После этой даты Alice не сможет войти, даже зная пароль.

    Команда chage (change age) — это мощный инструмент для соблюдения политик безопасности. С её помощью можно заставить пользователя сменить пароль при первом входе: sudo chage -d 0 username Установка даты последнего изменения пароля в помечает пароль как «просроченный», и система потребует его обновления немедленно.

    Групповые политики и совместная работа

    Рассмотрим сценарий: в компании есть отдел маркетинга и отдел разработки. У них есть общая папка для обмена документами /data/shared. Как это реализовать в рамках многопользовательской модели?

  • Создается группа staff: sudo groupadd staff.
  • Пользователи из обоих отделов добавляются в эту группу: sudo usermod -aG staff mark; sudo usermod -aG staff dev.
  • Владельцем папки назначается группа staff: sudo chgrp staff /data/shared.
  • Устанавливаются права доступа, разрешающие группе чтение и запись (подробнее о правах доступа мы поговорим в следующей главе, но механизм групп — это то, на чем они держатся).
  • Без концепции групп нам пришлось бы использовать сложные списки контроля доступа (ACL) или давать права «всем остальным» (others), что небезопасно.

    Нюансы UID и переносимость данных

    Важный момент, который часто упускают Junior-администраторы: права доступа на файлы привязаны к UID, а не к именам. Представьте, что вы создали резервную копию файлов пользователя alice (UID 1001) на одном сервере и развернули её на другом. Но на новом сервере UID 1001 уже занят пользователем bob. В результате файлы, которые раньше принадлежали Alice, теперь принадлежат Bob.

    Поэтому при миграции систем или работе с сетевыми хранилищами (NFS) крайне важно синхронизировать UID/GID на всех машинах. В больших инфраструктурах для этого используют централизованные системы управления идентификацией, такие как FreeIPA или Active Directory (через SSSD/Samba).

    Безопасность и аудит: кто в системе?

    Администратор должен всегда знать, кто находится в системе в данный момент. Для этого используются команды: * who: Показывает список вошедших пользователей, их терминалы и время входа. * w: Расширенная версия who, которая также показывает, какую команду выполняет каждый пользователь и какова нагрузка на систему (load average). * last: Читает файл логов /var/log/wtmp и выводит историю всех входов и выходов из системы, включая перезагрузки. Это первый инструмент при расследовании инцидентов. * id: Показывает текущий UID, GID и все группы, в которых состоит пользователь. Полезно запустить id без параметров, чтобы понять, под кем вы сейчас работаете.

    Многопользовательская модель Linux — это не просто набор команд для создания аккаунтов. Это философия изоляции и контроля. Каждый процесс в системе «знает», кто его породил и на что он имеет право. Понимая, как устроены /etc/passwd, /etc/group и как работают механизмы повышения привилегий через sudo, вы закладываете фундамент для управления безопасностью любого масштаба — от домашнего сервера до облачных ферм с тысячами узлов.

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