1 操作系统安全加固
1.1 Linux安全加固
1.1.1 对系统账号进行登录限制
1.1.2 设置登录超时时间
1.1.3 设置关键目录的权限
1.1.4 设置关键文件的属性
1.1.5 修改umask 值
1.1.6 记录用户登录信息
1.1.7 记录系统安全事件
1.1.8 记录系统服务日志
1.1.9 更改主机解析地址的顺序
1.1.10 打开 syncookie
1.1.11 不响应ICMP请求
1.1.12 防syn 攻击优化
1.1.13 禁止ICMP重定向
1.1.14 关闭网络数据包转发
1.1.15 补丁装载
1.1.16 禁用无用inetd/xinetd服务
1.1.17 为空口令用户设置密码
1.1.18 删除root之外 UID 为0 的用户
1.1.19 缺省密码长度限制
1.1.20 缺省密码生存周期限制
1.1.21 口令过期提醒
实施目的
对系统账号进行登录限制,确保系统账号仅被守护进程和服务使用。
问题影响
可能利用系统进程默认账号登陆,账号越权使用。
系统当前状态
cat /etc/passwd 查看各账号状态。
实施步骤
一.执行命令
# chsh username -s /bin/false
举例:
[root@localhost ~]# chsh sheng -s /sbin/nologin
Changing shell for sheng.
Shell changed.
[root@localhost ~]# cat /etc/passwd
......
sheng:x:1002:1002::/home/sheng:/sbin/nologin
此命令通过修改用户的shell来禁止用户登录;
对于suse操作系统使用/bin/false,其他操作系统使用/sbin/nologin
二.补充操作说明
1.禁止交互登录的系统账号,比如daemon、bin、sys、adm、lp、
uucp、nuucp、smmsp等等
2.数据库用户mysql需要禁止登录
3.禁止所有用户登录。
touch /etc/nologin
除root以外的用户不能登录了。
回退方案
将用户的shell修改成原来的。
判断依据
/etc/passwd 中的禁止登陆账号的shell 是 /bin/false
1.1.2 设置登录超时时间(风险中)
实施目的
对于具备字符交互界面的设备,应配置定时帐户自动登出。
问题影响
管理员忘记退出被非法利用。
系统当前状态
查看/etc/profile 文件的配置状态,并记录。
实施步骤
编辑文件/etc/profile
#vi /etc/profile
文件末尾增加如下行:
TMOUT=180
export TMOUT
改变这项设置后,重新登录才能有效。
回退方案
修改/etc/profile 的配置到加固之前的状态。
判断依据
TMOUT=180 TMOUT=180单位秒
1.1.3 设置关键目录的权限(风险高)
实施目的
在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限。
问题影响
非法访问文件。
系统当前状态
运行ls -al /etc/ 记录关键目录的权限。
实施步骤
1、参考配置操作
通过chmod 命令对目录的权限进行实际设置。
2、补充操作说明
/etc/passwd 必须所有用户都可读, root 用户可写
–rw-r—r—
/etc/shadow 只有root 可读 –r--------
/etc/group 必须所有用户都可读, root 用户可写
–rw-r—r—
使用如下命令设置:
chmod 644 /etc/passwd
chmod 400 /etc/shadow
chmod 644 /etc/group
如果是有写权限,就需移去组及其它用户对/etc 的写权限
(特殊情况除外)
执行命令#chmod -R go-w /etc
回退方案
通过chmod 命令还原目录权限到加固前状态。
判断依据
[root@localhost sysconfig]# ls -al /etc/passwd | grep '^...-.--.--'
-rw-r--r-- 1 root root 720 Mar 8 15:45 /etc/passwd
[root@localhost sysconfig]# ls -al /etc/group | grep '^...-.--.--'
-rw-r--r-- 1 root root 347 Jan 27 19:25 /etc/group
[root@localhost sysconfig]# ls -al /etc/shadow | grep '^...-------'
-r-------- 1 root root 436 Mar 6 19:39 /etc/shadow
举例:
[root@localhost ~]# ls -al /etc/passwd
-rw-r--r--. 1 root root 2378 Jan 24 19:42 /etc/passwd
[root@localhost ~]# ls -al /etc/group
-rw-r--r--. 1 root root 994 Jan 24 19:41 /etc/group
[root@localhost ~]# ls -al /etc/shadow
----------. 1 root root 1337 Jan 24 19:42 /etc/shadow
1.1.4 设置关键文件的属性(风险高)
实施目的
增强关键文件的属性,减少安全隐患。 使 messages文件只可追加。 使轮循的 messages文件不可更改。
问题影响
非法访问目录,或者删除日志。
系统当前状态
# lsattr /var/log/messages
# lsattr /var/log/messages.*
# lsattr /etc/shadow
# lsattr /etc/passwd
# lsattr /etc/group
实施步骤
# chattr +a /var/log/messages
# chattr +i /var/log/messages.*
# chattr +i /etc/shadow
# chattr +i /etc/passwd
# chattr +i /etc/group
用chattr命令防止系统中某个关键文件被修改:
chattr +i /etc/fstab
然后试一下rm、mv、rename等命令操作于该文件,都是得到Operation not permitted的结果。
让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
chattr +a /data1/user_act.log
建议管理员对关键文件进行特殊设置(不可更改或只能追加等)
/var/log/目录下有可能不存在message.*的文件。
回退方案
使用chattr 命令还原被修改权限的目录。
chattr -i /etc/fstab
chattr -a /data1/user_act.log
判断依据
# lsattr /var/log/messages
# lsattr /var/log/messages.*
# lsattr /etc/shadow
# lsattr /etc/passwd
# lsattr /etc/group
判断属性
当linux的文件系统为Reiserfs时,不支持使用lsattr命令。
1.1.5 修改umask 值(风险高)
实施目的
控制用户缺省访问权限,当在创建新文件或目录时,屏蔽掉新文件或目录不应有的访问允许权限。防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制。
问题影响
非法访问目录。
系统当前状态
more /etc/profile
检查是否包含umask 值
实施步骤
步骤 1 设置全局默认权限:
在/etc/profile修改或添加umask 077
#vi /etc/profile
umask 077
步骤 2 设置单个用户默认权限:
如果用户需要使用一个不同于默认全局系统设置的umask,可以编辑该用户目录下的.profile文件或.bash_profile文件:
#vi $home/.profile (或.bash_profile)
修改或者添加umask 077
#具体值可以根据实际需要进行设置,umask 的默认设置一般为 022,这给新创建的文件默认权限755(777-022=755),这会给文件所有者读、写权限,但只给组成员和其他用户读权限。
umask 的计算:
umask 是使用八进制数据代码设置的,对于目录,该值等于八进制数据代码777减去需要的默认权限对应的八进制数据代码值;对于文件,该值等于八进制数据代码 666 减去需要的默认权限对应的八进制数据代码值。
回退方案
修改
/etc/profile
文件到加固前状态。
判断依据
1.1.6 记录用户登录信息(风险低)
实施目的
设备应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号,登录是否成功、登录时间、以及远程登录时、用户使用的IP地址
问题影响
无法对用户的登陆进行日志记录
系统当前状态
cat /etc/login.defs,记录LASTLOG_ENAB当前配置。
实施步骤
编辑/etc/login.defs:
#vi /etc/login.defs
修改LASTLOG_ENAB的属性:
LASTLOG_ENAB yes
回退方案
还原“LASTLOG_ENAB”的设置到加固之前配置。
判断依据
1. 验证方法:
使用last命令察看登陆日志
2. 预期结果:
# last
root :0/10.164.10 10.164.104.73 Fri Feb 20 14:29 - 16:53 (02:24)
root 10.164.104.7 10.164.104.73 Fri Feb 20 14:29 - 16:53 (02:23)
root pts/3 Fri Feb 20 14:21 - 14:28 (00:06)
rokay pts/3 10.164.104.73 Fri Feb 20 14:16 - 14:19
1.1.7 记录系统安全事件(风险高)
实施目的
通过设置让系统记录安全事件,方便管理员分析
问题影响
无法记录系统的各种安全事件
系统当前状态
cat /etc/syslog-ng/syslog-ng.conf
实施步骤
# vi /etc/syslog-ng/syslog-ng.conf
添加以下行:
destination d_errors { file("/var/log/errors"); };
filter f_errors { level(err); };
log { source(src); filter(f_errors); destination(d_errors); };
destination d_authpriv { file("/var/log/authpriv_info"); };
filter f_authpriv { level(info) and facility(authpriv); };
log { source(src); filter(f_authpriv); destination(d_authpriv); };
destination d_auth { file("/var/log/auth_none"); };
filter f_auth { level(none) and facility(auth); };
log { source(src); filter(f_auth); destination(d_auth); };
destination d_info { file("/var/log/info"); };
filter f_info { level(info); };
log { source(src); filter(f_info); destination(d_info); };
重启syslog-ng服务
# rcsyslog restart
其中log { source(s_sys); filter(f_errors); destination(d_errors); }; “src”视其源不同可能会为“s_sys”,配置时需注意。
1. 增加安全日志后,日志将会大大增加。要注意监控磁盘可用空间,及时备份清理安全日志文件。
2. 对维护有要求,需询问客户后确定是否实施。
回退方案
还原/etc/syslog-ng/syslog-ng.conf的设置到加固之前配置,重启syslog-ng服务。
判断依据
1. 验证方法:
查看/var/log/errors,/var/log/messages
#more /var/log/errors
#more /var/log/authpriv_info
#more /var/log/info
#more /var/log/auth_none
2. 预期结果:
记录有需要的设备相关的安全事件
1.1.8 记录系统服务日志(风险低)
实施目的
系统上运行的应用/服务也应该配置相应日志选项,比如cron
问题影响
无法记录 cron 服务(计划任务)
系统当前状态
cat /etc/syslog-ng/syslog-ng.conf
实施步骤
# vi /etc/syslog-ng/syslog-ng.conf
添加以下行:
destination d_cron { file("/var/log/cron"); };
filter f_cron { level(info) and facility(cron); };
log { source(src); filter(f_cron); destination(d_cron); };
重启syslog-ng服务
# rcsyslog restart
其中log { source(src); filter(f_cron); destination(d_cron); }; “src”视其源不同可能会为“s_sys”,配置时需注意。
另外,实施此项需要开启cron服务
回退方案
还原/etc/syslog-ng/syslog-ng.conf的设置到加固之前配置,重启syslog-ng服务。
判断依据
1. 验证方法
执行crontab -l命令,然后查看日志文件:#more /var/log/cron
2. 预期结果:
日志中能够列出cron服务的详细日志信息
1.1.9 更改主机解析地址的顺序(风险高)
实施目的
更改主机解析地址的顺序,减少安全隐患。
问题影响
对本机未经许可的IP欺骗。
系统当前状态
cat /etc/host.conf
实施步骤
“/etc/host.conf” 说明了如何解析地址。编辑“/etc/host.conf” 文件( vi /etc/host.conf ), 加 入 下 面 该 行 :
# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We have machines with multiple IP addresses.
multi on
# Check for IP address spoofing
nospoof on
第一项设置首先通过 DNS 解析 IP 地址,然后通过 hosts 文
件解析。第二项设置检测是否“/etc/hosts”文件中的主机是
否拥有多个 IP 地址(比如有多个以太口网卡)。第三项设置
说明要注意对本机未经许可的 IP欺骗。
回退方案
恢复/etc/host.conf 配置文件。
判断依据
查看/etc/host.conf 文件中的以下配置:
order bind,hosts
multi on
nospoof on
1.1.10 打开 syncookie(风险高)
实施目的
打开 syncookie 缓解 syn flood攻击。
问题影响
syn flood 攻击
系统当前状态
cat /proc/sys/net/ipv4/tcp_syncookies
实施步骤
# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
可以加入/etc/rc.d/rc.local中。
回退方案
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
判断依据
cat /proc/sys/net/ipv4/tcp_syncookies 值为 1
1.1.11 不响应ICMP请求(风险高)
实施目的
不响应ICMP请求,避免信息泄露。
问题影响
信息泄露
系统当前状态
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
实施步骤
不响应ICMP请求:
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
回退方案
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
判断依据
cat /proc/sys/net/ipv4/icmp_echo_ignore_all 返回1
本地计算机内系统原因,
怀疑是信任关系或者注册表中某些键值
本地计算机内系统原因,
怀疑是信任关系或者注册表中某些键值
本地计算机内系统原因,
怀疑是
本地计算机内系统原因,
怀疑是信任关系或者注册表中某些键值
1.1.12 防syn 攻击优化(风险高)
实施目的
提高未连接队列大小
问题影响
SYN flood attack
系统当前状态
sysctl net.ipv4.tcp_max_syn_backlog
实施步骤
sysctl -w net.ipv4.tcp_max_syn_backlog="4096"
回退方案
sysctl -w net.ipv4.tcp_max_syn_backlog= 恢复加固之前的值
判断依据
sysctl net.ipv4.tcp_max_syn_backlog 值为 4096
1.1.13 禁止ICMP重定向(风险高)
实施目的
主机系统应该禁止ICMP重定向,采用静态路由。
问题影响
系统当前状态
sysctl -a,记录待修改属性的当前值。
实施步骤
禁止系统发送ICMP重定向包:
# vi /etc/sysctl.conf
只接受有可靠来源的重定向。
net.ipv4.conf.default.secure_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
执行以下命令使设置生效:
# sysctl -p
根据业务需求情况确定是否禁止ICMP重定向。
回退方案
编辑/etc/sysctl.conf,恢复原设置,执行sysctl -p使设置生效。
判断依据
1. 验证方法:
使用sysctl -a查看配置:
#sysctl -a
2. 预期结果:
相关设置符合预期
1.1.14 关闭网络数据包转发(风险高)
实施目的
对于不做路由功能的系统,应该关闭数据包转发功能。
问题影响
系统当前状态
sysctl -a,记录待修改属性的当前值。
实施步骤
关闭数据包转发功能:
# vi /etc/sysctl.conf
关闭IP转发:
net.ipv4.ip_forward = 0
关闭转发源路由包:
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
执行以下命令使设置生效:
# sysctl -p
回退方案
编辑/etc/sysctl.conf,恢复原设置,执行sysctl –p使设置生效。
判断依据
1. 验证方法:
使用sysctl -a查看配置:
#sysctl -a
2. 预期结果:
相关设置符合预期
1.1.15 补丁装载(风险高)
实施目的
可以使系统版本为最新并解决安全问题。
问题影响
系统存在严重的安全漏洞
系统当前状态
uname -a
rpm -qa
cat /proc/version
实施步骤
可以使用Online Update或Patch CD Update等方式升级系统补丁。
回退方案
patchrm
判断依据
1. 验证方法:
# uname -a
2. 预期结果:
系统安装必要的补丁。
重要等级
应根据需要及时进行补丁装载。对服务器系统应先进行兼容性测试。
1.1.16 禁用无用inetd/xinetd服务(风险高)
实施目的
关闭无效的服务,提高系统性能,增加系统安全性。
ISO和VHD安装包不需要执行该加固项目。
问题影响
不用的服务会带来很多安全隐患。
系统当前状态
chkconfig -l记录当前状态。
实施步骤
步骤 1 关闭inetd服务
# chkconfig 服务名 off
步骤 2 关闭xinetd服务
修改其配置文件,在其属性中修改Disable 为yes,如没有,请添加
#vi /etc/xinetd.d/服务名
disable = yes
步骤 3 重启inetd服务
# /etc/init.d/xinetd restart
回退方案
恢复记录的原inetd/xinetd服务状态。
判断依据
1. 验证方法:
# chkconfig -l
2. 预期结果:
仅有允许的服务处于开启状态
重要等级
建议关闭的服务:
chargen、chargen-udp、cups-lpd、cvs、daytime、daytime-udp、echo、echo-udp、fam、netstat、rsync、servers、services、systat、time、time-udp
请根据需要开启相应的服务
1.1.17 为空口令用户设置密码(风险高)
实施目的
禁止空口令用户,存在空口令是很危险的,用户不用口令认证就能进入系统。
问题影响
用户被非法利用。
系统当前状态
awk -F: '($2 == ""){print $1}' /etc/passwd
实施步骤
awk -F: '($2 == ""){print $1}' /etc/passwd ,查询空口令用户
用root 用户登陆Linux 系统,执行passwd 命令,给用户增加口令。
例如:passwd test test
回退方案
root 身份设置用户口令,取消口令
如做了口令策略则失败
判断依据
awk -F: '($2 == ""){print $1}' /etc/passwd
返回值为空
1.1.18 删除root之外 UID 为0 的用户(风险高)
实施目的
帐号与口令-检查是否存在除 root 之外 UID 为0 的用户。
问题影响
账号权限过大,容易被非法利用。
系统当前状态
awk -F: '($3 == 0) { print $1 }' /etc/passwd
实施步骤
删除 除root 以外的 UID 为 0 的用户。
回退方案
无
判断依据
返回值包括“root”以外的条目,则低于安全要求。
重要等级
UID 为0 的任何用户都拥有系统的最高特权,保证只有 root用户的 UID 为0
1.1.19 缺省密码长度限制(风险低)
实施目的
防止系统弱口令的存在,减少安全隐患。对于采用静态口令认证技术的设备,口令长度至少 8 位。
问题影响
增加密码被暴力破解的成功率。
系统当前状态
cat /etc/login.defs
实施步骤
# vi /etc/login.defs
按如下设置
PASS_MIN_LEN 8
退出root用户重新登录,密码设置生效。
回退方案
vi /etc/login.defs ,修改设置到系统加固前状态。
判断依据
PASS_MIN_LEN 8
重要等级
1.1.20 缺省密码生存周期限制
实施目的
对于采用静态口令认证技术的设备,帐户口令的生存期不长于90 天,减少口令安全隐患。
问题影响
密码被非法利用,并且难以管理。
系统当前状态
运行 cat /etc/login.defs 查看状态,并记录。
实施步骤
# vi /etc/login.defs
按如下设置
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
回退方案
vi /etc/login.defs ,修改设置到系统加固前状态。
判断依据
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
实施风险
低
1.1.21 口令过期提醒
实施目的
口令到期前多少天开始通知用户口令即将到期。
问题影响
密码被非法利用,并且难以管理。
系统当前状态
运行 cat /etc/login.defs 查看状态,并记录。
实施步骤
# vi /etc/login.defs
按如下设置
PASS_WARN_AGE 7
回退方案
vi /etc/login.defs ,修改设置到系统加固前状态。
判断依据
PASS_WARN_AGE 7
实施风险
低