Как перечислить учётные записи пользователей в Linux
- Быстро просмотреть все локальные и системные учётные записи можно с помощью команд:
cat /etc/passwd,getent passwd,awk -F:'{print $1}' /etc/passwd,compgen -u. - Чтобы получить только «человеческие» учётные записи используйте диапазоны UID (UID_MIN..UID_MAX) из
/etc/login.defsили фильтруйте по UID >= 1000; это упрощает анализ и снижает риск удаления системных аккаунтов.
Ключевые варианты поиска
- Основная цель: получить список существующих учётных записей.
- Варианты: просмотр полного файла, вывод только имён, фильтрация по UID, использование системного API через getent.
Быстрая навигация
- Почему важно следить за лишними аккаунтами
- Просмотр через cat
- Вывод имён через awk
- Вывод имён через cut
- Использование compgen
- UID_MIN и UID_MAX
- Команда getent: безопасный и совместимый способ
- Практические советы и шаблон действий
Почему важно следить за лишними аккаунтами
Лишние или неиспользуемые учётные записи добавляют беспорядок в систему и могут представлять собой риск безопасности. Они дают дополнительную поверхность атаки, увеличивают сложность аудита и мешают управлению доступом.
Короткое определение: учётная запись пользователя — это строка в системной базе (обычно /etc/passwd), содержащая имя, UID, GID, домашний каталог и оболочку.
Важно проверять и очищать систему регулярно: аудиты учётных записей полезны как для серверов, так и для рабочих станций.
Просмотр списка пользователей через cat
Файл /etc/passwd содержит записи обо всех локальных пользователях и некоторых системных аккаунтах. Это текстовый файл. Обычному пользователю не требуется sudo для чтения этого файла.
Обычная команда для просмотра:
cat /etc/passwdКаждая строка разделена двоеточиями и содержит несколько полей. Пример строки для пользователя “dave”:
- dave — логин пользователя.
- x — маркер того, что зашифрованный пароль хранится в
/etc/shadow. - 1000 — UID (numeric user identifier).
- 1000 — GID (numeric group identifier по умолчанию).
- dave,,, — поле GECOS: полный имя, офис, телефон (разделены запятыми).
- /home/dave — домашняя директория.
- /bin/bash — оболочка по умолчанию.
Если в файле много строк, посмотрите вывод через less:
less /etc/passwdИспользуйте /? внутри less для поиска по имени.

Подпись: Экран входа в Ubuntu — пример многопользовательской системы.
Вывод только имён пользователей: awk
Если нужно получить список только логинов (для скриптов или экспорта), используйте awk, указав ‘:’ как разделитель полей:
awk -F: '{print $1}' /etc/passwdЭто выведет только первое поле каждой строки — логин пользователя. Удобно перенаправлять в файл:
awk -F: '{print $1}' /etc/passwd > users.txtТакой файл удобно импортировать в инструменты аудита или передать коллегам для проверки.

Подпись: Просмотр содержимого /etc/passwd показывает структуру записей.
Вывод имён через cut
Альтернатива — команда cut, которая проще и быстрее для простых задач:
cut -d: -f1 /etc/passwdФлаги:
-d:— разделитель полей ‘:’;-f1— вывести первое поле.
cut полезен в скриптах, когда важна простота и скорость.

Подпись: Пример вывода имён командой cut.
Команда compgen
В bash есть встроенная команда compgen, которая может перечислять пользователей, группы и т.д. Для пользователей:
compgen -u | columnЭто выведет список логинов в виде колонок. compgen читает системную базу через оболочку и может быть удобен для быстрой интерактивной проверки.

