linux增强安全基线配置

发布时间:2019年12月12日 阅读:94 次

linux服务器基线配置

账号

1 为不同用户创建不同账号:
#useradd username  #创建账号 
#passwd username   #设置密码 
#chmod 750 directory  #其中750为设置的权限,可根据实际情况123

检测方法:

2 删除或锁定与设备运行、维护等工作无关的账号:
删除用户:#userdel username; 建议删除lp, sync news, uucp, games, bin、man
锁定用户: 
1)修改/etc/shadow文件,用户名后加*LK* 
2)将/etc/passwd 文件中的shell 域设置成/bin/false 
3)#passwd -l username 
12345

注: 只有具备超级用户权限的使用者方可使用,#passwd -l username 锁定用户,用#passwd –d username 解锁后原有密码失效,登录需输入新密码,修改/etc/shadow能保留原有密码。

检测方法:

3 根据系统要求及用户的业务需求,建立多帐户组,将用户账号分配到相应的帐户组

参考配置操作:

cat /etc/passwd
cat /etc/group12

检测方法:

4 使用PAM禁止任何人su 为 root

编辑su文件(vi /etc/pam.d/su),在开头添加下面两行:

auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_wheel.so group=wheel12

这表明只有wheel组的成员可以使用su命令成为root用户。你可以把用户添加到wheel组,以使它可以使用su命令成为root用户。

添加方法为:

# chmod –G10 username1

检测方法:

5 对于采用静态口令认证技术的设备,口令长度至少 8 位,并包括数字、小写字母、大写字母和特殊符号 4 类中至少 3 类

vi /etc/login.defs ,修改设置如下:

PASS_MIN_LEN=8 #设定最小用户密码长度为 8位1

Linux 用户密码的复杂度可以通过 pam_cracklib module 或pam_passwdqc module 进行设置

检测方法:

6 对于采用静态口令认证技术的设备,帐户口令的生存期不长于 90天

vi /etc/login.defs

PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数123

检测方法:

7 在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限

使用如下命令设置:

chmod 644 /etc/passwd 
chmod 600 /etc/shadow 
chmod 644 /etc/group 
123

检测方法:

8 控制用户缺省访问权限

当在创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限。防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制。

设置默认权限:

Vi  /etc/login.defs 在末尾增加 umask 027,将缺省访问权限设置为 750 
1

修改文件或目录的权限,操作举例如下:

#chmod 444 dir ; #修改目录 dir的权限为所有人都为只读。 
根据实际情况设置权限; 
12
9 限制具备超级管理员权限的用户远程登录。远程执行管理员权限操作,应先以普通权限用户远程登录后,再切换到超级管理员权限账号后执行相应操作。

编辑/etc/passwd,帐号信息的 shell 为/sbin/nologin 的为禁止远程登录,如要允许,则改成可以登录的 shell 即可,如/bin/bash

检测方法 :

10 对于使用 IP 协议进行远程维护的设备,设备应配置使用 SSH 等加密协议,并安全配置 SSHD 的设置

正常可以通过#/etc/init.d/sshd start 来启动 SSH; 通过#/etc/init.d/sshd stop 来停止 SSH

检测方法:

11 设置用户目录权限

通过chmod命令对目录的权限进行实际设置。

补充操作说明

etc/passwd 必须所有用户都可读,root用户可写 –rw-r—r—

/etc/shadow 只有root可读 –r--------

/etc/group 必须所有用户都可读,root用户可写 –rw-r—r—

使用如下命令设置:

chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group123

如果是有写权vi限,就需移去组及其它用户对/etc的写权限(特殊情况除外)

执行命令#chmod -R go-w /etc

修改TCP最大连接数

系统最大文件数>可用端口>用户最大文件数1
修改系统最大文件描述符1
sysctl -a | grep file-max1
vi /etc/sysctl.conf
# 在末尾添加
fs.file_max = 10240
# 立即生效
sysctl -p12345
修改可用端口数1
sysctl -a | grep ipv4.ip_local_port_range1
net.ipv4.ip_local_port_range = 1024    655351
修改用户最大文件描述符和最大进程数1
ulimit -n # 最大文件数,一般默认为1024个
ulimit -u # 最大进程数,一般为默认60000+12
# 永久修改
 vi /etc/security/limits.conf
# 修改文件数
 * soft nofile 10240
 * hard nofile 10240
 # 修改进程数
 * soft noproc 60000
 * hard noproc 60000
 # 临时修改
 ulimit -n 1024012345678910
vi /etc/pam.d/login
# 在末尾添加
session required /usr/lib64/security/pam_limits.so
# 作用是告诉Linux在用户完成系统登录后,应该调用pam_limits.so来执行limit.conf这个文件1234

日志

1 启用 syslog系统日志审计功能

Linux系统默认启用以下类型日志:

系统日志(默认)/var/log/messages
cron日志(默认)/var/log/cron
安全日志(默认)/var/log/secure123

注意:部分系统可能使用syslog-ng日志,配置文件为:/etc/syslog-ng/syslog-ng.conf。

您可以根据需求配置详细日志。

#cat /etc/syslog.conf  查看是否有#authpriv.*    /var/log/secure 
1

检测方法:

2 系统日志文件由 syslog创立并且不可被其他用户修改; 其它的系统日志文件不是全局可写

查看如下等日志的访问权限

#ls –l 查看下列日志文件权限 
/var/log/messages 、 /var/log/secure 、  /var/log/maillog 、
/var/log/cron、 /var/log/spooler、/var/log/boot.log 
123

检测方法:

3 记录所有用户的登录和操作日志

通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。

操作步骤

运行 [root@xxx /]# vim /etc/profile打开配置文件。
在配置文件中输入以下内容:12
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null123456789101112131415161718
运行 [root@xxx /]# source /etc/profile 加载配置生效。
注意: /var/log/history 是记录日志的存放位置,可以自定义。12

通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作(root用户除外)。

服务基线(重要)

关闭不必要的服务

查看所有开启的服务:

#ps –ef   
#chkconfig --list 
#cat /etc/xinetd.conf 
在xinetd.conf中关闭不用的服务  首先复制/etc/xinetd.conf。 
#cp /etc/xinetd.conf /etc/xinetd.conf.backup 然后用vi编辑器编辑xinetd.conf文件,对于需要注释掉的服务在相应行开头标记"#"字符,重启xinetd服务即可。 参考附录A,根据需要关闭不必要的服务 
12345

检测方法:

系统Banner设置

修改系统 banner,避免泄漏操作系统名称,版本号,主机名称等,并且给出登陆告警信息

在缺省情况下,当你登录到 linux 系统,它会告诉你该 linux 发行版的名称、版本、内核版本、服务器的名称。应该尽可能的隐藏系统信息。

首先编辑“/etc/rc.d/rc.local” 文件,在下面显示的这些行前加一个“#” ,把输出信息的命令注释掉。

# This will overwrite /etc/issue at every boot. So, make  
any changes you want to make to /etc/issue here or you  
will lose them when you reboot.  
#echo "" > /etc/issue  
#echo "$R" >> /etc/issue  
#echo "Kernel $(uname -r) on $a $(uname -m)" >>  
/etc/issue  
#cp -f /etc/issue /etc/issue.net  
#echo >> /etc/issue  
123456789

其次删除"/etc"目录下的 isue.net 和 issue 文件:

# mv /etc/issue /etc/issue.bak  
# mv /etc/issue.net /etc/issue.net.bak  
12

检测方法:

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(可根据情况设定) 
1

检测方法:

内核安全基线

SYN cookies防护主要是为了防止SYN洪水攻击,开启设置为1:


net.ipv4.tcp_syncookies = 1
/proc/sys/net/ipv4/tcp_syncookies12

网络抗DOS相关


SYN队列的长度,值越大能处理更多的链接数:

net.ipv4.tcp_max_syn_backlog = 8192
/proc/sys/net/ipv4/tcp_max_syn_backlog12

设备队列的长度,这个值建议比syn队列大:

net.core.netdev_max_backlog = 16384
/proc/sys/net/core/netdev_max_backlog12

listen()的backlog限制数,内存大可以提升到65535:

net.core.somaxconn = 4096
/proc/sys/net/core/somaxconn12

TIME_WAIT状态的TCP链接最大数,超过这个值系统会自动清除,抗DOS攻击的选项:

net.ipv4.tcp_max_tw_buckets = 4096
/proc/sys/net/ipv4/tcp_max_tw_buckets12

TIME-WAIT状态的链接重新使用于新的TCP链接,1表示允许:

net.ipv4.tcp_tw_reuse = 1
/proc/sys/net/ipv4/tcp_tw_reuse12

TIME-WAIT状态的链接快速回收,1表示开启:

net.ipv4.tcp_tw_recycle = 1
/proc/sys/net/ipv4/tcp_tw_recycle12

