Audit Quyền User Trên Server Linux
Giới Thiệu
Việc kiểm tra và đánh giá (audit) quyền của người dùng trên server là một phần không thể thiếu trong chiến lược bảo mật tổng thể. Nó giúp bạn xác định liệu có tài khoản nào có quyền truy cập quá mức cần thiết, liệu có người dùng không còn hoạt động nhưng vẫn có quyền truy cập, hay liệu có bất kỳ lỗ hổng nào có thể bị khai thác. Một quy trình audit quyền user định kỳ sẽ tăng cường khả năng phòng thủ của hệ thống, đảm bảo tuân thủ các quy định bảo mật và giảm thiểu rủi ro bị tấn công.
Trong bài hướng dẫn này, chúng ta sẽ đi qua các bước cơ bản để audit quyền của người dùng trên một server Linux, giúp bạn hiểu rõ hơn về tình trạng bảo mật của hệ thống.
📋 Thời gian: 30 phút | Độ khó: Trung bình
Yêu Cầu
Để thực hiện audit quyền user trên server Linux, bạn cần có:
- Quyền truy cập
sudohoặcroottrên server Linux. - Hiểu biết cơ bản về việc sử dụng dòng lệnh (CLI) trên Linux.
- Một server Linux đang hoạt động (ví dụ: Ubuntu, CentOS, Debian, RHEL).
Các Bước Thực Hiện
Bước 1: Liệt kê tất cả người dùng và nhóm
Bước đầu tiên là xác định tất cả các tài khoản người dùng và nhóm tồn tại trên hệ thống. Điều này giúp bạn phát hiện các tài khoản không mong muốn hoặc không còn được sử dụng.
# Xem danh sách người dùng trên hệ thống
# Các tài khoản hệ thống thường có UID từ 1-999 (tùy distro)
cat /etc/passwd
# Xem danh sách các nhóm trên hệ thống
cat /etc/group
# Sử dụng getent để lấy thông tin từ nhiều nguồn (bao gồm LDAP nếu có)
getent passwd
getent group
💡 Tip: Hãy chú ý đến các tài khoản người dùng có UID (User ID) từ 1000 trở lên (trên hầu hết các bản phân phối Linux hiện đại), vì đây thường là các tài khoản người dùng thông thường. Kiểm tra xem có tài khoản nào mà bạn không nhận ra hoặc không nên có trên server hay không.
Bước 2: Kiểm tra quyền sudo của người dùng
Quyền sudo cho phép người dùng thực thi lệnh với tư cách là người dùng khác (thường là root). Việc cấp quyền sudo quá mức có thể tạo ra lỗ hổng bảo mật nghiêm trọng.
# Liệt kê quyền sudo của một người dùng cụ thể
# Thay <username> bằng tên người dùng bạn muốn kiểm tra
sudo -l -U <username>
# Tìm các nhóm có quyền sudo (ví dụ: nhóm 'sudo' hoặc 'wheel')
# Các thành viên của những nhóm này thường có quyền sudo đầy đủ
grep -E '^%sudo|^%wheel' /etc/group
# Xem file cấu hình sudoers (cực kỳ quan trọng)
# LUÔN LUÔN dùng 'visudo' để chỉnh sửa file này, không dùng trình soạn thảo văn bản thông thường
# visudo sẽ kiểm tra cú pháp trước khi lưu, tránh làm hỏng quyền sudo của hệ thống
sudo visudo -c # Chỉ kiểm tra cú pháp
# sudo visudo # Để chỉnh sửa
⚠️ Warning: Đảm bảo chỉ những người dùng thực sự cần thiết mới có quyền sudo, và chỉ cấp quyền sudo cho các lệnh cụ thể nếu có thể, thay vì quyền ALL (toàn bộ).
Bước 3: Kiểm tra quyền sở hữu và quyền truy cập của file/thư mục quan trọng
Kiểm tra quyền truy cập của các file và thư mục quan trọng, đặc biệt là các file cấu hình, file log và thư mục chứa dữ liệu web, là rất quan trọng để ngăn chặn truy cập trái phép hoặc sửa đổi.
# Kiểm tra quyền của file chứa mật khẩu đã hash (chỉ root có thể đọc)
ls -l /etc/shadow
# Kiểm tra quyền của thư mục chứa các file cấu hình hệ thống
ls -ld /etc
# Tìm các file hoặc thư mục mà mọi người đều có quyền ghi (world-writable)
# Đây là một lỗ hổng bảo mật lớn
find / -type f -perm /o=w 2>/dev/null
find / -type d -perm /o=w 2>/dev/null
# Tìm các file có quyền 777 (read, write, execute cho tất cả mọi người)
find / -type f -perm 777 2>/dev/null
# Tìm các thư mục có quyền 777
find / -type d -perm 777 2>/dev/null
# Kiểm tra quyền của thư mục chứa ứng dụng web (ví dụ: Apache/Nginx)
# Đảm bảo người dùng web server không có quyền ghi vào các file mã nguồn
ls -ld /var/www
ls -l /var/www/html
💡 Tip: Quyền truy cập lý tưởng cho các file thường là 644 (chủ sở hữu đọc/ghi, nhóm đọc, khác đọc) và cho thư mục là 755 (chủ sở hữu đọc/ghi/thực thi, nhóm đọc/thực thi, khác đọc/thực thi).
Bước 4: Kiểm tra các tiến trình đang chạy và chủ sở hữu
Kiểm tra các tiến trình đang chạy và người dùng sở hữu chúng có thể giúp phát hiện các tiến trình độc hại hoặc các dịch vụ đang chạy với quyền quá cao.
# Liệt kê tất cả các tiến trình đang chạy và người dùng sở hữu chúng
ps aux
# Lọc các tiến trình chạy dưới quyền root (ngoại trừ các tiến trình hệ thống thông thường)
ps aux | awk '$1=="root" && $11!~/^(init|systemd|rsyslogd|sshd|cron|dbus|kthreadd|ksoftirqd|migration|rcu_bh|watchdog|cpuset|kdevtmpfs|netns|writeback|kintegrityd|bioset|kblockd|ata_sff|md_wq|edac|khungtaskd|kswapd0|ecryptfs|ksmd|khugepaged|crypto|kthrotld|vmmemctl|vmballoon|scsi_eh|usb-storage|kworker|rcu_sched|auditd|irqbalance|polkitd|udisksd|gnome-shell|gdm|upowerd|ModemManager|NetworkManager|wpa_supplicant|bluetoothd|rtkit-daemon|pulseaudio|gsd|at-spi|tracker|gvfs|ibus|gnome-terminal|gpg-agent|seahorse|pipewire|wireplumber|snapd|containerd|dockerd|kubelet|kube-proxy|nginx|apache2|mysqld|postgres|redis|memcached)$/'
⚠️ Warning: Hãy cẩn thận khi phân tích đầu ra của ps aux. Rất nhiều tiến trình hệ thống chạy dưới quyền root là bình thường. Tìm kiếm các tiến trình lạ hoặc các ứng dụng không cần thiết chạy dưới quyền root.
Bước 5: Xem lại nhật ký hệ thống (Logs)
Các file nhật ký (logs) là kho vàng thông tin về các hoạt động của người dùng, bao gồm cả các lần đăng nhập, sử dụng sudo và các lỗi xác thực.
# Xem nhật ký xác thực (đăng nhập, sudo, v.v.) trên Debian/Ubuntu
tail -f /var/log/auth.log
# Xem nhật ký xác thực trên RHEL/CentOS
tail -f /var/log/secure
# Sử dụng journalctl để xem nhật ký hệ thống tổng thể (systemd)
# Xem các sự kiện liên quan đến sudo trong 24 giờ qua
journalctl _COMM=sudo --since "24 hours ago"
# Xem các lỗi đăng nhập thất bại
journalctl -p err | grep "Failed password"
💡 Tip: Tìm kiếm các mẫu bất thường như nhiều lần đăng nhập thất bại từ cùng một địa chỉ IP, sử dụng sudo vào những thời điểm không mong muốn, hoặc tạo/xóa người dùng không được phép.
Troubleshooting
Permission deniedkhi chạy lệnh:- Giải pháp: Đảm bảo bạn đang chạy lệnh với quyền
sudohoặc là người dùngroot. Một số file như/etc/shadowchỉ có thể đọc được bởiroot. -
sudo cat /etc/shadow
- Giải pháp: Đảm bảo bạn đang chạy lệnh với quyền
- Lệnh không tồn tại hoặc không tìm thấy:
- Giải pháp: Kiểm tra xem lệnh đó có được cài đặt trên hệ thống của bạn hay không. Ví dụ,
journalctlchỉ có trên các hệ thống sử dụngsystemd. Đối với các lệnh cơ bản nhưls,cat,grep,find, nếu chúng không hoạt động, có thể có vấn đề nghiêm trọng với cài đặt PATH hoặc hệ thống của bạn.
- Giải pháp: Kiểm tra xem lệnh đó có được cài đặt trên hệ thống của bạn hay không. Ví dụ,
- Quá nhiều thông tin trong đầu ra:
- Giải pháp: Sử dụng các công cụ lọc như
grep,awk,less,moređể xử lý và phân tích đầu ra. -
# Ví dụ: chỉ hiển thị các dòng chứa "user" từ /etc/passwd
cat /etc/passwd | grep "user"
# Ví dụ: xem từng trang một
ps aux | less
- Giải pháp: Sử dụng các công cụ lọc như
- Không thể chỉnh sửa file
/etc/sudoers:- Giải pháp: Luôn sử dụng
sudo visudo.visudolà trình chỉnh sửa an toàn được thiết kế riêng cho/etc/sudoers, nó sẽ kiểm tra cú pháp trước khi lưu và ngăn bạn khóa quyền sudo của chính mình.
- Giải pháp: Luôn sử dụng
Kết Luận
Việc audit quyền người dùng trên server Linux là một nhiệm vụ quan trọng để duy trì bảo mật và tuân thủ. Bằng cách thực hiện các bước trên một cách định kỳ, bạn có thể chủ động phát hiện và khắc phục các lỗ hổng tiềm ẩn.
✅ Best Practices:
- Nguyên tắc đặc quyền tối thiểu (Least Privilege): Chỉ cấp cho người dùng những quyền cần thiết để thực hiện công việc của họ, không hơn.
- Xóa tài khoản không sử dụng: Loại bỏ ngay lập tức các tài khoản người dùng không còn hoạt động hoặc không được yêu cầu.
- Sử dụng xác thực mạnh: Yêu cầu mật khẩu phức tạp, sử dụng xác thực hai yếu tố (2FA) nếu có thể.
- Kiểm tra nhật ký thường xuyên: Thiết lập hệ thống giám sát và cảnh báo cho các sự kiện nhật ký quan trọng như đăng nhập thất bại, sử dụng
sudohoặc thay đổi quyền. - Tự động hóa việc kiểm tra: Cân nhắc sử dụng các công cụ tự động hóa hoặc script để kiểm tra định kỳ các cấu hình quyền và tài khoản người dùng.
- Đào tạo người dùng: Đảm bảo người dùng hiểu về tầm quan trọng của bảo mật và cách bảo vệ thông tin đăng nhập của họ.
Thực hiện theo hướng dẫn này sẽ giúp bạn có cái nhìn rõ ràng hơn về tình trạng quyền user trên server của mình, từ đó đưa ra các biện pháp cải thiện bảo mật hiệu quả.
Xem thêm: