Управление пользователями и группами на сервере

calendar_month 30 сентября 2024 schedule 11 мин. чтения visibility 206 просмотров
person
Valebyte Team
Управление пользователями и группами на сервере

Привет, коллеги-админы! Сегодня мы погрузимся в одну из фундаментальных задач при работе с любым сервером, будь то ваш личный VPS, мощный выделенный сервер для хостинга или кластер в облаке – управление пользователями и группами. Это не просто набор команд, а краеугольный камень безопасности, стабильности и эффективной эксплуатации вашей системы. Правильная настройка и администрирование пользователей и групп позволяет не только контролировать доступ к ресурсам, но и реализовывать принцип наименьших привилегий, отслеживать действия, а также упрощать делегирование задач в команде. Мы рассмотрим основные подходы к этой задаче, их преимущества, недостатки и, конечно, лучшие практики, которые помогут вам поддерживать порядок на сервере.

Почему управление пользователями и группами так важно?

An illustration showing a server rack with multiple users and groups connected to it, symbolizing user and group management and its importance for server security and access control.

Прежде чем мы перейдем к командам и инструментам, давайте закрепим, почему этот аспект администрирования заслуживает особого внимания. Для нас, людей, которые ежедневно работают с серверами, это очевидно, но иногда полезно освежить в памяти основные принципы:

  • Безопасность: Это, пожалуй, самый критичный пункт. Ограничивая доступ к файлам, директориям и командам только тем пользователям, которым он действительно нужен, мы минимизируем поверхность атаки. Принцип наименьших привилегий гласит: каждый пользователь и процесс должен иметь только те права, которые необходимы для выполнения его задач, и не более того.
  • Разделение обязанностей: В команде разработки или системных администраторов разные люди отвечают за разные части системы. Правильно настроенные группы позволяют легко делегировать права, например, группе "webdevs" дать доступ к директории /var/www, а группе "dba" — к базам данных, не давая им лишних прав на остальную систему.
  • Аудит и отчетность: Когда каждый пользователь имеет свою учетную запись, гораздо проще отслеживать, кто и когда выполнил определенные действия. Это неоценимо при расследовании инцидентов безопасности или просто при анализе логов.
  • Организация и порядок: Поддержание чистоты в пользовательских учетных записях и группах помогает избежать хаоса, когда на сервере накапливаются давно неиспользуемые аккаунты или группы с избыточными правами.
  • Изоляция процессов: Каждое приложение или сервис часто запускается от имени отдельного пользователя (например, nginx, mysql). Это обеспечивает изоляцию, так что если один сервис будет скомпрометирован, злоумышленник не получит полный контроль над системой.

Основы: Пользователи, Группы и Права Доступа в Linux

Для эффективного управления нужно четко понимать базовые концепции Linux:

Пользователи (Users)

Каждый пользователь в Linux имеет уникальный идентификатор (UID - User ID), который система использует для определения владельца файлов и процессов. Помимо имени пользователя, с каждой учетной записью связаны:

  • UID: Уникальный числовой идентификатор.
  • Домашняя директория: Место, где хранятся личные файлы пользователя (например, /home/username).
  • Оболочка (Shell): Программа, которая запускается при входе пользователя (например, /bin/bash, /bin/sh, /sbin/nologin).
  • Основная группа (Primary Group): Группа, к которой пользователь принадлежит по умолчанию, и которая назначается новым файлам, созданным этим пользователем.
  • Дополнительные группы (Secondary Groups): Другие группы, к которым пользователь может принадлежать для получения дополнительных прав доступа.

Группы (Groups)

Группы — это способ объединить пользователей для упрощения управления правами доступа. Каждый файл и директория в Linux, помимо владельца, имеет и группу-владельца. Члены этой группы могут получать определенные права доступа к файлу или директории. У каждой группы есть свой уникальный идентификатор (GID - Group ID).

Права Доступа (Permissions)

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

  • Чтение (Read, r): Просмотр содержимого файла или списка файлов в директории.
  • Запись (Write, w): Изменение файла или создание/удаление файлов в директории.
  • Выполнение (Execute, x): Запуск файла как программы или вход в директорию.

Эти права назначаются для трех категорий:

  • Владелец (User): Сам пользователь, который владеет файлом/директорией.
  • Группа (Group): Группа, которой принадлежит файл/директория.
  • Остальные (Others): Все остальные пользователи системы.

