Файл /etc/passwd¶
/etc/passwd — системный файл в операционных системах семейства UNIX и UNIX-подобных (Linux, BSD, macOS), содержащий базу данных учётных записей пользователей в текстовом формате. Файл располагается в каталоге /etc и доступен для чтения всем пользователям системы, однако изменять его может только суперпользователь (root). Несмотря на название, файл не хранит пароли в открытом виде; в современных системах хеши паролей вынесены в отдельный файл /etc/shadow.
¶История
Файл /etc/passwd появился в ранних версиях UNIX в 1970-х годах. Изначально он выполнял две функции: хранил информацию об учётных записях и содержал зашифрованные пароли пользователей. Поскольку файл должен был быть доступен для чтения множеству системных программ (например, для сопоставления имени пользователя и его числового идентификатора), он был открыт для чтения всем. Это создавало уязвимость: злоумышленник мог скопировать хеши паролей и провести атаку перебором (brute-force) офлайн.
Для решения этой проблемы в UNIX System V (1980-е годы) был введён файл /etc/shadow, доступный только суперпользователю. В него перенесли хеши паролей, а в /etc/passwd вместо хеша стали помещать символ «x» или «*». В современных дистрибутивах Linux и в BSD-системах хранение паролей в /etc/passwd полностью исключено, хотя сам формат файла сохранил историческую структуру.
¶Формат записи
Каждая строка файла /etc/passwd описывает одну учётную запись и состоит из семи полей, разделённых двоеточиями:
`` username:password:UID:GID:GECOS:home_directory:shell ``
- username — имя пользователя (логин). Уникально в пределах системы. Может содержать буквы латинского алфавита, цифры и некоторые символы (точка, дефис, подчёркивание). Длина обычно ограничена 32 символами.
- password — поле пароля. В современных системах содержит «x» (указывает, что хеш хранится в /etc/shadow) или «*» (учётная запись заблокирована). В системах, не использующих shadow-механизм, поле может содержать хеш пароля в формате crypt(3).
- UID (User ID) — числовой идентификатор пользователя. Для обычных пользователей, как правило, начинается с 1000 (в некоторых дистрибутивах с 500). UID 0 зарезервирован для суперпользователя root. Системные службы часто имеют фиксированные UID в диапазоне 1–999.
- GID (Group ID) — числовой идентификатор основной группы пользователя. Группа должна быть описана в файле /etc/group.
- GECOS — поле комментария, исторически названное в честь операционной системы General Electric Comprehensive Operating System. Содержит произвольную информацию: полное имя пользователя, номер телефона, должность и т. п. Поле необязательно и может быть пустым.
- home_directory — абсолютный путь к домашнему каталогу пользователя. Для root обычно /root, для обычных пользователей — /home/имя_пользователя.
- shell — командная оболочка, запускаемая при входе пользователя в систему. Для обычных пользователей это обычно /bin/bash или /bin/sh. Для системных учётных записей часто указывается /usr/sbin/nologin или /bin/false, что запрещает интерактивный вход.
Пример строки:
`` john:x:1001:1001:John Smith,,,:/home/john:/bin/bash ``
¶Системные учётные записи
Помимо учётных записей реальных пользователей, в /etc/passwd содержатся записи для системных служб и демонов: daemon, bin, sys, nobody, systemd-network, sshd и других. Такие записи создаются при установке соответствующего программного обеспечения и используются для разграничения привилегий: процессы служб работают от имени непривилегированных пользователей, что снижает риск при компрометации. Для этих записей в качестве оболочки обычно указан /usr/sbin/nologin, а домашним каталогом — несуществующий или недоступный путь (например, /nonexistent).
¶Инструменты работы с файлом
Непосредственное редактирование /etc/passwd текстовым редактором не рекомендуется из-за риска синтаксических ошибок. Для изменения записей используются специализированные команды:
- useradd / adduser — создание новой учётной записи.
- usermod — изменение параметров существующей записи (имени, UID, GID, домашнего каталога, оболочки).
- userdel — удаление учётной записи.
- passwd — установка или изменение пароля (записывает хеш в /etc/shadow).
- vipw — безопасное редактирование файла с блокировкой от одновременных изменений.
Для просмотра содержимого используется команда cat, less или getent passwd (последняя учитывает также сетевые источники, например LDAP или NIS).
¶Связанные файлы и механизмы
- /etc/shadow — файл, содержащий хеши паролей и данные об их старении (срок действия, минимальный возраст смены, предупреждение об истечении). Доступен только суперпользователю и процессам с соответствующими привилегиями.
- /etc/group — файл, описывающий группы пользователей и членство в них.
- /etc/login.defs — конфигурационный файл, задающий параметры по умолчанию для создания учётных записей (диапазоны UID/GID, политики паролей).
- NSS (Name Service Switch) — механизм, настраиваемый в файле /etc/nsswitch.conf, позволяет системе получать информацию о пользователях не только из локальных файлов, но и из внешних источников (LDAP, Kerberos, NIS).
¶Безопасность
Основные меры безопасности, связанные с /etc/passwd:
- Пароли не должны храниться в этом файле — только в /etc/shadow.
- Файл должен иметь права доступа 644 (чтение всем, запись только владельцу root).
- Не рекомендуется использовать один и тот же UID для разных записей, так как это приводит к смешению прав доступа.
- Учётные записи без пароля (пустое поле в /etc/shadow) должны быть заблокированы, чтобы исключить вход без аутентификации.
¶Использование в программировании
Файл /etc/passwd широко используется системными библиотеками. Функции getpwnam(3) и getpwuid(3) из стандартной библиотеки языка C позволяют программам получать информацию о пользователе по имени или UID. Эти функции обращаются к NSS и могут читать как локальный файл, так и сетевые источники. Аналогичные интерфейсы существуют в большинстве языков программирования (например, модуль pwd в Python, функции os/user в Go).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →
