Sehubungan dengan pertanyaan ini:
Saat mengamati perilaku fatrace, saya memperhatikan sesuatu yang mengkhawatirkan saya. Berikut adalah beberapa baris pertama dari perintah "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
...
Masalahnya adalah lsof | grep passwd menunjukkan bahwa passwd tidak terbuka oleh proses apa pun.
Jadi ada yang tahu apa yang sedang terjadi?
/etc/passwd
? File ini berisi semua informasi tentang akun pengguna, termasuk direktori home dan shell.Jawaban:
Anda dapat membaca kode sumber; berbicara tentang ... Saya melakukannya untuk Anda; sepertinya itu dari
ProcessInfo.cpp
file. Itu mendapatkan nama pengguna. Tidak hanya itu/etc/passwd
bukan masalah bagi Anda, siapa pun dapat membacanya. Anda mungkin khawatir jika itu mencoba membaca/etc/shadow
.sumber
Menggunakan
strace
Anda dapat melihat apa yangkonsole
sedang dilakukan.Konsole membaca konten
/etc/passwd
dengan cukup cepat dan Anda tidak melihatnyalsof
. Ini adalah masalah umum ketika file dibuka, dibaca dengan cepat, dan kemudian ditutup.Haruskah saya khawatir?
Omong-omong, ini bukan masalah. Saya
gnome-terminal
melakukan hal yang sama. Alur hal-hal dapat sedikit membingungkan tetapi Konsole meminta sistem untuk sepotong informasi. Dalam hal ini sesuatu seperti direktori home pengguna.Jadi sistem membuat panggilan ke NSS (file konfigurasi Switch Layanan Nama):
Ada baris dalam file ini, khususnya baris ini:
Baris ini memberitahu NSS di mana "database" 'passwd' dapat ditemukan. Baris ini memberi tahu NSS bahwa sumber daya terletak di file. Jadi sistem kemudian membuka
/etc/passwd
file untuk mencari direktori home pengguna.CATATAN: Menggali lebih jauh perilaku ini tampaknya disebabkan oleh Bash. Melakukan
strace
Bash yang adil menunjukkan hal yang sama.Bacaan lebih lanjut
Jika Anda benar-benar tertarik dengan cara kerja NSS, bacalah halaman manual
nsswitch.conf
dannss
. NSS bersifat modular dan dapat menggunakan teknologi backend yang berbeda untuk "databases" -nya.Sebagai contoh:
sumber
/etc/nsswitch.conf
yang memicu pemuatan/etc/passwd
, melainkan sebaliknya. Konsole ingin mendapatkan beberapa informasi tentang akun pengguna, sehingga terbuka/etc/nsswitch.conf
, yang memberitahukannya (di dalam kode libc, bukan kode di dalam dari sumber Konsole) tempat akun pengguna itu berada/etc/passwd
.Untuk alasan yang sama dengan
ls -l
membaca / etc / passwd, itu adalah data yang mengaitkan UID dengan nama. Ketikals
panggilanstat(2)
pada file itu mendapat UID numerik untuk pemilik file. Untuk menampilkan itu sebagai nama yang dapat dibaca manusia, perlu mencarinya di satu-satunya tempat yang memiliki asosiasi tersebut/etc/passwd
,. Misalnya baris pertama tipikal/etc/passwd
adalahKetika
ls -l /etc/hosts
perlu menghasilkan outputperlu menerjemahkan UID 0 menjadi "root" untuk itu sehingga memanggil rutin perpustakaan seperti getpwuid yang berbunyi
/etc/passwd
untuk menyediakan terjemahan. Itulah sebagian besar alasan yang/etc/passwd
ada: untuk menyediakan terjemahan semacam itu untuk tujuan yang sepenuhnya biasa.Mencari nama pengguna hadiah tidak lebih dari masalah keamanan daripada menelepon localtime sehingga
ls
dapat memberitahu Anda "14 Jan 2013" untuk waktu modifikasi file. Seperti yang dicatat slm , tidak ada alasan untuk membiarkan file tetap terbuka, jadi ditutup segera setelah isinya dibaca.File
/etc/passwd
itu awalnya berisi kata sandi hash dalam waktu yang lebih sederhana. Hash kata sandi dipindahkan ke/etc/shadow
mana pengguna biasa tidak bisa membaca karena itu adalah lubang keamanan. Nama/etc/passwd
tetap sama tetapi sekarang berisix
di bidang hash kata sandi sebelumnya yang bukan hash yang valid untuk kata sandi apa pun.sumber