您的位置:首页 > 运维架构 > Linux

linux系统安全配置规范

yunweigege 2014-12-18 10:59 48 查看


2
安装

2.1

使系统处于单独(或隔离)的网络中。以防止未受保护的系统连接到其它网络或互联网中受到可能的攻击

安装完成后将下面软件卸载

pump
apmd
lsapnptools
redhat-logos

mt-st
kernel-pcmcia-cs
Setserial
redhat-relese

eject
linuxconf
kudzu
gd

bc
getty_ps
raidtools
pciutils

mailcap
setconsole
gnupg

用下面的命令卸载这些软件:

[root@deep]#rpm
–e softwarename

卸载它们之前最好停掉三个进程:

[root@deep]#/etc/rc.d/init.d/apmd stop

[root@deep]#/etc/rc.d/init.d/sendmail stop

[root@deep]#/etc/rc.d/init.d/kudzu stop

在进行系统规划时,总的原则是将不需要的服务一律去掉。默认的linux就是一个强大的系统,运行了很多的服务。但有许多服务是不需要的,很容易引起安全风险。这个文件就是/etc/inetd.conf,它制定了/usr/sbin/inetd将要监听的服务,你可能只需要其中的两个:telnet和ftp,其它的类如shell、login、exec、talk、ntalk、imap、pop-2、pop-3、finger、auth等,除非你真的想用它,否则统统关闭。

3.用户帐号安全

3.1
密码安全策略

l 口令至少为6位,并且包括特殊字符

l 口令不要太简单,不要以你或者有关人的相关信息构成的密码,比如生日、电话、姓名的拼音或者缩写、单位的拼音或者英文简称等等。

l 口令必须有有效期

l 发现有人长时间猜测口令,需要更换口令

3.2
检查密码是否安全

可以使用以下几种工具检查自己的密码是否安全:

l JOHN,crack等暴力猜测密码工具

l 在线穷举工具,包括Emailcrk、流光等

3.3 PasswordShadowing

l
使用shadow来隐藏密文(现在已经是默认配置)

l
定期检查shadow文件,如口令长度是否为空。

#awk -F: length($2)==0 {print $1} /etc/shadow

3.4
管理密码

l
设置服务器口令有效期为3个月
(编辑/etc/login.defs文件)

l
口令长度至少8位 (如linux默认为5,可以通过编辑/etc/login.defs修改)

l
禁用root登录服务器;

l
只允许服务器管理人员使用su命令成为root。

编辑/etc/pam.d/su文件,在文件头部加上:

authsufficient /lib/security/pam_rootok.so debug

auth required/lib/security/pam_wheel.so group=wheel

Red hat 7.0中su文件已做了修改,直接去掉头两行的注释符就可以了

[root@deep]#usermod -G10 admin来将用户加入wheel组

3.5
修改SSH端口

修改ssh端口改成10000以上,降低网络工具扫描到端口的机率

修改方法:

#
编辑 /etc/ssh/ssh_configvi /etc/ssh/ssh_config#
在 Host *
下 ,加入新的 Port
值。以 18439
为例(下同):Port 22Port

18439#
编辑 /etc/ssh/sshd_configvi /etc/ssh/sshd_config#加入新的
Port 值Port 22Port 18439#
保存后,重启 SSH
服务:service sshd restart

3.6
限制IP登录

3.6.1

编辑 /etc/hosts.allowvi /etc/hosts.allow#
例如只允许123.45.67.89
登录sshd:123.45.67.89

3.6.2

针对极重要的服务器可考虑采用SSH证书登录验证,具体配置方式可参考相关资料

3.7
其它

缺省账号是攻击者入侵的常用入口

l 清除不必要的系统帐户

[root@deep]#
userdel lp

[root@deep]# userdel sync

[root@deep]# userdel shutdown

[root@deep]# userdel halt

[root@deep]# userdel news

[root@deep]# userdel uucp

[root@deep]# userdel operator

[root@deep]# userdel games (如果不使用
X Window,则删除)

[root@deep]# userdel gopher

[root@deep]# userdel ftp
(如果不使用ftp服务则删除)

bin/daemon/adm/nobody帐号不要删除

l 禁止在passwd文件中包含个人信息,防止被finger之类程序泄露。

l 修改shadow,passwd,gshadow文件不可改变位

[root@deep]# chattr +i /etc/passwd

[root@deep]# chattr +i /etc/shadow

[root@deep]# chattr +i /etc/group

[root@deep]# chattr +i /etc/gshadow

4
网络服务安全

