konsoleが/ etc / passwdを読み取るのはなぜですか?


8

この質問に関して:

ファトラセのふるまいを観察していると、気になることがわかりました。コマンド「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が読み取るセキュリティ上の問題はなぜ/etc/passwdですか?このファイルには、ホームディレクトリやシェルなど、ユーザーアカウントに関するすべての情報が含まれています。
Gilles「SO-邪悪なことをやめなさい」

@ギレス:あなたはあなた自身の質問に答えました。:)
Evi1M4chine

セキュリティの懸念:いいえ。パフォーマンスの懸念:やや。:長い間これについてKDEのバグを(、2016年8月を上流)(2013)の報告と最近固定ありますbugs.kde.org/show_bug.cgi?id=325442
arielf

回答:


9

ソースコードを読むことができます。といえば...私はあなたのためにそれをやった。ProcessInfo.cppファイルからのもののようです。ユーザー名を取得しています。それ/etc/passwdはあなたにとって問題ではないだけでなく、誰でもそれを読むことができます。読んでみようとしたら心配になるかもしれません/etc/shadow


2
より大きな質問は次のとおりです。なぜlsofが登録しないのですか?なぜkonsoleは/ etc / paswdを一度だけ読み込まないのですか?また、なぜkonsoleはユーザー名のリストを必要とするのですか?
Mouse.The.Lucky.Dog 14

8

を使用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

この行は、「データベース」「passwd」が見つかる場所をNSSに伝えます。この行は、リソースがファイルにあることをNSSに伝えています。したがって、システムは/etc/passwdファイルを開いてユーザーのホームディレクトリを探します。

注:この動作をさらに掘り下げるのは、Bashが原因のようです。こうstraceちょうどバッシュショー同じ事のを。

$ 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.

1
それはない/etc/nsswitch.confというトリガのロード/etc/passwd、むしろ逆。Konsoleはユーザーアカウントに関する情報を取得したいので、それを開き/etc/nsswitch.conf、ユーザーアカウントがにあることを(Konsoleソースのコード内ではなくlibcコード内に)通知し/etc/passwdます。
Gilles「SO-悪をやめなさい」

@ギレス-わかりました、その部分を言い換えます、ありがとう。
slm

@ギレス-更新。
slm

7

同じ理由で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を「ルート」に変換して、変換を提供するために読み取るgetpwuidのようなライブラリルーチンを呼び出す必要があります/etc/passwd。それ/etc/passwdが存在する理由の大部分です。完全に平凡な目的のためにそのような翻訳を提供するためです。

ユーザー名を検索しても、localtimeを呼び出すだけでセキュリティ上の問題が発生しないためls、ファイルの変更時刻を「Jan 14 2013」で知ることができます。SLMは指摘し、その内容が読み取られるよう、それがすぐに閉じているので、開いているファイルを保持する理由はありません。

このファイルに/etc/passwdは元々、ハッシュ化されたパスワードが含まれていました。パスワードハッシュ/etc/shadowは、セキュリティホールのため、通常のユーザーが読めない場所に移動されました。名前/etc/passwdは同じままでしたがx、以前のパスワードハッシュフィールドに含まれていますが、これはどのパスワードに対しても有効なハッシュではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.