Почему konsole читает / etc / passwd?

В связи с этим вопросом:

Наблюдая за поведением отвращения, я замечаю то, что касается меня. Вот первые несколько строк вывода команды «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 не открыт никаким процессом.

Так что любая идея, что происходит?

  • Konsole: отключить контекстное меню
  • Использование символов UTF-8 с программой сообщений `write`
  • Как заблокировать выбор в Konsole?
  • Установите Kate с плагином терминала Konsole в Fedora23
  • Linux Mint - щелкните правой кнопкой мыши в bash, выберите «открыть ссылку». И я получаю эту ошибку
  • изменение цвета подсказки в bash в консоли
  • Команда «cp p2 & 2 &» заставляет Konsole исчезать, это ошибка?
  • Emacs: Ctrl + пробел (установленная метка) вставить только пробел в Konsole
  • 3 Solutions collect form web for “Почему konsole читает / etc / passwd?”

    Вы можете прочитать исходный код; говоря о … Я сделал это для вас; это похоже на файл ProcessInfo.cpp . Он получает имена пользователей. Мало того, что /etc/passwd не беспокоит вас, любой может его прочитать. Возможно, вы беспокоитесь, если пытаетесь прочитать /etc/shadow .

    Используя strace вы можете увидеть, что такое konsole .

     $ strace -s 2000 -o konsole.log ... ... open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=2655, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f316d8fc000 read(3, "root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/var/adm:/sbin/nologin\nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\nsync:x:5:0:sync:/sbin:/bin/sy nc\nshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\nhalt:x:7:0:halt:/sbin:/sbin/halt\nmail:x:8:12:mail:/var/spool/mail:/sbin/nologin\noperator:x:11:0:operator:/root:/sbin/nologin\ngames:x:12:100:games:/usr/games:/sbin/nologin\nf tp:x:14:50:FTP User:/var/ftp:/sbin/nologin\nnobody:x:99:99:Nobody:/:/sbin/nologin\ndbus:x:81:81:System message bus:/:/sbin/nologin\nsystemd-journal-gateway:x:191:191:Journal Gateway:/var/log/journal:/usr/sbin/nologin\npolkitd: x:999:999:User for polkitd:/:/sbin/nologin\nusbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin\ncolord:x:998:997:User for colord:/var/lib/colord:/sbin/nologin\nrpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin\nqemu:x:107: 107:qemu user:/:/sbin/nologin\nrtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin\ntss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin\nradvd:x:75:75:radvd user:/:/sbin/nologin\nabr t:x:173:173::/etc/abrt:/sbin/nologin\nopenvpn:x:997:996:OpenVPN:/etc/openvpn:/sbin/nologin\nunbound:x:996:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin\nsaslauth:x:995:76:\"Saslauthd user\":/run/saslauthd:/sbin/nologin\n avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin\navahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin\nrpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin\nnfsnobody :x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin\nnm-openconnect:x:994:994:NetworkManager user for OpenConnect:/:/sbin/nologin\nmailnull:x:47:47::/var/spool/mqueue:/sbin/nologin\nsmmsp:x:51:51::/var/spool/mqueue:/s bin/nologin\nsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\ntcpdump:x:72:72::/:/sbin/nologin\npulse:x:993:993:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin\ngdm:x:42:42::/var/lib/gdm:/sbin/nologin\ ngnome-initial-"..., 4096) = 2655 close(3) = 0 ... 

    Konsole читает содержимое /etc/passwd довольно быстро, и вы просто не видите его с lsof . Это типичная проблема, когда файл открывается, быстро читается и затем закрывается.

    Должен ли я быть обеспокоен?

    Это, кстати, не вызывает беспокойства. Мой gnome-terminal делает то же самое. Поток вещей может быть немного запутанным, но Konsole запрашивает систему для части информации. В этом случае что-то вроде домашнего каталога пользователя.

    Таким образом, система делает вызов в NSS (файл конфигурации коммутатора имен):

     open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3 

    В этом файле есть строка, в частности эта строка:

     passwd: files 

    Эта строка сообщает NSS, где можно найти «базу данных» «passwd». Эта строка сообщает NSS, что ресурс находится в файлах. Таким образом, система затем открывает файл /etc/passwd для поиска домашнего каталога пользователя.

    ПРИМЕЧАНИЕ. Выкапывание этого поведения, по-видимому, вызвано Bash. То же самое происходит с делом простого Баша.

     $ strace -s 2000 -o bash.log bash 

    Дальнейшие чтения

    Если вы действительно заинтересованы в том, как работает NSS, обратитесь к man-страницам nsswitch.conf и nss . NSS является модульным и может использовать различные бэкэнд-технологии для своих «баз данных».

    Например:

      /etc/nsswitch.conf NSS configuration file. /lib/libnss_compat.so.X implements "compat" source. /lib/libnss_db.so.X implements "db" source. /lib/libnss_dns.so.X implements "dns" source. /lib/libnss_files.so.X implements "files" source. /lib/libnss_hesiod.so.X implements "hesiod" source. /lib/libnss_nis.so.X implements "nis" source. /lib/libnss_nisplus.so.X implements "nisplus" source. 

    По той же причине ls -l читает / etc / passwd, это данные, которые связывают UID с именами. Когда ls вызывает stat(2) в файле, он получает числовой UID для владельца файла. Чтобы отобразить это как читаемое человеком имя, ему нужно найти его в единственном месте, где есть эти ассоциации, /etc/passwd . Например, типичная первая строка в /etc/passwd

     root:x:0:0:root:/root:/bin/bash 

    Когда ls -l /etc/hosts необходимо произвести вывод

     -rw-r--r-- 1 root root 222 Jan 14 2013 /etc/hosts 

    он должен перевести UID 0 в «root», так что он вызывает библиотечную процедуру, такую ​​как getpwuid, которая читает /etc/passwd для обеспечения перевода. Это значительная часть причины /etc/passwd : обеспечить такие переводы для совершенно мирских целей.

    При поиске имен пользователей больше не возникает проблема безопасности, чем вызов localtime, так что ls может сказать вам «14 января 2013» для времени изменения файла. Как отметил slm , нет никаких оснований держать файл открытым, поэтому он закрывается, как только его содержимое считывается.

    Файл /etc/passwd первоначально содержал хэшированные пароли в более простые моменты времени. Хэши паролей были перемещены в /etc/shadow которые обычные пользователи не могут прочитать, потому что это была дыра в безопасности. Имя /etc/passwd осталось таким же, но теперь содержит x в прежнем поле хеша пароля, которое не является допустимым хешем для любого пароля.

    Linux и Unix - лучшая ОС в мире.