遵循以下两个基本原则:

l 只对外开放所需要的服务,关闭所有不需要的服务。对外提供的服务越少,所面临的外部威胁越小。

l 将所需的不同服务分布在不同的主机上,这样不仅提高系统的性能,同时便于配置和管理,减小系统的安全风险。

在上述两个基本原则下,还要进一步检查系统服务的功能和安全漏洞。

4.1服务过滤Filtering

l 在SERVER上禁止这些服务

l 如果一定要开放这些服务,通过防火墙、路由指定信任IP访问。

l 要确保只有真正需要的服务才被允许外部访问,并合法地通过用户的路由器过滤检查。尤其在下面的服务不是用户真正需要时候,要从路由器上将其过滤掉

NAME
PORT
PROTOCOL

echo
7
TCP/UDP

systat 11
TCP

netstat 15
TCP

bootp 67
UDP

tftp 69
UDP

link 87
TCP

supdup 95
TCP

sunrpc 111
TCP/UDP

news 144
TCP

snmp 161
UDP

xdmcp 177
UDP

exec 512
TCP

login
513
TCP

shell 514
TCP

printer 515
TCP

biff 512
UDP

who 513
UDP

syslog 514
UDP

uucp 540
TCP

route 520
UDP

openwin 2000
TCP

nfs 2049
UDP/TCP

x11 6000 to 6000+n
TCP

注意:有些UDP服务可以导致DOS攻击和远程溢出,如

rpc.ypupdated

rpcbind

rpc.cmsd
100068

rpc.statd
100024

rpc.ttdbserver
100083

sadmind
100232/10

l 配置完成以后,利用网络扫描器模拟入侵者从外部进行扫描测试。如利用nmap

l 使用ssh来代替telnetd,ftpd.pop等通用服务。传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据。

4.2 /etc/inetd.conf

l 确保文件权限设置为600

l 确保文件属主设置为root

l 注释掉所有不需要的服务,需要重新启动inetd进程

l 使用netstat
–an命令,查看本机所提供的服务。确保已经停掉不需要的服务

4.3 R
服务

不必使用R服务

l 关闭R服务,Red
hat 6.2在/etc/inetd.conf文件中注释以下服务,并且重新启动inetd服务。Red
hat 7.0在/etc/xinetd.d目录中删除

exec
512
TCP

Rlogin
513

TCP

Rshell
514

TCP

l 预先生成$HOME/.rhosts,/etc/hosts.equiv文件,并且设置为0000,防止被写入”+
+”。(攻击者经常使用类似符号链接或者利用ROOTSHELL写入,并且远程打开受保护主机的R服务)

必须使用R服务

l 使用更安全版本的r服务。如WietseVenema的logdaemon程序等。

l 在路由或者防火墙上禁止外部网络访问受保护主机的512,513
and 514 (TCP)端口。

l 使用TCP
WRAPPERS设置可访问受保护主机R服务的信任机器。

4.4 Tcp_wrapper

该软件的作用是在Unix平台上过滤TCP/UDP服务,它目前已被广泛用于监视并过滤发生在主机上的ftp、telnet、rsh、rlogin、tftp、finger等标准TCP/UDP服务。

当系统安装TCP_wrapper之后,in.conf文件中
/usr/sbin/in.telnetd的in.telnetd会被TCP_wrapper附带的tcpd程序取代。该程序截获来自客户端的服务请求、记录请求发生的时间和IP地址,并按访问控制进行检查。当本次连接的用户、请求源的IP等信息符合管理员的预设值时,才将该次请求传递给系统in.telnetd,由系统in.telnetd完成后续工作;若连接不符合要求,该连接请求将被拒绝。同样,ftp、
rsh等TCP/UDP服务均可被tcpd取代,由tcpd充当二传手。

l 使用PARANOID
模式,用此参数后需要在/etc/hosts文件中加上允许使用telnet或ftp服务的客户端的名字和IP地址

l 在/etc/hosts.deny中设置为all:all,默认所有不允许

Access is denied by default.

# Deny access to everyone.

ALL: ALL@ALL, PARANOID
#Matches any host whose name does notmatch its address, see

bellow.

l 在/etc/hosts.allow中设置允许的服务和地址

如:sshd: 208.164.186.1 gate.openarch.com

l 使用tcpdchk检查

l UDP服务使用tcpwrapper时要使用/etc/inetd.conf中的nowait选项。

4.5 /etc/hosts.equiv
文件

不必使用/etc/hosts.equiv文件

l 从系统中删除此文件

