1.操作系统安全加固方案
(1)版本升级
(2)关闭端口服务
(3)修改配置项
(4)修改代码
(5)主机和网络ACL策略
(6)部署设备防护
2.安全加固测试
(1)回退测试
系统及数据备份,回退操作验证
(2)业务测试
利用现网或搭建虚拟环境进行业务测试,确认加固是否影响业务
(3)有效性测试
利用现网环境或者搭建虚拟环境惊醒安全风险测试,确认加固有效性
3.Linux加固方向
(1)账号管理与认证授权
创建多用途账号,为不同的管理员分配不同的账号
修改目录权限
普通账户使用特定权限命令
使用 which 命令 查看命令文件地址
visudo命令 更改命令权限
检查权限过高的文件
find / type f \( -perm -00777 \) -a -ctime -天数 -exec ls -lg {} \:
ctime:属性变更的文件
mtime:内容修改的文件
atime:被访问的文件
限制超级管理员远程登录
修改远程管理程序ssh的配置文件
vi /etc/ssh/sshd_config
PermitRootLogin yes
PermitRootLogin no
重启sshd服务
systemctl restart sshd
删除root以外UID为0的用户
awk -F: ‘($3==0) {print $1}’ /etc/passwd 找出第三列为0并打印对应的用户 名
uerdel -r 用户名
查找是否存在高权限组
筛出组ID的最小值并打印ID
grep -v ^# /etc/login.defs |grep “^GID_MIN” |awk ‘{print $2}’
找出危险组,是否有账户加入到root组里面
awk -F: ‘$3>500{print $1}’ /etc/passwd | xargs -I {} grep {} /etc/group
缩短默认密码生存周期
修改文件密码策略文件
vim /etc/login.defs
PASS_MAX_DAYS 99 最长使用期限
PASS_MIN_DAYS 0 最短使用期限
PASS_MIN_LEN 8 密码最小长度
PASS_WARN_AGE 7 第几天提醒更改密码
设置密码强度策略
修改pam认证文件
vim /etc/pam.d/system-auth
password requisite pam_cracklib.so
try_first_pass retry=更改密码次数 dcredit=
minlen=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个相同连续字符的密码。 默认值为0表 示禁用此检查
maxsequence=N:拒绝包含长于N的单调字符序列的密码。默认值为0表 示禁用此检查。实例是'12345'或'fedcb'。除非序列只是密码的一小部分, 否则大多数此类密码都不会通过简单检查。
或者使用authconfig命令
--passminlen=<number> 最小密码长度
--passminclass=<number> 密码中字符最小个数
--passmaxrepeat=<number> 密码中相同连续字符的最大个数
--passmaxclassrepeat=<number> 密码中同类连续字符的最大个数
--enablereqlower 使能密码中至少包含一个小写字母
--disablereqlower 失能密码中至少包含一个小写字母
--enablerequpper 使能密码中至少包含一个大写字母
--disablerequpper 失能密码中至少包含一个大写字母
--enablereqdigit 使能密码中至少包含一个数字
--disablereqdigit 失能密码中至少包含一个数字
--enablereqother 使能密码中至少包含一个特殊字符
--disablereqother 失能密码中至少包含一个特殊字符
这些命令其实是修改/etc/security/pwquality.conf配置文件
设置强制密码历史,同样是修改/etc/pam.d/system-auth
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=不能跟之前多少个密码相冲突
设置账户锁定策略
修改/etc/pam.d/system_auth
/etc/pam.d/sshd
/etc/pam.d/login
auth required pam_tallyy2.so deny=6
unlock_time=300 even_deny_root
root_unlock_time=60
设置关键目录权限
更改文件属组
chmod 644 /etc/passwa
chmod 600 /etc/shadow
chmod 644 /etc/group
修改umask值
修改脚本文件
/etc/profile
/etc/csh.login
/etc/csh.cshrc
/etc/bashrc
在文件末尾加入umask值
umask 027
限制硬件资源
修改限制文件
vi /etc/security/limits.conf
修改pam的本地登陆文件
session required /lib64/security/pam_limits.so
日常收集进程数使用
ps aux |grep httpd |wc -1
对用户使用ls、rm设置别名
vi ~/.bashrc
追加别名命令
alias ls=”ls -alh”
alias rm=”rm -i”
禁止任何人su为root账户
修改su配置文件
/etc/pam.d/su
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_wheel.so
group=wheel
如果需要su切换,将用户加入wheel组
gpasswd -a username wheel
去掉SUID和SGID
查找具有所有SUID和SGID的对象
find / -type f \(-perm -0400 -o -perm -02000 \) |xargs -l {} ls -lh {}
chmod ugo -s
对开放目录设置粘滞位
为/tmp目录设值粘滞
chmod +t /tmp/
重要日志权限不应该高于640
ls -la /var/log/
chmod -R 640 /var/log
设置关键文件底层属性
chattr +a /var/log/messages
chattr +i /var/log/messages.*
chattr +i /etc/shadow
chattr +i /etc/passwd
chattr +i /etc/group
设置日志服务器
(2)通讯协议
关闭非加密远程管理telnet
修改telnet配置文件
vim /etc/xinetd.d/telnet
disable=yes
使用加密的远程管理ssh
安装ssh
修改配置文件
vim /etc/ssh/sshd_config
禁止root登录,修改默认端口,开启v2版本
PermitRoootLogin no
Port 20202
Protocol 2
重启服务
systemctl restart sshd
设置访问控制列表
修改拒绝策略
vim /etc/hosts.deny
加入信息
ALL:ALL
修改允许策略
vim /etc/hosts.allow
加入信息
sshd:来访者IP地址
固化常用DNS解析
修改hosts文件
vim /etc/hosts
加入解析信息
IP 服务器域名
打开syncookie
修改系统控制文件
vim /etc/sysctl.conf
net.ipv4.tcp_syncookies=1
配置生效
sysctl -p
不响应ICMP请求
修改网络策略布尔值
echo 1 > /proc/sys/net/ipv4/icmp_echo_i gnore_all
禁止处理无源路由
sysctl -n net.ipv4.conf.accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
防御syn flood攻击优化
查询当前半连接上限
sysctl net.ipv4.tcp_max_syn_backlog
修改半连接上限
sysctl -w net.ipv4.tcp_max_syn_backlog=”2048”
防止半握手的泛洪攻击
FTP使用黑名单限制
检查黑名单文件是否包含高危账户
/etc/ftpusers
root deamon bin sys adm lp uucp nuucp listen nobody noaccess nobody4
使用白名单文件
/etc/usr_list
配置文件中是否存在
userlist_deny=NO
userlist_enable=YES
FTP设置上传文件后的默认权限
检查主配置文件/etc/vsftpd.conf是否存在以下内容
write_enable=YES
local_umask=022
anon_umask=022
FTP设置banner信息
检查主配置文件/etc/vsftpd.conf是否存在以下内容
ftpd_banner=”Authoried users only.All activity may be monitored and reported.”
配置可信NTP服务器,并确保服务开启
检查主配置文件/etc/ntp.conf是否存在如下内容
server x.x.x.x
确保服务器被启用
systemctl enable ntpd
systemctl status ntpd
检查账户目中是否存在高危文件.netrc .rhosts
远程主机文件
for DIR in ‘cut -d”:” -f6 /etc/passwd’; do
if [ -e $IDR/.netrc ]; then
echo “$DIR/.netrc”
fi
done
无返回值则表示正常
(3)补丁管理
补丁安装
先进行服务克隆,然后进行补丁测试,却保服务可用再在业务服务器上使用
(4)服务与启动项
关闭NFS服务
检查是否存在敏感进程
ps aux |grep -E “lockd|nfsd|statd|mountd”
检查关闭NFS相关服务
systemctl list-unit-files |grep nfs
systemctl disable nfs-client.target
关闭无用自启服务
检查自启服务
systemctl list-unit-files |grep enabled
禁用
systemctl stop 服务名
systemctl disable 服务名
一般用来作为服务器的操作系统必须时最小化安装,防止无用服务占用资 源
(5)banner与自动注销
隐藏系统提示信息
查看banner信息
cat /etc/issue
清空banner文件
echo > /etc/issue
设置登陆超时注销
修改/etc/profile
vim /etc/profile
减少history历史数量
HISTFILESIZE=50
在HISTFILESIZE下面加入,设置超时时间
TMOUT=180
生效
source /etc/profile
跳过grup菜单
修改grup配置文件
vim /boot/grup2/grup.cfg
set timeout=0
禁用ctrl+alt+del重启功能
vim /usr/lib/systemd/system/ctrl-alt-del.target
注释所有内容