Akuntansi Unix: perintah lastcomm tanpa executable pada disk - apakah itu?


0

Latihan terkait keamanan: Untuk keamanan ekstra, saya mengaktifkan akuntansi Unix tradisional ( acct). Ini dapat membantu menyelidiki aktivitas yang mencurigakan setelah fakta.

Menurut halaman manual /var/log/accountadalah direktori yang berisi pacctfile (proses akuntansi) yang berisi proses data akuntansi sebagaimana ditulis oleh kernel, mungkin untuk setiap proses yang exitdiedit saat akuntansi aktif. Nama perintah terpotong menjadi 15-karakter (ini tampaknya sedikit bug: man 5 acctmenunjukkan #define ACCT_COMM 16tidak termasuk karakter tambahan untuk mengakhiri NULL dalam struct, tapi saya melihat maksimal 15 karakter bukan 16).

Ketika saya menjalankan lastcommyang mengonversi pacctfile terbaru ke bentuk yang dapat dibaca manusia, saya mendapatkan beberapa baris di mana kolom 1 (paling kiri) bukan perintah yang jelas (nama file yang dapat dieksekusi pada disk) bahkan ketika saya mengabaikan karakter di luar 15- batas char. Berikut ini beberapa contohnya:

kworker/dying
handle-watcher-
WorkerPool/28
ScriptStreamerT
Compositor
CompositorTileW
Chrome_ChildIOT

Beberapa di antaranya terlihat seperti nama utas kernel. Ada lebih banyak utas yang dapat saya lihat sedang berjalan (misalnya dalam top) yang tidak muncul dalam daftar ini. Saya berasumsi yang hilang adalah proses berjalan lama yang tidak pernah exitdiedit sejak acctdiaktifkan.

Pertanyaan: Dapatkah seseorang menjelaskan apa saja dari proses di atas yang tidak dihitung?

Untuk referensi, berikut adalah skrip bash untuk mencantumkan perintah yang tidak ditemukan pada disk, jadi Anda dapat menjalankannya sendiri (pastikan untuk menjalankannya sudo updatedbterlebih dahulu)

#!/bin/bash

fullpath_of_cmd() {
    # cmd may be truncated to a max of 15 chars (see "man 5 acct")
    cmd="$1"
    # Search for any file matching this prefix
    # (assumes locate db is up to date)
    paths=$(locate "/$cmd")
    echo "$paths"
}

for cmd in $(lastcomm | cut -d' ' -f1 | sort -u); do
    # echo === $cmd
    paths=$(fullpath_of_cmd "$cmd")
    case "$paths" in
        (*/$cmd*) : cool, found it ;;
        (*) printf "%s -> NOT FOUND (%s)\n" $cmd $paths ;;
    esac
done

Jawaban:


1

The commlapangan tidak selalu sesuai dengan nama executable; itu dapat diatur secara bebas oleh program itu sendiri, dengan menulis /proc/self/commdi Linux atau dengan menggunakan beberapa arcane prctl ().

Di Linux, bagaimanapun, log akuntansi tampaknya tidak hanya mencakup proses tetapi juga utas userspace. (Bagaimanapun juga, proses dan utas Linux hampir sama.) Contoh-contoh yang diberikan persis seperti nama utas yang digunakan Chromium atau mungkin beberapa peramban lain berbasis WebKit / Blink.

Untuk melihatnya sendiri, jalankan htop, tekan F2, di bawah "Opsi tampilan" aktifkan yang berikut:

  • [✔] Tampilkan nama utas khusus
  • [✔] Tampilkan utas dengan warna berbeda

Tekan Shift+Huntuk beralih di utas pengguna; Shift+Kuntuk utas kernel.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.