Права часто представляются в восьмеричной системе (например, 755, 644), где каждая цифра соответствует правам для владельца, группы и остальных, соответственно.

Нужен надежный сервер для управления пользователями и группами?

Обеспечьте стабильную работу вашей системы с нашими VPS-планами. Идеально для эффективного управления ресурсами. — from €4.49/mo.

Выбрать VPS-план →

Управление пользователями и группами через командную строку

Командная строка — это наш основной инструмент, самый гибкий и мощный способ управления сервером. Опытный сисадмин знает, что владение этими командами — залог эффективности и контроля.

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

В разных дистрибутивах Linux для создания пользователей могут использоваться две основные утилиты: useradd и adduser. Важно понимать их различия.

useradd — низкоуровневая утилита

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


sudo useradd -m -g users -G sudo,www-data -s /bin/bash -c "John Doe" john_doe
sudo passwd john_doe

Здесь:

  • -m: Создать домашнюю директорию пользователя, если она не существует.
  • -g users: Установить users как основную группу пользователя.
  • -G sudo,www-data: Добавить пользователя в дополнительные группы sudo и www-data.
  • -s /bin/bash: Установить /bin/bash в качестве оболочки по умолчанию.
  • -c "John Doe": Добавить комментарий (полное имя).
  • john_doe: Имя нового пользователя.

После создания пользователя, обязательно установите ему пароль с помощью passwd.

adduser — скрипт-обертка для удобства

adduser — это скрипт (обычно на Perl), который является более "дружелюбной" оберткой вокруг useradd. Он интерактивно запрашивает необходимые данные (пароль, полное имя и т.д.) и автоматически создает домашнюю директорию и добавляет пользователя в его основную группу.


sudo adduser newuser

Эта команда последовательно задаст вам вопросы о пароле, полном имени и другой информации. Для многих случаев ручного создания пользователей, adduser является предпочтительным выбором.

Модификация пользователей с usermod

Для изменения параметров существующего пользователя используется команда usermod. Например, чтобы добавить пользователя в дополнительную группу:


sudo usermod -aG docker newuser

Здесь -aG означает "append to Group" (добавить к группе), чтобы не перезаписывать существующие дополнительные группы пользователя.

Другие полезные опции usermod:

  • -s /sbin/nologin: Изменить оболочку на nologin, чтобы пользователь не мог войти в систему (полезно для системных аккаунтов).
  • -L: Заблокировать учетную запись.
  • -U: Разблокировать учетную запись.
  • -e YYYY-MM-DD: Установить дату истечения срока действия учетной записи.
  • -d /new/home/dir -m: Изменить домашнюю директорию пользователя, переместив ее содержимое.

Удаление пользователей

Для удаления пользователей также есть две команды:

  • userdel username: Удаляет учетную запись пользователя, но оставляет его домашнюю директорию и почтовый ящик.
  • userdel -r username: Удаляет учетную запись пользователя, а также его домашнюю директорию и почтовый ящик. Это рекомендуется делать для полного удаления.

sudo userdel -r olduser

Если вы использовали adduser, то есть соответствующая команда deluser, которая также поддерживает опцию удаления домашней директории:


sudo deluser --remove-home olduser

Управление группами

Группы создаются и удаляются аналогично пользователям.

Создание групп

Для создания группы используйте groupadd или addgroup:


sudo groupadd developers
sudo addgroup testers

addgroup часто является символической ссылкой на groupadd или простым скриптом, который выполняет groupadd с разумными умолчаниями.

Модификация групп

Для изменения имени группы или GID используйте groupmod:


sudo groupmod -n new_devs developers

Эта команда переименует группу developers в new_devs.

Удаление групп

Для удаления группы используйте groupdel или delgroup:


sudo groupdel testers
sudo delgroup oldgroup

Важно: нельзя удалить основную группу пользователя, пока он к ней принадлежит. Сначала нужно переназначить пользователя в другую основную группу или удалить пользователя.

Проверка пользователей и групп

Чтобы узнать, к каким группам принадлежит пользователь, используйте команды groups или id:


groups newuser
id newuser

Настройка прав доступа: chmod, chown, umask

Как мы уже упоминали, правильные права доступа — это основа безопасности. Вот основные команды для их настройки.

chmod — изменение прав доступа

Команда chmod используется для изменения прав доступа к файлам и директориям. Вы можете использовать символический или восьмеричный режим.

Восьмеричный режим

Это самый распространенный способ. Каждая цифра (от 0 до 7) представляет собой сумму прав:

  • 4: Чтение (r)
  • 2: Запись (w)
  • 1: Выполнение (x)

Примеры:

  • 7 (4+2+1): rwx (чтение, запись, выполнение)
  • 6 (4+2): rw- (чтение, запись)
  • 5 (4+1): r-x (чтение, выполнение)
  • 0: --- (нет прав)

Права задаются для владельца, группы и остальных соответственно:


# Дать владельцу полные права, группе - чтение и выполнение, остальным - только чтение
sudo chmod 754 my_script.sh

# Сделать файл доступным только для чтения и записи владельцем
sudo chmod 600 sensitive_file.conf

# Для директорий: дать владельцу полные права, группе и остальным - чтение и выполнение
# (чтобы можно было войти в директорию и просмотреть ее содержимое)
sudo chmod 755 my_directory/

Для рекурсивного применения прав к содержимому директории используйте опцию -R:


sudo chmod -R 755 /var/www/html/

Символический режим

Символический режим более интуитивен для добавления или удаления конкретных прав:

  • u: владелец (user)
  • g: группа (group)
  • o: остальные (others)
  • a: все (all)
  • +: добавить право
  • -: удалить право
  • =: установить право (перезаписывая существующие)

# Добавить право на выполнение для владельца и группы
chmod ug+x my_script.sh

# Удалить право на запись для остальных
chmod o-w sensitive_file.conf

# Установить права rwx для владельца, r-x для группы и остальных
chmod u=rwx,go=rx my_directory/

chown и chgrp — изменение владельца и группы

Команда chown изменяет владельца файла или директории, а chgrp — группу-владельца.


# Изменить владельца файла на 'newuser'
sudo chown newuser file.txt

# Изменить группу-владельца файла на 'webdevs'
sudo chgrp webdevs file.txt

# Изменить и владельца, и группу-владельца
sudo chown newuser:webdevs file.txt

# Рекурсивно изменить владельца и группу для директории
sudo chown -R www-data:www-data /var/www/html/

umask — маска создания файлов

umask определяет права по умолчанию для новых создаваемых файлов и директорий. Это маска, которая вычитается из полных прав. По умолчанию для файлов это 666 (rw-rw-rw-) и для директорий 777 (rwxrwxrwx).

Типичное значение umask для обычных пользователей — 0022 (или 022). Это означает, что права w для группы и остальных будут отняты от дефолтных прав.

  • Для файлов: 666 - 022 = 644 (rw-r--r--)
  • Для директорий: 777 - 022 = 755 (rwxr-xr-x)

Вы можете проверить свой текущий umask:


umask

И установить его, например, в .bashrc или .profile:


umask 002

002 даст права 664 для файлов (rw-rw-r--) и 775 для директорий (rwxrwxr-x), что удобно для совместной работы в группах.

Расширенные возможности: sudo и ACL

sudo — делегирование привилегий

Использование root-аккаунта для повседневных задач — плохая практика. Вместо этого мы используем sudo для выполнения команд с повышенными привилегиями. Конфигурация sudo хранится в файле /etc/sudoers, который редактируется исключительно через команду visudo.


sudo visudo

Пример строки в sudoers:


# Пользователь 'adminuser' может выполнять все команды без пароля
adminuser ALL=(ALL) NOPASSWD: ALL

# Группа 'sysadmins' может выполнять все команды с паролем
%sysadmins ALL=(ALL) ALL

Будьте крайне осторожны при редактировании sudoers, синтаксические ошибки могут заблокировать вам доступ к административным функциям!

ACL (Access Control Lists) — детальный контроль

Если стандартные права Linux (владелец, группа, остальные) не дают достаточной гибкости, на помощь приходят ACL. Они позволяют назначать права конкретным пользователям или группам, которые не являются владельцем или основной группой файла/директории.

Для работы с ACL нужны утилиты getfacl (посмотреть ACL) и setfacl (установить ACL).


# Установить права на чтение и запись для пользователя 'developer' на файл 'project.log'
sudo setfacl -m u:developer:rw project.log

# Установить права на чтение для группы 'auditors' на директорию 'reports' и ее содержимое
sudo setfacl -R -m g:auditors:r reports/

# Посмотреть ACL для файла
getfacl project.log

ACL — мощный инструмент, но его использование усложняет администрирование, поэтому применяйте его только тогда, когда это действительно необходимо.

