等保二级-操作系统CentOS加固说明

文章目录

  • 等保二级加固
    • 操作系统
      • 加固说明
      • 加固脚本
      • 加固结果验证
    • 1Panel安装

等保二级加固

操作系统

加固说明

# 注释账户:lp,sync,shutdown,halt,news,uucp,operator,games,gopher
sed -i 's/^lp/#lp/g' /etc/passwd
sed -i 's/^sync/#sync/g' /etc/passwd
sed -i 's/^shutdown/#shutdown/g' /etc/passwd
sed -i 's/^halt/#halt/g' /etc/passwd
sed -i 's/^news/#news/g' /etc/passwd
sed -i 's/^uucp/#uucp/g' /etc/passwd
sed -i 's/^operator/#operator/g' /etc/passwd
sed -i 's/^games/#games/g' /etc/passwd
sed -i 's/^gopher/#gopher/g' /etc/passwd

#用户和用户组涉及系统稳定性,修改前需要备份
cp /etc/passwd /etc/passwd_bak

cp /etc/group /etc/group_bak

# 检查空口令账户
awk -F ":" '($2==""){print $1}' /etc/shadow

# 检查是否有相同id的用户
awk -F ":" '{print $3}' /etc/passwd

# 修改密码策略
#负数:代表最少出现次数,正数:代表最多出现次数
#minlen = 8,密码长度至少8位;
#lcredit=-1,至少包含一个小写字母;
#ucredit=-1,至少包含一个大写字母;
#dcredit=-1,至少包含要给数字;
#ocredit=-1,至少包含一个特殊字符;
#difok=5,新密码最多与旧密码重复5个字符;
#enforce_for_root,对root强制执行密码复杂度策略
cp /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
sed -r -i "s/(pam_pwquality.so ).*/\1try_first_pass local_users_only retry=3 authtok_type=  minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1/" /etc/pam.d/system-auth

# 修改密码长度
vim /etc/login.defs
#密码的最大有效期
PASS_MAX_DAYS   90
#密码更改之间允许的最小天数
PASS_MIN_DAYS   0
#密码最小长度,pam_pwquality设置优先
PASS_MIN_LEN    8
#密码失效前多少天在用户登录时通知用户修改密码
PASS_WARN_AGE   15

# 配置连接超时自动退出时间
vim /etc/profile
TMOUT=300s #300秒超时
source /etc/profile

# 配置连续失败登录次数
vim /etc/pam.d/sshd
# 在account配置首行添加下面的配置:
account    required     pam_tally2.so
# 在#%PAM-1.0后面添加下面的配置:
auth        required      pam_tally2.so onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300

# 禁止远程登陆,root作为默认重要账户,一般要求禁止远程登录
vim /etc/ssh/sshd_config
PermitRootLogin no

#查看是否启用了sshd服务
systemctl status sshd.service
#查看sshd端口是否打开
netstat -an | grep sshd
# 关闭sshd服务
systemctl stop sshd.service
# 禁止开机启动
systemctl disable sshd.service

#ssh登陆加固,若禁用了sshd,则此加固不用处理。
#1、编辑文件/etc/ssh/sshd_config
vim /etc/ssh/sshd_config
#2、修改配置
Port = *** --修改默认端口
AllowUsers 用户名[email protected] 用户名[email protected] --设置允许登录用户,多个用户可空格添加
AllowGroup *** --设置允许登录用户组
ListenAddress 0.0.0.0 --设置SSH指定的本地地址,多网卡可用
Protocol 2 --强制使用 V2安全协议 ,SSH1存在漏洞与缺陷
MaxAuthTries = 3 --修改允许密码错误次数
PermitRootLogin no --禁止使用root远程登录
RSAAuthentication yes --设置用户密钥登录,只针对SSH1
PubkeyAuthentication yes --设置是否开启公钥验证
PermitEmptyPasswords no --是否允许空密码
ClientAliveInterval 300 --设置SSH空闲超时退出时间,单位:秒
ClientAliveCountMax 0 --设置允许超时的次数 0即表示不允许超时
LogLevel INFO – 开通登录日志的详细记录
AllowAgentForwarding no –
AllowTcpForwarding no --设置是否允许允许tcp端口转发,保护其他的tcp连接
UseDNS no --设置不使用dns反向解析
MaxStartups 5 --设置同时允许5尚未登入的联机,当用户连上ssh但并未输入密码即为所谓的联机

加固脚本

#!/bin/bash

# 修改前备份
cp /etc/passwd /etc/passwd_bak

# 注释账户:lp,sync,shutdown,halt,news,uucp,operator,games,gopher
echo "###########delete user: sync,shutdown,halt,news,uucp,operator,games,gopher###########"
sed -i 's/^lp/#lp/g' /etc/passwd
sed -i 's/^sync/#sync/g' /etc/passwd
sed -i 's/^shutdown/#shutdown/g' /etc/passwd
sed -i 's/^halt/#halt/g' /etc/passwd
sed -i 's/^news/#news/g' /etc/passwd
sed -i 's/^uucp/#uucp/g' /etc/passwd
sed -i 's/^operator/#operator/g' /etc/passwd
sed -i 's/^games/#games/g' /etc/passwd
sed -i 's/^gopher/#gopher/g' /etc/passwd
sed -i 's/^ftp/#ftp/g' /etc/passwd
echo "###########delete user success###########"

