LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3971|回复: 12

浅谈Linux安全

[复制链接]
发表于 2003-12-24 15:14:41 | 显示全部楼层 |阅读模式
浅谈Linux安全

    摘要
    提供给管理员和初学者的快速安装安全设置,希望大家能从中受益(2003-12-06 09:21:51)

By 明明

用了linux也有些时候了,终于决定写一点东西,给大家共勉,起到互相交流之目的。
写这篇文章是针对使用linux的管理员,爱好者,对linux安全性很关心的同僚们,希望对大家有所帮助,废话就不多说了,进入正题吧.

在说安全设置之前,我想先说说关于发行版和安装的问题。对于发行版,我相信大都知道,linux发行版实在是太多了我也不止一次在很多网站的文章,很多书籍上看到过议论那种发行版是最好的,其实我个人认为,在linux世界中,没有最好的这种说法,只要自己习惯,熟悉的一种版本,那么我就可以说他是最好的。写这篇文章,我也试找了很多资料,试图找到一个大家都觉得常用的,熟悉的,最后,我觉得redhat linux真的很不错,虽然它的内核比较庞大,而且效率不使所有发行版中最高的,但是它的普遍性,易用性和软件升级支持,应用软件支持方面是值得提出的,这些方面也正是一个好的linux发行版需要具有的。 这篇文章建立在redhat linux 7.3版之上,所有的软件设置均在这个版本上测试通过。

说到这里,可能大家要问,为什么我要用redhat 7.3?现在不是有很多吗?就redhat来说就有redhat 8.0, redhat 9.0还有什么redhat 高级企业版,等等。这么多新的东西为什么不用呢?这个问题问得很好,这正是我要说的安装和选择发行版是要注意的一点。

1、版本的选择

我使用redhat也有很长时间了,个人认为,redhat的.0版本都属于大版本升级的第一个版本,这个版本往往很多软件包不是很稳定,而且容易出现故障,对于管理员来说linux绝大部分是用来作为服务器使用的,那么要最为服务器,最最大的首要问题就是稳定,其次最重要的也是安全,所以如果你是管理员,而非狂热的爱好者,发烧友,我建议你选择redhat 7.3。redhat 的版本号,后面跟了小版本号的就是软件包有很多更新和修改的,虽然这个更新可能不是最新,但是至少它是这个稳定版本中最新最稳定的,不知大家理解这个问题没有,后面我将详细介绍一下版本的升级问题,那里我将会说明这个理论。

2、安装方式

选择好了安装发行版,那么我们就开始安装了,其实安装的时候只有几个需要注意的地方,其一就是分区,其二就是安装的软件包。
分区的讲究就是你需要针对你的应用来规划分区,过去看过很多论述linux是否有一个最佳的分区方案,虽然很多人也提出了很多优秀的分区方案,但是我觉得还是需要更具自己的应用作的分区才是最佳的分区,下面各个分区方案,但是纯属建议,还是要更具自己的需要来作。
个人认为,标准的服务器,至少扩常用的分区,因此建议将硬盘划分为以下的样子: /boot swap / /var /usr /home /tmp ,大小根据自己的应用来,/不能小于1G,/usr 和 /var都要大一点,因为大部分软件在里面,其他几个更具需要来,说到swap我想关于这个区的大小争议也比较大,我在综合了很多朋友的意见后,总结出一条规则,如果你的内存小于1G那么分为内存的2倍,如果大于1G那么就分最大2G的swap,这样做是为什么呢?因为swap大家都知道,是虚拟内存的空间,小了又不能发挥最好的作用,大了又浪费空间,这个大小是具体的理由就是,内存大的话,那么应用程序占用的虚拟空间就小,但是为了完全满足服务器的内存需要,据很多朋友的经验,还有我切身的体验,这种分法可以说是一个最佳的方案了,特别对于数据库等大型应用程序的内存需要来讲,而且很多服务器的内存都是 1G-2G左右。
安装软件包,讲究的是安装得越少越精越好,但是redhat开始安装的时候,作为一个服务器,下面的几个软件包组需要选择
Networ support(网络支持)
Messaging and web tools(可选择安装,一些联网的工具如ncftp等)
Router/Firewall(防火墙软件,需要安装,但是他有一点不好把ipchian,iptables,ipwf等都安装了,后面将解释如何删除)
Network managed workstation(管理用工具)
Utilities(常用工具,备份工具等)
虽然我们现在安装是简单的选择了这几个软件包组,我们在后面的安全设置时将会删除一些不用的包,这将在后面说。

3、更新软件

虽然redhat 7.3是更新过的版本,但是其中还有很多软件包有漏洞,其中最大的漏洞就是2.4.18的一个漏洞,它会导致ext3文件系统崩溃,我就遇到过很几次(据 ext3开发小组称,这种现象是在特定的操作和条件下才会产生的,一般用户很少出现这种现象),虽然很多现在已近解决这个问题,但是7.3没有更新内核的话还是不稳定的,更新有两种方式,一种时下在更新的软件包手动的用rpm –Uvh 来更新,另外一种也是我推荐的方式,使用up2date来更新,这可是一个好东西,它能很方便的更新你的系统,而且是更具你安装的软件包来更新的,他不会把bind8更新为bind9,不会把redhat 7.3更新到redhat 9.0,这样就确保了你目前使用的版本的稳定性和完整性,它只是针对这个版本的软件包进行了修正,版本号一般就是这样变得,比如iptables ,7.3的rpm 版本是1.2.5那么更新后就是1.2.8修正了很多漏洞错误,但是并没有作大的调整,确保了你的使用和与应用程序的兼容性。
Up2date的使用,在自动升级之前,建议几个操作,
第一个,由于redhat 7.3版自带的up2date有SSL的bug,因此,需要取下在一个最新的up2date来更新,下载地址
https://rhn.redhat.com/errata/RHSA-2003-267.html
第二个,一般来说,我们都不希望up2date自动更新内核,然后内核的更新直接解决很多重大漏洞,特别是新安装的redhat 7.3就有ext3崩溃的漏洞因此,我建议大家自己先手工升级内核,当然使用rpm 包来升级,这样节约很多时间,开始我就说过,虽然redhat不是效率最高的,但是确实做得最普遍的一个系统,rpm的方便就完全体现了这点优势, redhat 7.3内核的下载地址
http://updates.redhat.com/7.3/en ... .4.20-20.7.i386.rpm
http://updates.redhat.com/7.3/en ... .4.20-20.7.i586.rpm
http://updates.redhat.com/7.3/en ... .4.20-20.7.i686.rpm
对于你自己的系统,你可以用uname –a看看目前的是i386还是i686然后根据这个来选择下载的内核升级包。
建议最好使用rpm –ivh 来升级,这样可以保留原来的内核,确保没有问题再将原来内核rpm –e掉,这个rpm包非常简单甚至你不用修改你的lilo.conf或者grub.conf的配置文件,它自动给你加入了,你需要做的就是重起然后选择新的内核启动就行了。
做完了内核的升级,用新内核重起后就是up2date的时候了。
运行rhn_register随便注册一个号码(这个要保密哦,我自己研究的,rhn网络的升级实际上是收费的服务,但是一个邮箱一个账号是免费的,但是一个账号只有一个升级系统的权限,你可以通过rhn的网络来登录修改这个权限给其他的机器,不过这样太麻烦了,而且redhat7.3的升级基本上稳定了,只需要在安装第一次升级一下就行了,所以我们就随便注册帐号来升级下:P)根据提示,它默认选择了你机器上所有的包,为你升级,没关系,一路next 最后finish然后回到控制台,接下来就是激动人心的升级了,运行命令:
up2date –u
就开始升级了,这个过程看你的网络了,大约有1小时左右。
它会自动为你下载安装,虽然不用重起,但是建议你还是重起一下,确保新内核和新的软件包能够正确使用
到此为止,系统更新就做完了,下面就是比较重要的安全设置了。

4、安全设置

