伺服器安全加固 - Linux

wubolive發表於2022-04-29

一、賬號和口令

1.1 禁用或刪除無用賬號

檢視 /etc/passwd 檔案檢視是否有無用的賬號,如果存在則刪除,降低安全風險。

操作步驟:

  • 使用命令 userdel <使用者名稱> 刪除不必要的賬號。
  • 使用命令 passwd -l <使用者名稱> 鎖定不必要的賬號。
  • 使用命令 passwd -u <使用者名稱> 解鎖必要的賬號。

1.2 檢查特殊賬號

操作步驟:

  1. 檢視空口令和root許可權賬號,確認是否存在異常賬號:
    • 使用命令 awk -F: '($2=="")' /etc/shadow 檢視空口令賬號。
    • 使用命令 awk -F: '($3==0)' /etc/passwd 檢視UID為零的賬號。
  2. 加固空口令賬號:
    • 使用命令 passwd <使用者名稱> 為空口令賬號設定密碼。
    • 確認UID為0的賬號只有root賬號。

1.3 新增口令策略

操作步驟

  1. 使用命令 vim /etc/login.defs 修改配置檔案。
    • PASS_MAX_DAYS 90   #新建使用者的密碼最長使用天數
    • PASS_MIN_DAYS 0     #新建使用者的密碼最短使用天數(兩次修改口令的最小間隔時間)
    • PASS_MIN_LEN  8     #新建使用者的密碼最小長度
    • PASS_WARN_AGE 14   #新建使用者的密碼到期提前提醒天數
  2. 使用chage命令修改使用者設定。

    # 設定使用者密碼最短使用天數為7天,密碼最長使用天數為30天,過期前14天警告使用者
    sudo chage -m 7 -M 90 -W 14 root   
    sudo chage -m 7 -M 90 -W 14 admin
    # 密碼過期時間檢視方法:
    [admin@Centos7 ~]$ sudo chage -l root
    Last password change                               : Sep 14, 2020【最近一次修改密碼的時間】
    Password expires                                   : Dec 13, 2020【密碼過期時間】
    Password inactive                                  : never【密碼失效時間】
    Account expires                                    : never【賬戶過期時間】
    Minimum number of days between password change     : 7【兩次改變密碼之間相距最小天數】
    Maximum number of days between password change     : 90【兩次密碼改變密碼相距最大天數】
    Number of days of warning before password expires  : 15【密碼過期前開始警告的天數】
  3. 密碼鎖定策略
    # 設定連續輸錯五次密碼,賬號鎖定五分鐘。
    vim /etc/pam.d/system-auth
    auth        required      pam_tally2.so onerr=fail deny=5 unlock_time=300 even_deny_root root_unlock_time=90
    說明:
    • deny:設定普通使用者和root使用者連續錯誤登陸的最大次數,超過最大次數,則鎖定該使用者
    • unlock_time:設定普通使用者鎖定後,多少時間後解鎖,單位是秒
    • root_unlock_time:設定root使用者鎖定後,多少時間後解鎖,單位是秒
  4. 密碼複雜度
    # 設定使用者密碼最小長度8位,必須包含大小寫字母+數字+特殊字元(root使用者同理)
    vim /etc/pam.d/system-auth
    password    requisite     pam_pwquality.so try_first_pass local_users_only minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
    password    required      pam_pwhistory.so use_authtok remember=5 enforce_for_root
    vim /etc/pam.d/password-auth
    password    requisite     pam_pwquality.so try_first_pass local_users_only minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
    password    required      pam_pwhistory.so use_authtok remember=5 enforce_for_root
    說明:
    • minlen=8:將密碼的最小長度設定為8個字元。
    • lcredit=-1 :將密碼應包含的小寫字母的最小數目設定為至少一個
    • ucredit=-1:將密碼上的大寫字母的最小數目設定為至少一個。
    • dcredit=-1 :將密碼中包含的最小位數至少設定為一個
    • ocredit=-1:設定其他符號的最小數量,例如@,#、! $%等,至少要有一個密碼
    • remember=5:口令不能修改為過去5次使用過的舊口令
    • enforce_for_root :確保即使是root使用者設定密碼,也應強制執行複雜性策略。

1.4 限制使用者su

操作步驟

使用命令 vim /etc/pam.d/su修改配置檔案,在配置檔案中新增行。
例如,只允許admin組使用者su到root,則新增 auth required pam_wheel.so group=admin

【可選】為了方便操作,可配置admin支援免密sudo:在 /etc/sudoers 檔案中新增 admin ALL=(ALL) NOPASSWD:ALL

1.5 加固su命令

為了防止使用"su"命令將當前使用者環境變數帶入其它使用者,修改/etc/login.defs新增ALWAYS_SET_PATH=yes並儲存。

1.6 禁止root使用者直接登入

操作步驟

  1. 建立普通許可權賬號並配置密碼,防止無法遠端登入,如:

    groupadd -g 1000 admin && useradd -g admin -c "Administrator" -u 1000 -n -s /bin/bash admin
  2. 使用命令 vi /etc/ssh/sshd_config修改配置檔案將PermitRootLogin的值改成no,並重啟sshd服務。

二、系統服務

2.1 關閉不必要的服務

操作步驟:

檢視所有服務列表 systemctl list-units --type=service

  • 關閉不必要的服務:systemctl stop <服務名>
  • 設定開機不自啟動:systemctl disable <服務名>

2.2 SSH服務安全

操作步驟

使用命令vim /etc/ssh/sshd_config編輯配置檔案。

PermitRootLogin no  # 不允許root賬號直接登入系統
Protocol 2          # 修改SSH使用的協議版本
MaxAuthTries 3      # 修改允許密碼錯誤次數(預設6次)
ClientAliveInterval 60   # server每隔60秒給客戶端傳送一次保活資訊包給客戶端
ClientAliveCountMax 30   # server端發出的請求客戶端沒有回應的次數達到30次的時候就斷開連線。

配置檔案修改完成後,重啟sshd服務生效(systemctl restart sshd)。

三、檔案系統

3.1 設定umask值

操作步驟

修改/etc/profile 配置檔案,新增行 umask 027, 即新建立的檔案屬主擁有讀寫執行許可權,同組使用者擁有讀和執行許可權,其他使用者無許可權。

3.2 設定登入超時

操作步驟

修改/etc/profile 配置檔案,設定為TMOUT=600,表示超時10分鐘無操作自動退出登入。

四、系統日誌

4.1 syslogd日誌

操作步驟

Linux系統預設啟用以下型別日誌,配置檔案為 /etc/rsyslog.conf:

  • 系統日誌(預設)/var/log/messages
  • cron日誌(預設)/var/log/cron
  • 安全日誌(預設)/var/log/secure

4.2 記錄所有使用者的登入日誌和操作日誌

# 開啟配置檔案/etc/profile,在配置檔案最後中輸入以下內容:
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
  USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
  mkdir /var/log/history
  chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
  mkdir /var/log/history/${LOGNAME}
  chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null
# 執行source使其生效
source /etc/profile

通過上述步驟,可以在 /var/log/history 目錄下以每個使用者為名新建一個資料夾,每次使用者退出後都會產生以使用者名稱、登入IP、時間的日誌檔案,包含此使用者本次的所有操作(root使用者除外)

相關文章