Tổng quan.
Bài này mình sẽ chia sẻ đoạn shell, nó sẽ giúp bạn kiểm tra và thêm chức năng ghi lại các lệnh đã thực thi vào file log hệ thống (syslog
) Đoạn script này thường được dùng trong các hệ thống yêu cầu giám sát và audit (kiểm tra) lệnh để đảm bảo an ninh, theo dõi các thao tác của người dùng, đặc biệt là khi làm việc qua SSH hoặc sử dụng quyền sudo
.
Hãy chạy đoạn shell dưới trực tiếp trên terminal của bạ, nếu nó chưa được thêm vào file /etc/bash.bashrh
đoạn shell sẽ tự động thêm nó vào.
# Add audit command to bash.bashrc
if ! grep -q "BEGIN - AUDIT COMMAND" /etc/bash.bashrc; then
cat <<EOF >> /etc/bash.bashrc
# BEGIN - AUDIT COMMAND
function log2syslog {
declare COMMAND
COMMAND=\$(fc -ln -0)
logger -p local1.notice -t bash -i -- "\${USER}:\${SSH_CONNECTION}:\${SUDO_USER}:\${COMMAND}"
}
trap log2syslog DEBUG
# END - AUDIT COMMAND
EOF
fi
Nó thực hiện các bước sau:
- Kiểm tra sự tồn tại:
- Sử dụng lệnh
grep
để kiểm tra xem file/etc/bash.bashrc
có chứa dòngBEGIN - AUDIT COMMAND
hay không. - Nếu không tìm thấy (điều kiện
!
), thì đoạn shell tiếp theo sẽ được thực thi.
- Sử dụng lệnh
- Thêm chức năng ghi log lệnh:
- Nếu không tìm thấy
BEGIN - AUDIT COMMAND
, đoạn shell này sẽ thêm một đoạn script ngắn vào cuối file/etc/bash.bashrc
. - Nội dung được thêm vào có chức năng ghi lại mọi lệnh mà người dùng thực hiện trong terminal (bash shell) vào hệ thống log (
syslog
), sử dụng hàmlog2syslog
.
- Hàm
log2syslog
: Lấy lệnh cuối cùng mà người dùng đã thực hiện (fc -ln -0
) và ghi lại lệnh này kèm theo thông tin người dùng (USER
), thông tin kết nối SSH (SSH_CONNECTION
), thông tin của người dùng đã sử dụngsudo
(SUDO_USER
). trap log2syslog DEBUG
: Đặt bẫy (trap
) trên sự kiệnDEBUG
, có nghĩa là sau mỗi lệnh mà người dùng thực thi, hàmlog2syslog
sẽ tự động được gọi để ghi lại lệnh đó vào log.
- Nếu không tìm thấy
Khởi động lại shell hoặc đăng nhập lại.
Để kích hoạt đoạn shell trong /etc/bash.bashrc
, bạn cần nạp lại file file này bằng lệnh dưới.
source /etc/bash.bashrc
Thực hiện một số lệnh để kiểm tra.
Sau khi nạp lại cấu hình, bạn có thể thử thực hiện một vài lệnh trong terminal, ví dụ:
whoami
touch /home/hoanghd/hoanghd.txt
tail -f /var/log/syslog
Kiểm tra file log (syslog
).
Sau khi cấu hình này được thêm vào, mọi lệnh mà người dùng thực thi sẽ được ghi vào hệ thống log thông qua syslog
, giúp theo dõi và kiểm tra hoạt động của người dùng trong hệ thống một cách chi tiết.
Mở file log hệ thống để xem liệu các lệnh bạn vừa thực hiện có được ghi lại không. Thông thường, log sẽ nằm trong file /var/log/syslog
, bạn có thể kiểm tra bằng cách đọc file /var/log/syslog.
Trong file log, bạn sẽ thấy các dòng tương tự như sau mỗi khi một lệnh được thực thi:
shell> tail -f /var/log/syslog
Oct 3 09:50:37 node71 bash[9983]: root:10.237.7.250 32794 10.237.7.71 22::#011 whoami
Oct 3 09:50:43 node71 bash[9987]: root:10.237.7.250 32794 10.237.7.71 22::#011 tail -f /var/log/syslog
Oct 3 09:50:59 node71 bash[9996]: root:10.237.7.250 32794 10.237.7.71 22::#011 touch /home/hoanghd/hoanghd.txt
Oct 3 09:51:00 node71 bash[9999]: root:10.237.7.250 32794 10.237.7.71 22::#011 tail -f /var/log/syslog
user_name
: Tên người dùng thực thi lệnh.ssh_connection
: Thông tin kết nối SSH (nếu qua SSH).sudo_user
: Tên người dùng đã dùngsudo
(nếu có).- Lệnh: Chính là lệnh bạn vừa thực thi (như
ls
,whoami
, …).
Hãy kiểm tra kỹ từng dòng log xem có đúng là các lệnh của bạn được ghi lại với thông tin về người dùng, kết nối SSH, và lệnh được thực hiện.
Nếu bạn thấy log hiển thị các lệnh đã chạy đúng cách, thì đoạn mã hoạt động bình thường.