l 预先生成/etc/hosts.equiv文件,并且设置为0000,防止被写入”+
+”。(攻击者经常使用类似符号链接或者利用ROOTSHELL写入,并且远程打开受保护主机的R服务)

必须使用/etc/hosts.equiv文件

l 确保此文件中可信赖主机为必须的。

l 预先生成/etc/hosts.equiv文件,并且设置为0000,防止被写入”+
+”。(攻击者经常使用类似符号链接或者利用ROOTSHELL写入,并且远程打开受保护主机的R服务)

l 如果使用NIS或者NIS+的话,此文件中的组应该是容易管理的。

l 信赖主机必须确保可靠

l 信赖主机使用全名,如例如
hostname.domainname.cn

l 任何时候都不应该出现”+”字符,因为这样会使任何一台主机上的任何用户都可以不加口令地访问系统

l 文件中不要使用'!'
和'#'符号,因为在该文件中那并不表示注释信息

l 文件开始字符不应该为'-'.,请查阅C8

l 确保该文件的访问权限被设置成600。

l 文件属主确保为ROOT。

l 在每次安装补丁程序或操作系统之后,都应该重新检查该文件夹的设置情况

4.6 /etc/services

l 确保文件权限设置为600

l 确保文件属主设置为root

l 如果需要提供一些常见服务,如telnetd等,可以在此修改端口

此文件为端口号和服务的对应关系,给此文件加上保护,避免没有授权的修改和删除

[root@deep]# chattr +i/etc/services

4.7 /etc/aliases

l 修改/etc/aliases文件,注释掉"decode"
"games,ingress,system,toor,manager,….”.等

l 使用/usr/bin/newaliases命令激活新配置

l 确保文件权限设置为755

l 确保文件属主设置为root

4.8 NFS

NFS文件系统应注意以下几方面的安全

l 在外部路由上过滤端口111、2049
(TCP/UDP),不允许外部访问。

l 检查PATCH更新情况。

l 检查
/etc/exports 输出路径的权限,确定只有root能修改, all
user只能read

l 用exportfs
去增加或删除directories

exportfs -o access=engineering,ro=dancer /usr

exportfs -u /usr

l 假如你的机器没有NIS(YP
server)的服务,当更改资料时记得修改

/etc/passwd

/etc/group

/etc/hosts

/etc/ethers

l 不允许export出去包含本地入口的目录

l 确定对方机器是完全可信赖的。使用全名

l 确保输出列表没有超过256个字符。

l 使用showmount
–e命令查看自己的export设置

l 将/etc/exports权限设置为644,属主为root

l 使用noexec,nodev.nosuid等选项控制mount的文件系统,在/etc/fstab中设置。

4.9 Trivial
ftp (tftp)

无论何种情况下都不应该启动这个服务进程。

4.10卸载Sendmail

4.11屏蔽finger命令

4.12 World
Wide Web (WWW) – httpd

l 使用你选择的WEBSERVER的最新版本

l 不要使用ROOT用户运行httpd

l 在chroot环境中运行httpd

l 尽量不要使用CGI脚本

l 对CGI脚本进行安全审计

l 链接使用静态库

l 过滤危险字符,如\n
\r (.,/;~!)>|^&$`< 等

l 使用https进行关键业务传送。

4.13 FTP安全问题

使用最新的FTP软件

配置Configuration

l 检查所有的默认配置选项

l 确定没有SITE
EXEC问题

l 设置/etc/ftpusers确定禁止使用ftp的用户

l 使用chroot环境运行ftpd

l 使用自己的ls等命令

l 加入对quota,pam等支持

l 配置/etc/ftpaccess文件,禁止系统信息泄露和设置最大连接数

l 配置/etc/ftphosts,设置允许使用FTP的HOST和USER

l 针对不同用户设置不同权限

l 经常查看LOG记录 /var/log/xferlog

l 配置文件属性改为600

Anonymous ftp

l 编译时打开允许匿名选项

l 如果使用分布式passwords
(e.g., NIS, NIS+),需要设置好密码文件。

l 匿名用户只给读权限(在/etc/ftpaccess中设置)

4.16禁止缺省路由

在服务器中,应该严格禁止设置缺省路由,即default
route

5 系统设置安全

5.1限制控制台的使用

禁止使用控制台程序:删除/etc/security/console.apps中的服务

[root@deep]# rm -f/etc/security/console.apps/servicename,

比如:[root@deep]# rm -f/etc/security/console.apps/halt

[root@deep]# rm-f /etc/security/console.apps/poweroff

[root@deep]# rm-f /etc/security/console.apps/reboot

[root@deep]# rm-f /etc/security/console.apps/shutdown

[root@deep]# rm -f/etc/security/console.apps/xserver(如删除,只有root能启动Xserver)

禁止控制台的访问:在/etc/pam.d中的所有文件中,给包含pam_console.so的行加上注释

5.2系统关闭Ping

5.2.1

关闭ping,使系统对ping不做反应,对网络安全大有好处。

可以使用如下命令:

[root@deep]#echo1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

可以将这一行加到/etc/rc.d/rc.local文件中去,这样系统重启动后会自动执行

恢复系统的Ping响应:

[root@deep]#echo0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

5.2.2

避免被扫描到,除了必要的端口,例如 Web、

FTP、SSH等,其他的都应关闭。关闭
icmp 端口,并设置规则,丢弃icmp
包。

丢弃 icmp
包可在 iptables
中, 加入下面这样一条:

-A INPUT -p icmp -j DROP

5.3关闭或更改系统信息

关闭telnet系统信息

Red Hat 6.2中,编辑/etc/inetd.conf

telnet stream tcp nowait root/usr/sbin/tcpd in.telnetd –h

加上参数-h可以关闭telnet信息

Red Hat 7.0中,编辑/etc/xinetd.d/telnet

加上server_args= -h,可以关闭telnet信息

/etc/rc.d/rc.local中关闭或修改系统信息

/etc/issue和/etc/issue.net中包含本地登录和网络登录时提示的系统信息,对它们进行更改可以改变系统信息,或直接删除,并在/etc/rc.d/rc.local文件中注释相关行:

#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

5.4/etc/securetty文件

/etc/securetty文件规定root从哪个TTY设备登录,列出的是允许的tty设备,将不允许的tty设备行注释掉.

5.5 /etc/host.conf文件

/etc/host.conf定义主机名怎样解析,使用什么服务,什么顺序解析

# Lookup names via DNSfirst then fall back to /etc/hosts.

order bind,hosts

# We have machines withmultiple IP addresses.

multi on

# Check for IP addressspoofing.

nospoof on

order指定选择服务的顺序

multi指定主机能不能有多个IP地址,ON代表允许

nospoof指定不允许IP伪装,此参数必须设置为ON

5.6禁止IP源路径路由

允许IP源路径路由(IP
source routing)会使得黑客能够欺骗你的计算机,截取信息包.强烈建议禁止,使用如下命令:

for f in/proc/sys/net/ipv4/conf/*/accept_source_route; do

echo 0 > $f

done

将accept_source_route设置为0,并将上述命令加到/etc/rc.d/rc.local中去,每次重启动将自动执行

5.7资源限制

为了避免拒绝服务攻击,需要对系统资源的使用做一些限制。

首先,编辑/etc/security/limits.conf,加入或改变如下

* hard core 0
(禁止创建core文件)

* hard rss 5000
(除root外,其他用户最多使用5M内存)

* hard nproc 20
(最多进程数限制为20)

编辑/etc/pam.d/login,在文件末尾加上:

session required /lib/security/pam_limits.so

对TCP SYN Cookie的保护:(防止SYN
Flood攻击)

[root@deep]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies

5.8 LILO安全

在“/etc/lilo.conf”文件中添加3个参数:time-out、restricted
和 password。这些选项会在启动时间(如“linux
single”)转到启动转载程序过程中,要求提供密码。

步骤1

编辑lilo.conf文件(/etc/lilo.conf),添加和更改这三个选项:

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

time-out=00 
#change this line to 00

prompt

Default=linux

restricted 
#add this line

password= 
#add this line and put yourpassword

image=/boot/vmlinuz-2.2.14-12

label=linux

initrd=/boot/initrd-2.2.14-12.img

root=/dev/hda6

read-only

步骤2

由于其中的密码未加密,“/etc/lilo.conf”文件只对根用户为可读。

[root@kapil /]# chmod 600 /etc/lilo.conf
(不再为全局可读)

步骤3

作了上述修改后,更新配置文件“/etc/lilo.conf”。

[Root@kapil /]# /sbin/lilo -v
(更新lilo.conf文件)

步骤4

还有一个方法使“/etc/lilo.conf”更安全,那就是用chattr命令将其设为不可:

[root@kapil /]# chattr +i /etc/lilo.conf

它将阻止任何对“lilo.conf”文件的更改,无论是否故意。

5.9
禁止Control-Alt-Delete
键盘关机命令

编辑“/etc/inittab”文件,只要在下面行前面加“#”,改为注释行。

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

改为:

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

然后,为使更改生效,在提示符下输入:

[root@kapil /]# /sbin/init q

5.10日志系统安全

为了保证日志系统的完整性,防止黑客删除日志,需要对日志系统进行安全配置。本专题将有专门文档来讲述日志系统的安全。

5.11修正脚本文件在“/etc/rc.d/init.d”目录下的权限

对脚本文件的权限进行修正,脚本文件用以决定启动时需要运行的所有正常过程的开启和停止。添加:[root@kapil/]#
chmod -R 700 /etc/rc.d/init.d/*

这句指的是,只有根用户允许在该目录下使用
Read、Write,和
Execute 脚本文件。

5.12 /etc/passwd和/etc/shadow文件

确保这两个文件只有管理员(即root)可以访问到,下载npasswd工具对/etc/shadows进行穷尽攻击,确保为帐号设置的密码是安全不易被破解的

5.13 禁止一般用户访问/var/log

使用chmod修改其权限为只有root才可以访问

5.13缓冲区溢出漏洞的防范

攻击方式:攻击root程序,然后利用缓冲区溢出发生的内存错误来执行类似exec(sh)的代码,从而获得root的一个shell

防范措施:

l 安装操作系统时候将记录日志的目录/var、/home单独分出来,禁止以root记录日志、邮件信息,这样可以避免大量的拒绝服务,导致产生大量的日志,避免分区溢出的漏洞攻击

l 禁止Ping服务,5.2已经介绍方法

l chattr
+i /etc/services 将此文件定义为不可修改,提高此文件的安全性

l 禁止远程登录用户看到系统的提示信息,方法是改变/etc/inetd.conf中telnet设置,在telnetstreamtcp
nowait root /usr/sbin/tcpd in.telnetd –h末尾加-h参数

l 屏蔽登录服务器的提示内核、操作系统版本信息

l 禁止finger服务,删除或改名、或修改finger命令只可以root执行,具体视情况而定

l 修改/etc/rc.d/init.d下文件的访问权限,设置只有root有权限

chmod –R 700/etc/rc.d/init.d/*

5.13 root密码破解的防范

安装DenyHosts-2.6.tar.gz,DenyHosts会分析sshd的日志文件(/var/log/secure),当发现重
复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能,可在配置文件中设置邮件提醒

6 文件系统安全

6.1文件权限

l 去掉不必要的suid程序,可以通过脚本查看

[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \)\-exec ls –lg {}\;

通过下面的命令来去掉不需要的程序的‘s’位

[root@deep]# chmod a-s/usr/bin/commandname

l 重要的配置文件如/etc/passwd,/etc/shadow,/etc/inetd.conf等设置为0755,并设置为不可更改

l /etc,
/usr/etc, /bin, /usr/bin,/sbin, /usr/sbin, /tmp and/var/tmp的属主是root,并且设置粘滞。

l /dev目录下没有特殊文件。

l 查找任何人可写的文件和目录

[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg{} \;

[root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg{} \;

l 查找异常文件,如..文件,…文件等

find / -name".. " -print –xdev

find / -name".*" -print -xdev | cat -v

l 检查没有属主的文件。

Find / -nouser–o –nogroup

l 检查在/dev目录以外还有没有特殊的块文件

find / \( -typeb -o -type c \) -print | grep -v '^/dev/'

l 使用checksum
md5 或者PGP来效验文件

6.2控制mount上的文件系统

可以使用noexec, nodev, nosuid来控制mount上的文件系统.在/etc/fstab中设置,比如:

将/dev/sda11 /tmp ext2 defaults 1 2

/dev/sda6 /home ext2 defaults 1 2

改为:/dev/sda11 /tmp ext2nosuid,nodev,noexec 1 2

/dev/sda6 /home ext2 nosuid,nodev 1 2

noexec表示不允许可执行,nodev表示不允许块设备,nosuid表示不允许suid位

6.3备份与恢复

对以下内容进行本地和远程备份

SVN代码库备份

数据库备份(Mysql)

应用服务器(Tomcat等)

Web服务器(Nginx)

确保服务器硬件意外损坏后,能即时进行恢复

7 其它

7.1使用防火墙

防火墙要正常开启,通过iptables开放必须的Web服务端口,比如常用的8080/443/25等

7.2
使用sudo

安装第三方软件建立相应的用户和组,启动的时候在对应的用户下启动,如需要root权限,使用sudo启动
标签: