[Tools] Log all Command of User in Linux

30/12/2020

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 Onet 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?)

ONET IDC thành lập vào năm 2012, là công ty chuyên nghiệp tại Việt Nam trong lĩnh vực cung cấp dịch vụ Hosting, VPS, máy chủ vật lý, dịch vụ Firewall Anti DDoS, SSL… Với 10 năm xây dựng và phát triển, ứng dụng nhiều công nghệ hiện đại, ONET IDC đã giúp hàng ngàn khách hàng tin tưởng lựa chọn, mang lại sự ổn định tuyệt đối cho website của khách hàng để thúc đẩy việc kinh doanh đạt được hiệu quả và thành công.
Bài viết liên quan

Làm việc với lệnh Find và Locate

1. Lệnh Find find đường_dẫn -name kí_tự_cần_tìm Lệnh này sẽ cung cấp cho bạn một danh...
30/12/2020

Firewall [ Phần 1 ] Chuyên sâu về Iptables (command) và Netfilter

Tường lửa là một công cụ quan trọng có thể được cấu hình để bảo vệ máy chủ và cơ sở...
30/12/2020

[FTP][Phần 4][LAB]Phân quyền User trong FTP server(CentOS-7)

Ở các bài viết trước, ta đã tìm hiểu về FTP và cách cấu hình của nó. Trong bài viết này,...
30/12/2020