Giới thiệu
Tập lệnh shell này được thiết kế để thực hiện kiểm tra an ninh cơ bản và sửa chữa tự động trên các hệ thống CentOS 7.x (từ phiên bản 7.5 đến 7.9). Nó bao gồm việc kiểm tra và cấu hình các thông số hệ thống quan trọng như thông tin hệ điều hành, cài đặt SSH, chính sách mật khẩu, độ phức tạp mật khẩu, khóa tài khoản, quyền root, thời gian chờ phiên, lịch sử lệnh, đồng bộ hóa NTP, cấu hình hệ thống, phần mềm EDR, tường lửa và cài đặt đăng nhập người dùng.
I. Kiểm tra và sửa lỗi cấu hình hệ thống
1. Kiểm tra thông tin hệ thống
Tập lệnh hiển thị các thông tin cơ bản về hệ thống như phiên bản hệ điều hành, phiên bản kernel, số lượng CPU, loại CPU, dung lượng RAM và dung lượng đĩa.
echo " "
echo "############################ Thông tin hệ thống ############################"
Release=$(cat /etc/redhat-release 2>/dev/null)
Kernel=$(uname -r)
Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
Mem_total=$(free -h |grep Mem: |awk -F ' ' '{print $2}')
Disk_total=$(fdisk -l |grep "Disk /dev/sd" |awk -F ' ' '{print $2$3$4}' |cut -d ',' -f1)
echo " Phiên bản phát hành: $Release"
echo " Kernel: $Kernel"
echo "Số CPU logic: $Virt_CPUs"
echo " Loại CPU: $CPU_Type"
echo " Dung lượng RAM: $Mem_total"
echo " Dung lượng đĩa: $Disk_total"
2. Kiểm tra và sửa lỗi cấu hình SSH
2.1. Kiểm tra cấu hình SSH
Tập lệnh kiểm tra các tham số sau trong tệp /etc/ssh/sshd_config:
MaxAuthTries: Số lần thử xác thực tối đa.PasswordAuthentication: Cho phép xác thực bằng mật khẩu.PubkeyAuthentication: Cho phép xác thực bằng khóa công khai.
Nếu các giá trị không đạt yêu cầu, tập lệnh sẽ báo cáo là "Kiểm tra không đạt".
echo " "
echo "## Kiểm tra cấu hình SSH ############################"
max_tries=$(cat /etc/ssh/sshd_config | grep '^MaxAuthTries' | awk '{print $2}')
pass_auth=$(cat /etc/ssh/sshd_config | grep '^PasswordAuthentication' | awk '{print $2}')
pubkey_auth=$(cat /etc/ssh/sshd_config | grep '^PubkeyAuthentication' | awk '{print $2}')
# Kiểm tra các giá trị mong muốn (ví dụ: MaxAuthTries = 5, các loại xác thực khác là yes)
if [ "$max_tries" -eq 5 ] && [ "$pass_auth" == "yes" ] && [ "$pubkey_auth" == "yes" ]; then
echo ""
echo "Kiểm tra đạt"
else
echo ""
echo "Kiểm tra không đạt"
fi
2.2. Sửa lỗi cấu hình SSH
Tập lệnh này sẽ sửa các tham số cấu hình SSH để tuân thủ các yêu cầu bảo mật:
- Đặt
MaxAuthTriesthành 5. - Đảm bảo
PasswordAuthenticationđược đặt thànhyes. - Đảm bảo
PubkeyAuthenticationđược đặt thànhyes.
Sau khi sửa, dịch vụ SSH sẽ được khởi động lại.
echo -e "\033[1;33mĐường dẫn tệp cấu hình: /etc/ssh/sshd_config \033[0m"
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
grep -n "^MaxAuthTries" /etc/ssh/sshd_config
grep -n "^PasswordAuthentication" /etc/ssh/sshd_config
grep -n "^PubkeyAuthentication" /etc/ssh/sshd_config
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
echo " "
# Hàm để sửa hoặc thêm cấu hình SSH
function set_ssh_config() {
local config_key="$1"
local config_value="$2"
local config_file="/etc/ssh/sshd_config"
# Kiểm tra xem dòng có tồn tại và không bị comment không
if grep -qE "^${config_key}[[:space:]]+" "$config_file" && ! grep -qE "^#.*${config_key}[[:space:]]+" "$config_file"; then
# Cập nhật giá trị nếu tồn tại
sed -i "s/^${config_key}[[:space:]]\+.*/${config_key} ${config_value}/" "$config_file"
else
# Thêm mới nếu không tồn tại hoặc bị comment
if grep -qE "^#.*${config_key}[[:space:]]+" "$config_file"; then
# Bỏ comment và cập nhật
sed -i "s/^#.*${config_key}[[:space:]]\+.*/${config_key} ${config_value}/" "$config_file"
else
# Thêm vào cuối tệp
echo "${config_key} ${config_value}" >> "$config_file"
fi
fi
}
# Áp dụng các cấu hình
set_ssh_config "MaxAuthTries" "5"
set_ssh_config "PasswordAuthentication" "yes"
set_ssh_config "PubkeyAuthentication" "yes"
systemctl restart sshd
echo -e "\033[1;36m Sửa lỗi thành công, vui lòng kiểm tra lại! \033[0m"
echo " "
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
grep -n "^MaxAuthTries" /etc/ssh/sshd_config
grep -n "^PasswordAuthentication" /etc/ssh/sshd_config
grep -n "^PubkeyAuthentication" /etc/ssh/sshd_config
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
3. Kiểm tra và sửa lỗi chính sách tài khoản
3.1. Kiểm tra chính sách tài khoản
Kiểm tra các giá trị PASS_MIN_DAYS và PASS_WARN_AGE trong /etc/login.defs. Nếu các giá trị này không đúng với yêu cầu (ví dụ: PASS_MIN_DAYS=2, PASS_WARN_AGE=5), thì báo cáo "Kiểm tra không đạt".
echo ""
echo "## Kiểm tra chính sách tài khoản ############################"
min_pass_days=$(cat /etc/login.defs | grep PASS_MIN_DAYS | grep -v ^# | awk '{print $2}')
warn_age=$(cat /etc/login.defs | grep PASS_WARN_AGE | grep -v ^# | awk '{print $2}')
if [ -n "$min_pass_days" ] && [ -n "$warn_age" ]; then
if [ "$min_pass_days" -eq 2 ] && [ "$warn_age" -eq 5 ]; then
echo ""
echo "Kiểm tra đạt"
else
echo ""
echo "Kiểm tra không đạt"
fi
else
echo ""
echo "Kiểm tra không đạt (thiếu cấu hình)"
fi
3.2. Sửa lỗi chính sách tài khoản
Cập nhật PASS_MIN_DAYS thành 2 và PASS_WARN_AGE thành 5 trong tệp /etc/login.defs.
echo -e "\033[1;33mĐường dẫn tệp cấu hình: /etc/login.defs \033[0m"
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
grep -n "^PASS_MAX_DAYS" /etc/login.defs
grep -n "^PASS_MIN_DAYS" /etc/login.defs
grep -n "^PASS_WARN_AGE" /etc/login.defs
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
echo " "
# Hàm để sửa hoặc thêm cấu hình login.defs
function set_login_defs_config() {
local config_key="$1"
local config_value="$2"
local config_file="/etc/login.defs"
# Kiểm tra xem dòng có tồn tại và không bị comment không
if grep -qE "^${config_key}[[:space:]]+" "$config_file" && ! grep -qE "^#.*${config_key}[[:space:]]+" "$config_file"; then
# Cập nhật giá trị nếu tồn tại
sed -i "s/^${config_key}[[:space:]]\+.*/${config_key} ${config_value}/" "$config_file"
else
# Thêm mới nếu không tồn tại hoặc bị comment
if grep -qE "^#.*${config_key}[[:space:]]+" "$config_file"; then
# Bỏ comment và cập nhật
sed -i "s/^#.*${config_key}[[:space:]]\+.*/${config_key} ${config_value}/" "$config_file"
else
# Thêm vào cuối tệp
echo "${config_key} ${config_value}" >> "$config_file"
fi
fi
}
# Áp dụng các cấu hình
set_login_defs_config "PASS_MIN_DAYS" "2"
set_login_defs_config "PASS_WARN_AGE" "5"
echo " "
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
grep -n "^PASS_MAX_DAYS" /etc/login.defs
grep -n "^PASS_MIN_DAYS" /etc/login.defs
grep -n "^PASS_WARN_AGE" /etc/login.defs
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
4. Kiểm tra và sửa lỗi độ phức tạp mật khẩu
4.1. Kiểm tra độ phức tạp mật khẩu
Kiểm tra sự tồn tại của các quy tắc độ phức tạp mật khẩu trong /etc/pam.d/system-auth, ví dụ như sử dụng pam_pwquality.so hoặc pam_cracklib.so với các tham số như minlen=10, dcredit=-1, ucredit=-1, lcredit=-1, ocredit=-1.
echo ""
echo "## Kiểm tra độ phức tạp mật khẩu ############################"
# Kiểm tra cấu hình bằng pam_pwquality.so
complexity_pwq=$(cat /etc/pam.d/system-auth | grep 'pam_pwquality.so' | grep 'minlen=10' | grep 'dcredit=-1' | grep 'ucredit=-1' | grep 'lcredit=-1' | grep 'ocredit=-1')
# Kiểm tra cấu hình bằng pam_cracklib.so
complexity_cracklib=$(cat /etc/pam.d/system-auth | grep 'pam_cracklib.so' | grep 'retry=3' | grep 'minlen=10' | grep 'dcredit=-1' | grep 'ucredit=-1' | grep 'lcredit=-1' | grep 'ocredit=-1')
if [ -n "$complexity_pwq" ] || [ -n "$complexity_cracklib" ]; then
echo ""
echo "Kiểm tra đạt"
else
echo ""
echo "Kiểm tra không đạt"
fi
4.2. Sửa lỗi độ phức tạp mật khẩu
Cập nhật hoặc thêm quy tắc độ phức tạp mật khẩu vào /etc/pam.d/system-auth, đảm bảo sử dụng pam_pwquality.so với các tham số yêu cầu.
echo -e "\033[1;33mĐường dẫn tệp cấu hình: /etc/pam.d/system-auth \033[0m"
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
grep -n "^password" /etc/pam.d/system-auth
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
echo " "
# Xác định dòng cần sửa hoặc thêm
line_num_pwq=$(grep -n 'pam_pwquality.so' /etc/pam.d/system-auth | cut -d: -f1)
line_num_cracklib=$(grep -n 'pam_cracklib.so' /etc/pam.d/system-auth | cut -d: -f1)
pam_line_index=4 # Vị trí mặc định để chèn nếu không tìm thấy
if [ -n "$line_num_pwq" ]; then
sed -i "${line_num_pwq}c password requisite pam_pwquality.so minlen=10 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 try_first_pass local_users_only retry=3" /etc/pam.d/system-auth
elif [ -n "$line_num_cracklib" ]; then
sed -i "${line_num_cracklib}c password requisite pam_cracklib.so retry=3 minlen=10 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1" /etc/pam.d/system-auth
else
# Chèn vào dòng thứ 4 nếu không tìm thấy module pam tương ứng
sed -i "${pam_line_index}i password requisite pam_pwquality.so minlen=10 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 try_first_pass local_users_only retry=3" /etc/pam.d/system-auth
fi
echo -e "\033[1;36m Sửa lỗi thành công, vui lòng kiểm tra lại! \033[0m"
echo " "
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
grep -n "^password" /etc/pam.d/system-auth
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
5. Kiểm tra và sửa lỗi khóa đăng nhập tài khoản
5.1. Kiểm tra khóa đăng nhập tài khoản
Kiểm tra cấu hình pam_tally2.so trong /etc/pam.d/sshd để đảm bảo các tham số như deny=5, unlock_time=300, even_deny_root=5, root_unlock_time=300 được đặt đúng.
echo ""
echo "## Kiểm tra khóa đăng nhập tài khoản ############################"
login_lock_config=$(cat /etc/pam.d/sshd | grep 'pam_tally2.so' | grep 'deny=5' | grep 'unlock_time=300' | grep 'even_deny_root=5' | grep 'root_unlock_time=300')
if [ -n "$login_lock_config" ]; then
echo ""
echo "Kiểm tra đạt"
else
echo ""
echo "Kiểm tra không đạt"
fi
echo "Xem số lần đăng nhập thất bại của người dùng: pam_tally2 --user root"
echo "Mở khóa người dùng chỉ định: pam_tally2 -r -u root"
5.2. Sửa lỗi khóa đăng nhập tài khoản
Cấu hình pam_tally2.so trong /etc/pam.d/sshd với các tham số yêu cầu để khóa tài khoản sau 5 lần đăng nhập sai và mở khóa sau 300 giây.
echo -e "\033[1;33mĐường dẫn tệp cấu hình: /etc/pam.d/sshd \033[0m"
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
grep -n "^auth" /etc/pam.d/sshd
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
echo " "
# Tìm dòng có pam_tally2.so hoặc thêm mới
line_num_tally=$(grep -n 'pam_tally2.so' /etc/pam.d/sshd | cut -d: -f1)
if [ -n "$line_num_tally" ]; then
# Sửa dòng hiện có
sed -i "${line_num_tally}c auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root=5 root_unlock_time=300" /etc/pam.d/sshd
else
# Thêm dòng mới vào vị trí thứ 2
sed -i '2i\auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root=5 root_unlock_time=300' /etc/pam.d/sshd
fi
echo -e "\033[1;36m Sửa lỗi thành công, vui lòng kiểm tra lại! \033[0m"
echo " "
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
grep -n "^auth" /etc/pam.d/sshd
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
6. Kiểm tra và sửa lỗi quyền root
6.1. Kiểm tra quyền root
Kiểm tra xem có tài khoản nào khác ngoài root có UID bằng 0 hay không. Nếu có, báo cáo "Kiểm tra không đạt".
echo ""
echo "## Kiểm tra quyền root ############################"
uid_zero_check=0
for uid in $(awk -F[:] '$3 == 0 {print $3}' /etc/passwd); do
if [ "$uid" = "0" ]; then
echo ""
echo "Kiểm tra không đạt (Có UID=0 khác ngoài root)"
uid_zero_check=1
break
fi
done
if [ "$uid_zero_check" -eq 0 ]; then
echo ""
echo "Kiểm tra đạt"
fi
Lưu ý: Phần sửa lỗi cho mục này rất rủi ro và không được tự động hóa hoàn toàn trong ví dụ gốc. Cần thực hiện thủ công.
7. Kiểm tra và sửa lỗi thời gian chờ phiên
7.1. Kiểm tra thời gian chờ phiên
Kiểm tra biến môi trường TMOUT trong /etc/profile. Nếu TMOUT không được đặt hoặc có giá trị lớn hơn 600 giây, báo cáo "Kiểm tra không đạt".
echo ""
echo "## Kiểm tra thời gian chờ phiên ############################"
tmout_value=$(cat /etc/profile | grep '^export TMOUT=' | awk -F'=' '{print $2}')
if [ -n "$tmout_value" ]; then
if [ "$tmout_value" -le 600 ]; then
echo ""
echo "Kiểm tra đạt"
else
echo ""
echo "Kiểm tra không đạt (TMOUT quá lớn)"
fi
else
echo "Không tìm thấy cấu hình TMOUT tự động đăng xuất, không đáp ứng yêu cầu. Nên đặt là 600 giây."
echo ""
echo "Kiểm tra không đạt"
fi
7.2. Sửa lỗi thời gian chờ phiên
Thêm hoặc sửa đổi biến TMOUT trong /etc/profile để đặt thời gian chờ là 600 giây.
echo -e "\033[1;33mĐường dẫn tệp cấu hình: /etc/profile \033[0m"
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
grep -n "^export TMOUT" /etc/profile
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
echo " "
if grep -q '^export TMOUT=' /etc/profile; then
sed -i 's/^export TMOUT=.*/export TMOUT=600/' /etc/profile
else
echo "export TMOUT=600" >> /etc/profile
fi
source /etc/profile
echo -e "\033[1;36m Sửa lỗi thành công, vui lòng kiểm tra lại! \033[0m"
echo " "
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
grep -n "^export TMOUT" /etc/profile
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
8. Kiểm tra và sửa lỗi khóa người dùng mặc định
8.1. Kiểm tra khóa người dùng mặc định
Kiểm tra xem các tài khoản hệ thống không cần thiết (ví dụ: bin, daemon, adm...) có bị khóa tài khoản hay không.
echo ""
echo "## Kiểm tra khóa người dùng mặc định ############################"
flag=0
users_to_check="bin daemon adm lp mail operator games ftp nobody systemd-bus-proxy systemd-network dbus polkitd abrt unbound tss libstoragemgmt rpc colord usbmuxd saslauth geoclue rtkit radvd rpcuser nfsnobody qemu chrony setroubleshoot pulse gdm gnome-initial-setup sshd avahi postfix ntp tcpdump mysql gluster"
locked_users=""
for user in ${users_to_check}; do
if id "$user" &>/dev/null; then # Kiểm tra xem user có tồn tại không
if [ "$(passwd -S "$user" | awk '{print $2}')" != "LK" ]; then
locked_users="$locked_users $user"
flag=1
fi
fi
done
if [ "$flag" -eq 0 ]; then
echo "Kiểm tra đạt"
else
echo "Kiểm tra không đạt. Người dùng chưa khóa: $locked_users"
fi
8.2. Sửa lỗi khóa người dùng mặc định
Sử dụng lệnh passwd -l để khóa các tài khoản người dùng mặc định không cần thiết.
UserList="bin daemon adm lp mail operator games ftp nobody systemd-bus-proxy systemd-network dbus polkitd abrt unbound tss libstoragemgmt rpc colord usbmuxd saslauth geoclue rtkit radvd rpcuser nfsnobody qemu chrony setroubleshoot pulse gdm gnome-initial-setup sshd avahi postfix ntp tcpdump mysql gluster"
echo "Bắt đầu khóa các tài khoản người dùng mặc định..."
for _user in ${UserList}; do
if id "$_user" &>/dev/null; then
if [ "$(passwd -S "$_user" | awk '{print $2}')" != "LK" ]; then
passwd -l "$_user"
echo "Đã khóa tài khoản: $_user"
fi
fi
done
echo -e "\033[1;36mSửa lỗi thành công, vui lòng kiểm tra lại! \033[0m"
9. Kiểm tra và sửa lỗi đồng bộ hóa NTP
9.1. Kiểm tra đồng bộ hóa NTP
Kiểm tra sự tồn tại của cấu hình NTP trong /etc/hosts, /etc/ntp.conf và /etc/sysconfig/ntpd.
echo ""
echo "## Kiểm tra đồng bộ hóa NTP ############################"
ntp_server_in_hosts=$(grep -c "ntpserver" /etc/hosts)
ntp_config_in_ntpconf=$(grep -c "server ntpserver minpoll" /etc/ntp.conf)
ntp_service_options=$(grep -c "OPTIONS=\"-x -p /var/run/ntpd.pid -g\"" /etc/sysconfig/ntpd)
if [ "$ntp_server_in_hosts" -eq 1 ] && [ "$ntp_config_in_ntpconf" -eq 1 ] && [ "$ntp_service_options" -eq 1 ]; then
echo "Kiểm tra đạt"
else
echo "Kiểm tra không đạt"
fi
9.2. Sửa lỗi đồng bộ hóa NTP
Cập nhật các tệp cấu hình NTP (/etc/hosts, /etc/ntp.conf, /etc/sysconfig/ntpd) và khởi động lại dịch vụ ntpd.
echo -e "\033[1;33mĐường dẫn tệp cấu hình: /etc/hosts \033[0m"
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
cat /etc/hosts
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
echo " "
# Cập nhật /etc/hosts
if grep -q "ntpserver" /etc/hosts; then
sed -i '/ntpserver/d' /etc/hosts
fi
echo "10.14.1.11 ntpserver" >> /etc/hosts
# Cập nhật /etc/ntp.conf
cat <<EOF > /etc/ntp.conf
driftfile /var/lib/ntp/drift
server ntpserver minpoll 4 maxpoll 4 prefer
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
EOF
# Cập nhật /etc/sysconfig/ntpd
if grep -q "OPTIONS=" /etc/sysconfig/ntpd; then
sed -i 's/^OPTIONS=.*/OPTIONS="-x -p /var/run/ntpd.pid -g"/' /etc/sysconfig/ntpd
else
echo 'OPTIONS="-x -p /var/run/ntpd.pid -g"' >> /etc/sysconfig/ntpd
fi
systemctl restart ntpd.service
systemctl enable ntpd.service
echo -e "\033[1;36mSửa lỗi thành công, dịch vụ ntpd đã được khởi động lại. Vui lòng sử dụng 'ntpq -p' để xác minh, sau đó kiểm tra lại! \033[0m"
echo " "
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
cat /etc/hosts
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
10. Kiểm tra và sửa lỗi cấu hình hệ thống (MOTD)
Tập lệnh kiểm tra xem tệp /etc/motd có chứa các thông báo chào mừng hệ thống theo định dạng quy định hay không. Nếu không, nó sẽ thêm vào.
echo ""
echo "## Kiểm tra cấu hình hệ thống (MOTD) ############################"
if grep -q 'SYSTEM-A:' /etc/motd; then
echo "Kiểm tra đạt"
else
echo "Kiểm tra không đạt"
fi
echo -e "\033[1;33mĐường dẫn tệp cấu hình: /etc/motd \033[0m"
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
cat /etc/motd
echo -e "\033[32m------------------------- Trước khi sửa -------------------------\033[0m"
echo " "
if ! grep -q 'SYSTEM-A:' /etc/motd; then
cat << EOF >> /etc/motd
#####################################
# APPSYSTEM: Tên hệ thống
# SYSTEM-A: Quản trị viên hệ thống A
# SYSTEM-B: Quản trị viên hệ thống B
#DESCRIPTION: Mô tả chức năng của máy chủ này
#####################################
EOF
echo -e "\033[1;36mSửa lỗi thành công, vui lòng kiểm tra lại! \033[0m"
fi
echo " "
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
cat /etc/motd
echo -e "\033[31m------------------------- Sau khi sửa -------------------------\033[0m"
11. Kiểm tra và sửa lỗi trạng thái EDR
Kiểm tra xem tiến trình liên quan đến EDR (Endpoint Detection and Response) có đang chạy hay không. Nếu không, nó sẽ cung cấp hướng dẫn cài đặt.
echo ""
echo "## Kiểm tra trạng thái EDR ############################"
if ps aux | grep -q 'edr'; then
echo "Kiểm tra đạt (EDR đang chạy)"
else
echo "Kiểm tra không đạt (EDR không chạy)"
echo -e "\033[1;33mLệnh cài đặt EDR:\033[0m"
echo -e "\033[1;33mwget --no-check-certificate https://10.15.32.15:4430/download_installer_linux.php -O linux_edr_installer.tar.gz && tar -xzvf linux_edr_installer.tar.gz && ./agent_installer.sh -c\033[0m"
fi
12. Kiểm tra và sửa lỗi trạng thái tường lửa
Kiểm tra xem dịch vụ tường lửa (firewalld) có đang chạy hay không. Phần sửa lỗi yêu cầu can thiệp thủ công tùy thuộc vào các cổng cần mở.
echo ""
echo "## Kiểm tra trạng thái tường lửa ############################"
if systemctl is-active --quiet firewalld; then
echo "Kiểm tra đạt (Firewall đang chạy)"
else
echo "Kiểm tra không đạt (Firewall không chạy)"
fi
echo -e "\e[1;31mDựa trên việc mở cổng, vui lòng sửa lỗi thủ công!\e[0m"
13. Kiểm tra và sửa lỗi cấu hình đăng nhập người dùng
Kiểm tra biến môi trường PS1 để đảm bảo cấu hình prompt cho người dùng root và người dùng thường.
echo ""
echo "## Kiểm tra cấu hình đăng nhập người dùng ############################"
if su - root -c 'env | grep PS1' &>/dev/null; then
echo "Kiểm tra đạt"
else
echo "Kiểm tra không đạt"
fi
echo -e "\033[1;33mĐường dẫn tệp cấu hình: /etc/profile\033[0m"
if grep -q 'export PS1=' /etc/profile; then
echo -e "\033[1;31mCấu hình PS1 đã tồn tại, không cần sửa lại!\033[0m"
else
cat <<EOF >> /etc/profile
user_id=\`id -u\`
if [ "\$user_id" = "0" ]; then
export PS1='\$LOGNAME@\$(hostname):\$PWD#'
else
export PS1='\$LOGNAME@\$(hostname):\$PWD\$'
fi
EOF
source /etc/profile
echo -e "\033[1;36mSửa lỗi thành công, vui lòng kiểm tra lại! \033[0m"
fi
II. Các chức năng khác
Hợp nhất các kiểm tra và sửa lỗi
Tập lệnh chính cho phép người dùng chọn thực hiện kiểm tra toàn bộ hệ thống bằng lệnh check hoặc sửa lỗi cho một mục cụ thể bằng lệnh repair theo số thứ tự.
#!/bin/sh
# ... (Các định nghĩa hàm kiểm tra và sửa lỗi ở trên) ...
##################
# Kiểm tra tất cả
##################
function checkBaseLine(){
echo "--- Bắt đầu kiểm tra an ninh cơ bản ---"
# Gọi các hàm kiểm tra ở đây
checkSystemStatus 1 "Thông tin hệ thống"
checkSshConfig 2 "Cấu hình SSH"
checkAccountPolicy 3 "Chính sách tài khoản"
checkPasswordComplexity 4 "Độ phức tạp mật khẩu"
checkLoginLock 5 "Khóa đăng nhập tài khoản"
checkRootUid 6 "Quyền root"
checkSessionTimeout 7 "Thời gian chờ phiên"
checkHistorySize 8 "Kích thước lịch sử lệnh"
checkNtpSync 9 "Đồng bộ hóa NTP"
checkSysConfigSet 10 "Cấu hình hệ thống (MOTD)"
checkEdrStatus 11 "Trạng thái EDR"
checkFirewallStatus 12 "Trạng thái tường lửa"
checkUserLoginConfig 13 "Cấu hình đăng nhập người dùng"
checkDefaultLockedUsers 14 "Khóa người dùng mặc định"
echo "--- Kết thúc kiểm tra an ninh cơ bản ---"
}
#############################################
# Main
#############################################
if [ "$#" -lt 1 ] || [ "$1" == "-h" ]; then
echo "Sử dụng: sh $0 [check | repair num]"
echo "Ví dụ: sh $0 check"
echo "Ví dụ: sh $0 repair 3"
else
if [ "$1" == "check" ]; then
checkBaseLine
elif [ "$1" == "repair" ]; then
case $2 in
1) repairSystemStatus 1 ;;
2) repairSshConfig 2 ;;
3) repairAccountPolicy 3 ;;
4) repairPasswordComplexity 4 ;;
5) repairLoginLock 5 ;;
6) repairRootUid 6 ;; # Cần can thiệp thủ công
7) repairSessionTimeout 7 ;;
8) repairHistorySize 8 ;;
9) repairNtpSync 9 ;;
10) repairSysConfigSet 10 ;;
11) repairEdr 11 ;; # Cần can thiệp thủ công
12) repairFirewall 12 ;; # Cần can thiệp thủ công
13) repairUserLoginConfig 13 ;;
14) repairDefaultLockedUsers 14 ;;
all) echo "Chức năng sửa tất cả chưa được hỗ trợ đầy đủ để tránh rủi ro." ;;
*) echo -e "\e[31mSố mục sửa lỗi không hợp lệ!\e[0m" ;;
esac
fi
fi
III. Lưu ý
- Tập lệnh này được thiết kế cho CentOS 7.x và có thể không tương thích với các phiên bản khác.
- Luôn sao lưu các tệp cấu hình trước khi chạy tập lệnh sửa lỗi.
- Một số bước sửa lỗi (như quyền root, tường lửa, EDR) yêu cầu sự can thiệp thủ công hoặc kiến thức chuyên môn.
- Thực hiện kiểm tra kỹ lưỡng sau khi áp dụng các thay đổi.