其实linux的安全已经比较好了,我们做得初浅的安全讨论,无非就是关闭服务,设置一定的防火墙,如果大家对防黑客和高级的安全设置感兴趣的话,那么请关注我下几篇文章,我将向大家介绍有关简单的IDS等等防黑技术,谢谢。
关闭不用的服务,这个问题,很多文章都提出过,我个人认为最有效的关闭方法如下,大家都知道,linux中控制服务的有chkconfig ,ntsysv等等,其实这些工具控制的服务都是linux已sysV的风格保存的服务启动项目,其实都是/etc/rc.d/下面的东西,已rc3.d 为例,3表示init3时要做的项目,里面的文件都是一些连接,S开头表示启动,K开头表示终止,所以rc0.d里面基本都是K开头的,所以大家不用害怕觉得linux的服务多么神秘,这里介绍两个简单可行的控制服务的办法。
运行ntsysv控制服务
使用ntsysv关闭服务只开
crond 可定义计划任务
network 网络
random 生成随机数,用于ssh的会话对称密钥的生成
sshd ssh服务器端
syslog 系统日志服务
xinetd 超级进程(下面没有服务要用的话,可以关闭)
其实xinetd是类似于init这个超级进程的一个进程,不过可以完全关闭它,因为下面都是些没有用服务监听程序,对于一般的服务器,基本上只需要上面ntsysv所列的服务就行了,其他的都关闭,当然如果你要web当然要开httpd了。
服务关闭完了以后,就是去掉一些不用的用户,用vipw
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#sync:x:5:0:sync:/sbin:/bin/sync
#news:x:9:13:news:/var/spool/news:
#uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
#operator:x:11:0perator:/root:/sbin/nologin
#games:x:12:100:games:/usr/games:/sbin/nologin
#gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
#rpc:x:32:32ortmapper RPC user:/:/sbin/nologin
#rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
#nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
#nscd:x:28:28:NSCD Daemon:/:/bin/false
#radvd:x:75:75:radvd user:/:/bin/false
去掉这些用户
上出多余的rpm包
rpm -e softname
rpm -e autofs-3.1.7-28
rpm -e gd-devel-1.8.4-4
rpm -e up2date-2.7.86-7.x.3
rpm -e pump
rpm -e apmd
rpm -e lsapnptools
rpm -e redhat-logos
rpm -e mt-st
rpm -e kernel-pcmcia-cs
rpm -e setserial
rpm -e redhat-release
rpm -e eject
rpm -e kudzu
rpm -e gd
rpm -e raidtools
rpm -e mailcap
rpm -e setconsols
rpm -e gnupg

修改/etc/fstab
只给分区必须的权限
像这样LABEL=/bakups /bakups ext3 nosuid,noexec 1 2

noexec表示不能在这个分区运行程序,nosuid不能使用nosuid的程序,根据情况自行设置其他分区,一般来说/tmp,/usr都要nosuid

到此我们做了一些基本的安全设置,当然你也可以考虑,比如启用wheel组,只能让wheel组的用户能够变为su但是一般来说管理员都不用考虑这些,因为只有你一人能够登录这台机器,:),这些细节的设置我也会在下篇文章详细说明,应为毕竟这不是我这篇文章主要的东西。他们会同IDS等内容在下一篇文章详细呈现给大家。

5、防火墙设置

上面的基本安全设置做完了,那么接下来一个比较主要的安全就是防火墙,这是很重要的,如果你的设置没有作得很好,也许软件还有一些漏洞,但是防火墙设置得好的话,基本上可以帮你弥补这些问题,给大家一个基本的单个服务器的防火墙脚本,里面不包括端口转发,伪装等网关功能的内容,如果大家对这方面有兴趣,欢迎给我来信探讨
#!/bin/bash

#启用转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward

#显示开始信息
echo "Start FireWall for this server..."

#清空目前的规则
iptables -F

#编辑默认策略为不能通过,数据接入链
iptables -P INPUT DROP

#转发链默认drop
iptables -P FORWARD DROP

#数据输出链默认drop
iptables -P OUTPUT DROP

#输出链允许源地址是xxx.xxx.xxx.xxx的数据输出,也可以指定网卡例: –i eth0
iptables -A OUTPUT -s xxx.xxx.xxx.xxx -j ACCEPT

#接入链允许端口为15818的源地址为xxx.xxx.xxx.xxx的数据通过
iptables -A INPUT -p tcp -d xxx.xxx.xxx.xxx --dport 15818 -j ACCEPT

#如果需要添加端口就在下面修改,xxx处添加端口号
#iptables -A INPUT -p tcp -d xxx.xxx.xxx.xxx --dport xxx -j ACCEPT

#允许所有udp包通过
iptables -A INPUT -d xxx.xxx.xxx.xxx -p udp -j ACCEPT

#限制ping包每一秒钟一个,10个后开始
iptables -A INPUT -p icmp -d xxx.xxx.xxx.xxx -m limit --limit 1/s --limit-burst 10 -j ACCEPT

#限制IP碎片,每秒钟只允许100个碎片,防止DoS攻击
iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT


恭喜你,到目前为止,你有一个相对安全的系统了,但是记住,最重要还是你要把root的密码记住哦,呵呵,希望写了这么多,对大家有所帮助,这是我最大的愿望,希望大家觉得我写得还行的话任意拷贝,广泛传播,但是不要修改哦,如果觉得有什么问题希望和我探讨的话,我也虚心接受大家的意见和建议,请给我 email:ttii@linuxaid.com.cn,希望和大家成为朋友,共同学习linux探讨问题,为中国的软件事业贡献我的微薄之力,谢谢
注意,如果你需要转贴到你的网站或者论坛,可以随意转贴,也请你发邮件告诉我一声转到什么地方了,谢谢,我的联系方式qq:8537798,email:ttii@sohu.com。
发表于 2003-12-24 15:59:35 | 显示全部楼层
感谢!顶一下
发表于 2003-12-25 13:45:20 | 显示全部楼层
呵呵
不能说对不对了,每个人都有自己的想法和最爱哦

很多东西都是比较值得借鉴一下的,学多了总不会错

下面是我的看法
下面的内容是给懒管理员看的,如果你很有精力管理包和每天都有时间象我一样不厌其烦的盯着bugtraq,redhat或者更好
因为
http://secu.zzu.edu.cn/blog/comments.php?id=30_0_1_0_C

OK GO

我针对上文的的格局来写

1:发行版的选用


linux的话,如果不做oracle等大型应用的话,我是打死不用redhat的,因为他的包管理和升级简直就是垃圾,有多垃圾,用过的肯定有体会……

gentoo安装太麻烦,可能装出来的东西性能比较好,但是安装实在是麻烦,他的emerge和debian的apt相比的好处就是他可以在编译过程的时候定制一些参数,比如apache的最大连接数,或者去掉一些模块等,当然这些参数都是在你的服务器承担的非常大的负载才需要改的

所以,在一般情况下,我绝对使用debian的

debian的apt-get dist-upgrade很容易就可以升级整个系统,当然包括安全补丁了:)不管debian的security更新是否非常及时,有总好过没

关于包管理的东西,可以看看我在BSD版发的烂文,本来想写下去的,可是没人感兴趣~~~呵呵
http://www.linuxsir.cn/bbs/showthread.php?threadid=77982

2:安装

分区:根据实际情况频繁读写的放在前面,包括SWAP,如果你觉得你的SWAP基本上不会被频繁用,那就放后面吧

文件系统:看看各种文件系统的区别,看看哪个才适合你

软件安装:用debian mini iso可以只装很少一部分的软件,整个安装过程也很快,之后可以按照你的需要装软件

3:软件更新
RH的up2date == 垃圾 --》用过的就知道
debian的apt-get == 爽! --》用过的也知道

4:服务
去掉不必要服务debian-->rcconf
对各种服务进行优化-->这里就可以见水平高低了,包括修改配置和chroot等等

