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/account
là một thư mục chứa pacct
cá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 exit
ed 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 acct
hiển thị #define ACCT_COMM 16
khô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 lastcomm
chuyển đổi pacct
tệ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ờ exit
ed 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 updatedb
trướ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