Ai đã đăng nhập vào máy: nhật ký đăng nhập
Xem đăng nhập thành công và thất bại ở đâu, cách đọc last, lastb và journalctl, cách theo dõi hành động qua sudo và cấu hình lưu nhật ký.
Cập nhật 23 tháng 8, 2026
Mỗi lần đăng nhập vào một máy đều để lại dấu vết. Khả năng đọc những dấu vết đó trong năm phút là điều phân biệt một buổi rà soát sự cố bình tĩnh với việc đoán mò.
Tổng quan nhanh
last -a -n 20
lastb -a -n 20
lastlog
who
w
last hiển thị các lần đăng nhập thành công kèm địa chỉ, lastb — các lần thử thất bại, lastlog — thời điểm mỗi người dùng đăng nhập lần cuối. who và w hiển thị ai đang ở trên máy ngay lúc này.
Nếu lastlog hiển thị ngày đăng nhập cho một người dùng hệ thống như www-data, đó là lý do nghiêm trọng để điều tra.
systemd journal
journalctl -u ssh -n 100
journalctl -u ssh --since "2026-08-20" --until "2026-08-21"
journalctl _COMM=sshd | grep "Accepted"
journalctl _COMM=sshd | grep "Failed password" | tail -50
Các dòng quan trọng:
| Dòng | Ý nghĩa |
|---|---|
Accepted publickey for artem | Đăng nhập thành công bằng khóa |
Accepted password for root | Đăng nhập thành công bằng mật khẩu — một nguyên nhân đáng lo ngại |
Failed password for invalid user admin | Dò tìm brute-force các tên không tồn tại, tiếng ồn nền |
Disconnected from authenticating user | Lần thử bị hủy bỏ |
Trên Debian và Ubuntu, các sự kiện tương tự được ghi trùng trong /var/log/auth.log; trên AlmaLinux, trong /var/log/secure.
grep "Accepted" /var/log/auth.log
grep -c "Failed password" /var/log/auth.log
Hàng trăm lần thử thất bại mỗi ngày trên một địa chỉ công khai là bình thường. Điều bất thường lại là chuyện khác: một lần đăng nhập thành công từ một địa chỉ bạn không nhận ra. fail2ban giúp chống lại tiếng ồn.
Những gì đã được làm sau khi đăng nhập
journalctl -t sudo -n 100
grep sudo /var/log/auth.log
cat /home/artem/.bash_history
Lịch sử lệnh không đáng tin: rất dễ xóa, và nó không được ghi lại trong các phiên không tương tác. Nhật ký sudo trung thực hơn nhiều — nó do hệ thống duy trì, không phải shell. Một lý lẽ nữa ủng hộ phương án "người dùng thường cộng với sudo" được mô tả trong bài viết người dùng và sudo.
Kiểm toán đầy đủ ở cấp nhân:
apt install -y auditd
auditctl -w /etc/passwd -p wa -k passwd_changes
ausearch -k passwd_changes
Lưu trữ
Theo mặc định, systemd journal có thể nằm trong bộ nhớ và bị mất khi khởi động lại. Điều đó không tốt cho việc rà soát sự cố. Tệp /etc/systemd/journald.conf:
[Journal]
Storage=persistent
SystemMaxUse=500M
MaxRetentionSec=1month
systemctl restart systemd-journald
journalctl --disk-usage
Giới hạn dung lượng là bắt buộc: một journal đã ăn hết đĩa sẽ làm các dịch vụ dừng lại.
Những sai lầm thường gặp
| Sai lầm | Hậu quả | Giải pháp |
|---|---|---|
| Journal không được lưu giữa các lần khởi động lại | Dấu vết bị mất | Storage=persistent |
Chỉ dựa vào .bash_history | Dữ liệu dễ bị làm giả | Kiểm tra nhật ký sudo và auditd |
| Không giới hạn dung lượng journal | Đĩa bị đầy | SystemMaxUse |
| Coi tiếng ồn brute-force là một vụ hack | Báo động giả | Nhìn vào Accepted, không phải Failed |
Nếu bạn phát hiện một lần đăng nhập thành công từ địa chỉ của người khác, nhật ký trên chính máy đó không còn được coi là đáng tin nữa: kẻ đã đăng nhập có thể đã sửa chúng. Hãy làm theo bài viết dấu hiệu bị xâm nhập và giả định rằng máy sẽ phải được cài đặt lại.