咨询热线:4006-75-4006
售前:9:00-23:30 备案:9:00-18:00 技术:7*24h
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
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。