Как получить список всех пользователей в Linux

Пользователи — ключевой компонент любой Linux-системы. Система хранит данные о пользователях в нескольких стандартных источниках (локальные файлы, LDAP/AD, NSS). В этой статье подробно показано, как получить полный список пользователей, как извлечь отдельные поля (имя, домашняя папка, shell), как проверить существование учётной записи и какие инструменты выбирать в разных сценариях.
Основные источники данных о пользователях
- /etc/passwd — основной текстовый файл с информацией об учётных записях (логины, UID, GID, GECOS, домашняя директория, shell). Доступен для чтения любому пользователю, но пароли в нём не хранятся.
- /etc/shadow — защищённый файл с хешами паролей и политиками паролей; доступен только root/специальным сервисам.
- NSS (Name Service Switch) и getent — слой абстракции, который объединяет локальные файлы, LDAP, NIS и другие источники.
- Команды compgen, id, users — быстрые утилиты для конкретных задач.
Важное: не редактируйте /etc/passwd вручную без строгой необходимости; используйте useradd/usermod/userdel или специализированные инструменты для централизованной аутентификации.
Формат /etc/passwd — что означают поля
Каждая строка в /etc/passwd содержит 7 полей, разделённых двоеточием (:). Пример строки:
root:x:0:0:root:/root:/bin/bashПоля по порядку:
- Логин (username)
- Парольный маркер (x означает, что хеш в /etc/shadow)
- UID (идентификатор пользователя)
- GID (идентификатор основной группы)
- GECOS (полное имя или информация о пользователе)
- Домашняя директория (/home/username или другое)
- Shell (командная оболочка при входе)
Таблица для быстрого просмотра:
| Поле | Описание |
|---|---|
| $1 | Логин |
| $2 | Парольный маркер (обычно x) |
| $3 | UID |
| $4 | GID |
| $5 | GECOS (полное имя) |
| $6 | Домашняя директория |
| $7 | Shell |
Как вывести весь файл passwd
Прямой просмотр файла:
cat /etc/passwdУдобный просмотр постранично:
less /etc/passwdВывод будет содержать системные и пользовательские учётные записи. Системные учётные записи обычно имеют UID < 1000 (на некоторых дистрибутивах порог 500).
Получить только список логинов
С помощью awk (рекомендуемый способ для выборки колонок):
awk -F: '{ print $1 }' /etc/passwdИли с cut:
cut -d: -f1 /etc/passwdС getent (работает с NSS — включает LDAP/AD):
getent passwd | awk -F: '{ print $1 }'
# или
getent passwd | cut -d: -f1С компактен: compgen — быстрый bash-способ получить локальные логины:
compgen -uПримеры вывода:
root
daemon
bin
sys
sync
games
man
user1
user2Получить другие поля: полное имя, домашняя папка, shell
Полное имя (поле GECOS):
getent passwd | awk -F: '{ print $5 }'
# или
getent passwd | cut -d: -f5Домашняя директория (поле 6) и shell (поле 7):
getent passwd | awk -F: '{ print $6 " " $7 }'
# или вывести в форматированном виде
getent passwd | awk -F: '{ printf "%s: %s — %s\n", $1, $6, $7 }'Проверка существования пользователя
Несколько надёжных вариантов:
getent passwd username
# Возвращает строку из NSS, если учётная запись есть
id username
# Показывает UID/GID/группы; возвращает ненулевой код, если пользователя нет
compgen -u | grep -x username
# Ищет точное совпадение в списке локальных логиновДля условного вывода (скриптами):
if getent passwd username > /dev/null; then
echo "Пользователь найден"
else
echo "Пользователь не найден"
fiИли кратко с логическими операторами:
getent passwd username &> /dev/null && echo "User found" || echo "User not found"Важно: getent учитывает централизованные источники (LDAP, AD). Если ваша система использует централизованную аутентификацию, проверяйте через getent или id, а не только через /etc/passwd.
Подсчитать количество пользователей
Простейшие команды:
compgen -u | wc -l
# Или
getent passwd | wc -lЕсли вам нужно только количество локальных пользователей, можно фильтровать по UID:
awk -F: '$3 >= 1000 { count++ } END { print count }' /etc/passwdНа некоторых дистрибутивах порог локальных пользователей — 500.
Когда перечисление пользователей может давать неверные результаты
- Система использует LDAP/AD: /etc/passwd покажет только локальные записи, тогда как getent вернёт и удалённые аккаунты.
- Недостаточные привилегии: /etc/shadow недоступен обычным пользователям, поэтому проверка паролей невозможна.
- Разные конвенции UID/GID на дистрибутивах: порог «системный» vs «пользовательский» может отличаться (500/1000).
- Нестандартные NSS-модули или кэширование (nscd, sssd) могут давать устаревшие данные.
Альтернативные подходы и зачем их выбирать
- getent — универсален и безопасен при централизованной аутентификации.
- compgen — быстрый и встроенный в bash, полезен для локальных списков и скриптов.
- Чтение /etc/passwd напрямую — полезно при анализе локальной конфигурации и при отладке.
- Использование id — подходит для проверки конкретной учётной записи и получения UID/GID.
Выбор зависит от окружения: для серверов с LDAP/AD используйте getent; для изолированных систем — чтение /etc/passwd и compgen.
Полезная шпаргалка по командам (cheat sheet)
- Просмотр полного файла: cat /etc/passwd
- Постраничный просмотр: less /etc/passwd
- Список логинов: awk -F: ‘{print $1}’ /etc/passwd
- Через NSS (совместно с LDAP): getent passwd
- Быстрый список локальных пользователей: compgen -u
- Проверка отдельного пользователя: getent passwd username или id username
- Подсчёт пользователей: getent passwd | wc -l
Рекомендации по безопасности и практики
- Не храните пароли в /etc/passwd; современные системы используют /etc/shadow.
- Для централизованной аутентификации используйте SSSD или специализированные LDAP/AD клиенты.
- При массовых изменениях пользователей используйте инструменты (useradd/usermod/userdel) и контроль версий конфигурации.
- Ограничьте доступ к административным операциям (sudoers, RBAC).
Роль‑ориентированные чек-листы
Администратор сервера:
- Использовать getent для проверки учётных записей при интеграции с LDAP/AD.
- Проверять конфигурацию /etc/nsswitch.conf и работу sssd/nscd.
- Протестировать команды в тестовой среде перед массовыми изменениями.
DevOps:
- Автоматизировать проверку учётных записей в CI/CD (идентификация сервисных аккаунтов).
- Логировать изменения пользователей и хранить аудит.
Новичок:
- Начать с просмотра /etc/passwd и пробных команд (awk, cut, getent).
- Практиковаться на виртуальной машине, чтобы не нарушить рабочий сервер.
Краткая методология проверки целостности списка пользователей
- Выяснить, используется ли централизованная аутентификация (LDAP/AD). Проверить /etc/nsswitch.conf.
- Собрать данные командой getent passwd.
- Сравнить с локальным /etc/passwd для выявления расхождений.
- Проверить сервисы кеширования (nscd/sssd) при подозрении на несвежие данные.
- Протоколировать результаты и при необходимости очистить/синхронизировать источники.
Пример Mermaid-диаграммы: как выбрать команду
flowchart TD
A[Нужно получить список пользователей?] --> B{Система использует LDAP/AD?}
B -- Да --> C[getent passwd]
B -- Нет --> D{Это локальная проверка?}
D -- Да --> E[compgen -u или awk /etc/passwd]
D -- Нет --> C
C --> F[Фильтрация awk/cut]
E --> F
F --> G[Результат: логины/UID/GECOS]Примеры сценариев и отладка
Сценарий: getent возвращает меньше записей, чем /etc/passwd — проверьте /etc/nsswitch.conf и затем работу демонов sssd/nscd.
Сценарий: compgen не показывает удалённый LDAP-аккаунт — это нормально; compgen выводит только локальные логины.
Сценарий: нужно найти всех пользователей с пустым shell (nologin) — используйте:
awk -F: '$7 ~ /nologin|false/ { print $1, $7 }' /etc/passwdМини‑глоссарий (1 строка каждый)
- /etc/passwd — основной текстовый файл с учётными записями.
- /etc/shadow — защищённый файл с хешами паролей.
- getent — утилита для доступа к базе NSS (локально и централизованно).
- compgen -u — перечисляет локальные логины оболочки bash.
- UID/GID — числовые идентификаторы пользователя и группы.
Критерии приёмки
- Команды возвращают ожидаемый список логинов для тестовой системы.
- Проверка существования пользователя даёт корректный код возврата для скриптов.
- Подсчёт пользователей совпадает с целями (локальные vs все источники).
Итог и рекомендации
- Для универсального и корректного списка используйте getent passwd — он учитывает локальные и централизованные источники.
- Для быстрой локальной выборки compgen и /etc/passwd подходят отлично.
- Используйте awk/cut для извлечения нужных полей и id/getent для проверки существования пользователя.
Важное: перед массовыми операциями по изменению пользователей делайте бэкап конфигурации и проверяйте операции в тестовой среде.
Сводка:
- Понимайте, откуда система получает информацию о пользователях (NSS).
- Выбирайте инструмент по окружению (getent для LDAP/AD, compgen для локали).
- Всегда проверяйте вывод и используйте код возврата команд в скриптах.
Похожие материалы
Режим «Встреча» для Windows 11
Не усыплять ноутбук при закрытии крышки — Windows 10
Как сократить встречи и повысить продуктивность
Отключить звук SkyBell HD — быстро и временно
SkyBell HD — лучшие советы и настройки