![Можно ли «скрыть» учетную запись из /etc/passwd?](https://rvso.com/image/31663/%D0%9C%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BB%D0%B8%20%C2%AB%D1%81%D0%BA%D1%80%D1%8B%D1%82%D1%8C%C2%BB%20%D1%83%D1%87%D0%B5%D1%82%D0%BD%D1%83%D1%8E%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C%20%D0%B8%D0%B7%20%2Fetc%2Fpasswd%3F.png)
Типичная система Linux имеет не только учетные записи для фактических пользователей системы, но и различные системные учетные записи.
Есть ли какой-либо файл, например /etc/passwd
, для демонов или других ресурсов, где можно определить учетную запись?
Я слышал, что можно замаскировать учетную запись под учетную запись службы, я пытаюсь найти такие учетные записи в компьютере.
решение1
Пользователи демонов и пользователи плоти и крови перечислены в одних и тех же файлах. «Файл, как /etc/passwd
для демонов» — /etc/passwd
.
Не существует формального определения пользователей-людей и пользователей-систем. Ядро не заботится (кроме предоставления множества привилегий пользователю с UID 0). Большинству команд администрирования тоже все равно. Вот некоторые типичные различия:
- У пользователя-человека есть настоящее имя, например «Джон Доу», тогда как у системного пользователя есть описательное имя, например «Nasal daemon» или его вообще нет.
- У пользователя-человека есть настоящая оболочка входа (например,
/bin/sh
или/bin/bash
)/bin/csh
. У некоторых пользователей системы есть оболочка (почти всегда/bin/sh
), у других ее нет, в зависимости от того, как они будут использоваться (например,su foo
требуетсяfoo
иметь оболочку). - У пользователя-человека часто есть пароль — но это не всегда так, например, у пользователя только удаленного доступа может быть только ключ SSH. Обратите внимание, что на современных unice-системах пароль находится не в файле,
/etc/passwd
а в каком-то другом файле, например/etc/shadow
. - Домашний каталог пользователя-человека обычно находится в папке
/home
(или в каком-либо специфическом для сайта месте), тогда как домашний каталог пользователя системы обычно не находится в папке/home
и может не существовать (но есть исключения). - Большинство сайтов назначают диапазон идентификаторов пользователей для системных пользователей и непересекающийся диапазон для пользователей-людей. Резервирование 100–65533 или 500–65533 или 1000–65533 является типичным, и большинство дистрибутивов настроены на начало выделения реальных идентификаторов пользователей с 500 или 1000.
На сайтах, где учетные записи используются совместно несколькими машинами, обычно имеется центральный сервер, содержащий списки пользователей, доступные черезНИСилиLDAP. passwd
Запись в/etc/nsswitch.conf
указывает, где найти информацию о пользователе. Обычно системные пользователи находятся в локальной /etc/passwd
базе данных, а реальные пользователи — в сетевой базе данных, но иногда системные пользователи находятся в сетевой базе данных (чтобы обеспечить согласованность UID, что облегчает репликацию сервера и данных), а иногда в локальном файле есть пользователи-люди (чтобы позволить им входить в систему, даже если сеть перегружена).
Доступная человеку учетная запись, замаскированная под пользователя системы, обычно не имеет настоящего имени, но имеет оболочку входа и либо набор паролей, либо ключ SSH, при этом имея идентификатор пользователя в системном диапазоне. На самом деле, лучшей маскировкой было бы использование реальной системной учетной записи, удаление которой приведет к остановке работы некоторых служб. Но у вас не может быть никаких жестких правил для обнаружения потенциальных атак: по определению злоумышленники не следуют правилам.
решение2
Нет смысла иметь отдельный файл определения пользователя. Системные пользователи и реальные пользователи не разделены технически, а организационно: по диапазону, из которого берутся их UID. Посмотрите на файл /etc/login.defs
. В моем openSUSE есть следующие записи:
SYSTEM_UID_MIN 100
SYSTEM_UID_MAX 499
UID_MIN 1000
UID_MAX 60000
Инструменты дистрибутива используют эти значения, чтобы различать две группы. Но если вы создали учетную запись пользователя с UID 300, то она, вероятно, не будет отображаться в меню входа, но вы сможете использовать эту учетную запись как любую другую.
решение3
Если вы действительно хотите разделить учетные записи пользователей и системы (читая некоторые комментарии к другим постам, похоже, что вас это интересует), вы можете оставить всех системных пользователей в базе files
данных (например, /etc/passwd) и поместить пользователей people во вторую базу данных (что-то вроде ldap).
Для этого вы можете использовать модуль Berkeley DB NSS (доступный во многих системах через дополнительный пакет glibc под названием nss_db
). Я не уверен, какую ОС вы используете, но этот сайт предлагает некоторую информацию для Linux:http://www.linuxfromscratch.org/hints/downloads/files/nss_db.txt
Это не для слабонервных, поскольку документация не очень обширна, но может быть интересно поэкспериментировать, если вы хотите узнать больше о том, как работают подобные вещи (предложение @Hauke Laging о реализации своей собственной идеи тоже замечательное).
решение4
Большинство демонов запускаются как root, некоторые (из соображений безопасности, чтобы ограничить их способность наносить вред) запускаются как собственные пользователи. Они перечислены в файле /etc/passwd
. Большинство дистрибутивов ограничивают UID "системного пользователя" некоторым значением, например, 500 или 1000, так что это дает подсказку. У некоторых демонов есть записи GECOS (описание пользователя), говорящие "daemon", у других - странные оболочки. Но есть также фантомные пользователи для NFS и других целей.