Категория: Доступ и аутентификацияОбновлено 2026-10-18

/etc/passwd (файл учётных записей Linux)

/etc/passwd это текстовый файл Linux со списком локальных учётных записей, по одной в строке, из семи полей через двоеточие: имя, заглушка пароля, UID, GID, комментарий, домашний каталог и оболочка входа. Читать его может любой, писать только root, а настоящие хеши паролей лежат в /etc/shadow, поэтому с него начинают аудит того, кто вообще может войти.

Семь полей строки /etc/passwd

Справочная страница passwd(5) описывает одну учётную запись на строку:

deploy:x:1001:1001:Deploy user:/home/deploy:/bin/bash
  1. name: имя для входа.
  2. password: зашифрованный пароль, звёздочка или x. Буква x означает, что настоящий хеш хранится в файле shadow.
  3. UID: числовой идентификатор пользователя. У суперпользователя root он равен 0.
  4. GID: числовой идентификатор основной группы. Дополнительные группы описаны в /etc/group.
  5. GECOS: необязательный комментарий, обычно полное имя.
  6. directory: домашний каталог, из него задаётся HOME.
  7. shell: программа, запускаемая при входе, из неё задаётся SHELL. Пустое поле означает /bin/sh.

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

Аудит файла из командной строки

Используйте команды, учитывающие поля, а не поиск по именам. Любая учётная запись с UID 0 обладает правами root, как объясняет страница про UID 0, и это видно в третьем поле:

awk -F: '($3 == 0) {print $1}' /etc/passwd
awk -F: '($2 != "x") {print $1}' /etc/passwd
awk -F: '($7 !~ /(nologin|false)$/) {print $1, $7}' /etc/passwd
pwck -r

Первая команда должна вывести только root. Вторая показывает записи, где поле пароля не равно x, и им нужно найти объяснение. Третья перечисляет учётные записи с настоящей оболочкой входа, их список должен совпадать с ожидаемыми людьми и автоматизацией. По справке pwck(8), pwck -r работает только на чтение и проверяет число полей, уникальность имён, корректность идентификаторов, основную группу, домашний каталог и оболочку каждой записи, а при плохих записях завершается с ненулевым кодом.

Запускайте проверки по расписанию и после любого инцидента. Разовая проверка не заметит запись, появившуюся на следующей неделе, поэтому дополните её контролем целостности файлов.

Служебные учётные записи, оболочка nologin и /etc/shadow

Демоны должны работать от собственных учётных записей, которые не могут входить в систему. Обычный приём: системная запись с оболочкой nologin:

sudo useradd --system --shell /usr/sbin/nologin --home-dir /var/lib/myapp myapp

Путь к nologin в разных дистрибутивах отличается. По справке nologin(8) программа вежливо отказывает во входе, печатает сообщение и завершается с ненулевым кодом. В справке useradd(8) добавлено, что --system выбирает UID из системного диапазона, заданного в /etc/login.defs.

Хеши и данные о сроках жизни пароля лежат в /etc/shadow, который, согласно shadow(5), не должен читаться обычными пользователями. Поле пароля, начинающееся с ! или равное *, означает, что войти по паролю нельзя, но passwd(5) предупреждает: такой пользователь может остаться доступен другими способами, например через cron или почтовые фильтры. Блокировка пароля это не удаление учётной записи.

NSS, getent и чек-лист укрепления

Файл содержит только локальные учётные записи. Поиск имён идёт через Name Service Switch, порядок которого задан строкой passwd: в /etc/nsswitch.conf и который может подключать источники вроде LDAP. Чтобы увидеть все записи, известные системе, используйте getent, он обращается к тем же библиотекам:

getent passwd
getent passwd deploy
stat -c '%a %U:%G %n' /etc/passwd /etc/shadow

По справке getent(1), если запрошенный ключ не найден, команда завершается с кодом 2. Команда stat подтверждает, что /etc/passwd принадлежит root и недоступен другим на запись, а /etc/shadow не читается всеми.

Для укрепления оставьте ровно одну запись с UID 0, выдавайте службам оболочку nologin, удаляйте учётные записи ушедших людей, а привилегии давайте правилами sudoers, а не общим root. Руководство по минимальным привилегиям разбирает аудит, а руководство по реагированию на взлом подскажет, что делать, если появилась неожиданная запись.

Связанные термины: UID 0, sudoers, Минимальные привилегии, Вход под root, Контроль целостности файлов.

Часто задаваемые вопросы

Какие поля есть в /etc/passwd?

Семь, через двоеточие: имя, заглушка пароля, UID, GID, комментарий GECOS, домашний каталог и оболочка входа. В поле пароля обычно стоит x, то есть хеш лежит в /etc/shadow.

Хранятся ли пароли в /etc/passwd?

В современных системах нет. В поле пароля стоит x, а хеш хранится в /etc/shadow, который обычные пользователи читать не должны.

Почему /etc/passwd читается всеми?

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

Что значит оболочка /usr/sbin/nologin?

Интерактивный вход для этой записи невозможен. nologin печатает сообщение, что запись недоступна, и завершается с ненулевым кодом, что удобно для служебных учётных записей.

Почему getent показывает пользователей, которых нет в /etc/passwd?

getent обращается к Name Service Switch, который может использовать и другие источники, например LDAP. Локальный файл содержит только локальные записи.

Хотите увидеть, в каком состоянии ваш сервер?

Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.

Получить бесплатную проверку сервераОткрыть Security Lab