/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
- name: имя для входа.
- password: зашифрованный пароль, звёздочка или
x. Букваxозначает, что настоящий хеш хранится в файле shadow. - UID: числовой идентификатор пользователя. У суперпользователя root он равен 0.
- GID: числовой идентификатор основной группы. Дополнительные группы описаны в
/etc/group. - GECOS: необязательный комментарий, обычно полное имя.
- directory: домашний каталог, из него задаётся
HOME. - 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