5:防火墙
netfilter or ipfilter ?
无论如何都得喀嚓掉畸形的包,上面的规则写的很烂

6:HIDS和安全补丁
入侵检测,完整性检测,日志审计,集中管理,权限分配和一些安全补丁,LIDS等

7:其他???


里面很多内容我都没充实进去的,希望大家可以利用google来填充里面的内容,在执行的过程中遇到了问题实在搞不定了就和大家一起解决:)

这样讨论的气氛会更好 :)
 楼主| 发表于 2003-12-25 17:30:21 | 显示全部楼层
试过安装Debian,不能进入KDE,感觉很难装
发表于 2003-12-25 18:02:16 | 显示全部楼层
在我知道X是什么之后,我从来不装X……

呵呵,可能我做服务器才用linux吧,做desktop我还是绝对支持windows 2K PRO的!
发表于 2003-12-26 01:30:51 | 显示全部楼层
For server, Debian is not a good choice. Too many unnecessary packages, too slow important updates. Server should be 24x7x365, simple, safe, fast. A good package management tool does not mean these. Debian users often laugh at RH/MDK users for the horrible RPM based package management. But this is not the reason for Debian to be a good candidate as server.

Redhat definitely is not a good choice for server. Redhat shares the same drawback of debian: too many unnecessary packages. This leaves lots of potential holes in the system.
发表于 2003-12-26 11:09:16 | 显示全部楼层
最初由 terminator 发表
For server, Debian is not a good choice. Too many unnecessary packages, too slow important updates. Server should be 24x7x365, simple, safe, fast. A good package management tool does not mean these. Debian users often laugh at RH/MDK users for the horrible RPM based package management. But this is not the reason for Debian to be a good candidate as server.

Redhat definitely is not a good choice for server. Redhat shares the same drawback of debian: too many unnecessary packages. This leaves lots of potential holes in the system.


1:Too many unnecessary packages
每个人的需要总不一样,如果你用mini-iso来装的话,会少很多软件的,你还可以通过dseletc等工具来删除你不要的东西,如果想真正取你所需要话,用LFS吧……没有一个RLS会为个人定制包的……如果你不出¥¥的话……

2:too slow important updates
毕竟不是商业的东西,debian users都是义务的,靠他们的爱好和激情来维护这个RLS,如果把维护系统安全的责任全部丢给RLS的话,那要系统管理员干什么?要安全管理员干什么?

退一步说,如果关键的安全补丁很重要的话,如果别人盯上了你们公司,除非你可以有balck hat内部的消息,否则被黑也是很正常的事情……这样无论LFS DEBIAN GENTOO XXX都无能为力了,只有依靠提高管理员素质来保障系统安全……grsecurity ?

3:Server should be 24x7x365, simple, safe, fast. A good package management tool does not mean these.

这样还不够,那你觉得一个好的包管理工具应该如何呢?没有包管理就是最好的包管理?

还请前辈赐教:)
发表于 2003-12-26 14:50:35 | 显示全部楼层
1. To customize a server, how many efforts you have to pay is an important aspect to judge if a system is suitable or not. I don't think Debian is good for this purpose, in particular, how many dselect/apt-get commands you have to issue is a good factor.

2. Free is not the excuse for slow updates. System administrator is important of course. But this is not the execuse of slow update, either.

3. So you think a good package management system means 24x7x365, simple, safe, fast? I believe more than 99% system administrator won't agree with you on this point.
发表于 2003-12-26 15:03:53 | 显示全部楼层
呵呵
这种关于RLS的争议很多了
用的顺手而且维护的好就没问题:)

debian的apt我觉得他不能满足我的一个地方就是他不能修改编译参数,其他我倒没发现什么遗憾的地方……
 楼主| 发表于 2003-12-27 10:33:23 | 显示全部楼层
最初由 包子 发表
在我知道X是什么之后,我从来不装X……

呵呵,可能我做服务器才用linux吧,做desktop我还是绝对支持windows 2K PRO的!

我现在连Windows分区都没有
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表