安全加固的方案原则
版本升级
对于系统和应用在使用过程中暴露的安全缺陷,系统或应用厂商会及时发布解决问题的升级补丁包。升级系统或应用版本,可有效解决旧版本存在的安全风险。
关闭端口服务
在不影响业务系统正常运行的情况下,停止或禁用承载业务无关的服务和服务端口,可有效避免无关服务造成的安全风险。
修改配置项
操作系统,安全设备,数据库,中间件,第三方应用和业务系统可更改的配置中与安全相关的设置参数等信息,通过修改安全配置,可以为网络和应用提供必要的安全保障。
主机和网络ACL策略
网络ACL策略用于控制网络流量进出网络设备的权限。它可以基于源IP地址、目标IP地址、协议类型、端口号等条件来过滤和控制网络流量。控制对内网资源的访问能力,来保障资源安全性。
部署设备防护
部署设备防护的安全加固方式一般有设备厂商完成。
修改代码
一般是由系统开发商完成,安全加固支持方仅提供加固建议以及加固有效性验证。
安全加固测试
回退测试
回退测试是在安全加固措施后,对系统和应用程序的一系列检测,以验证安全措施是否有效,并且在发现问题时,能安全,有效的返回之前的状态。
业务测试
在完成安全加固措施后,需要对业务进行测试,看是否安全加固措施影响业务。
有效性测试
有效性测试是在安全加固后对系统和应用程序的一系列检测,以验证安全加固测试的有效性和可行性,实际上就是看安全加固是否达到了预期。
linux加固方向
账号管理与认证授权
1,为不同的管理员分配不同的账号
目的:根据不同用途设置不同账户,提高安全层级。
实施方法:创建多个不同用途账号 useradd abc
修改目录权限 chmod 750 dir
普通用户使用特定授权命令 sudo
修改sudo提权应用
假如abc可以在本地使用useradd命令
abc localhost=/usr/sbin/useradd 多个命令用","隔开
2,检查高权限文件
find / -type f -perm -00007 -ctime -1 -exec ls -lg {} \;
-perm -00007
:表示搜索权限为00007的文件,即其他用户具有读、写和执行权限的文件。-ctime -1
:表示搜索最近一天(24小时内)被修改过的文件。-exec ls -lg {} \;
:表示对每个搜索到的文件执行ls -lg
命令,并将文件的详细信息打印出来。
在根目录下搜索权限00007的文件,对其执行ls -lg命令,打印出文件的详细信息。
ctime:属性变更
mtime:内容修改
atime:被访问
3,去除不需要的账号,修改默认账号shell环境
目的:删除系统不需要的默认账号,更改危险账号的默认shell变量,降低被利用的可能性。
实施方法:删除/锁定所欲用户和组
userdel -r username
groupdel groupname
passwd -l username
修改程序账户的登录shell
usermod -s /sbin/nologin username
4,限制超级管理员远程登录。
目的:限制具备超级权限的用户远程登录。
实施方法:修改远程管理程序ssh配置文件
vi /etc/ssh/sshd_config
permitrootlogin yes->no
重启sshd服务
systemctl restart sshd
5,删除root以外uid为0的用户
目的:减少被越权使用的可能性
实施方法:检查哪些账户的UID为0
awk -F: '($3==0) {print $1}' /etc/passwd
删除账户
userdel -r username
或者编辑passwd与shadow文件
root:x:0:0:root:/root:/bin/bash
用户名 (root): 用户的登录名。
密码占位符 (x): 在过去,这里存放加密后的密码,现在一般是 x 或者 *,真实的加密密码存放在 /etc/shadow
文件中。
用户ID (0): 用户的数字标识符 (UID),0 通常是超级用户 root 的 UID。
组ID (0): 用户所属的主要组的数字标识符 (GID),0 表示系统管理员组。
用户信息 (root): 用于描述用户的额外信息,可以为空。
家目录 (/root): 用户的家目录路径,通常是用户登录后的初始工作目录。
登录 shell (/bin/bash): 用户登录后默认使用的 shell 程序。
6,缩短默认密码生存周期
目的:对于采用静态密码认证的设备,账户密码的生存周期不长于90天。
实施方法:修改文件密码策略文件
vi /etc/login.defs
分别是最长使用期限,最短使用期限,密码最小长度,最长期限到期前7天提前更改密码
通常的值为90,0,8,7
7,设置密码强度策略
目的:规范使用高强度密码,延长被爆破的时间
实施方法:修改pam认证文件/etc/pam.d/system-auth
添加/修改
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minclass=3 minlen=8
password: 模块类型,表示这个模块是用于验证用户密码的。
requisite: 表示必须满足该模块才能继续进行后续操作,如果验证失败则立即返回错误信息。
pam_pwquality.so: 模块名称,表示使用密码质量检查模块进行密码验证。
try_first_pass: 表示将前一个 PAM 模块(如 login 模块)中通过的验证凭据传递给此模块进行证。如果前一个模块验证失败,则该模块请求用户输入密码。
local_users_only: 表示仅对本地用户进行密码策略检查,不适用于远程用户。
retry=3: 当验证失败时,允许用户重试的最大次数,这里设置为 3 次。
authtok_type=: 表示传递给此模块的凭证类型为空,由此模块根据需要自动确定凭证类型。
dcredit=-1: 密码中至少需要包含一个数字 (digit)。
lcredit=-1: 密码中至少需要包含一个小写字母 (lowercase)。
ucredit=-1: 密码中至少需要包含一个大写字母 (uppercase)。
ocredit=-1: 密码中至少需要包含一个特殊字符 (other)。
minclass=3: 密码中必须包含至少三种不同类型的字符类别。
minlen=8: 密码的最小长度为 8 个字符。
8,设置强制密码历史
目的:防止被社工字典破解
实施方法:修改pam认证文件/etc/pam.d/system-auth
添加/修改内容
9,设置账户锁定策略
目的:防止被连续试探密码,降低爆破的可能性
实施方法:修改pam认证文件
/etc/pam.d/system-auth
/etc/pam.d/sshd
/etc/pam.d/login
添加/修改内容
auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=60
10,修改umask值
目的:修改创建文件或目录时的默认权限,防止属于该组的其它用户级别组的用户修改该用户的文件
实施方法:修改启动脚本文件
/etc/profile
/etc/csh.login
/etc/csh.cshrc
/etc/bashrc
在文件末尾假如umask值
umask 027
umask就是用户创建文件时,如果不自定义权限,就是umask的默认值,但是umask是用来去除权限的,一般来说,读写执行,分别是421,但是027的意思是,拥有者不去除任何所有者权限,该组用户去除写权限,其他用户去除读写执行权限。
11,限制硬件资源
目的:限制用户对系统资源的使用,避免DDOS等攻击
实施方法:修改限制文件
vi /etc/security/limits.conf
加入下列内容
·* soft core 0
·* hard core 0
·* hard rss 5000
·* hard nproc 20
12,对用户使用ls,rm设置别名
目的:让ls随时看清文件属性,让rm需要确认后删除目标实施方法
实施方法:修改当前用户的登录启动脚本
vi ~/.bashrc
追加别名命令
alias ls="ls -alh"
alias rm="rm -i"
13,禁止任何人su为root账户
目的:避免任何人使用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
14,去掉所有suid和sgid
目的:防止被利用提权
SUID 和 SGID 权限允许用户在执行文件时以文件所有者或所属组的权限来执行,这可能会引发潜在的安全风险。
查找具有suid和sgid的对象
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;
chmod ugo-s 对象
15,对开放目录设置粘滞位
目的:允许小规模开放目录,用户作为暂存目录使用
实施方法:为/tmp目录添加粘滞位
chmod +t /tmp/
粘滞位是一种特殊的文件权限标记,只有目录拥有者和root用户可以删除和更改目录中的文件
16,启动日志记录功能,使用日志服务器
目的:增加审计记录,分布保存日志
实施方法:修改应用服务器日志配置文件
vi /etc/rsyslog.conf
确认关键日志审计是否存在
*.info;mail.one;authpriv.none;cron.none
/var/log/messages
authpriv.* /var/log/secure
并添加两行转发日志信息
*.info;mail.none;authpriv.none;cron.none @IP地址
authpriv.* @IP地址
17,重要日志权限不应该高于640
防止日志泄露敏感信息
ls -la /var/log
chmod -R 640 /var/log
18,设置关键文件底层属性
目的:增强关键文件的底层属性,降低篡改风险
实施方法:修改关键文件和日志的底层属性
chattr +a /var/log/messages +a只能追加,不能删除修改
chattr +i /var/log/messages.* +i不可修改
chattr +i /etc/shadow
chattr +i /etc/passwd
chattr +i /etc/group
lsattr查看更改结果
通讯协议
1,关闭非加密远程管理telnet
目的:降低被抓包后获取系统关键信息
实施方法:修改telent配置文件
vi /etc/xinetd.d/telnet
确认/修改内容为
disable=yes
2,使用加密的远程管理ssh
目的:使用安全套接字层加密传输信息,避免被侦听敏感信息。
实施方法:安装ssh软件
修改配置文件 vi /etc/ssh/ssd_conofig
禁止root登录,修改默认端口,开启v2版本
PermitRootLogin no
Port 20202
Protocol 2
重启服务 systemctl restart sshd
3,设置访问控制列表
目的:设置访问控制白名单,减少被入侵的风险
实施方法:修改拒绝策略 vi /etc/hosts.deny
加入信息 ALL:ALL
修改允许策略: vi /etc/hosts.allow
加入信息: sshd:来访者ip地址
4,固定常用DNS解析
目的:降低被DNS劫持的可能性
实施方法:修改hosts文件 vi /etc/hosts
加入解析信息 12.29.23.22 www.123.com
5,打开syncookie
目的:缓解syn flood攻击
实施方法:修改系统控制文件
vi /etc/sysctl.conf
net.ipv4.tcp_syncookies=1
配置生效 sysctl -p
6,不响应ICMP请求
目的:不对ICMP请求做出响应,避免泄露信息
实施方法:修改网络策略布尔值
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
7,禁止处理无源路由(禁止处理不带源路由信息的报文)
目的:防止被无源数据包利用,防范源路由攻击。
实施方法:检查是否开启了路由功能
sysctl -n net.ipv4.conf.all.accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
什么是源路由
发送者通过在IP报文中添加源路由的选项字段,指定报文的路由路径,不依赖中间路由器决策。
8,防御syn flood攻击优化
目的:修改半连接上限,缓解syn flood攻击
实施方法:查询当前半连接上限
sysctl net.ipv4.tcp_max_syn_backlog
修改半连接上限
sysctl -w net.ipv4.tcp_max_syn_backlog="2048"
9,FTP使用黑白名单限制
目的:防止非法账户访问ftp
实施方法:检查黑名单文件是否包含高位账户
/etc/ftpusers
root daemon bin sys adm ip uucp nuucp listen noboby noaccess
使用白名单文件
/etc/user_list
配置文件中是否存在
userlist_deny=NO
userlist_enable=YES
10,FTP设置上传文件后的默认权限
目的:防止被上传执行脚本
实施方法:检查主配置文件/etc/vsftpd.conf是否存在如下内容
write_enable=YES
local_umask=022
anon_umask=022
11,FTP设置banner信息
目的:防止泄露服务信息
实施方法:检查主配置文件/etc/vsftpd.conf是否存在如下内容
ftpd_banner="Authorized users only. All activity may be monitored and reported."
"Banner"通常指的是服务器端发送给客户端的欢迎信息或标识信息。这些信息通常包含有关服务器或服务的版本号、公司名称、服务类型等内容,用于向连接到服务器的客户端展示相关信息
12,配置可信任的NTP服务器,并确保服务开启
目的:保持时间同步,防止某些服务错误,许多安全协议和技术依赖于准确的时间信息(SSL证书的有效期、身份验证的时间戳等。)
实施方法:检查主配置文件/etc/ntp.conf是否存在如下内容
server x.x.x.x
确保服务被启用
systemctl enable ntpd
systemctl status ntpd
13,检查账户目录中是否存在高危文件.netrc,.rhosts
目的:防止被使用远程登录漏洞
实施方法:检查账户家目录中是否存在远程主机文件
for DIR in 'cut -d ":" -f6 /etc/passwd' ; do
if [ -e $DIR/.netrc ]; then
echo "$DIR/.netrc"
fi
done
无返回值则表示正常
14,关闭NFS服务
目的:防止被外挂文件系统,导致入侵
实施方法:检查是否存在敏感进程
ps aux | grep -E "locked | nfsd | ststd | mountd"
检查关闭NFS相关服务
systemctl list-unit-files | grep nfs
systemctl disable nfs-client.target
补丁管理
目的:可以是系统版本为最新并解决安全问题
实施方法:使用yum更新
yum update
使用rpm安装
rpm相当于windows的exe,去官网下载
rpm -Fvh rmp包
所有补丁需要在测试环境下不影响业务服务后才可更新,下载补丁时,一定对文件进行签名核实
服务进程与启动
1,关闭无用服务
目的:关闭无用服务,提高系统性能,减低漏洞风险
实施方法:检查‘有哪些自启动服务,并记录列表
systemctl list-unit-files | grep enabled
禁止无用服务
systemctl stop 服务名
systemctl disabled 服务名
2,建议关闭的服务
建议:如无需要,建议关闭或者卸载功能
rpm -qa | grep -E "^amanda|^chargen|^chargen-udp|^cups|^cups-lpd|^daytime|^daytime-udp|^echo|^echo-udp|^eklogin|^ekrb5-telent|^finger|^gssftp|^imap|^imaps|^ipop2|^ipop3|^klogin|^krb5-telent|^kshell|^ktalk|^ntalk|^rexec|^rlogin|^rsh|^rsync|^talk|^tcpmux-server|^telent|^tftp|^time-dgram|^time-stream|^uucp"
banner与自动注销
1,隐藏系统提示信息
目的:避免通过系统提示信息获取系统状态
实施方法:查看登录banner信息
cat /etc/issue
清空banner文件
echo > /etc/issue
2,设置登录超时注销
目的:防止疏忽导致命令行被他人使用
实施方法:修改/etc/profile
vi /etc/profile
在HISTFILESIZE下面加入
TMOUT=180
生效
source /etc/profile
3,减少history历史数量
目的:降低之前操作被窃取的风险
实施方法:修改/etc/profile
vi /etc/profile
修改信息
HISTFILESIZE=50
生效
source /etc/profile
4,跳过grub菜单
目的:防止在grub菜单对引导过程进行修改,也可以隐藏grub菜单,加快启动速度
实施方法:修改grub配置文件
vi /boot/grub2/grub.cfg
修改等时
set timeout=0
5,关闭ctrl+alt+del重启功能
目的:防止误操作重启服务器
实施方法:修改配置文件
vi /usr/lib/systemd/system/ctrl-alt-del.target
注释所有内容