- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認(rèn)證網(wǎng)站身份V標(biāo)記
- 域名注冊服務(wù)機(jī)構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機(jī)構(gòu):新網(wǎng)數(shù)碼
Linux系統(tǒng)的簡單安全加固
歡迎來到藍(lán)隊(duì)云技術(shù)小課堂,每天分享一個(gè)技術(shù)小知識。
適用于 CentOS 7
---
- name: secure linux
hosts: all
ignore_errors: true
vars:
pass_max_days: 90 # 密碼過期時(shí)間
# 密碼復(fù)雜度相關(guān)
minlen: 8 # 最少位數(shù)
minnum: 1 # 數(shù)字出現(xiàn)的最少次數(shù),配置為0表示不校驗(yàn)是否包含數(shù)字
minupper: 1 # 大寫字母出現(xiàn)的最少次數(shù),配置為0表示不校驗(yàn)是否包含大寫字母
minlower: 1 # 小寫字母出現(xiàn)的最少次數(shù),配置為0表示不校驗(yàn)是否包含小寫字母
minspecial: 1 # 特殊字符出現(xiàn)的最少次數(shù),配置為0表示不校驗(yàn)是否包含特殊字符
# 用戶連續(xù)登錄幾次失敗就鎖定用戶
user_deny: 3
# 用戶鎖定時(shí)長,單位秒
user_lock_time: 300
# 會話超時(shí),多長時(shí)間沒有操作退出用戶,單位秒
tmout: 900
# 歷史命令保留條數(shù)
his_size: 10000
# 服務(wù)相關(guān)
stop_and_disable_services: ["telnet", "bluetooth"] # 要禁用的服務(wù)
start_and_enable_services: ["rsyslog", "auditd"] # 要啟動(dòng)的服務(wù)
# 內(nèi)核參數(shù)修改
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: 配置密碼復(fù)雜度
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: 停止服務(wù)
service:
name: "{{ item }}"
state: stopped
loop: "{{ stop_and_disable_services }}"
register: stop_service
- name: 禁用服務(wù)
service:
name: "{{ item }}"
enabled: no
loop: "{{ stop_and_disable_services }}"
when: stop_service is succeeded
- name: 啟動(dòng)服務(wù)
service:
name: "{{ item }}"
state: started
loop: "{{ start_and_enable_services }}"
register: start_service
- name: 配置開機(jī)自啟動(dòng)
service:
name: "{{ item }}"
enabled: yes
loop: "{{ start_and_enable_services }}"
when: start_service is succeeded
- name: 延長日志保存時(shí)間
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: 添加會話超時(shí)鎖定
command: sed -i '$a\\\\export TMOUT={{ tmout }}' /etc/profile
- name: 修改內(nèi)核參數(shù)
command:
cmd: "sysctl -w {{ item.key }}={{ item.value }}"
loop: "{{ kernel_params }}"
- name: 修改歷史命令保存條數(shù)
command: sed -i 's/^HISTSIZE=1000/HISTSIZE={{ his_size }}/g' /etc/profile
- name: 修改歷史命令顯示內(nèi)容
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 ''
密碼復(fù)雜度參數(shù)詳解
密碼復(fù)雜度配置通過修改 /etc/pam.d/system-auth 來實(shí)現(xiàn),主要關(guān)注這一行
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 文件來修改密碼復(fù)雜度
retry=N: 定義修改密碼時(shí),在滿足需求之前可以重試的次數(shù)
authtok_type: 默認(rèn)設(shè)置密碼時(shí)的提示信息是:New password:,如果設(shè)置authtok_type=FOO,則提示信息是:New FOO password
minlen=N: 新密碼的最小長度
minclass=N: 四種類型的字符串中至少要包含幾種(數(shù)字、大寫字母、小寫字母、特殊符號)
dcredit=N: 當(dāng)N>0時(shí)表示新密碼中數(shù)字出現(xiàn)的最多次數(shù);當(dāng)N<0時(shí)表示新密碼中數(shù)字出現(xiàn)最少次數(shù)
ucredit=N: 當(dāng)N>0時(shí)表示新密碼中大寫字母出現(xiàn)的最多次數(shù);當(dāng)N<0時(shí)表示新密碼中大寫字母出現(xiàn)最少次數(shù)
lcredit=N: 當(dāng)N>0時(shí)表示新密碼中小寫字母出現(xiàn)的最多次數(shù);當(dāng)N<0時(shí)表示新密碼中小寫字母出現(xiàn)最少次數(shù)
ocredit=N: 當(dāng)N>0時(shí)表示新密碼中特殊字符出現(xiàn)的最多次數(shù);當(dāng)N<0時(shí)表示新密碼中特殊字符出現(xiàn)最少次數(shù)
maxrepeat=N: 拒絕包含多于N個(gè)相同連續(xù)字符的密碼,比如("aaaaaa")這種
maxsequence=N: 拒絕包含長于N的單調(diào)字符序列的密碼,比如("12345")這種。(建議使用maxclassrepeat代替)
maxclassrepeat=N: 新密碼中允許的最大連續(xù)相同類型的字符,限制比如("123456")這種
enforce_for_root: 如果用戶更改密碼是root,則模塊將在失敗檢查時(shí)返回錯(cuò)誤。默認(rèn)情況下,此選項(xiàng)處于關(guān)閉狀態(tài),只打印有關(guān)失敗檢查的消息,但root仍可以更改密碼。不要求root用戶輸入舊密碼,因此不會執(zhí)行比較舊密碼和新密碼的檢查
gecoscheck: 是否檢查密碼中包含要修改用戶的用戶名,比如用戶名是poorops,則密碼中不能包含poorops
我測試復(fù)雜度配置大于0無效,即配置了dcredit=3,但是密碼中包含大于3個(gè)的數(shù)字也是可以的
登錄失敗策略參數(shù)詳解
even_deny_root: 表示也限制root用戶
deny: 表示設(shè)置普通用戶和root用戶連續(xù)錯(cuò)誤登陸的最大次數(shù),超過最大次數(shù),則鎖定該用戶
unlock_time: 表示設(shè)定普通用戶鎖定后,多少時(shí)間后解鎖,單位是秒
root_unlock_time: 表示設(shè)定root用戶鎖定后,多少時(shí)間后解鎖,單位是秒
命令歷史顯示效果
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
藍(lán)隊(duì)云官網(wǎng)上擁有完善的技術(shù)支持庫可供參考,大家可自行查閱,更多技術(shù)問題,可以直接咨詢。同時(shí),藍(lán)隊(duì)云整理了運(yùn)維必備的工具包免費(fèi)分享給大家使用,需要的朋友可以直接咨詢。
提交成功!非常感謝您的反饋,我們會繼續(xù)努力做到更好!
這條文檔是否有幫助解決問題?
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP