linux服务器基线配置

linux服务器基线配置

账号

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

检测方法:

  • 判定条件 能够登录成功并且可以进行常用操作;
  • 检测操作 使用不同的账号进行登录并进行一些常用操作;
2 删除或锁定与设备运行、维护等工作无关的账号:
删除用户:#userdel username; 建议删除lp, sync news, uucp, games, bin、man
锁定用户: 
1)修改/etc/shadow文件,用户名后加*LK* 
2)将/etc/passwd 文件中的shell 域设置成/bin/false 
3)#passwd -l username 

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

检测方法:

  • 判定条件 被删除或锁定的账号无法登录成功;
  • 检测操作 使用删除或锁定的与工作无关的账号登录系统;
3 根据系统要求及用户的业务需求,建立多帐户组,将用户账号分配到相应的帐户组

参考配置操作:

cat /etc/passwd
cat /etc/group

检测方法:

  • 判定条件 人工分析判断
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=wheel

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

添加方法为:

# chmod –G10 username

检测方法:

  • 检测操作 cat /etc/pam.d/su
5 对于采用静态口令认证技术的设备,口令长度至少 8 位,并包括数字、小写字母、大写字母和特殊符号 4 类中至少 3 类

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

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

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。

检测方法:

  • 判定条件 不符合密码强度的时候,系统对口令强度要求进行提示;符合密码强度的时候,可以成功设置;
  • 检测操作
    1. 检查口令强度配置选项是否可以进行如下配置: i. 配置口令的最小长度 ii. 将口令配置为强口令。
    2. 创建一个普通账号,为用户配置与用户名相同的口令、只包含字符或数字的简单口令以及长度短于 8 的口令, 查看系统是否对口令强度要求进行提示;输入带有特殊符号的复杂口令、普通复杂口令,查看系统是否可以成功设置。
6 对于采用静态口令认证技术的设备,帐户口令的生存期不长于 90天

vi /etc/login.defs

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

检测方法:

  • 判定条件 登录不成功;
  • 检测操作 使用超过 90天的帐户口令登录;
7 在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限

使用如下命令设置:

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

检测方法:

  • 判定条件
    1. 设备系统能够提供用户权限的配置选项,并记录对用户进行权限配置是否必须在用户创建时进行;
    2. 记录能够配置的权限选项内容;
    3. 所配置的权限规则应能够正确应用,即用户无法访问授权范围之外的系统资源,而可以访问授权范围之内的系统资源。
  • 检测操作
    1. 利用管理员账号登录系统,并创建 2 个不同的用户;
    2. 创建用户时查看系统是否提供了用户权限级别以及可访问系统资源和命令的选项;
    3. 为两个用户分别配置不同的权限, 2 个用户的权限差异应能够分别在用户权限级别、可访问系统资源以及可用命令等方面予以体现;
    4. 分别利用 2 个新建的账号访问设备系统,并分别尝试访问允许访问的内容和不允许访问的内容,查看权限配置策略是否生效。
8 控制用户缺省访问权限

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

设置默认权限:

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

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

#chmod 444 dir ; #修改目录 dir的权限为所有人都为只读。 
根据实际情况设置权限; 
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—

使用如下命令设置:

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

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

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

修改TCP最大连接数

  • 最大tcp连接数和系统允许打开的最大文件数,用户允许打开的最大文件数,TCP网络连接可用的端口范围有关,取上述的最小值;
  • 一般的设置规则为:
系统最大文件数>可用端口>用户最大文件数
  • 否则可能导致内存泄漏,系统崩溃;
修改系统最大文件描述符
  • 查看系统当前默认值
sysctl -a | grep file-max
  • 修改值
vi /etc/sysctl.conf
# 在末尾添加
fs.file_max = 10240
# 立即生效
sysctl -p
修改可用端口数
  • 查看端口范围
sysctl -a | grep ipv4.ip_local_port_range
  • 修改
net.ipv4.ip_local_port_range = 1024    65535
修改用户最大文件描述符和最大进程数
  • 查看当前值
ulimit -n # 最大文件数,一般默认为1024个
ulimit -u # 最大进程数,一般为默认60000+
  • 修改值
# 永久修改
 vi /etc/security/limits.conf
# 修改文件数
 * soft nofile 10240
 * hard nofile 10240
 # 修改进程数
 * soft noproc 60000
 * hard noproc 60000
 # 临时修改
 ulimit -n 10240
  • 上面的永久修改方式重启还不会生效,需要执行者
vi /etc/pam.d/login
# 在末尾添加
session required /usr/lib64/security/pam_limits.so
# 作用是告诉Linux在用户完成系统登录后,应该调用pam_limits.so来执行limit.conf这个文件