Графические утилиты: Webmin и Cockpit

Хотя командная строка — наш лучший друг, в некоторых случаях графические утилиты могут быть полезны, особенно для быстрого мониторинга, менее опытных коллег или когда нужно управлять множеством аспектов сервера через единый интерфейс.

  • Webmin: Это полноценная веб-панель для администрирования почти всех аспектов Linux-сервера, включая пользователей и группы. Она предоставляет удобный GUI для создания, изменения и удаления учетных записей, настройки паролей, групп и прав доступа.

    Webmin может быть полезен для быстрого развертывания или для команд, где не все обладают глубокими знаниями CLI, но для серьезных, автоматизированных задач он, как правило, избыточен.

  • Cockpit: Более современная и легковесная веб-консоль, ориентированная на мониторинг, управление контейнерами, сетями и, конечно, пользователями. Она интегрируется с системными компонентами и обеспечивает более "родной" опыт администрирования, чем Webmin. Cockpit отлично подходит для управления отдельными серверами или небольшими кластерами.

Преимущества GUI: интуитивность, визуализация, упрощение рутинных операций для некоторых пользователей. Недостатки GUI: могут быть менее гибкими для сложных сценариев, добавляют дополнительную поверхность атаки, не всегда подходят для автоматизации.

Сравнение подходов

Давайте сведем преимущества и недостатки различных методов управления в удобную таблицу.

Метод Преимущества Недостатки Типичные сценарии использования
Командная строка (useradd, groupadd, usermod, chmod, chown)
  • Максимальная гибкость и контроль.
  • Идеально для автоматизации и скриптов.
  • Низкие системные ресурсы.
  • Стандартный инструмент, доступный на любом Linux.
  • Высокий порог входа для новичков.
  • Требует запоминания множества команд и опций.
  • Легко допустить ошибку без должного опыта.
  • Ежедневное администрирование опытными специалистами.
  • Автоматизация развертывания (Ansible, Chef, Puppet).
  • Управление VPS и выделенными серверами.
ACL (setfacl, getfacl)
  • Глубокая детализация прав доступа.
  • Позволяет назначать права конкретным пользователям/группам вне стандартных категорий.
  • Усложняет общую картину прав доступа.
  • Не все приложения могут корректно работать с ACL.
  • Требует дополнительного внимания при аудите.
  • Сложные многопользовательские среды с уникальными требованиями к доступу.
  • Совместная работа над проектами с различными уровнями доступа.
Графические утилиты (Webmin, Cockpit)
  • Интуитивно понятный интерфейс.
  • Удобно для быстрого просмотра и простых операций.
  • Снижает порог входа для менее опытных пользователей.
  • Дополнительные системные ресурсы (веб-сервер, процессы).
  • Дополнительная поверхность атаки.
  • Менее гибкие для сложных или нестандартных задач.
  • Не подходят для автоматизации.
  • Мониторинг и управление одним сервером.
  • Быстрые ручные изменения для небольших команд.
  • Обучение новых сотрудников.

Выводы

Управление пользователями и группами на сервере — это не одноразовая задача, а непрерывный процесс, требующий внимания и соблюдения лучших практик. Выбор инструмента зависит от ваших задач, уровня опыта и специфики окружения:

  • Для большинства задач системного администратора на VPS или выделенном сервере, командная строка остается золотым стандартом. Она дает максимальный контроль, гибкость и является незаменимой для автоматизации.
  • Принцип наименьших привилегий должен быть вашим путеводителем. Никогда не давайте больше прав, чем необходимо.
  • Используйте sudo вместо прямого входа под root.
  • Регулярно проводите аудит пользовательских учетных записей и групп, удаляйте неиспользуемые аккаунты, проверяйте права доступа.
  • ACLs используйте только тогда, когда стандартные права недостаточны, и вы понимаете, как это повлияет на сложность администрирования.
  • Графические утилиты могут быть хорошим дополнением для мониторинга и простых операций, но не должны заменять глубокое понимание командной строки.

Надеемся, эта статья помогла вам глубже разобраться в тонкостях управления пользователями и группами. Помните: порядок в учетных записях — это порядок во всей системе. Успешного администрирования!

Масштабируйте управление пользователями с облачными инстансами

Наши облачные инстансы предлагают гибкость и производительность, необходимые для роста вашего проекта. Управляйте группами без ограничений.

Начать с облаком →

Share this post:

support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.