ubunru18.04-安全加固(二级等保)实例
1、编辑文件/etc/profile,根据实际需求,配置HISTSIZE=实际需求数值,系统默认值为1000,
编辑完成后使用命令source /etc/profile使其生效,最后使用命令echo $HISTSIZE进行检查;
2、编辑 ~/.bashrc,根据实际需求,配置HISTSIZE=实际需求数值,系统默认值为1000,
编辑完成后使用命令source ~/.bashrc使其生效,最后使用命令echo $HISTSIZE进行检查 高风险
1、编辑文件/etc/profile,根据实际需求,配置HISTFILESIZE=实际需求数值,系统默认值为1000,
编辑完成后使用命令source /etc/profile使其生效,最后使用命令echo $HISTFILESIZE进行检查;
2、编辑 ~/.bashrc,根据实际需求,配置HISTFILESIZE=实际需求数值,系统默认值为1000,
编辑完成后使用命令source ~/.bashrc使其生效,最后使用命令echo $HISTFILESIZE进行检查 高风险
配置:
*.err;kern.debug;daemon.notice /var/adm/messages
其中/var/adm/messages为日志文件。
如果该文件不存在,则创建该文件,命令为:
touch /var/adm/messages,并修改权限为666.命令为:chmod 666 /var/adm/messages.
重启日志服务:
#/etc/init.d/rsyslog restart 或者 service rsyslog restart 高风险
touch /var/adm/messages
chmod 666 /var/adm/messages
cat >> /etc/rsyslog.conf << EOF
*.err;kern.debug;daemon.notice /var/adm/messages
EOF
service rsyslog restart 5 身份鉴别 检查密码重复使用次数限制 检查密码重复使用次数限制 Redhat,CentOS,Fedora:编辑/etc/pam.d/system-auth文件,
Suse9:编辑/etc/pam.d/passwd文件,
Ubuntu,Suse10,Suse11,Suse12:编辑/etc/pam.d/common-password文件,
修改设置如下
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5
补充操作说明
只需在password sufficient这一行加上remember=5即可
NIS系统无法生效,非NIS系统或NIS+系统能够生效。 高风险
找到这一行:
plaintext
password [success=1 default=ignore] pam_unix.so obscure sha512
在行尾追加 remember=5,修改完成后:
plaintext
password [success=1 default=ignore] pam_unix.so obscure sha512 remember=5 6 安全审计 检查是否启用cron行为日志功能 rsyslog是否启用记录cron行为日志功能 编辑/etc/rsyslog.conf文件,
配置:
cron.* /var/log/cron ,
其中/var/log/cron为日志文件。
如果该文件不存在,则创建该文件,命令为:
touch /var/log/cron,并修改权限为775.命令为:chmod 775 /var/log/cron. 高风险
chmod 775 /var/log/cron
cat >> /etc/rsyslog.conf << EOF
cron.* /var/log/cron
EOF
rsyslogd -N1
systemctl restart rsyslog 7 安全审计 检查是否对登录进行日志记录 检查是否记录成功登陆日志 登录日志文件为/var/log/wtmp,/var/log/utmp.这2个文件中记录着所有登录过主机的用户,时间,来源等内容,这个文件不具可读性,可用last命令来看。
如果命令无结果,请联系管理员。 高风险
session required pam_lastlog.so showfailed
session optional pam_utmp.so
EOF
cat >> /etc/rsyslog.conf << EOF
auth,authpriv.* /var/log/auth.log
EOF
systemctl restart rsyslog 8 身份鉴别 检查是否设置口令更改最小间隔天数 检查口令更改最小间隔天数 在文件/etc/login.defs中设置 PASS_MIN_DAYS 不小于标准值 高风险
定位到PASS_MIN_DAYS 0
改为PASS_MIN_DAYS 6 9 身份鉴别 检查是否设置口令生存周期 检查口令生存周期 在文件/etc/login.defs中设置 PASS_MAX_DAYS 不大于标准值,PASS_MAX_DAYS 90,如果该文件不存在,则创建并按照要求进行编辑 高风险
定位到PASS_MAX_DAYS 99999
改为PASS_MAX_DAYS 90 10 身份鉴别 检查是否设置口令过期前警告天数 检查口令过期前警告天数 在文件/etc/login.defs中设置 PASS_WARN_AGE 不小于标准值 高风险
定位到PASS_WARN_AGE 7
改为PASS_WARN_AGE 30 11 身份鉴别 检查是否设置命令行界面超时退出 检查命令行界面超时时间 以root账户执行,vi /etc/profile,增加 export TMOUT=600(单位:秒,可根据具体情况设定超时退出时间,要求不大于600秒),注销用户,再用该用户登录激活该功能 高风险
export TMOUT=600
EOF
source /etc/profile
echo $TMOUT 12 安全审计 检查是否配置su命令使用情况记录 检查是否配置su命令使用情况记录 1.
Suse 9,Redhat 5.x,CentOS 5.x之前(包括5.x):编辑//etc//syslog.conf,
Suse12,Ubuntu,Fedora,Redhat 6.x之后(包括6.x),CentOS 6.x之后(包括6.x):编辑/etc/rsyslog.conf,
配置:
authpriv.* /var/log/secure
2.
Suse10, 11:
编辑:/etc/syslog-ng/syslog-ng.conf。
配置:
filter f_secure { facility(authpriv); };
destination priverr { file("/var/log/secure"); };
log { source(src); filter(f_secure); destination(priverr); };
3.
创建/var/log/secure文件
touch /var/log/secure
4.
重启syslog服务
#/etc/init.d/syslog restart 或者 service syslog restart 高风险
authpriv.* /var/log/secure
EOF
touch /var/log/secure
chmod 600 /var/log/secure
systemctl restart rsyslog
13 安全审计 检查是否配置远程日志功能 rsyslog是否配置远程日志功能 编辑/etc/rsyslog.conf配置文件,添加日志转发规则。例如:
# 使用TCP协议将所有日志转发到远程服务器
*.* @@10.10.10.10:514
# 或使用UDP协议
*.* @10.10.10.10:514
可以将此处10.10.10.10替换为实际的IP 高风险
cat >> /etc/rsyslog.conf << EOF
# TCP 接收
module(load="imtcp")
input(type="imtcp" port="514")
# UDP 接收
module(load="imudp")
input(type="imudp" port="514")
EOF
systemctl restart rsyslog
其他服务器
cat >> /etc/rsyslog.conf << EOF
# TCP 方式(更可靠,推荐)
*.* @@192.168.6.55:514
EOF
systemctl restart rsyslog 14 入侵防范 检查是否限制远程登录IP范围 检查/etc/hosts.deny配置 编辑/etc/hosts.deny
增加一行 all:all 高风险
all:all
EOF 15 入侵防范 检查是否限制远程登录IP范围 检查/etc/hosts.allow配置 编辑/etc/hosts.allow
增加一行 <service>: 允许访问的IP;举例如下:
all:192.168.4.44:allow #允许单个IP;
sshd:192.168.1.:allow #允许192.168.1的整个网段的PC通过SSH来访问本机
重启进程:
#/etc/init.d/xinetd restart 或者 service xinetd restart 高风险
ALL: 127.0.0.1,192.168.6.0/24
EOF 16 身份鉴别 检查设备密码复杂度策略 检查密码复杂度策略中设置的小写字母个数 Redhat,CentOS,Fedora系统:修改/etc/pam.d/system-auth文件,
Suse9:修改/etc/pam.d/passwd文件,
Ubuntu,Suse10,Suse11,Suse12:修改/etc/pam.d/common-password文件,要求密码复杂度必须包含大小写字母、数字以及特殊字符,配置如下:
password requisite pam_cracklib.so ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
现代系统(RHEL7+/CentOS7+/Fedora20+/Ubuntu16.04+/SUSE12+):修改/etc/security/pwquality.conf文件,配置如下:ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 minclass=4
注:ucredit:大写字母个数;lcredit:小写字母个数;dcredit:数字个数;ocredit:特殊字符个数;minclass:必须包含的字符类别数(4表示需包含全部四类字符) 高风险
sudo apt install libpam-pwquality -y
vi /etc/security/pwquality.conf 无此文件
# 至少1个大写字母
ucredit = -1
# 至少1个小写字母
lcredit = -1
# 至少1个数字
dcredit = -1
# 至少1个特殊符号
ocredit = -1
# 必须满足4种字符类型(大小写、数字、特殊字符全部要有)
minclass = 4
# 同时搭配最小密码长度(基线通用8位)
minlen = 8
vi /etc/pam.d/common-password
找到 pam_unix.so 上方的密码校验行,确保存在 pam_pwquality.so 模块,标准配置如下:
password requisite pam_pwquality.so retry=3 17 身份鉴别 检查设备密码复杂度策略 检查密码复杂度策略中设置的数字个数 Redhat,CentOS,Fedora系统:修改/etc/pam.d/system-auth文件,
Suse9:修改/etc/pam.d/passwd文件,
Ubuntu,Suse10,Suse11,Suse12:修改/etc/pam.d/common-password文件,要求密码复杂度必须包含大小写字母、数字以及特殊字符,配置如下:
password requisite pam_cracklib.so ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
现代系统(RHEL7+/CentOS7+/Fedora20+/Ubuntu16.04+/SUSE12+):修改/etc/security/pwquality.conf文件,配置如下:ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 minclass=4
注:ucredit:大写字母个数;lcredit:小写字母个数;dcredit:数字个数;ocredit:特殊字符个数;minclass:必须包含的字符类别数(4表示需包含全部四类字符) 高风险
Suse9:修改/etc/pam.d/passwd文件,
Ubuntu,Suse10,Suse11,Suse12:修改/etc/pam.d/common-password文件,要求密码复杂度必须包含大小写字母、数字以及特殊字符,配置如下:
password requisite pam_cracklib.so ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
现代系统(RHEL7+/CentOS7+/Fedora20+/Ubuntu16.04+/SUSE12+):修改/etc/security/pwquality.conf文件,配置如下:ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 minclass=4
注:ucredit:大写字母个数;lcredit:小写字母个数;dcredit:数字个数;ocredit:特殊字符个数;minclass:必须包含的字符类别数(4表示需包含全部四类字符) 高风险
Suse9:修改/etc/pam.d/passwd文件,
Ubuntu,Suse10,Suse11,Suse12:修改/etc/pam.d/common-password文件,要求密码复杂度必须包含大小写字母、数字以及特殊字符,配置如下:
password requisite pam_cracklib.so ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
现代系统(RHEL7+/CentOS7+/Fedora20+/Ubuntu16.04+/SUSE12+):修改/etc/security/pwquality.conf文件,配置如下:ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 minclass=4
注:ucredit:大写字母个数;lcredit:小写字母个数;dcredit:数字个数;ocredit:特殊字符个数;minclass:必须包含的字符类别数(4表示需包含全部四类字符) 高风险
如果操作不当导致用户不能登录,那么建议进入单用户模式恢复配置。
Redhat,CentOS,Fedora:
编辑/etc/pam.d/system-auth文件
注意: pam_tally.so 适用于低版本,高版本使用 pam_tally2.so
配置:
auth required pam_tally.so deny=5 unlock_time=600
account required pam_tally.so
Suse9:
编辑/etc/pam.d/passwd文件
配置:
auth required pam_tally.so deny=5 unlock_time=600
account required pam_tally.so
Ubuntu,Suse10,Suse11,Suse12:
编辑/etc/pam.d/common-auth文件
注意: pam_tally.so 适用于低版本,高版本使用 pam_faillock.so
配置:auth required pam_tally.so deny=5 unlock_time=600
编辑/etc/pam.d/common-account文件
配置:account required pam_tally.so
参数说明:
deny #连续认证失败次数超过的次数
unlock_time #锁定的时间,单位为秒 高风险
sudo cp /etc/pam.d/common-account /etc/pam.d/common-account.bak.$(date +%F)
sudo vi /etc/pam.d/common-auth
找到 `auth` 开头的行区域,在靠近顶部(`pam_unix.so` 之前)添加一行
auth required pam_tally2.so deny=5 unlock_time=600 even_deny_root audit
sudo vi /etc/pam.d/common-account
在倒数第2行添加
account required pam_tally2.so
# 故意用错误密码登录 5 次
ssh shuncom@localhost
# 查看锁定状态
sudo pam_tally2 --user=shuncom
# 手动解锁(如果需要)
sudo pam_tally2 --user=shuncom --reset 21 身份鉴别 检查账户认证失败次数限制 检查是否配置SSH方式账户认证失败次数限制 编辑/etc/pam.d/sshd文件
在auth行下方添加:
auth required pam_tally.so deny=5 unlock_time=600
在account行下方添加:
account required pam_tally.so
参数说明:
deny #连续认证失败次数超过的次数
unlock_time #锁定的时间,单位为秒
如果系统版大于等于centos 6
在auth行下方添加:
auth required pam_tally2.so deny=5 unlock_time=600
在account行下方添加:
account required pam_tally2.so 高风险
或:
auth [user_unknown=ignore success=ok ignore=ignore default=bad]
pam_securetty.so 中风险
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so 24 访问控制 检查是否配置用户所需最小权限 检查/etc/shadow文件权限 chmod 400 /etc/shadow 中风险
如果不支持chattr,编辑/etc/fstab
在相应的reiserfs系统的选项中添加"user_xattr,attrs"这两个选项,然后重启主机。 中风险
lsattr /etc/group
输出出现 ----i-------- 代表锁定成功 26 访问控制 检查重要文件属性设置 检查/etc/gshadow文件属性 执行chattr +i /etc/gshadow
如果不支持chattr,编辑/etc/fstab
在相应的reiserfs系统的选项中添加"user_xattr,attrs"这两个选项,然后重启主机。 中风险
lsattr /etc/gshadow
输出出现 ----i-------- 代表锁定成功 27 访问控制 检查重要文件属性设置 检查/etc/passwd文件属性 执行chattr +i /etc/passwd
如果不支持chattr,编辑/etc/fstab
在相应的reiserfs系统的选项中添加"user_xattr,attrs"这两个选项,然后重启主机。 中风险
lsattr /etc/passwd
输出出现 ----i-------- 代表锁定成功 28 访问控制 检查重要目录或文件权限设置 /etc/rc.d/init.d/或/etc/init.d/目录权限是否符合规范 1. 对于RedHat/CentOS系统:chmod 750 /etc/rc.d/init.d
2. 对于Debian/Ubuntu系统:chmod 750 /etc/init.d 中风险
1、编辑/etc/xinetd.d/telnet, 修改 disable = yes。
2.激活xinetd服务。命令如下:
# service xinetd restart
如果没安装则说明禁用telnet服务 高风险
chkconfig [--level levels] ntalk off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable ntalk
注:,需要重启机器,如需立刻关闭服务,可systemctl stop ntalk 高风险
chkconfig [--level levels] sendmail off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable sendmail
注:,需要重启机器,如需立刻关闭服务,可systemctl stop sendmail 高风险
chkconfig [--level levels] printer off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable printer
注:,需要重启机器,如需立刻关闭服务,可systemctl stop printer 高风险
chkconfig [--level levels] bootps off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable bootps
注:,需要重启机器,如需立刻关闭服务,可systemctl stop bootps 高风险
chkconfig [--level levels] nfslock off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable nfslock
注:,需要重启机器,如需立刻关闭服务,可systemctl stop nfslock 高风险
chkconfig [--level levels] ident off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable ident
注:,需要重启机器,如需立刻关闭服务,可systemctl stop ident 高风险
chkconfig [--level levels] tftp off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable tftp
注:,需要重启机器,如需立刻关闭服务,可systemctl stop tftp 高风险
chkconfig [--level levels] time off
chkconfig [--level levels] time-udp off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable time
注:,需要重启机器,如需立刻关闭服务,可systemctl stop time 高风险
chkconfig [--level levels] lpd off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable lpd
注:,需要重启机器,如需立刻关闭服务,可systemctl stop lpd 高风险
chkconfig [--level levels] chargen off
chkconfig [--level levels] chargen-udp off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable chargen
注:,需要重启机器,如需立刻关闭服务,可systemctl stop chargen 高风险
chkconfig [--level levels] nfs off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable nfs
注:,需要重启机器,如需立刻关闭服务,可systemctl stop nfs 高风险
chkconfig [--level levels] daytime off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable daytime
注:,需要重启机器,如需立刻关闭服务,可systemctl stop daytime 高风险
chkconfig [--level levels] echo off
chkconfig [--level levels] echo-udp off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable echo
注:,需要重启机器,如需立刻关闭服务,可systemctl stop echo 高风险
chkconfig [--level levels] discard off
chkconfig [--level levels] discard-udp off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable discard
注:,需要重启机器,如需立刻关闭服务,可systemctl stop discard 高风险
chkconfig [--level levels] discard off
chkconfig [--level levels] discard-udp off
注:levels为运行级别,需要重启机器
Centos7,Debian等
systemctl disable kshell
注:,需要重启机器,如需立刻关闭服务,可systemctl stop kshell 高风险
2.添加root 中风险
root 中风险
查看所有开启的服务:
#ps aux
禁用xinetd.d 目录中不用的服务:
#vi /etc/xinetd.d/servicename
将服务文件里面的disable设置为disable=yes重启xinetd服务,即可。
直接关闭某个服务,如tftp可用如下命令:
# /etc/init.d/tftp stop #关闭正在运行的tftp服务
补充操作说明
请关闭下列不必要的基本网络服务。
chargen-dgram daytime-stream echo-streamklogin tcpmux-server chargen-stream discard-dgram eklogin krb5-telnet tftp cvs discard-stream ekrb5-telnet kshell time-dgram daytime-dgram echo-dgram gssftp rsync time-stream 中风险
修改/etc/vsftpd.conf(或者/etc/vsfptd/vsftpd.conf)
#vi /etc/vsftpd.conf
确保以下行未被注释掉,如果没有该行,请添加:
chroot_local_user=YES
重启网络服务
#/etc/init.d/vsftpd restart
2.pure-ftp
修改/etc/pure-ftpd/pure-ftpd.conf
#vi /etc/pure-ftpd/pure-ftpd.conf
确保以下行未被注释掉(并且值为以下值),如果没有该行,请添加:
ChrootEveryone yes
AllowUserFXP no
AllowAnonymousFXP no
重启ftp服务
#/etc/init.d/pure-ftpd restart 中风险
补充说明:低版本的Linux系统采用inetd.conf配置文件,执行命令:chmod 600 /etc/inetd.conf 中风险