Một trong những bài toán kiểm soát truy cập phổ biến đối với Linux Administrator đó là quản lý việc các User trên hệ thống đã thao tác những gì khi người dùng SSH vào. Lưu lại toàn bộ log thao tác của người dùng khi SSH vào hệ thống.
1. Phân tích cơ bản
- Yêu cầu cơ bản log lại toàn bộ thao tác của người dùng khi SSH
- Tools hỗ trợ chạy trên nhiều OS, chỉ một dòng lệnh hạn chế việc Admin phải cấu hình quá nhiều
- Khi tạo mới user thì tự động cấu hình luôn phần xử lý đẩy log
- Security file log
2. Tools cài đặt
Tools được cấu hình dựa trên tính năng của Rsyslog có sẵn trong các OS của linux (CentOS và Ubuntu). Hiện tại mình đã thực hiện xong việc viết tools xử lý các vấn đề trên bao gồm các tính năng cơ bản sau
- Yêu cầu sudo permission cài đặt
- Chỉ một thực hiện 1 câu lệnh duy nhất là cấu hình xong
- Cài đặt được trên toàn bộ CentOS6,7,8, Ubuntu 14,16,18
- Mỗi khi tạo mới user thì tự động cấu hình logging cmd của user đó lại
- File log được phân quyền chỉ có mỗi superuser mới có thể xem được
- Gom các lệnh giống nhau liên tục thành 1 hàng (CentOS8 chưa xử lý được tính năng này, các OS còn lại OK)
Thao tác cấu hình log vô cùng đơn giản bạn chỉ cần SSH vào server với superuser
(root hoặc user có quyền sudo) thực thi câu lệnh sau (khuyến cáo dùng root
)
curl -Lso- https://raw.githubusercontent.com/nhanhoadocs/ghichep-cmdlog/master/cmdlog.sh | bash
Sau khi setup xong bạn cần LOGOUT và LOGIN lại phiên SSH. Tiến hành kiểm tra cmdlog
tại đường dẫn /var/log/cmdlog.log
Vậy là chúng ta đã hoàn thành cấu hình xong phần cmdlog. Bạn có thể thử tạo mới user và theo dõi xem khi user đó SSH vào thao tác thì log được lưu vào file /var/log/cmdlog.log
như thế nào nhé <3.
Đầy đủ sourcecode của tools trên nằm tại đường dẫn GitHub của Nhân Hòa tại https://github.com/nhanhoadocs/ghichep-cmdlog/
3. Chi tiết các bước xử lý tools
Chỗ này các bạn có thể đọc tham khảo để biết mình đã xử lý như thế nào.
Đầu tiên là phần kiểm tra sudo user, kiểm tra OS. Vì ý định của mình là detect OS và tự động cài đặt theo từng OS khác nhau.
# Check sudo user
if [[ "$EUID" -ne 0 ]]; then
echo "Please run as root or sudo"
exit 1;
fi
# Check OS
echo "Check Your OS"
if cat /etc/*release | grep CentOS > /dev/null 2>&1; then
#....
elif cat /etc/*release | grep ^NAME | grep Ubuntu > /dev/null 2>&1; then
# ....
fi
Kiểm tra và cài đặt rsyslog
# Check install rsyslog
echo "Check Rsyslog installed"
if [[ $OS == "CentOS" ]]; then
if ! rpm -qa | grep rsyslog > /dev/null 2>&1; then
yum install -y install rsyslog
fi
elif [[ $OS == "Ubuntu" ]]; then
if ! dpkg --get-selections | grep rsyslog > /dev/null 2>&1; then
apt-get -y install rsyslog
fi
fi
Kiểm tra và exit nếu cmdlog
đã cấu hình trước đó
# Check config cmdlog
echo "Check old cmdlog config"
if [[ -f "/var/log/cmdlog.log" ]]; then
echo "Server have been config CMD log before, Please check your config"
exit 1;
fi
Tiếp đến bổ sung cấu hình để đẩy cmdlog
cho user đang thao tác (thường là root
)
# Config for current user
echo "Config cmdlog for current user"
touch /var/log/cmdlog.log
chmod 600 /var/log/cmdlog.log
if [[ -d "$HOME" ]] && [[ -f "$HOME/.bashrc" ]]; then
# ...
fi
Tiếp đến tự làm khó bản thân với việc xử lý sao cho tạo mới user tự động nhận phần cấu hình cmdlog
# Config for user add
echo "Config auto cmdlog for new useradd"
if [[ $OS == "CentOS" ]]; then
# ...
elif [[ $OS == "Ubuntu" ]]; then
# ...
fi
Ở phần này mình xử lý phần chỉnh sửa lại cấu hình của /etc/default/useradd
và bổ sung, cấu hình các file .bash*
trong /etc/skel
để mỗi khi create user mới sẽ tự động có file .bashrc
đã được config cmdlog
Tiếp đến cấu hình cho rsyslog
để xử lý phần lưu file ra log. Ở đây để rút ngắn xử lý cho script mình đã tách các file cấu hình của từng OS khác nhau và thực hiện thao tác cập nhật file config tương ứng.
# Config rsyslog
echo "Config rsyslog"
mv /etc/rsyslog.{conf,conf.bk}
curl -o /etc/rsyslog.conf https://raw.githubusercontent.com/nhanhoadocs/ghichep-cmdlog/master/config/"$OS_VER"_rsyslog.cnf > /dev/null 2>&1
systemctl restart rsyslog.service > /dev/null 2>&1 || service rsyslog restart > /dev/null 2>&1
source ~/.bashrc
Ok việc cuối cùng cần làm của bạn là LOGOUT và LOGIN lại phiên SSH và tận hưởng thành quả
4. Hướng áp dụng và phát triển
File log này có thể đẩy về log center để tiện monitor theo dõi các thao tác của user trên hệ thống.
- Tools tạm thời chỉ hỗ trợ Ubuntu14,16,18 và CentOS6,7,8 chưa thử nghiệm và phát triển trên các OS khác.
- Toosl chưa có action với các user đã tồn tại, không có $HOME folder
- Tools tạm thời phù hợp với các máy mới cài đặt
Mong nhận được sự đóng góp bổ sung từ các SystemAdmin đồng nghiệp để tools được hoàn thiện hơn.
Các bạn có thể truy cập repo chính của tools này https://github.com/nhanhoadocs/ghichep-cmdlog/
–> Fork repo về github cá nhân bạn –> Bổ sung thêm cấu hình cho các OS khác (Debian, SUSE, …) –> Contribute ngược lại cho cộng đồng (WHY NOT?)
Leave a Reply