linux服务器基线配置
账号
1 为不同用户创建不同账号:
检测方法:
判定条件 能够登录成功并且可以进行常用操作;
检测操作 使用不同的账号进行登录并进行一些常用操作;
2 删除或锁定与设备运行、维护等工作无关的账号:
注: 只有具备超级用户权限的使用者方可使用,#passwd -l username 锁定用户,用#passwd –d username 解锁后原有密码失效,登录需输入新密码,修改/etc/shadow能保留原有密码。
检测方法:
判定条件 被删除或锁定的账号无法登录成功;
检测操作 使用删除或锁定的与工作无关的账号登录系统;
3 根据系统要求及用户的业务需求,建立多帐户组,将用户账号分配到相应的帐户组
参考配置操作:
检测方法:
判定条件 人工分析判断
4 使用PAM禁止任何人su 为 root
编辑su文件(vi /etc/pam.d/su),在开头添加下面两行:
这表明只有wheel组的成员可以使用su命令成为root用户。你可以把用户添加到wheel组,以使它可以使用su命令成为root用户。
添加方法为:
检测方法:
检测操作 cat /etc/pam.d/su
5 对于采用静态口令认证技术的设备,口令长度至少 8 位,并包括数字、小写字母、大写字母和特殊符号 4 类中至少 3 类
vi /etc/login.defs ,修改设置如下:
Linux 用户密码的复杂度可以通过 pam_cracklib module 或pam_passwdqc module 进行设置
使用chage命令修改用户设置。
例如,chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>表示将此用户的密码最长使用天数设为30,最短使用天数设为0,密码2000年1月1日过期,过期前七天警告用户。
设置连续输错三次密码,账号锁定五分钟。使用命令 vi /etc/pam.d/common-auth修改配置文件,在配置文件中添加 auth required pam_tally.so onerr=fail deny=3 unlock_time=300。
检测方法:
判定条件 不符合密码强度的时候,系统对口令强度要求进行提示;符合密码强度的时候,可以成功设置;
检测操作
检查口令强度配置选项是否可以进行如下配置: i. 配置口令的最小长度 ii. 将口令配置为强口令。
创建一个普通账号,为用户配置与用户名相同的口令、只包含字符或数字的简单口令以及长度短于 8 的口令, 查看系统是否对口令强度要求进行提示;输入带有特殊符号的复杂口令、普通复杂口令,查看系统是否可以成功设置。
6 对于采用静态口令认证技术的设备,帐户口令的生存期不长于 90天
vi /etc/login.defs
检测方法:
判定条件 登录不成功;
检测操作 使用超过 90天的帐户口令登录;
7 在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限
使用如下命令设置:
检测方法:
判定条件
设备系统能够提供用户权限的配置选项,并记录对用户进行权限配置是否必须在用户创建时进行;
记录能够配置的权限选项内容;
所配置的权限规则应能够正确应用,即用户无法访问授权范围之外的系统资源,而可以访问授权范围之内的系统资源。
检测操作
利用管理员账号登录系统,并创建 2 个不同的用户;
创建用户时查看系统是否提供了用户权限级别以及可访问系统资源和命令的选项;
为两个用户分别配置不同的权限, 2 个用户的权限差异应能够分别在用户权限级别、可访问系统资源以及可用命令等方面予以体现;
分别利用 2 个新建的账号访问设备系统,并分别尝试访问允许访问的内容和不允许访问的内容,查看权限配置策略是否生效。
8 控制用户缺省访问权限
当在创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限。防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制。
设置默认权限:
修改文件或目录的权限,操作举例如下:
9 限制具备超级管理员权限的用户远程登录。远程执行管理员权限操作,应先以普通权限用户远程登录后,再切换到超级管理员权限账号后执行相应操作。
编辑/etc/passwd,帐号信息的 shell 为/sbin/nologin 的为禁止远程登录,如要允许,则改成可以登录的 shell 即可,如/bin/bash
检测方法 :
判定条件 root 远程登录不成功,提示“没有权限” ;普通用户可以登录成功,而且可以切换到 root用户;
检测操作 root 从远程使用 telnet 登录; 普通用户从远程使用 telnet 登录;root 从远程使用 ssh 登录;普通用户从远程使用 ssh登录;
10 对于使用 IP 协议进行远程维护的设备,设备应配置使用 SSH 等加密协议,并安全配置 SSHD 的设置
正常可以通过#/etc/init.d/sshd start 来启动 SSH; 通过#/etc/init.d/sshd stop 来停止 SSH
检测方法:
判定条件 # ps –ef|grep ssh 是否有 ssh 进程存在 是否有 telnet进程存在
检测操作 查看 SSH服务状态: # ps –ef|grep ssh 查看 telnet 服务状态: # ps –ef|grep telnet
11 设置用户目录权限
通过chmod命令对目录的权限进行实际设置。
补充操作说明
etc/passwd 必须所有用户都可读,root用户可写 –rw-r—r—
/etc/shadow 只有root可读 –r--------
/etc/group 必须所有用户都可读,root用户可写 –rw-r—r—
使用如下命令设置:
如果是有写权vi限,就需移去组及其它用户对/etc的写权限(特殊情况除外)
执行命令#chmod -R go-w /etc
修改TCP最大连接数
最大tcp连接数和系统允许打开的最大文件数,用户允许打开的最大文件数,TCP网络连接可用的端口范围有关,取上述的最小值;
一般的设置规则为:
否则可能导致内存泄漏,系统崩溃;
查看系统当前默认值
修改值
查看端口范围
修改
查看当前值
修改值
上面的永久修改方式重启还不会生效,需要执行者
日志
1 启用 syslog系统日志审计功能
Linux系统默认启用以下类型日志:
注意:部分系统可能使用syslog-ng日志,配置文件为:/etc/syslog-ng/syslog-ng.conf。
您可以根据需求配置详细日志。
检测方法:
判定条件 查看是否有#authpriv.* /var/log/secure
检测操作 #cat /etc/syslog.conf
2 系统日志文件由 syslog创立并且不可被其他用户修改; 其它的系统日志文件不是全局可写
查看如下等日志的访问权限
检测方法:
检测操作 使用 ls –l 命令依次检查系统日志的读写权限
3 记录所有用户的登录和操作日志
通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。
操作步骤
通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作(root用户除外)。
服务基线(重要)
关闭不必要的服务
查看所有开启的服务:
检测方法:
判定条件 所需的服务都列出来; 没有不必要的服务;
检测操作 #ps –ef #chkconfig --list #cat /etc/xinetd.conf
补充说明 在/etc/xinetd.conf文件中禁止不必要的基本网络服务。 注意:改变了“/etc/xinetd.conf”文件之后,需要重新启动xinetd。对必须提供的服务采用tcpwapper来保护
系统Banner设置
修改系统 banner,避免泄漏操作系统名称,版本号,主机名称等,并且给出登陆告警信息
在缺省情况下,当你登录到 linux 系统,它会告诉你该 linux 发行版的名称、版本、内核版本、服务器的名称。应该尽可能的隐藏系统信息。
首先编辑“/etc/rc.d/rc.local” 文件,在下面显示的这些行前加一个“#” ,把输出信息的命令注释掉。
其次删除"/etc"目录下的 isue.net 和 issue 文件:
检测方法:
查看 Cat /etc/rc.d/rc.local 注释住处信息
ssh 安全设置
openssh目前的默认配置文件相比以前虽然要安全的多,但还是有必要对生产系统中的ssh服务器进行基线检查。
配置文件:/etc/ssh/ssh_config
1,known_hosts保存相关服务器的签名,所以必须把主机名hash:
HashKnownHosts yes
2,SSH协议v1不安全:
Protocol 2
3,如果没用X11转发的情况:
X11Forwarding no
4,关闭rhosts:
IgnoreRhosts yes
5,关闭允许空密码登录:
PermitEmptyPasswords no
6,最多登录尝试次数:
MaxAuthTries 5
7,禁止root登录
PermitRootLogin no
8,关闭密码认证,启用公钥认证:
PubkeyAuthentication yes
PasswordAuthentication no
登录超时时间设置
对于具备字符交互界面的设备,配置定时帐户自动登出
通过修改账户中“TMOUT” 参数,可以实现此功能。TMOUT 按秒计算。编辑 profile 文件(vi /etc/profile) ,在“HISTFILESIZE=”后面加入下面这行:
检测方法:
判定条件 查看 TMOUT=300
内核安全基线
SYN cookies防护主要是为了防止SYN洪水攻击,开启设置为1:
网络抗DOS相关
SYN队列的长度,值越大能处理更多的链接数:
设备队列的长度,这个值建议比syn队列大:
listen()的backlog限制数,内存大可以提升到65535:
TIME_WAIT状态的TCP链接最大数,超过这个值系统会自动清除,抗DOS攻击的选项:
TIME-WAIT状态的链接重新使用于新的TCP链接,1表示允许:
TIME-WAIT状态的链接快速回收,1表示开启:
TCP KEEPALIVE探测频率,以秒为单位,建议设置在30分钟以内,300为5分钟:
TCP KEEPALIVE探测包的数量:
SYN和SYN+ACK的重传次数:
TCP ORPHAN的值调大能防止简单DOS攻击,每个ORPHAN消耗大约64k的内存,
65535相当于4GB内存:
TCP链接的内存大小,以PAGE为单位,x86下每个page为4KB大小:
如果不是特殊场景的服务器或者网络设备,一般不要调整tcp_mem,超过最大的值
会报OOM的错误。
设置最大的发送和接收窗口,以10G NIC为例,设置64MB:
每个TCP链接的读,写缓冲区内存大小,单位为Byte:
如果按照缺省分配8KB * 2 = 16KB/链接,4GB内存能提供的链接数为:
源路由通常可以用于在IP包的OPTION里设置途经的部分或者全部路由器,这个特性可以用于网络排错和优化,比如traceroute,攻击者也可以使用这个特性来进行IP欺骗,关闭设置为0:
ICMP重定向,正常用于选择最优路径,攻击者可以利用开展中间人攻击,关闭设
置为0:
如果这台GNU/Linux是作为服务器使用而非网关设备,可以关掉:
IP欺骗防护,启动设置为1:
忽略ICMP请求( PING),启动设置为1:
忽略ICMP广播请求,启动设置为1:
错误消息防护,会警告你关于网络中的ICMP异常,启动设置为1:
对特定packet(IP欺骗,源路由,重定向)进行审计,启动设置为1:
地址随机化,启动设置为2:
内核符号限制访问,启动设置为1:
类似CVE-2014-0196的exploit对于这一项就很难做到“通杀”?
内存映射最小地址,启动设置为65536:
防护进程被ptrace跟踪调试:
一般加固机用3,普通服务器用2/1。