Kế toán Unix: các lệnh Lastcomm không có tệp thực thi trên đĩa - chúng là gì?


0

Một bài tập liên quan đến bảo mật: Để bảo mật hơn, tôi đã bật tính năng Unix ( acct) truyền thống . Điều này có thể giúp điều tra hoạt động đáng ngờ sau khi thực tế.

Theo trang man /var/log/accountlà một thư mục chứa pacctcác tệp (quy trình kế toán) chứa dữ liệu kế toán quy trình được viết bởi kernel, có lẽ là cho mọi quy trình exited trong khi kế toán đang hoạt động. Tên lệnh được cắt ngắn thành 15 ký tự (đây có vẻ là một lỗi nhỏ: man 5 accthiển thị #define ACCT_COMM 16không bao gồm ký tự bổ sung cho NULL kết thúc trong cấu trúc, nhưng tôi thấy tối đa 15 ký tự thay vì 16).

Khi tôi chạy lastcommchuyển đổi paccttệp gần đây nhất thành dạng có thể đọc được, tôi nhận được một số dòng trong đó cột thứ nhất (ngoài cùng bên trái) không phải là một lệnh rõ ràng (tên của tệp thực thi trên đĩa) ngay cả khi tôi bỏ qua các ký tự ngoài 15- giới hạn char. Dưới đây là một số ví dụ:

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

Một số trong số này trông giống như tên của chủ đề hạt nhân. Có rất nhiều chủ đề tôi có thể thấy chạy (ví dụ như trong top) không xuất hiện trong danh sách này. Tôi giả sử những cái còn thiếu là các quy trình chạy dài mà không bao giờ exited kể từ khi acctđược kích hoạt.

Câu hỏi: Ai đó có thể giải thích những gì từng không được nêu ở trên cho các quy trình là gì không?

Để tham khảo, đây là tập lệnh bash để liệt kê các lệnh không tìm thấy trên đĩa, do đó bạn có thể tự chạy nó (đảm bảo chạy sudo updatedbtrước)

#!/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

Câu trả lời:


1

Trường commkhông nhất thiết phải tương ứng với tên thực thi; nó có thể tự do giải quyết bằng chương trình, bằng cách viết /proc/self/commlên Linux hoặc bằng cách sử dụng một số arcane prctl ().

Tuy nhiên, trên Linux, nhật ký kế toán dường như không chỉ bao gồm các quy trình mà cả các luồng không gian người dùng. (Rốt cuộc, các quy trình và chủ đề của Linux gần như giống nhau.)

Để tự nhìn thấy chúng, hãy chạy htop, nhấn F2, trong "Tùy chọn hiển thị" kích hoạt các mục sau:

  • [✔] Hiển thị tên chủ đề tùy chỉnh
  • [✔] Hiển thị chủ đề trong một màu khác

Nhấn Shift+Hđể chuyển đổi chủ đề không gian người dùng; Shift+Kcho chủ đề hạt nhân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.