本文共 12633 字,大约阅读时间需要 42 分钟。
1.补丁安装
1.1 系统补丁升级编号
名称
系统补丁
实施方案
#yum -y update
升级所有包,改变软件设置和系统设置,系统版本内核都升级 #yum -y upgrade升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变实施目的
可以使系统版本最新并解决安全问题。
实施要求
一般漏洞在三个月内完成修复,重大漏洞在一个月内完成修复,紧急漏洞当天完成修复。
实施风险
慎重对系统打补丁,补丁安装先先在测试机上完成。补丁安装可能导致
系统异常或无法启动。
回退方案
验证方法
2.升级openssl和openssh
编号
名称
升级openssl和openssh
实施方案
1.安装zlib
下载安装包:wget
(1)安装zlib-1.2.11
sudo tar -zvxf zlib-1.2.11.tar.gz
cd zlib-1.2.11
sudo ./configure --prefix=/usr/local/zlib --shared
sudo make
sudo make install
(2)安装zlib-devel
sudo yum -y install zlib-devel
2.升级openssl
注意:我们当前使用的是openssl1.0.2系列的版本,版本会隔一段时间升级一次,当前是openssl-1.0.2k版本,下次可能是更新的版本,升级时需要到openssl官网下载最新的版本来安装。
下载安装包:wget
sudo tar -zvxf openssl-1.0.2k.tar.gz
sudo cd openssl-1.0.2k
sudo ./config shared --prefix=/usr/local/ssl_1.0.2k \
--openssldir=/usr/local/ssl_1.0.2k zlib-dynamic
sudo make
sudo make install
备份openssl旧版本的相关文件
sudo mv /usr/bin/openssl /usr/bin/openssl.bak
sudo mv /usr/include/openssl /usr/include/openssl.bak
链接新版本的文件
sudo ln -s /usr/local/ssl_1.0.2k/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/ssl_1.0.2k/include/openssl /usr/include/openssl
#设置库文件路径。
sudo vim /etc/ld.so.conf,在文件最后写入/usr/local/ ssl_1.0.2k /lib
执行:
sudo ldconfig
注意,如果后面要部署nginx等使用到openssl可文件的程序,则需要引用openssl新版本的库文件。
3.升级openssh
注意:openssh版本会隔一段时间升级一次,当前是openssh-7.4p1版本,下次可能是更新的版本,升级时需要到openssh官网下载最新的版本来安装。
下载安装包:
wget
(1)卸载旧版openssh程序
rpm -e rpm -qa | grep openssh
--allmatches –nodeps
备份原ssh配置
sudo mkdir /etc/sshbak
sudo mv /etc/ssh/* /etc/sshbak/
(2)安装 pam-devel
sudo yum install -y pam-devel
(3)安装openssh
sudo tar -zvxf openssh-7.4p1.tar.gz
cd openssh-7.4p1
sudo ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl_1.0.2k/ --with-md5-passwords --mandir=/usr/share/man
sudo make
sudo make install
生成ssh服务管理脚本
sudo cp ./openssh-7.4p1/contrib/redhat/sshd.init /etc/init.d/sshd
sudo chmod +x /etc/init.d/sshd
sudo chkconfig --add sshd
sudo /etc/init.d/sshd start
Starting sshd: [ OK ]
sudo ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k 1 Mar 2016
(3)配置ssh的pam认证文件
查看/etc/pam.d/目录下是否有sshd文件,如果没有,则执行
sudo mv /etc/pam.d/sshd.rpmsave /etc/pam.d/sshd
注意:升级openssh后,登记该主机时可能会出现
RSA host key has changed错误
解决方法:在源主机上编辑/home/用户账号/.ssh/known_hosts文件,将包含有目标主机(升级了openssh版本的那台主机)的IP的所在行删掉,保存退出编辑即可。
实施目的
解决openssl和openssh低版本存在安全漏洞问题
实施要求
实施风险
在升级过程中可能导致ssh会话中断连接不上目标主机,如果是无法通过VMware vSphere Client进行终端管理的主机,建议先安装启用telnet服务,能通过telnet服务连接后再升级openssh,成功升级openssh服务后,再卸载telnet服务。
回退方案
通过备份的配置文件进行回退
验证方法
执行ssh –V
如果显示的是所安装的版本,则说明升级成功。
3.账号、口令策略
3.1账号最小化编号
名称
账号最小化
实施方案
Linux下多余可关闭的用户如下:
IP,news,uucp,games,ftp
#groupdel (ip news uucp,games)
#userdel(ip,news,uucp,games)
更改一些用户shell
chmod -s /bin/nologin ftp
实施目的
去除不需要的账号,更改危险账号缺省的shell
实施要求
实施风险
应当明确系统的角色,避免误删除默认账号
回退方案
恢复默认配置
验证方法
cat /etc/passwd
3.2设置密码过期策略
编号
名称
设置密码过期策略
实施方案
备份配置文件
sudo cp -a /etc/login.defs /etc/login.defs.bak
修改/etc/login.defs文件如下:
sudo vi /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 6
PASS_MIN_LEN 8
PASS_WARN_AGE 30
参数说明:
PASS_MAX_DAYS 密码有效期
PASS_MIN_DAYS 修改密码的最短期限
PASS_MIN_LEN 密码最短长度
PASS_WARN_AGE 密码过期前提前提醒时间
实施目的
定期更换密码,保护口令安全
实施要求
90天需要更换密码,密码最小长度要求8位以上
实施风险
口令过期前应修改密码,tomcat用户可能不可用,导致堡垒机脚本失败
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
#cat /etc/login.defs |grep PASS_MAX_DAYS
3.3超时自动注销登录
编号
名称
超时自动注销登录
实施方案
如果用户在离开系统前忘记注销账户,将会带来很大的安全隐患,应让系统自动注销。
#vi /etc/profile
增加或修改文件
export TMOUT=300
HISTFILESIZE=100
HISTSIZE=100
实施目的
避免用户忘记注销登录,减少安全隐患
实施要求
登录超时时间5分钟,历史命令记录数100条
实施风险
无
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
#cat /etc/profile |grep TMOUT
3.4增强密码加密算法
编号
名称
增强密码加密算法
实施方案
sudo authconfig --test |grep password
查看系统加密算法,如果为MD5则需要改为sha512
需要root用户实施:
authconfig --passalgo=sha512 --enablenis –update
如果实施过程中NIS服务不能自动启动,则需要手动重启NIS服务:
service ypbind restart
实施目的
增强密码加密算法,提升系统密码安全性
实施要求
将密码加密算法升级到sha512
实施风险
实施过程当中,会关闭NIS服务,NIS服务关闭后如未能再次成功启动,此时用户则不能同时NIS认证登录系统,仅可以通过本地用户登录。
回退方案
还原回MD5
还原:authconfig --passalgo=md5 --enablenis --update
验证方法
sudo authconfig --test |grep password
3.5密码复杂度
编号
名称
密码复杂度
实施方案
sudo cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
sudo vi /etc/pam.d/system-auth
针对centos或者redhat 6.X版本
将
password requisite pam_cracklib.so retry=3 minlen=8 difok=3 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
改成
password requisite pam_cracklib.so minlen=8 difok=5 dcredit=-1 lcredit=-1 ocredit=-1 retry=1 type=
针对centos 7.X版本
将
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
改成
password requisite pam_pwquality.so try_first_pass local_users_only retry=1 dcredit=-1 lcredit=-1 ocredit=-1 minlen=8 difok=5 authtok_type=
备注:
minlen=8:最小长度8位
difok=5:新、旧密码最少5个字符不同
dcredit=-1:最少1个数字
lcredit=-1:最少1个小写字符,(ucredit=-1:最少1个大写字符)
ocredit=-1:最少1个特殊字符
retry=1:1次错误后返回错误信息
type=xxx:此选项用来修改缺省的密码提示文本
实施目的
防止系统弱口令和口令破解,减少安全隐患
实施要求
密码最短要求8位,并必须至少同时含有1个数字,1个小写字母,1个特殊符号。新、旧密码最少5个字符不同。
实施风险
无
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
#cat /etc/pam.d/system-auth
3.6记住5个历史密码
编号
名称
记住5个历史密码
实施方案
sudo vi /etc/pam.d/system-auth
在这行password sufficient pam_unix.so sha512 shadow nis nullok try_first_pass use_authtok
的后面添加remember=5
实施目的
防止系统弱口令和口令破解,减少安全隐患
实施要求
对密码进行修改时,不允许设置与此前5个相同的密码。
实施风险
无
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
#cat /etc/pam.d/system-auth
3.75次登陆失败锁定账户
编号
名称
5次登陆失败锁定账户
实施方案
针对login进程登录:
sudo vim /etc/pam.d/system-auth
在#%PAM-1.0的下面,即第二行,添加
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
针对SSH进程登录:
sudo cp -a /etc/pam.d/sshd /etc/pam.d/sshd.bak
sudo vim /etc/pam.d/sshd
在#%PAM-1.0的下面,即第二行,添加
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
实施目的
防止系统弱口令和口令破解,减少安全隐患
实施要求
5次登录失败,锁定账号30分钟。
实施风险
合法用户忘记密码多次输入错误导致账号被锁
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
#cat /etc/pam.d/system-auth
#cat /etc/pam.d/sshd
3.8 使用PAM禁止不相关人员su为root
编号
名称
使用PAM禁止不相关人员su为root
实施方案
#sudo cp -a /etc/pam.d/su /etc/pam.d/su.bak
#sudo vi /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so
auth sufficient pam_wheel.so trust use_uid
auth required pam_wheel.so use_uid
auth include system-auth
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session optional pam_xauth.so
将这行的注释去掉
#auth required pam_wheel.so use_uid
这表明只有wheel 组的成员可以使用su 命令成为root 用户
实施目的
避免无关人员可以su为root,减少安全隐患。
实施要求
只有加入wheel组的人员才能su为root。
实施风险
无
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
#cat /etc/pam.d/su
4.网络与服务加固
4.1禁止不必要的服务编号
名称
禁止不必要的服务
实施方案
Telnet,rsh,ldp,lpd,krb5-telnet,pcmcia
1、#chkconfig --list
1、#service 服务名 stop
3、#chkconfig --level 35 服务名 off
实施目的
禁用系统开机时启动不需要的服务,减少安全隐患。避免敏感信息泄露
实施要求
实施风险
该服务或与之相关的服务不可用
回退方案
验证方法
4.2 SSH安全配置
编号
名称
SSH安全配置
实施方案
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vi /etc/ssh/sshd_config
使用版本2
Protocol 2
禁止root通过ssh登录
PermitRootLogin no
采用PAM模块进行认证
UsePAM yes
允许密码认证
PasswordAuthentication yes
使用密钥进行身份验证
PubkeyAuthentication yes
禁止空密码登录
PermitEmptyPasswords no
关闭ssh的tcp转发
AllowTcpForwarding no
关闭S/KEY(质疑-应答)认证方式
ChallengeResponseAuthentication no
关闭基于GSSAPI 的用户认证
将GSSAPIAuthentication yes参数,改成
GSSAPIAuthentication no
保存配置文件,并重启ssh服务
sudo /etc/init.d/sshd restart
实施目的
使用加密协议登录系统,避免密码被监听
实施要求
禁止root通过ssh远程登录系统,增强系统安全性
实施风险
无
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
4.3设置登录警告语
编号
名称
设置登录警告语
实施方案
#vi /etc/ssh/sshd_conf
把Banner /some/path修改为 Banner /etc/ssh/alert
建立alert 文件
sudo vim /etc/ssh/alert
增加内容如入:
Warning!!!Any Access Without Permission Is Forbidden!!!
sudo service sshd restart(重启sshd 服务)
实施目的
设置登录警告语,明确系统归宿,同时对非法登录用户起到震慑作用。
实施要求
实施风险
无
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
5.安全性增强
5.1新建文件权限增强编号
名称
新建文件权限增强
实施方案
1.备份配置文件
sudo cp -a /etc/bashrc /etc/bashrc.default
2.编辑配置文件
sudo vim /etc/bashrc
在文件末尾增加参数
umask 027
3.保存配置文件
sudo cp -a /etc/profile /etc/profile.default
5.编辑配置文件
sudo vim /etc/profile
在文件末尾增加参数
umask 027
6.保存配置文件
实施目的
设置新建文件权限,减少信息泄露风险
实施要求
实施风险
可能存在这样的情况,web服务器使用非root启动,但应用目录的所有者为root,web服务用户将无法访问在应用目录下新建的文件。
回退方案
将变更参数还原或者使用备份文件恢复
验证方法
5.2关键文件属性增强
编号
名称
关键文件属性增强
实施方案
sudo chattr +a /var/log/messages
sudo chattr +a /var/log/secure
sudo chattr +a /var/log/wtmp
sudo chmod +t /tmp
sudo chmod 644 /var/log/wtmp
sudo chmod 644 /var/run/utmp
chmod -R 700 /etc/init.d/*
touch /root/.rhosts /root/.netrc /etc/hosts.equiv
chmod 0 /root/.rhosts /root/.netrc /etc/hosts.equiv
备注:
chattr +a
设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
chmod +t 设置粘着位,除文件所有者外,其他用户不能删除
实施目的
防止重要的日志文件被篡改
实施要求
实施风险
实施chmod -R 700 /etc/init.d/*后,/etc/init.d目录下的程序仅能通过root管理
回退方案
可通过chattr -a 取消a属性
可通过chattr -i 取消i属性
验证方法
5.3账号安全
编号
名称
关键文件属性增强
实施方案
chattr +i /etc/passwd
参数说明:
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
实施目的
防止被非法创建系统账号
实施要求
实施风险
不能创建系统账号,如果在应用程序安装时,要自动创建账号,则需要将该属性去掉。
回退方案
执行chattr -i /etc/passwd
验证方法
5.4设置history 历史命令时间戳
编号
名称
设置history 历史命令时间戳
实施方案
sudo cp -p /etc/profile /etc/profile.bak
sudo vim /etc/profile
在文件最后添加
export HISTTIMEFORMAT="%F %T whoami
"
实施目的
便于日志审计和事件追查。
实施要求
实施风险
无
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
5.5使PATH环境变更不包含当前目录”.”
编号
名称
使PATH环境变更不包含当前目录”.”
实施方案
echo $PATH
修改环境变更,去除”.”部分
/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.6.0_45/bin:/usr/local/bin:/root/bin
实施目的
防止执行恶意特洛伊×××,减少安全隐患
实施要求
实施风险
无
回退方案
验证方法
echo $PATH
5.6禁用control-alt-delete键盘关机命令
编号
名称
禁用control-alt-delete键盘关机命令
实施方案
centos 6.x以上版本
修改/etc/init/control-alt-delete.conf文件
找到如下行在本行前面加“#”注释掉命令功能
#exec /sbin/shutdown -r now "Control-Alt-Delete pressed"
centos 5.x:
找到:ca::ctrlaltdel:/sbin/shutdown -t3 -r now,在本行前面加“#”注释掉命令功能
实施目的
增加系统安全性,降低安全隐患
实施要求
禁止ctl-alt-del使用在控制台按ctl-alt-del不能重启计算机
实施风险
无
回退方案
还原变更的参数值
验证方法
5.7设置系统启动时运行等级
编号
名称
设置系统启动时运行等级
实施方案
编辑/etc/inittab 文件:
id:5:initdefault:
改为:
id:3:initdefault:
注:5 为带X-Windows 桌面系统的运行级别,3 为多用户运
行级别。
实施目的
最小化系统服务,降低安全隐患
实施要求
确保系统运行在级别3
实施风险
无
回退方案
还原变更的参数值
验证方法
5.8隐藏系统提示信息
编号
名称
隐藏系统提示信息
实施方案
隐藏Linux系统发行版的名称、版本、内核版本、服务器的名称
删除/etc目录下的isue.net和issue文件:
#rm -f /etc/issue
#rm -f /etc/issue.net
实施目的
减少系统提示信息,降低安全隐患。
实施要求
实施风险
无
回退方案
验证方法
5.9NTP时间同步
编号
名称
NTP时间同步
实施方案
0 /8 /usr/sbin/ntpdate 172.16.100.1; /sbin/hwclock –w
注意:实际的NTP服务器可能与这里设置的不一样,根据实际的NTP服务器IP来配置。
实施目的
统一时间,防止因时间不一致导致的审计和订单错误
实施要求
每8小时同步一次时间
实施风险
无
回退方案
验证方法
5.10设置grup密码
编号
名称
设置grup密码(进入单用户模式密码)
实施方案
备份配置文件
sudo cp -p /boot/grub/menu.lst /boot/grub/menu.lst.bak
grup密码使用MD5加密成密码序列
sudo grub-md5-crypt
Password: ---此处输入密码
Retype password:
设置grup密码
sudo vim /boot/grub/menu.lst
在splashimage=(hd0,0)下面添加
password --md5 xxxxxxxx (xxxxxxxx为上面的密码序列)
注意:如果设置了grup密码,则需要做好记录,以免关键时刻无法从单用户模式进入系统。
实施目的
防止恶意用户在本地通过单用户模式登录系统做非法操作
实施要求
实施风险
无
回退方案
还原变更的参数值或者使用备份文件进行还原
验证方法
5.11日志集中存储
编号
名称
日志集中存储
实施方案
#vi /etc/rsyslog.conf
增加一行:
. @172.16.200.5
注意:实际的日志服务器的IP地址跟这里配置的不一样,根据实际的IP地址来配置。
实施目的
日志集中发送到日志服务器存储,方便审计和日志保留。
实施要求
实施风险
无
回退方案
验证方法
5.12防恶意代码软件
编号
名称
防恶意代码软件
实施方案
安装ossec在/usr/local下
实施目的
文件一致性监控和报警
实施要求
监控系统重要文件的变更,如果是应用服务器,要监控应用服务器的目录,
设置脚本,在diff目录超过5G时,停止服务并删除diff文件,防止因监控目录过大导致的系统故障
实施风险
无
回退方案
验证方法
5.13 DNS配置
编号
名称
DNS配置
实施方案
#vi /etc/reslov.conf
nameserver 172.16.100.53
nameserver 114.114.114.114
nameserver 8.8.8.8
nameserver 58.60.188.178
search dinpay.com
options attempts:2
options timeout:2
实施目的
统一DNS解析,防止因修改DNS配置而导致的异常
实施要求
需要连接数据库的主机,需要在第一行配置nameserver 172.16.100.53
实施风险
无
回退方案
验证方法
5.14限制可使用sudo的用户和命令
编号
名称
限制可使用sudo的用户和命令
实施方案
#vi /etc/sudoers
User_Alias ADMINS=fxg,cqs,hjt,bzy,wxl,pb
Cmnd_Alias CMD=/bin/vi,/bin/cat,/bin/more,/bin/ls
root ALL=(ALL) ALL
ADMINS ALL=(root) NOPASSWD: ALL,!/usr/bin/passwd
ADMINS ALL=(tomcat) NOPASSWD: ALL
实施目的
限制可使用sudo的用户和命令,减少权限隐患
实施要求
实施风险
无
回退方案
验证方法
5.15系统备份
编号
名称
系统备份
实施方案
安装bacula客户端,设置备份目录
实施目的
对装有应用和系统配置文件进行备份,用于系统恢复。
实施要求
实施风险
无
回退方案
验证方法
5.16系统监控
编号
名称
系统监控
实施方案
安装Zabbix客户端
实施目的
对装有应用和系统配置文件进行备份,用于系统恢复。
实施要求
监控系统本身和应用的端口
实施风险
无
回退方案
验证方法
5.17脚本文件
编号
名称
脚本文件
实施方案
实施目的
统一脚本放置目录,方便管理
实施要求
脚本文件统一放在/usr/local/script目录下,如果需要每日执行的,放在/etc/cron.daily目录下
实施风险
无
回退方案
验证方法
5.18日志切割
编号
名称
日志切割
实施方案
例:
vim /etc/logrotate.d/nginx
/usr/local/nginx/logs/*.log{
daily
dateext
rotate 360
copytruncate
compress
notifempty
missingok
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ];then kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` fi
endscript
}
实施目的
对Nginx和Tomcat日志进行压缩切割,防止日志无限增大
实施要求
日志保留1年后转移到离线硬盘。
实施风险
无
回退方案
验证方法
5.19 /etc/hosts配置
编号
名称
/etc/hosts
实施方案
实施目的
实施要求
为避免出现IP域名不一致的情况,原则上除了200网段的主机其它网段或公网的域名一率通过dns进行解析,不允许通过/etc/hosts进行解析,如果有例外,记录在本文档最后例外记录里。
实施风险
回退方案
验证方法
4.20 NIS集中身份认证
编号
名称
NIS集中身份认证
实施方案
#vi /etc/yp.conf
domain dinpay.com server 172.16.200.3
#vi /etc/rc.d/rc.local
/bin/nisdomainname dinpay.com
vi /etc/nsswitch.conf
passwd: files nis
shadow: files nis
hosts: files nis dns
#chkconfig ypbind on
实施目的
统一系统账号管理
实施要求
实施风险
回退方案
验证方法
转载于:https://blog.51cto.com/hjt353/2171222