Linux — это многопользовательская операционная система, это означает, что несколько пользователей могут одновременно работать на одной машине. Эффективное управление пользователями и их правами доступа является краеугольным камнем безопасности, стабильности и функциональности любой Linux-системы. В этой статье мы погрузимся в механизмы управления пользователями, рассмотрим ключевые конфигурационные файлы, изучим основные команды и обсудим лучшие практики для обеспечения безопасности.
Основы пользователей в Linux
Каждый процесс и файл в Linux связаны с определенным пользователем и группой. Это фундаментальный принцип, который позволяет системе контролировать, кто имеет доступ к ресурсам и какие действия он может выполнять.
Что такое пользователь?
В контексте Linux пользователь — это сущность, которая может входить в систему и взаимодействовать с ней. Каждый пользователь имеет свой уникальный идентификатор и набор прав, определяющих его возможности.
UID и GID: Идентификаторы Пользователей и Групп
Для внутренней работы система Linux идентифицирует пользователей и группы не по их именам, а по числовым идентификаторам:
- UID (User ID): Уникальный числовой идентификатор для каждого пользователя.
- GID (Group ID): Уникальный числовой идентификатор для каждой группы.
Каждый пользователь обязательно принадлежит к одной основной группе (primary group), которая определяется его GID. Помимо основной группы, пользователь может быть членом одной или нескольких дополнительных групп (supplementary groups). Группы используются для коллективного управления доступом к файлам и ресурсам. Например, если несколько пользователей работают над одним проектом, их можно добавить в одну группу, чтобы они могли совместно использовать файлы проекта.
Системные vs. Обычные Пользователи
В Linux существуют два основных типа пользователей:
- Системные пользователи (System Users): Эти пользователи создаются автоматически при установке операционной системы и различных пакетов программного обеспечения. Они предназначены для запуска системных служб и приложений (например, daemon, bin, mail, www-data). Их UID обычно находятся в диапазоне от 1 до 999 (на современных системах). Системные пользователи обычно не имеют интерактивной оболочки и домашнего каталога, поскольку они не предназначены для прямого входа в систему.
- Обычные пользователи (Regular Users): Это пользователи, создаваемые администратором или самой системой для взаимодействия с человеком. Их UID обычно начинаются с 1000 и выше. Каждый обычный пользователь имеет свой домашний каталог и интерактивную оболочку (shell), такую как Bash, Zsh и т.д.
Особое место занимает пользователь root:
- root (UID 0): Это суперпользователь, обладающий неограниченными правами в системе. Пользователь root может выполнять любые действия, читать и изменять любые файлы, устанавливать программы и управлять всеми аспектами системы. Из-за этого крайне не рекомендуется использовать учетную запись root для повседневной работы; вместо этого следует использовать sudo для повышения привилегий.
Файлы конфигурации пользователей
Информация о пользователях и группах хранится в нескольких ключевых текстовых файлах, расположенных в каталоге /etc/.
/etc/passwd
Этот файл содержит основную информацию о каждом пользователе в системе, за исключением пароля. Он доступен для чтения всем пользователям. Каждая строка в /etc/passwd представляет собой запись о пользователе и состоит из семи полей, разделенных двоеточием (:):
имя_пользователя:x:UID:GID:комментарий:домашний_каталог:оболочка
Разберем каждое поле:
- имя_пользователя: Уникальное имя пользователя (логин).
- x: Заглушка, указывающая на то, что хеш пароля хранится в файле /etc/shadow для повышения безопасности. В старых системах здесь мог храниться сам хеш пароля.
- UID: Уникальный идентификатор пользователя.
- GID: GID основной группы, к которой принадлежит пользователь.
- комментарий: Поле для произвольной информации о пользователе (например, полное имя, номер телефона). Часто называется GECOS-полем.
- домашний_каталог: Абсолютный путь к домашнему каталогу пользователя. Это место, куда пользователь попадает после входа в систему.
- оболочка: Путь к интерпретатору командной строки (shell), который будет запускаться при входе пользователя в систему (например, /bin/bash, /bin/zsh, /bin/sh). Если здесь указано /sbin/nologin или /bin/false, это означает, что пользователь не может получить интерактивную сессию входа.
/etc/shadow
Этот файл хранит зашифрованные пароли пользователей и информацию о сроке действия паролей. Он доступен для чтения только пользователю root для максимальной безопасности. Каждая строка в /etc/shadow также состоит из девяти полей, разделенных двоеточием (:):
имя_пользователя:хеш_пароля:дата_последнего_изменения:минимальный_срок_действия:максимальный_срок_действия:срок_предупреждения:срок_неактивности:срок_истечения_учетной_записи:зарезервировано
Ключевые поля:
- имя_пользователя: Соответствует имени пользователя в /etc/passwd.
- хеш_пароля: Зашифрованный пароль пользователя. Начинается с $id$ где id указывает на алгоритм хеширования (например, $6$ для SHA-512, $5$ для SHA-256). Если поле пустое или содержит * или !, это означает, что учетная запись заблокирована или не имеет пароля.
- дата_последнего_изменения: Количество дней с 1 января 1970 года, когда пароль был изменен в последний раз.
- минимальный_срок_действия: Минимальное количество дней, которое должно пройти до того, как пользователь сможет снова изменить свой пароль.
- максимальный_срок_действия: Максимальное количество дней, после которого пароль должен быть изменен.
- срок_предупреждения: Количество дней до истечения срока действия пароля, когда пользователь начнет получать предупреждения.
- срок_неактивности: Количество дней после истечения срока действия пароля, в течение которых учетная запись остается активной. После этого срока учетная запись блокируется.
- срок_истечения_учетной_записи: Количество дней с 1 января 1970 года, после которого учетная запись будет полностью заблокирована.
/etc/group
Этот файл содержит информацию о группах в системе. Каждая строка представляет собой запись о группе и состоит из четырех полей, разделенных двоеточием (:):
имя_группы:x:GID:члены_группы
- имя_группы: Уникальное имя группы.
- x: Заглушка, аналогично /etc/passwd, указывающая, что хеш пароля группы (если таковой есть) хранится в файле /etc/gshadow.
- GID: Уникальный идентификатор группы.
- члены_группы: Список пользователей, которые являются дополнительными членами этой группы, разделенные запятыми. Пользователи, для которых эта группа является основной, здесь не перечисляются.
Управление пользователями (команды)
Для управления пользователями в Linux используются специальные утилиты командной строки.
useradd - создание нового пользователя
Команда useradd используется для добавления новых пользователей в систему. Она создает новую запись в /etc/passwd, /etc/shadow и /etc/group (для основной группы пользователя).
sudo useradd [опции] имя_пользователя
Основные опции:
- -m: Создать домашний каталог пользователя, если он не существует (рекомендуется).
- -s /путь/к/оболочке: Указать оболочку для пользователя (например, -s /bin/bash).
- -g основная_группа: Указать основную группу пользователя по GID или имени.
- -G дополнительная_группа1,дополнительная_группа2: Добавить пользователя в дополнительные группы.
- -c "Комментарий": Добавить комментарий (GECOS-поле).
- -u UID: Указать конкретный UID для пользователя.
Пример:
sudo useradd -m -s /bin/bash -G sudo,www-data -c "Джон Доу" john
Эта команда создаст пользователя john с домашним каталогом /home/john, оболочкой Bash, добавит его в группы sudo и www-data, и установит комментарий "Джон Доу".
passwd – установка и изменение пароля
После создания пользователя необходимо установить для него пароль.
sudo passwd имя_пользователя
Система запросит ввод нового пароля дважды.
usermod – изменение свойств пользователя
Команда usermod позволяет изменять свойства существующего пользователя.
sudo usermod [опции] имя_пользователя
Основные опции:
- -l новое_имя: Изменить имя пользователя (логин).
- -d /новый/домашний/каталог: Изменить домашний каталог пользователя.
- -m: Переместить содержимое старого домашнего каталога в новый (используется с -d).
- -s /путь/к/оболочке: Изменить оболочку пользователя.
- -g новая_основная_группа: Изменить основную группу пользователя.
- -G дополнительная_группа1,дополнительная_группа2: Изменить дополнительные группы пользователя.
⚠️Важно: эта опция заменяет существующие дополнительные группы. Для добавления без удаления используйте -aG. - -aG дополнительная_группа: Добавить пользователя в дополнительную группу, не удаляя текущие.
- -L: Заблокировать учетную запись пользователя.
- -U: Разблокировать учетную запись пользователя.
- -e YYYY-MM-DD: Установить дату истечения срока действия учетной записи.
Пример:
sudo usermod -aG developers john # Добавить пользователя john в группу developers
sudo usermod -s /bin/zsh john # Изменить оболочку john на zsh
userdel – удаление пользователя
Команда userdel используется для удаления учетной записи пользователя.
sudo userdel [опции] имя_пользователя
Основные опции:
- -r: Удалить домашний каталог пользователя и почтовый ящик вместе с учетной записью (рекомендуется).
Пример:
sudo userdel -r olduser
Эта команда удалит пользователя olduser и его домашний каталог.
Управление группами (команды)
Управление группами не менее важно для организации прав доступа.
groupadd – создание новой группы
sudo groupadd [опции] имя_группы
Пример:
sudo groupadd project_alpha
groupmod – изменение свойств группы
sudo groupmod [опции] имя_группы
Основные опции:
- -n новое_имя: Изменить имя группы.
- -g GID: Изменить GID группы.
Пример:
sudo groupmod -n project_beta project_alpha
groupdel – удаление группы
sudo groupdel имя_группы
Пример:
sudo groupdel old_group
gpasswd – управление членами группы
Эта команда позволяет добавлять и удалять пользователей из дополнительных групп.
sudo gpasswd [опции] имя_группы
Основные опции:
- -a пользователь: Добавить пользователя в группу.
- -d пользователь: Удалить пользователя из группы.
Пример:
sudo gpasswd -a alice developers # Добавить alice в группу developers
sudo gpasswd -d bob developers # Удалить bob из группы developers
Привилегии и безопасность
Управление пользователями тесно связано с управлением привилегиями и общей безопасностью системы.
sudo – делегирование административных прав
sudo (superuser do) — это наиболее распространенный и безопасный способ выполнения команд с правами root без необходимости входить в систему как root. Пользователи, которым разрешено использовать sudo, должны быть перечислены в файле /etc/sudoers или входить в специальные группы (например, sudo или wheel), которые имеют соответствующие разрешения в этом файле.
Использование:
sudo команда
При первом использовании sudo в сессии система запросит пароль текущего пользователя, а не пароль root.
Редактирование /etc/sudoers:
Для редактирования /etc/sudoers всегда используйте команду visudo. Она проверяет синтаксис файла перед сохранением, предотвращая возможные ошибки, которые могут заблокировать доступ к sudo.
Пример записи в /etc/sudoers:
john ALL=(ALL:ALL) ALL
Эта строка позволяет пользователю john выполнять любые команды от имени любого пользователя и группы на любом терминале.
su – переключение пользователя
Команда su (substitute user) позволяет переключиться на другого пользователя (включая root) в текущей сессии терминала.
su [имя_пользователя]
Если имя_пользователя не указано, su по умолчанию пытается переключиться на root. Система запросит пароль пользователя, на которого вы переключаетесь.
Права доступа к файлам и каталогам
Каждый файл и каталог в Linux имеет набор прав доступа, которые определяют, кто может читать, записывать или выполнять его. Эти права делятся на три категории:
- Владелец (User): Права для пользователя, который владеет файлом/каталогом.
- Группа (Group): Права для пользователей, которые являются членами группы-владельца файла/каталога.
- Остальные (Others): Права для всех остальных пользователей в системе.
Для каждой категории определяются три типа разрешений:
- r (read): Чтение содержимого файла или списка содержимого каталога.
- w (write): Запись в файл или создание/удаление файлов в каталоге.
- x (execute): Выполнение файла (если это скрипт или программа) или вход в каталог.
Эти права могут быть представлены в символьном виде (rwx) или в восьмеричном (числовом) виде:
- r = 4
- w = 2
- x = 1
- - = 0 (нет разрешения)
Команды для управления правами:
chmod: Изменяет права доступа к файлам и каталогам.
- Пример (восьмеричный): chmod 755 script.sh (владелец: rwx, группа: rx, остальные: rx)
- Пример (символьный): chmod u+x,g-w file.txt (добавить владельцу право на выполнение, удалить у группы право на запись)
chown: Изменяет владельца файла или каталога.
- Пример: sudo chown john:developers project_file.txt (владелец john, группа developers)
chgrp: Изменяет группу-владельца файла или каталога.
- Пример: sudo chgrp sales report.pdf
Лучшие практики безопасности
Принцип наименьших привилегий (Principle of Least Privilege): Предоставляйте пользователям и службам только те права, которые абсолютно необходимы для выполнения их функций.
Сильные пароли: Используйте длинные, сложные пароли, содержащие буквы в разных регистрах, цифры и специальные символы. Регулярно меняйте пароли.
Использование sudo вместо root: Для повседневной административной работы используйте sudo. Входите в систему как root только в крайних случаях.
Аудит и логирование: Регулярно просматривайте системные журналы (/var/log/auth.log или journalctl) для выявления подозрительной активности, связанной с аутентификацией и повышением привилегий.
Блокировка неиспользуемых учетных записей: Удаляйте или блокируйте учетные записи, которые больше не используются.
Ограничение интерактивных оболочек: Для системных пользователей, не требующих входа в систему, устанавливайте оболочку /sbin/nologin или /bin/false.
Заключение
Управление пользователями и правами в Linux — это не просто набор команд, а комплексный подход к обеспечению безопасности и эффективной работы системы. Понимание структуры файлов /etc/passwd, /etc/shadow, /etc/group, а также умелое использование команд useradd, usermod, userdel, groupadd, groupmod, groupdel, gpasswd, sudo, su, chmod, chown и chgrp позволит вам поддерживать порядок и безопасность в любой Linux-среде. Следуя лучшим практикам, вы сможете создать надежную и управляемую систему, готовую к любым задачам.
Дополнительный материал
Если вам понравился материал, не забудьте поставить палец вверх 👍 и поделиться статьёй с друзьями. Подписывайтесь на мой Telegram-канал, чтобы первыми узнавать о новых статьях и полезных материалах. А также загляните на сайт RoadIT.ru, где я собираю заметки о командах Linux, HowTo-гайды и много другой интересной информации. Спасибо за внимание!