# 检查空口令账户
echo "###########select user without password###########"
awk -F ":" '($2==""){print $1}' /etc/shadow

# 检查是否有相同id的用户
echo "###########select user id###########"
awk -F ":" '{print $3 | "sort -n"}' /etc/passwd

# 修改密码策略
#负数:代表最少出现次数,正数:代表最多出现次数
#minlen = 8,密码长度至少8位;
#lcredit=-1,至少包含一个小写字母;
#ucredit=-1,至少包含一个大写字母;
#dcredit=-1,至少包含要给数字;
#ocredit=-1,至少包含一个特殊字符;
#difok=5,新密码最多与旧密码重复5个字符;
#enforce_for_root,对root强制执行密码复杂度策略
cp /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
sed -r -i "s/(pam_pwquality.so ).*/\1try_first_pass local_users_only retry=3 authtok_type=  minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1/" /etc/pam.d/system-auth

#密码的最大有效期
cp /etc/login.defs /etc/login.defs.bak
sed -i '/^PASS_MAX_DAYS/d' /etc/login.defs
sed -i '/^PASS_MIN_DAYS/i\PASS_MAX_DAYS   90' /etc/login.defs

#密码更改之间允许的最小天数
sed -i '/^PASS_MIN_DAYS/d' /etc/login.defs
sed -i '/^PASS_MIN_LEN/i\PASS_MIN_DAYS   0' /etc/login.defs

#密码最小长度,pam_pwquality设置优先
sed -i '/^PASS_MIN_LEN/d' /etc/login.defs
sed -i '/^PASS_WARN_AGE/i\PASS_MIN_LEN   8' /etc/login.defs

##密码失效前多少天在用户登录时通知用户修改密码
sed -i '/^PASS_WARN_AGE/d' /etc/login.defs
sed -i '/^PASS_MIN_LEN/a\PASS_WARN_AGE   7' /etc/login.defs

# 配置连接超时自动退出时间
cp /etc/profile /etc/profile.bak
sed -i  '$a TMOUT=300s' /etc/profile
source /etc/profile

# 配置连续登陆失败次数
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
sed -i "/#%PAM-1.0/a\auth        required      pam_tally2.so onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300"  /etc/pam.d/sshd

sed -i "/-auth/a\account    required     pam_tally2.so"  /etc/pam.d/sshd

# 20230525
# 检查用户的状态,用户名后面是x,*,!!,则表示用户不能登陆,或没有密码不能登陆
sudo awk -F '[:]' '{print $2}' /etc/shadow

# 禁止账户远程登陆
sed -i '$a DenyUsers root' /etc/ssh/sshd_config
sudo systemctl restart sshd

# 禁止、停止sshd服务
sudo systemctl disable sshd
sudo systemctl stop sshd

# 关闭MySQL的3306端口
sudo firewall-cmd --zone=public --remove-port=3306/tcp --permanent

  • 加固结果验证

# 身份鉴别:
# 应对登录用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度进行要求并定期更换;
# 1. 检查空口令账户:正面命令若能查到数据,则表明有空口令账户。
sudo awk -F ":" '($2==""){print $1}' /etc/shadow
# 2. 查看用户id,检查身份标识唯一性,确认没有相同id的用户。
sudo awk -F ":" '{print $3 | "sort -n"}' /etc/passwd
# 3. 密码长度和定期更换要求
sudo cat /etc/login.defs
# 4. 密码复杂度:
sudo grep 'pam_pwquality.so' /etc/pam.d/system-auth

# 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;操作系统层面应限制同一用户连续失败登录次数;
# 1. 非法登陆次数,锁定时间:连续输入错误3次,则锁定5分钟
grep 'pam_tally2.so' /etc/pam.d/system-auth
# 2. 连接超时时间:5分钟
grep 'TMOUT' /etc/profile

# 当进行远程管理时,应采取必要措施,防止鉴别信息在网络传输过程中被窃听;
# 1. 查看防火墙状态,确认防火墙开启
systemctl status firewalld
# 2. 查看sshd服务状态,确认该服务关闭,不可通过ssh远程访问
systemctl status sshd
# 3. 查看telnet服务的状态
systemctl status telnet.socket


# 访问控制
# 应对登录的用户分配账户和权限:Linux系统对文件的操作权限包括四种:读(r,4);写(w,2);执行(x,1);空(-,0),文件的权限分为属主(拥有者)、属组、其它用户和用户组的权限。配置文件权限值不能大于644,对于可执行文件不能大于755。查看某文件的权限
ls -l /etc/passwd

# 应重命名或删除默认账号,修改默认账号的默认口令;
# 1. 应及时删除或停用多余的、过期的账户,避免共享账户的存在;
 grep '#' /etc/passwd
 # 2. 检查用户的状态,用户名后面是x,*,!!,则表示用户不能登陆,或没有密码不能登陆
sudo awk -F '[:]' '{print $2}' /etc/shadow


# 入侵防范
# 1. 禁止使用易遭受恶意攻击的高危端口作为服务端口,禁止开启与业务无关的服务端口。查看防火墙开启的端口
firewall-cmd --zone=public --list-ports

1Panel安装

  • 1Panel主要负责提供资源监视功能或接口,监视内容包括CPU、硬盘、内存、网络等资源的使用情况。
  • 参见:https://1panel.cn/
  • 执行下面的命令进行安装:
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh

你可能感兴趣的:(centos,linux,运维)