По отношению к этому вопросу:
Наблюдая за поведением фатраса, я замечаю кое-что, что касается меня. Вот первые несколько строк вывода команды "fatrace | grep konsole"
konsole(4112): O /etc/passwd
konsole(4112): CO /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
...
Дело в том, что lsof | grep passwd показывает, что passwd не открывается ни одним процессом.
Так есть идеи, что происходит?
/etc/passwd
? Этот файл содержит всю информацию об учетных записях пользователей, включая домашний каталог и оболочку.Ответы:
Вы можете прочитать исходный код; говоря о ... я сделал это для тебя; похоже, это из
ProcessInfo.cpp
файла. Это получает имена пользователей. Мало того, что/etc/passwd
это не беспокоит вас, любой может прочитать это. Вы могли бы волноваться, хотя, если он пытался читать/etc/shadow
.источник
Используя
strace
вы можете увидеть, чтоkonsole
до.Konsole читает содержимое
/etc/passwd
довольно быстро, и вы просто не видите егоlsof
. Это типичная проблема, когда файл открывается, быстро читается, а затем закрывается.Должен ли я быть обеспокоен?
Это, кстати, не имеет значения. Мой
gnome-terminal
делает то же самое. Поток вещей может быть немного запутанным, но Konsole запрашивает у системы информацию. В этом случае что-то вроде домашнего каталога пользователя.Таким образом, система выполняет вызов в NSS (файл конфигурации Name Service Switch):
В этом файле есть строка, а именно эта строка:
Эта строка сообщает NSS, где находится «база данных» «passwd». Эта строка сообщает NSS, что ресурс находится в файлах. Таким образом, система открывает
/etc/passwd
файл для поиска домашнего каталога пользователя.ПРИМЕЧАНИЕ: Копание дальше, похоже, вызвано Bash. Выполнение
strace
только что Bash показывает то же самое.Дальнейшие чтения
Если вы действительно заинтересованы в том, как работает NSS, обратитесь к справочным страницам
nsswitch.conf
иnss
. NSS является модульным и может использовать различные бэкэнд-технологии для своих «баз данных».Например:
источник
/etc/nsswitch.conf
вызывает загрузку/etc/passwd
, скорее наоборот. Konsole хочет получить некоторую информацию об учетных записях пользователей, поэтому он открывает/etc/nsswitch.conf
(внутри кода libc, а не внутри кода из источника Konsole), в которых находятся учетные записи пользователей/etc/passwd
.По той же причине
ls -l
читает / etc / passwd, это данные, которые связывают UID с именами. Приls
вызовеstat(2)
файла он получает числовой UID владельца файла. Чтобы отобразить это как понятное человеку имя, оно должно быть найдено в единственном месте, где есть эти ассоциации/etc/passwd
. Например, типичная первая строка/etc/passwd
являетсяКогда
ls -l /etc/hosts
необходимо произвести выводему нужно перевести UID 0 в «root», чтобы он вызывал библиотечную подпрограмму типа getpwuid, которая читает
/etc/passwd
для обеспечения перевода. Это большая часть причины/etc/passwd
: предоставлять такие переводы для совершенно мирских целей.Поиск имен пользователей представляет собой не большую проблему безопасности, чем вызов localtime, так что
ls
вы можете указать «14 января 2013» о времени изменения файла. Как отметил slm , нет причин оставлять файл открытым, поэтому он закрывается, как только его содержимое читается.Файл
/etc/passwd
изначально содержал хешированные пароли в более простые времена. Хеши паролей были перемещены, и/etc/shadow
обычные пользователи не могут их прочитать, потому что это была дыра в безопасности. Имя/etc/passwd
осталось прежним, но теперь содержитсяx
в бывшем поле хэша пароля, которое не является действительным хэшем для любого пароля.источник