TCP KEEPALIVE探测频率,以秒为单位,建议设置在30分钟以内,300为5分钟:

net.ipv4.tcp_keepalive_time = 300
/proc/sys/net/ipv4/tcp_keepalive_time12

TCP KEEPALIVE探测包的数量:

net.ipv4.tcp_keepalive_probes = 3
/proc/sys/net/ipv4/tcp_keepalive_probes12

SYN和SYN+ACK的重传次数:

net.ipv4.tcp_syn_retries = 3
/proc/sys/net/ipv4/tcp_syn_retries
net.ipv4.tcp_synack_retries = 3
/proc/sys/net/ipv4/tcp_synack_retries1234

TCP ORPHAN的值调大能防止简单DOS攻击,每个ORPHAN消耗大约64k的内存,
65535相当于4GB内存:

net.ipv4.tcp_max_orphans = 65536
/proc/sys/net/ipv4/tcp_max_orphans12

TCP链接的内存大小,以PAGE为单位,x86下每个page为4KB大小:

net.ipv4.tcp_mem = 131072 196608 262144
/proc/sys/net/ipv4/tcp_mem12

如果不是特殊场景的服务器或者网络设备,一般不要调整tcp_mem,超过最大的值
会报OOM的错误。

设置最大的发送和接收窗口,以10G NIC为例,设置64MB:

net.core.rmem_max = 67108864
/proc/sys/net/core/rmem_max

net.core.wmem_max = 67108864
/proc/sys/net/core/wmem_max12345

每个TCP链接的读,写缓冲区内存大小,单位为Byte:

net.ipv4.tcp_rmem = 4096 8192 16777216( 4096 87380 33554432)
/proc/sys/net/ipv4/tcp_rmem

net.ipv4.tcp_wmem = 4096 8192 16777216( 4096 65536 33554432)
/proc/sys/net/ipv4/tcp_wmem12345

如果按照缺省分配8KB * 2 = 16KB/链接,4GB内存能提供的链接数为:

(4 * 1024 * 1024) / 16 = 2621441

源路由通常可以用于在IP包的OPTION里设置途经的部分或者全部路由器,这个特性可以用于网络排错和优化,比如traceroute,攻击者也可以使用这个特性来进行IP欺骗,关闭设置为0:


net.ipv4.conf.all.accept_source_route = 0
/proc/sys/net/ipv4/conf/all/accept_source_route12

ICMP重定向,正常用于选择最优路径,攻击者可以利用开展中间人攻击,关闭设
置为0:


net.ipv4.conf.all.accept_redirects = 0
/proc/sys/net/ipv4/conf/all/accept_redirects12

如果这台GNU/Linux是作为服务器使用而非网关设备,可以关掉:


net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 012

IP欺骗防护,启动设置为1:


net.ipv4.conf.all.rp_filter = 1
/proc/sys/net/ipv4/conf/all/rp_filter12

忽略ICMP请求( PING),启动设置为1:


net.ipv4.icmp_echo_ignore_all = 1
/proc/sys/net/ipv4/icmp_echo_ignore_all12

忽略ICMP广播请求,启动设置为1:


net.ipv4.icmp_echo_ignore_broadcasts = 1
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts12

错误消息防护,会警告你关于网络中的ICMP异常,启动设置为1:


net.ipv4.icmp_ignore_bogus_error_responses = 1
/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses12

对特定packet(IP欺骗,源路由,重定向)进行审计,启动设置为1:


/proc/sys/net/ipv4/conf/all/log_martians
net.ipv4.conf.all.log_martians = 112

地址随机化,启动设置为2:


kernel.randomize_va_space=2
/proc/sys/kernel/randomize_va_space12

内核符号限制访问,启动设置为1:


kernel.kptr_restrict=1
/proc/sys/kernel/kptr_restrict12

类似CVE-2014-0196的exploit对于这一项就很难做到“通杀”?


内存映射最小地址,启动设置为65536:


vm.mmap_min_addr=65536
/proc/sys/vm/mmap_min_addr12

防护进程被ptrace跟踪调试:


kernel.yama.ptrace_scope = 2
/proc/sys/kernel/yama/ptrace_scope

0: 所有进程都可以被调试
1: 只有一个父进程可以被调试
2: 只有系统管理员可以调试(CAP_SYS_PTRACE )
3: 没有进程允许被调试1234567

一般加固机用3,普通服务器用2/1。


Tag:
相关文章

发表评论: