- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業務經營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯網協會理事單位
- 安全聯盟認證網站身份V標記
- 域名注冊服務機構許可:滇D3-20230001
- 代理域名注冊服務機構:新網數碼
Linux系統的簡單安全加固
歡迎來到藍隊云技術小課堂,每天分享一個技術小知識。
適用于 CentOS 7
---
- name: secure linux
hosts: all
ignore_errors: true
vars:
pass_max_days: 90 # 密碼過期時間
# 密碼復雜度相關
minlen: 8 # 最少位數
minnum: 1 # 數字出現的最少次數,配置為0表示不校驗是否包含數字
minupper: 1 # 大寫字母出現的最少次數,配置為0表示不校驗是否包含大寫字母
minlower: 1 # 小寫字母出現的最少次數,配置為0表示不校驗是否包含小寫字母
minspecial: 1 # 特殊字符出現的最少次數,配置為0表示不校驗是否包含特殊字符
# 用戶連續登錄幾次失敗就鎖定用戶
user_deny: 3
# 用戶鎖定時長,單位秒
user_lock_time: 300
# 會話超時,多長時間沒有操作退出用戶,單位秒
tmout: 900
# 歷史命令保留條數
his_size: 10000
# 服務相關
stop_and_disable_services: ["telnet", "bluetooth"] # 要禁用的服務
start_and_enable_services: ["rsyslog", "auditd"] # 要啟動的服務
# 內核參數修改
kernel_params:
- { key: 'net.ipv4.tcp_max_syn_backlog', value: '1024' }
tasks:
- name: 配置密碼周期策略
command: sed -r -i 's#(PASS_MAX_DAYS)\\\\s+([0-9]+)#\\\\1 {{ pass_max_days }}#' /etc/login.defs
- name: 配置密碼復雜度
command: sed -r -i 's#(password\\\\s+requisite\\\\s+)(.*)#\\\\1pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen={{ minlen }} dcredit=-{{ minnum }} ucredit=-{{ minupper }} lcredit=-{{ minlower }} ocredit=-{{ minspecial }}#' /etc/pam.d/system-auth
- name: 配置登錄失敗策略
command: sed -i '1a\\\\auth required pam_tally2.so onerr=fail deny={{ user_deny }} unlock_time={{ user_lock_time }} even_deny_root root_unlock_time={{ user_lock_time }}' /etc/pam.d/sshd
- name: 停止服務
service:
name: "{{ item }}"
state: stopped
loop: "{{ stop_and_disable_services }}"
register: stop_service
- name: 禁用服務
service:
name: "{{ item }}"
enabled: no
loop: "{{ stop_and_disable_services }}"
when: stop_service is succeeded
- name: 啟動服務
service:
name: "{{ item }}"
state: started
loop: "{{ start_and_enable_services }}"
register: start_service
- name: 配置開機自啟動
service:
name: "{{ item }}"
enabled: yes
loop: "{{ start_and_enable_services }}"
when: start_service is succeeded
- name: 延長日志保存時間
shell: sed -i 's/week/month/g' /etc/logrotate.conf && sed -i 's/rotate 4/rotate 6/' /etc/logrotate.conf && sed -i 's/rotate 1/rotate 6/' /etc/logrotate.conf
- name: 添加會話超時鎖定
command: sed -i '$a\\\\export TMOUT={{ tmout }}' /etc/profile
- name: 修改內核參數
command:
cmd: "sysctl -w {{ item.key }}={{ item.value }}"
loop: "{{ kernel_params }}"
- name: 修改歷史命令保存條數
command: sed -i 's/^HISTSIZE=1000/HISTSIZE={{ his_size }}/g' /etc/profile
- name: 修改歷史命令顯示內容
shell:
cmd: |
cat << EOF >> /etc/profile
USER_IP=\\\\$(who -m 2>/dev/null | awk '{print \\\\$NF}' |sed -e 's/[()]//g')
if [ "\\\\$USER_IP" = "" ];then
USER_IP=\\\\$(hostname)
fi
export HISTTIMEFORMAT="%F %T \\\\$USER_IP \\\\$(whoami) "
shopt -s histappend
export PROMPT_COMMAND="history -a"
EOF
- name: 重載/etc/profile
shell: . /etc/profile && echo ''
密碼復雜度參數詳解
密碼復雜度配置通過修改 /etc/pam.d/system-auth 來實現,主要關注這一行
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
之前使用 pam_cracklib.so 模塊,后來改成了 pam_pwquality.so ,后者是完全兼容前者的也可通過修改 /etc/security/pwquality.conf 文件來修改密碼復雜度
retry=N: 定義修改密碼時,在滿足需求之前可以重試的次數
authtok_type: 默認設置密碼時的提示信息是:New password:,如果設置authtok_type=FOO,則提示信息是:New FOO password
minlen=N: 新密碼的最小長度
minclass=N: 四種類型的字符串中至少要包含幾種(數字、大寫字母、小寫字母、特殊符號)
dcredit=N: 當N>0時表示新密碼中數字出現的最多次數;當N<0時表示新密碼中數字出現最少次數
ucredit=N: 當N>0時表示新密碼中大寫字母出現的最多次數;當N<0時表示新密碼中大寫字母出現最少次數
lcredit=N: 當N>0時表示新密碼中小寫字母出現的最多次數;當N<0時表示新密碼中小寫字母出現最少次數
ocredit=N: 當N>0時表示新密碼中特殊字符出現的最多次數;當N<0時表示新密碼中特殊字符出現最少次數
maxrepeat=N: 拒絕包含多于N個相同連續字符的密碼,比如("aaaaaa")這種
maxsequence=N: 拒絕包含長于N的單調字符序列的密碼,比如("12345")這種。(建議使用maxclassrepeat代替)
maxclassrepeat=N: 新密碼中允許的最大連續相同類型的字符,限制比如("123456")這種
enforce_for_root: 如果用戶更改密碼是root,則模塊將在失敗檢查時返回錯誤。默認情況下,此選項處于關閉狀態,只打印有關失敗檢查的消息,但root仍可以更改密碼。不要求root用戶輸入舊密碼,因此不會執行比較舊密碼和新密碼的檢查
gecoscheck: 是否檢查密碼中包含要修改用戶的用戶名,比如用戶名是poorops,則密碼中不能包含poorops
我測試復雜度配置大于0無效,即配置了dcredit=3,但是密碼中包含大于3個的數字也是可以的
登錄失敗策略參數詳解
even_deny_root: 表示也限制root用戶
deny: 表示設置普通用戶和root用戶連續錯誤登陸的最大次數,超過最大次數,則鎖定該用戶
unlock_time: 表示設定普通用戶鎖定后,多少時間后解鎖,單位是秒
root_unlock_time: 表示設定root用戶鎖定后,多少時間后解鎖,單位是秒
命令歷史顯示效果
997 2025-01-13 18:01:52 192.168.71.190 root history | tail
998 2025-01-13 18:01:52 192.168.71.190 root history
999 2025-01-13 18:01:52 192.168.71.190 root cat /etc/profile
1000 2025-01-13 18:01:52 192.168.71.190 root exit
1001 2025-01-13 18:01:05 192.168.71.190 root history | tail
1002 2025-01-13 18:01:37 192.168.71.190 root vim /etc/profile
1003 2025-01-13 18:01:47 192.168.71.190 root source /etc/profile
1004 2025-01-13 18:01:50 192.168.71.190 root exit
1005 2025-01-13 18:01:57 192.168.71.190 root history | tail
藍隊云官網上擁有完善的技術支持庫可供參考,大家可自行查閱,更多技術問題,可以直接咨詢。同時,藍隊云整理了運維必備的工具包免費分享給大家使用,需要的朋友可以直接咨詢。
提交成功!非常感謝您的反饋,我們會繼續努力做到更好!
這條文檔是否有幫助解決問題?
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP