Dahulu kala dalam sejarah UNIX, pengguna di server adalah pengguna UNIX yang sebenarnya dengan entri di /etc/shadow
dan shell login interaktif dan direktori home. Ada alat bagi admin untuk berkomunikasi dengan pengguna, dan untuk memantau aktivitas mereka guna menghindari kesalahan bodoh atau berbahaya yang akan menyebabkan sumber daya server dialokasikan secara tidak adil.
Saat ini, basis pengguna Anda cenderung tidak memiliki entri di /etc/shadow
, alih-alih dikelola oleh lapisan abstraksi, baik itu LDAP atau Drupal atau OpenShift. Kemudian lagi, ada lebih banyak server sekarang, yang berarti ada lebih banyak sysadmin yang masuk dan keluar untuk melakukan pemeliharaan. Di mana ada aktivitas, ada peluang untuk kesalahan dan kebingungan, jadi inilah saatnya untuk membersihkan alat pemantauan lama tersebut dan menggunakannya dengan baik.
Berikut adalah beberapa perintah pemantauan yang mungkin Anda lupakan (atau tidak pernah Anda ketahui) untuk membantu Anda melacak apa yang terjadi di server Anda.
siapa
Pertama, dasar-dasarnya.
who
perintah disediakan oleh paket coreutils GNU, dan tugas utamanya adalah mengurai /var/log/utmp
mengajukan dan melaporkan temuannya.
utmp
file log pengguna saat ini pada sistem. Itu tidak selalu menunjukkan setiap proses, karena tidak semua program memulai utmp
penebangan. Bahkan, sistem Anda mungkin tidak memiliki utmp
berkas secara default. Dalam hal ini, who
jatuh kembali pada /var/log/wtmp
, yang mencatat semua login dan logout.
wtmp
format file sama persis dengan utmp
, kecuali bahwa nama pengguna nol menunjukkan keluar dan ~
karakter menunjukkan sistem shutdown atau reboot. wtmp
file dikelola oleh login(1)
, init(1)
, dan beberapa versi getty(8)
, namun, tidak satu pun dari aplikasi ini membuat file, jadi jika Anda menghapus wtmp
, maka pencatatan dinonaktifkan. Itu saja baik untuk diketahui:jika wtmp
hilang, Anda harus mencari tahu alasannya!
Output dari who --heading
terlihat seperti ini:
NAME LINE TIME COMMENT
seth tty2 2020-01-26 18:19 (tty2)
larry pts/2 2020-01-28 13:02 (10.1.1.8)
curly pts/3 2020-01-28 14:42 (10.1.1.5)
Ini menunjukkan nama pengguna setiap orang yang login, waktu login mereka dicatat, dan alamat IP mereka.
who
command juga dengan rendah hati menyediakan cara POSIX resmi untuk menemukan pengguna mana Anda login sebagai, tetapi hanya jika utmp
ada:
$ who -m
curly pts/3 2020-01-28 14:44 (10.1.1.8)
Ini juga menyediakan mekanisme untuk menampilkan runlevel saat ini:
$ who -r
run-level 5 2020-01-26 23:58
w
Untuk sedikit lebih banyak konteks tentang pengguna, w
sederhana perintah menyediakan daftar siapa yang masuk dan apa yang mereka lakukan. Informasi ini ditampilkan dalam format yang mirip dengan output who
, tetapi waktu pengguna menganggur, waktu CPU yang digunakan oleh semua proses yang dilampirkan ke TTY login, dan waktu CPU yang digunakan hanya oleh proses saat ini. Proses pengguna saat ini tercantum di bidang terakhir.
Contoh keluaran:
$ w
13:45:48 up 29 days, 19:24, 2 users, load average: 0.53, 0.52, 0.54
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
seth tty2 Sun18 43:22m 0.01s 0.01s /usr/libexec/gnome-session-binary
curly pts/2 13:02 35:12 0.03s 0.03s -bash
Atau, Anda dapat melihat alamat IP pengguna dengan -i
atau --ip-addr
pilihan.
Anda dapat mempersempit output menjadi satu nama pengguna dengan menentukan pengguna mana yang Anda inginkan informasinya:
$ w seth
13:45:48 up 29 days, 19:27, 2 users, load average: 0.53, 0.52, 0.54
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
seth tty2 Sun18 43:25m 0.01s 0.01s /usr/libexec/gnome-session-binary
utmpdump
utmpdump
utilitas melakukan (hampir) persis seperti namanya:ia membuang konten /var/log/utmp
file ke layar Anda. Sebenarnya, itu membuang salah satu utmp
atau wtmp
file, tergantung yang Anda tentukan. Tentu saja, file yang Anda tentukan tidak harus berada di /var/log
atau bahkan bernama utmp
atau wtmp
, dan bahkan tidak harus dalam format yang benar. Jika Anda memberi makan utmpdump
file teks, itu membuang konten ke layar Anda (atau file, dengan --output
option) dalam format yang dapat diprediksi dan mudah diuraikan.
Biasanya, tentu saja, Anda hanya akan menggunakan who
atau w
untuk mengurai catatan login, tetapi utmpdump
berguna dalam banyak hal.
- File bisa rusak. Sedangkan
who
danw
seringkali dapat mendeteksi korupsi sendiri,utmpdump
semakin toleran karena tidak melakukan penguraian sendiri. Itu membuat data mentah untuk Anda tangani. - Setelah Anda memperbaiki file yang rusak,
utmpdump
dapat menambal perubahan Anda kembali. - Terkadang Anda hanya ingin mengurai data sendiri. Mungkin Anda mencari sesuatu yang
who
danw
tidak diprogram untuk dicari, atau mungkin Anda mencoba membuat korelasi sendiri.
Apapun alasannya, utmpdump
adalah alat yang berguna untuk mengekstrak data mentah dari catatan login.
Jika Anda telah memperbaiki log masuk yang rusak, Anda dapat menggunakan utmpdump
untuk menulis perubahan Anda kembali ke master log:
$ sudo utmpdump -r < wtmp.fix > /var/log/wtmp
ps
Setelah Anda mengetahui siapa yang masuk ke sistem Anda, Anda dapat menggunakan ps
untuk mendapatkan snapshot dari proses saat ini. Ini tidak menjadi bingung dengan bagian atas, yang menampilkan laporan berjalan pada proses saat ini; ini adalah cuplikan yang diambil saat ps
dikeluarkan, dan kemudian dicetak ke layar Anda. Keduanya memiliki kelebihan dan kekurangan, sehingga Anda dapat memilih mana yang akan digunakan berdasarkan kebutuhan Anda. Karena sifatnya yang statis, ps
sangat berguna untuk analisis selanjutnya, atau hanya sebagai ringkasan yang mudah dikelola.
ps
perintah lama dan terkenal, dan tampaknya banyak admin telah mempelajari perintah UNIX lama daripada implementasi terbaru. ps
modern modern (dari procps-ng
package) menawarkan banyak mnemonik yang bermanfaat, dan itulah yang dikirimkan di RHEL, CentOS, Fedora, dan banyak distribusi lainnya, jadi itulah yang digunakan artikel ini.
Anda bisa mendapatkan semua proses yang dijalankan oleh satu pengguna dengan --user
(atau -u
), bersama dengan nama pengguna yang ingin Anda laporkan. Untuk memberikan output konteks tambahan dari proses mana yang merupakan induk dari proses anak, gunakan --forest
opsi untuk tampilan "pohon":
$ ps --forst --user larry
PID TTY TIME CMD
39707 ? 00:00:00 sshd
39713 pts/4 00:00:00 \_ bash
39684 ? 00:00:00 systemd
39691 ? 00:00:00 \_ (sd-pam)
Untuk setiap proses pada sistem:
$ ps --forest -e
[...]
29284 ? 00:00:48 \_ gnome-terminal-
29423 pts/0 00:00:00 | \_ bash
42767 pts/0 00:00:00 | | \_ ps
39631 pts/1 00:00:00 | \_ bash
39671 pts/1 00:00:00 | \_ ssh
32604 ? 00:00:00 \_ bwrap
32612 ? 00:00:00 | \_ bwrap
32613 ? 00:09:05 | \_ dring
32609 ? 00:00:00 \_ bwrap
32610 ? 00:00:15 \_ xdg-dbus-proxy
1870 ? 00:00:05 gnome-keyring-d
4809 ? 00:00:00 \_ ssh-agent
[...]
Kolom default berguna, tetapi Anda dapat mengubahnya agar lebih sesuai dengan apa yang Anda teliti. -o
opsi memberi Anda kontrol penuh atas kolom mana yang Anda lihat. Untuk daftar lengkap kolom yang memungkinkan, lihat Penentu Format Standar bagian ps(1) halaman manual.
$ ps -eo pid,user,pcpu,args --sort user
42799 root 0.0 [kworker/u16:7-flush-253:1]
42829 root 0.0 [kworker/0:2-events]
42985 root 0.0 [kworker/3:0-events_freezable_power_]
1181 rtkit 0.0 /usr/libexec/rtkit-daemon
1849 seth 0.0 /usr/lib/systemd/systemd --user
1857 seth 0.0 (sd-pam)
1870 seth 0.0 /usr/bin/gnome-keyring-daemon --daemonize --login
1879 seth 0.0 /usr/libexec/gdm-wayland-session /usr/bin/gnome-session
ps
perintah sangat fleksibel. Anda dapat memodifikasi outputnya secara asli sehingga Anda tidak harus bergantung pada grep
dan awk
untuk menemukan apa yang Anda pedulikan. Buat ps
good yang bagus perintah, alias untuk sesuatu yang berkesan, dan sering menjalankannya. Ini adalah salah satu cara terbaik untuk tetap mendapatkan informasi tentang apa yang terjadi di server Anda.
pgrep
Terkadang, Anda mungkin memiliki gagasan tentang proses yang bermasalah dan perlu menyelidikinya alih-alih pengguna atau sistem Anda. Untuk melakukan itu, ada pgrep
perintah dari psproc-ng
paket.
Pada dasarnya, pgrep
bekerja seperti grep pada output ps
:
$ pgrep bash
29423
39631
39713
Alih-alih mencantumkan PID, Anda bisa menghitung berapa banyak PID yang akan dikembalikan:
$ pgrep --count bash
3
Untuk informasi lebih lanjut, Anda dapat memengaruhi pencarian Anda melalui proses berdasarkan nama pengguna (-u
), terminal (--terminal
), dan usia (--newest
dan --oldest
), dan lainnya. Untuk menemukan proses milik pengguna tertentu, misalnya:
$ pgrep bash -u moe --list-name
39631 bash
Anda bahkan bisa mendapatkan kecocokan terbalik dengan --inverse
pilihan.
pkill
Terkait dengan pgrep
adalah pkill
memerintah. Ini sangat mirip dengan kill
perintah, kecuali bahwa ia menggunakan opsi yang sama dengan pgrep
sehingga Anda dapat mengirim sinyal ke proses yang merepotkan menggunakan informasi apa pun yang paling mudah bagi Anda.
Misalnya, jika Anda telah menemukan bahwa proses yang diprakarsai oleh pengguna larry
memonopoli sumber daya, dan Anda tahu dari w
larry
itu terletak di terminal pts/2
, maka Anda dapat mematikan sesi login dan semua turunannya hanya dengan nama terminal:
$ sudo pkill -9 --terminal pts/2
Atau Anda dapat menggunakan nama pengguna saja untuk mengakhiri semua proses yang cocok dengannya:
$ sudo pkill -u larry
Digunakan dengan bijaksana, pkill
adalah tombol "panik" yang bagus atau solusi gaya palu godam saat masalah sudah tidak terkendali.
Pemantauan terminal
Hanya karena serangkaian perintah ada di terminal tidak berarti mereka selalu lebih baik daripada solusi lain. Catat kebutuhan Anda dan pilih alat terbaik untuk kebutuhan Anda. Terkadang sistem pemantauan dan pelaporan grafis adalah yang Anda butuhkan, dan terkadang perintah terminal yang mudah ditulis dan diuraikan adalah jawaban yang tepat. Pilih dengan bijak, pelajari alat Anda, dan Anda tidak akan pernah tahu apa yang terjadi di dalam bare metal Anda.
[Ingin mempelajari lebih lanjut tentang pemantauan dan keamanan? Lihat daftar periksa keamanan dan kepatuhan TI. ]