Подпись: Вывод пользователей в колонках удобен для визуального обзора.
UID_MIN и UID_MAX — как отличить людей от системных аккаунтов
На многих дистрибутивах обычные (человеческие) учётные записи имеют UID, начинающиеся с 1000. Системные учётные записи обычно имеют малые UID (0 для root, другие — ниже 1000) или специфические высокие значения для служебных аккаунтов.
Файл /etc/login.defs содержит параметры UID_MIN и UID_MAX, которые задают диапазон UID для обычных пользователей. Посмотреть эти значения можно так:
grep -E '^UID_MIN|^UID_MAX' /etc/login.defsПример вывода: UID_MIN 1000 и UID_MAX 60000.
Используйте эти границы, чтобы фильтровать только «живых» пользователей:
getent passwd {1000..60000} | cut -d: -f1В некоторых системах полезнее сузить диапазон (например, до 1500), если известно, что новых пользователей не так много. Это ускорит выполнение команд.
getent — чтение системных баз правильно и кросс-платформенно
Команда getent читает информацию из NSS (Name Service Switch). Это значит, что она учитывает локальный /etc/passwd, LDAP, NIS и другие источники, настроенные в вашей системе. Поэтому getent чаще даёт корректный и полный список пользователей в средах с централизованной аутентификацией.
Основные примеры:
getent passwd # список всех записей, как в /etc/passwd
getent passwd sarah # запись для пользователя sarah (учёт имени чувствительна к регистру)
getent passwd {1000..1500} | cut -d: -f1Примечание: конструкции с фигурными скобками {1000..1500} выполняет Bash-расширение; некоторые оболочки или окружения могут требовать кавычек или другого синтаксиса.
Если нужно посчитать число «реальных» пользователей:
getent passwd {1000..1500} | wc -lЭто вернёт количество записей с UID в указанном диапазоне.
Примеры типовых рабочих сценариев
- Быстрый просмотр всех логинов:
cut -d: -f1 /etc/passwd | less- Экспорт только человекоподобных аккаунтов в файл:
getent passwd {1000..60000} | cut -d: -f1 > human-users.txt- Найти запись конкретного пользователя через getent:
getent passwd alex- Подсчитать всех пользователей (включая системные):
cat /etc/passwd | wc -lКогда эти методы не сработают
- Если система использует централизованную аутентификацию (LDAP, Active Directory) и вы забыли учитывать её в NSS — тогда
cat /etc/passwdпокажет не всё. Используйтеgetent. - Если у вас нет доступа к сетевым источникам (например, сервер LDAP недоступен),
getentможет частично или полностью не вернуть данные. - На минималистичных контейнерах может отсутствовать команда
getent; в таком случае используйтеcat /etc/passwd.
Важно: никогда не удаляйте аккаунт, не проверив, не используется ли он службой, задачей cron или процессом. Перед удалением делайте бэкап данных и снимайте список процессов владельца.
Безопасная процедура (SOP) — обзорный план действий
- Соберите список всех аккаунтов:
getent passwd | cut -d: -f1 > all-users.txt- Соберите список «человеческих» аккаунтов по UID:
getent passwd {1000..60000} | cut -d: -f1 > human-users.txt- Сравните списки и выясните, какие аккаунты неактивны (старые). Примеры критериев неактивности:
- нет входов в систему за последние N дней (проверьте
lastlog); - домашний каталог пуст или не менялся долго;
- учётная запись создана для временной задачи, завершённой деплоймента.
- Перед удалением проверьте процессы владельца:
ps -u usernameАрхивируйте домашние каталоги и связанные данные.
Удаляйте аккуратно с сохранением логов действий:
sudo userdel -r username # -r удаляет домашний каталог- После удаления проверьте: не сломались ли cron, службы, доступы.
Критерии приёмки
- Все удалённые учётные записи были подтверждены как неактивные.
- Архивы данных сохранены и доступны при необходимости восстановления.
- Логи операций сохранены минимум 30 дней.
Роль-ориентированные чеклисты
Администратор сервера:
- Проверил
/etc/passwdиgetent. - Сравнил UIDs с
login.defs. - Создал резервные копии перед массовыми изменениями.
- Проверил
Системный инженер / DevOps:
- Убедился, что централизованная аутентификация учтена.
- Проверил зависимости служб от системных аккаунтов.
Оператор безопасности:
- Убедился, что не осталось аккаунтов с пустыми паролями или с правами root.
- Проверил неиспользуемые sudo-префиксы.
Быстрый шаблон команд для проверки и отчёта
# 1) Список всех локальных аккаунтов
awk -F: '{print $1" (UID:"$3")"}' /etc/passwd
# 2) Список возможных «человеческих» аккаунтов
UID_MIN=$(grep '^UID_MIN' /etc/login.defs | awk '{print $2}')
UID_MAX=$(grep '^UID_MAX' /etc/login.defs | awk '{print $2}')
getent passwd {${UID_MIN}..${UID_MAX}} | cut -d: -f1 > human-users.txt
# 3) Количество человекоподобных аккаунтов
wc -l human-users.txt
# 4) Последний вход по пользователю
lastlog -u usernameИспользуйте этот набор как заготовку при аудите.
Примеры ошибок и как их избежать
- Ошибка: «удалил системный аккаунт» — всегда проверяйте GID/UID и документацию пакета перед удалением.
- Ошибка: «посчитал пользователей, но не учёл LDAP» — используйте
getent, а не только/etc/passwd. - Ошибка: «удалил, но не сохранил данные» — архивируйте домашние директории перед удалением.
Совместимость и миграция
cat,awk,cut,getentдоступны на большинстве дистрибутивов Linux и POSIX-совместимых систем. В контейнерах может отсутствоватьgetentиcolumn— установитеglibc/busyboxаналоги или используйтеawk/cut.- В системах с NSS (LDAP/AD) настройка находится в
/etc/nsswitch.conf. - При миграции на централизованную аутентификацию предварительно протестируйте
getent passwdна пустой тестовой среде.
Безопасность и конфиденциальность
- Не публикуйте полный список пользователей в публичных репозиториях или в открытых логах.
- Обрабатывайте персональные данные (GECOS-поля) в соответствии с политиками конфиденциальности и местными требованиями (например, GDPR для ЕС).
- Ограничьте доступ к
/etc/passwdи/etc/shadowправами файловой системы:/etc/passwdобычно читаем всем,/etc/shadow— только root.
Краткий чек-лист для ревью учётных записей
- [ ] Собран список всех аккаунтов (
getent passwd). - Выделены аккаунты с UID >= UID_MIN.
- Проверены последние входы (lastlog).
- Архивированы домашние директории перед удалением.
- Проверены зависимости служб и cron.
- Логи операций сохранены.
Ментальные модели и эвристики
- Правило 80/20: сначала удаляйте явно неиспользуемые аккаунты (временные, тестовые, старые), затем исследуйте спорные случаи.
- «UID как фильтр»: используйте UID для быстрой фильтрации людей от системных аккаунтов.
- «Завтра может понадобиться» — если не уверены, лучше заморозить аккаунт (lock) вместо удаления:
sudo usermod -L username # блокирует входКраткий глоссарий
- UID — идентификатор пользователя (число).
- GID — идентификатор группы.
- GECOS — поле с дополнительной информацией о пользователе.
- NSS — Name Service Switch, механизм выбора источников учётных данных.
Заключение
Перечисление учётных записей — базовая, но важная операция для администрирования и безопасности. Правильный выбор инструмента зависит от окружения: для локальных систем хватит cat/cut/awk, для систем с централизованной аутентификацией используйте getent. Всегда проверяйте UID-диапазоны и создавайте резервные копии перед удалением.
Важно: сначала объедините результаты, затем принимайте решения. Автоматизация полезна, но человек должен одобрить удаление.
Ключевые шаги в одном предложении: получить список (getent), отфильтровать по UID, проверить активность, архивировать данные, удалить или заблокировать.
Сводка
- Регулярно проверяйте учётные записи для уменьшения поверхности атаки.
getentучитывает централизованные источники;cat /etc/passwdпоказывает только локальные записи.- Используйте UID_MIN/UID_MAX для фильтрации людей от системных аккаунтов.
Дополнительно: короткое объявление для команды
Если нужно быстро оповестить команду об аудите пользователей, используйте готовое сообщение (пример ниже).
“Внимание: завтра в 10:00 начнётся аудит локальных и централизованных учётных записей. Ожидается, что будут помечены и удалены неиспользуемые временные аккаунты. Пожалуйста, сохраните важные данные в /srv/backups и подтвердите наличие активных сервисных учётных записей до 09:30.”
Похожие материалы
Авторазблокировка BitLocker — как включить
Дешёвые турпакеты — лучшие сайты и советы
Как создать инди-игру: пошаговый гид
Комбинированные диаграммы в Excel — шаг за шагом
Отменить резервирование обновления до Windows 10