日志

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

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

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

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

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

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

检测方法:

  • 判定条件 查看是否有#authpriv.* /var/log/secure
  • 检测操作 #cat /etc/syslog.conf
2 系统日志文件由 syslog创立并且不可被其他用户修改; 其它的系统日志文件不是全局可写

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

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

检测方法:

  • 检测操作 使用 ls –l 命令依次检查系统日志的读写权限
3 记录所有用户的登录和操作日志

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

操作步骤

运行 [root@xxx /]# vim /etc/profile打开配置文件。
在配置文件中输入以下内容:
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/null
运行 [root@xxx /]# source /etc/profile 加载配置生效。
注意: /var/log/history 是记录日志的存放位置,可以自定义。

通过上述步骤,可以在 /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,根据需要关闭不必要的服务 

检测方法:

  • 判定条件 所需的服务都列出来; 没有不必要的服务;
  • 检测操作 #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” 文件,在下面显示的这些行前加一个“#” ,把输出信息的命令注释掉。

# 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  

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

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

检测方法:

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

检测方法:

  • 判定条件 查看 TMOUT=300

内核安全基线

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


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

网络抗DOS相关


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

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

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

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

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

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

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

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

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

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

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

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

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

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

TCP KEEPALIVE探测包的数量:

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

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_retries

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

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

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

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

如果不是特殊场景的服务器或者网络设备,一般不要调整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_max

每个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_wmem

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

(4 * 1024 * 1024) / 16 = 262144

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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


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

防护进程被ptrace跟踪调试:


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

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

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


附录 A:

服务名称端口应用说明关闭方法处置建议
daytime13/tcpRFC867 白天协议chkconfig daytime off建议关闭
daytime13/udpRFC867 白天协议chkconfig daytime off建议关闭
time37/tcp时间协议chkconfig time off
time37/udp时间协议chkconfig time-udp off
echo7/tcpRFC862_回声协议chkconfig echo off
echo7/udpRFC862_回声协议chkconfig echo-udp off
discard9/tcpRFC863 废除协议chkconfig discard off
discard9/udpRFC863 废除协议chkconfig discard-udp off
chargen19/tcpRFC864 字符产生协议chkconfig chargen off
chargen19/udpRFC864 字符产生协议chkconfig chargen-udp off
ftp21/tcp文件传输协议(控制)chkconfig gssftp off根据情况选择开放
telnet23/tcp虚拟终端协议chkconfig krb5-telnet off根据情况选择开放
sendmail25/tcp简单邮件发送协议chkconfig sendmail off建议关闭
nameserver53/udp域名服务chkconfig named off根据情况选择开放
nameserver53/tcp域名服务chkconfig named off根据情况选择开放
apache80/tcpHTTP 万维网发布chkconfig httpd off根据情选择开放
login513/tcp远程登录chkconfig login off根据情况选择开放
shell514/tcp远程命令, no/passwd usedchkconfig shell off根据情况选择开放
exec512/tcpremote execution,passwd requiredchkconfig exec off根据情况选择开放
ntalk518/udpnew talk,conversationchkconfig ntalk off建议关闭
ident113/tcpauthchkconfig ident off建议关闭
printer515/tcp远程打印缓存chkconfig printer off强烈建议关闭
bootps67/udp引导协议服务端chkconfig bootps off建议关闭
bootps68/udp引导协议客户端chkconfig bootps off建议关闭
tftp69/udp普通文件传输协议chkconfig tftp off强烈建议关闭
kshell544/tcpKerberos remote,shell -kfallchkconfig kshell off建议关闭
klogin543/tcpKerberos rlogin -kfallchkconfig klogin off建议关闭
portmap111/tcp端口映射chkconfig portmap off根据情况选择开放
snmp161/udp简单网络管理协议(Agent)chkconfig snmp off根据情况选择开放
snmp trap161/tcp简单网络管理协议(Agent)chkconfig snmp off根据情况选择开放
snmp-trap162/udp简单网络管理协议(Traps)chkconfig snmptrap off根据情况选择开放
syslogd514/udp系统日志服务chkconfig syslog off建议保留
lpd515/tcp远程打印缓存chkconfig lpd off强烈建议关闭
nfs2049/tcpNFS远程文件系统chkconfig nfs off强烈建议关闭
nfs2049/udpNFS远程文件系统chkconfig nfs off强烈建议关闭
nfs.lock动态端口rpc 服务chkconfig nfslock off强烈建议关闭
ypbind动态端口rpc 服务chkconfig ypbind off强烈建议关闭
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值