Linux 安全设置.docx
《Linux 安全设置.docx》由会员分享,可在线阅读,更多相关《Linux 安全设置.docx(43页珍藏版)》请在冰豆网上搜索。
Linux安全设置
linux安全攻略
对Linux/UNIX系统安全的考虑(面对不熟悉Linux的人)。
很显然,面对Linux/UNIX的安全问题我没有太多资格来评价,以至于,拿到一份系统日至都不能分析出究竟是出了什么问题。
但是,我希望尝试对一个完全陌生的系统实施安全保障,虽然不知效果会怎么样,但这的确是有价值的一个尝试,谁也不能保证自己对任何系统都熟悉,但工作又不允许为不同的系统配备相应的专职管理员。
首先可以肯定的是,任何系统都有补丁,这是必然要打的。
下面是服务和端口,如果只想用web:
80,那么,其他的端口完全可以利用前面的router/Firewall屏蔽掉,而只针对网管使用的IP地址开放,另外,如果能在服务器上安装snort之类的IDS系统,并且及时针对WEB内容升级过滤代码,完全有可能抵御大部分溢出和扫描。
另外,借鉴别人的方法也是必不可少的,这里推荐一位业界友人的文章,他曾是南京补天的solaris大拿,后来去了理工华泰,现在可能是去了北航的什么研究室,看来只有前辈的地位一直没怎么变:
)
1,安装
安装的时候,大家都轻车熟路了,呵呵,首先,隔离网络进行系统安装,当然选择custom方式,安装你需要的软件包。
硬盘分区:
如果用root分区纪录数据,如log文件和email,就可能因为拒绝服务产生大量日志或垃圾邮件。
导致系统崩溃。
所以建议为/var开辟单独的分区,用来存放日志和邮件,以避免root分区被溢出啦,那就惨喽。
最好为特殊的应用程序单独开一个分区,特别是可以产生大量日志的程序,还有建议为/home单独分一个区,这样他们就不能填满/分区了,以下是我硬盘上的分区情况:
/root
/varlog
/hacking嘻嘻,我的一些黑软
swap不多说了
/home
当系统安装完重新启动后,最好打上相应系统的安全补丁,请大家养成良好的习惯,记住,你不是在自己家里装98,你装的是一个linux服务器,呵呵。
对于redhat系统而言可以在:
在redhat6.1以后的版本带有一个工具up2date,它能够测定哪些rpm包需要升级,然后自动从redhat的站点下载并完成安装。
2,关闭服务
呵呵,有句话说的好,要想你的系统绝对安全,就是掐断网线,呵呵,当然我们的机器要对外提供服务,那是不现实的,所以关闭不必要的服务是必要的,因为有些服务会为您的系统带来麻烦。
默认的linux就是一个强大的系统,运行了很多的服务。
但,有许多服务是不需要的,很容易引起安全风险。
第一个文件是/etc/inetd.conf,它制定了/usr/sbin/inetd将要监听的服务,你可能只需要其中的两个:
telnet和ftp,其他的许多如popd,imapd和rsh都是有可能引发安全问题的。
用下面的命令显示没有被注释掉的服务:
suneagle#grep-v"#"/etc/inetd.conf
ftpstreamtcpnowaitroot/usr/sbin/tcpdin.ftpd-l-a
telnetstreamtcpnowaitroot/usr/sbin/tcpdin.telnetd
shellstreamtcpnowaitroot/usr/sbin/tcpdin.rshd
loginstreamtcpnowaitroot/usr/sbin/tcpdin.rlogind
talkdgramudpwaitnobody.tty/usr/sbin/tcpdin.talkd
ntalkdgramudpwaitnobody.tty/usr/sbin/tcpdin.ntalkd
pop-3streamtcpnowaitroot/usr/sbin/tcpdipop3d
imapstreamtcpnowaitroot/usr/sbin/tcpdimapd
fingerstreamtcpnowaitnobody/usr/sbin/tcpdin.fingerd
linuxconfstreamtcpwaitroot/bin/linuxconflinuxconf--http
execstreamtcpnowaitroot/bin/shsh-i
哈哈,大家看最后一行,不就被绑了个rootshell么?
呵呵,有什么后果?
呵呵看看,在远程的一台win2000机器上用如下命令:
E:
\cmd>nc192.0.0.88512
bash#id
id
uid=0(root)gid=0(root)groups=0(root)
bash#
知道了吧?
嘿嘿,大家注意哦*^_^*
我有写过一篇关于用这个文件绑后门的文章,呵呵,攻击性很强,这个命令可以帮你查出有没有后门,呵呵。
下个要启动的是.rc脚本,它们决定了init进程要启动哪些服务。
redhat系统下,这些脚本在/etc/rc.d/rc3.d(如果你的系统以x为默认启动的话,就是/etc/rc.d/rc5.d)。
要在启动时禁止某个服务,只需要把大写的S替换为小写的s,同时,redhat也提供一个工具来帮助你关闭服务,输入/usr/sbin/setup,然后选择"systemservices",就可以定制系统启动时跑哪些服务。
另外一个选择是chkconfig命令,很多linux版本的系统都自带这个工具。
脚本名字中的数字是启动的顺序,以大写的K开头的是杀死进程用的。
以下是一些主要的服务:
S05apmd笔记本需要
S10xntpd网络时间协议
S11portmap运行rpc服务必需
S15sound声卡相关
S15netfsnfs客户端
S20rstatd避免运行r服务,远程用户可以从中获取很多信息
S20rusersd
S20rwhod
S20rwalld
S20bootparamd无盘工作站
S25squid代理服务
S34yppasswddNIS服务器,此服务漏洞很多
S35ypservNIS服务器,此服务漏洞很多
S35dhcpddhcp服务
S40atd和cron很相似的定时运行程序的服务
S45pcmciapcmcia卡,笔记本
S50snmpdSNMP,远程用户能从中获得许多系统信息
S55namedDNS服务
S55routedRIP,没有必要就别运行它
S60lpd打印服务
S60mars-nweNetware的文件和打印服务
S60nfsNFS服务器,漏洞极多
S72amdautomount,mount远程用的
S75gated另外一种路由服务,例如OSPF
S80sendmail邮件服务,如关闭,仍然可以发信,只是不能收信和作中继
S85httpdweb服务器
S87ypbindNIS客户端
S90xfsXfont服务器
S95inndNews服务器
Slinuxconf这个都熟悉吧,呵呵,通过浏览器远程管理系统用的
用这个命令察看在关闭启动脚本之前有多少服务在运行:
suneagle#ps-eaf|wc-l
54
我的系统有54种服务在运行呢,呵呵
当你关闭一些服务以后,重新运行以上命令看看少了多少服务。
运行的服务越少,系统自然越安全了,嘿嘿。
用下面命令察看哪些服务在运行
:
suneagle#netstat-na--ip
ActiveInternetconnections(serversandestablished)
ProtoRecv-QSend-QLocalAddressForeignAddressState
tcp0136192.0.0.88:
23192.0.0.5:
1236ESTABLISHED
tcp00192.0.0.88:
23192.0.0.8:
1113ESTABLISHED
tcp00192.0.0.88:
139192.0.0.8:
1112ESTABLISHED
tcp00192.0.0.88:
102461.153.17.24:
23ESTABLISHED
tcp00192.0.0.88:
23192.0.0.8:
1084ESTABLISHED
tcp000.0.0.0:
1390.0.0.0:
*LISTEN
tcp000.0.0.0:
800.0.0.0:
*LISTEN
tcp000.0.0.0:
250.0.0.0:
*LISTEN
tcp000.0.0.0:
5150.0.0.0:
*LISTEN
tcp000.0.0.0:
5120.0.0.0:
*LISTEN
tcp000.0.0.0:
980.0.0.0:
*LISTEN
tcp000.0.0.0:
790.0.0.0:
*LISTEN
tcp000.0.0.0:
1430.0.0.0:
*LISTEN
tcp000.0.0.0:
1100.0.0.0:
*LISTEN
tcp000.0.0.0:
5130.0.0.0:
*LISTEN
tcp000.0.0.0:
5140.0.0.0:
*LISTEN
tcp000.0.0.0:
230.0.0.0:
*LISTEN
tcp000.0.0.0:
210.0.0.0:
*LISTEN
tcp000.0.0.0:
1130.0.0.0:
*LISTEN
tcp000.0.0.0:
1110.0.0.0:
*LISTEN
udp00127.0.0.1:
10240.0.0.0:
*
udp00192.0.0.88:
1380.0.0.0:
*
udp00192.0.0.88:
1370.0.0.0:
*
udp000.0.0.0:
1380.0.0.0:
*
udp000.0.0.0:
1370.0.0.0:
*
udp000.0.0.0:
5180.0.0.0:
*
udp000.0.0.0:
5170.0.0.0:
*
udp000.0.0.0:
1110.0.0.0:
*
raw000.0.0.0:
10.0.0.0:
*7
raw000.0.0.0:
60.0.0.0:
*7
呵呵,我这个系统由于测试用,所以故意开了不少危险端口,呵呵,大家别学我哦,该关的就关啦,哈哈。
3,日志纪录和增强
关闭一些不必要的服务以后,日志也是需要我们关心的一块,配置好的unix系统日志非常强大,甚至可以做出陷阱,关于日志,我可以写长篇大论,这里就不很详细讲述日志的原理了,感兴趣的朋友可以参考相关资料或阅读我的另一篇文章《solaris系统日志原理》。
好!
所有的日志都在/var/log下(仅对linux系统而言),默认情况下linux的日志就很强大了,除了ftp。
但我们可以通过修改/etc/ftpaccess或者/etc/inetd.conf,来保证每一个ftp连接日志都能够纪录下来。
下面是一个修改inetd.conf的例子:
ftpstreamtcpnowaitroot/usr/sbin/tcpdin.ftpd-l-L-i-o
-l每一个ftp连接都写到syslog
-L纪录用户的每一个命令
-i文件received,纪录到xferlog
-o文件transmitted,记录到xferlog
账号的安全问题
删除/etc/passwd&/etc/shadow中的一些系统账号,如mail,news等等。
尽量关闭匿名ftp服务,删掉ftp用户。
/etc/ftpusers文件,包含了不能使用ftp的用户列表,root应该在其中。
修改/etc/securetty,去除终端ttyp0-ttyp9,使root只能从console或者使用ssh登陆。
/etc/issue,不要让次文件透露系统信息。
同时要修改
/etc/rc.d/rc/local。
SUID程序是非常危险的,这些程序被普通用户以euid=0(即root)的身份执行,只能有少量程序被设置为SUID。
用一下命令列出系统的SUID二
进制程序:
suneagle#find/-perm-4000-print
用chmod-s去掉一些不需要程序的suid位。
4,连接服务器
作为系统管理员,需要经常对系统进行关系和上传文件,这些通过通信过程必须要保证是安全的。
我介绍两个方法:
ssh和tcpwrappers。
其实我比较偏向于用ssh,它把你和防火墙之间的通信全部进行了加密,而tcpwrappers没有做到加密一点,呵呵虽然现在先进的sniffer技术
也可以嗅探到ssh的数据包,但它依然还是最安全的。
建议用ssh完全取代telnet/ftp,它能够确保数据在网络中的安全传输。
ssh和tcpwrapper
都有它们自己的日志纪录,并设有访问控制策略,大家如果要深入了解ssh的话,可以参考想关书籍。
tcpwrappers尽管没有对数据进行加密,但它有日志系统并且可以控制哪些人可以访问你的系统,它在inetd中包装了其他的二进制文件,如
telnet,ftp,finger等等。
系统用tcpwrapper进行inetd监听连接,记录了所有请求并且与访问控制列表作比较,如果允许连接,tcpwrapper将
调用实际的服务器进程来连接,如in.telnetd服务,如果拒绝,连接将断开。
对linux用户比较幸运的是tcpwrapper已经被默认安装了,我们所
要做的就是编辑/etc/hosts.allow和/etc/hosts.deny两个文件,注意以下事项:
1,尽量使用ip
2,首先通过/etc/hosts.deny禁止来自任何地方对所有服务的访问:
ALL:
ALL
然后在/etc/hosts.allow中添加要授权的机器及服务。
冒号左边为服务,冒号右边为授权机器。
5,加固系统
一上的措施足以应付一般的网络攻击,但你的系统不是100%安全的,从来就没有绝对安全的系统,不是么?
嘿嘿。
我们来进一步加固系统!
编辑/etc/groups,增加wheel组(其实我很喜欢freebsd的地方,就是默认freebsd这些工作做的很好)。
这个组包含了一些用户,可以执行/bin/su等强大的命令。
对其他用户执行这些命令的控制,可以改善系统的安全。
如下命令:
suneagle#/bin/chgrpwheel/bin/su
suneagle#/bin/chmod4750/bin/su
然后锁定一些文件:
.rhosts,.netrc,/etc/hosts.equiv。
r命令可以通过这些文件远程连入你的系统。
先touch这些文件,然后chmod至0。
suneagle#/bin/touch/root/.rhosts/root/.netrc/etc/hosts.equiv;/bin/chmod0/root/.rhosts/root/.netrc/etc/hosts.equiv
linux还有一个众所周知的命令:
chattr,呵呵+i操作,即使是root,也在-i之前改不了它们,先在你的系统的/etc/shadow,/etc/inetd.conf等文件来个chattr+i可以避免一下exploit给你添后门什么的,呵呵。
bash的问题
对于bash用户来讲,有个.bash_history文件,可以记录你的所用的命令,谁也不希望其他人包括root知道自己敲了哪些命令吧?
我有两种方法
来解决这个问题
1,在自己的.bash_profile文件中加入一行:
HISTFILESIZE=0
记住不要把HISTSIZE置零,那样就无法使用上下健来调用历史命令了。
2,删除自己目录下的.bash_history,然后建立一个连接:
suneagle$ln-s/dev/null$HOME/.bash_history
这样,大家理解吧?
历史命令都掉到黑洞洞里啦~~~~~
最后,保证物理安全,建立在/etc/lilo.conf中设置密码来控制linux的启动,呵呵,虽然也是可以被破解的,嘿嘿,因为它是明文存放,破解
方法吗,知者知之,不知者就不知啦,嘿嘿。
ok,写了这么多,大概把安全性讲了一下,但里面每个知识点又可以单独写文章,呵呵,学无止尽啊。
虽然我看得不怎么明白,但至少可以作为一种安全角度的参考,再贴上一篇:
发信人:
Sinbad
标题:
装备Linux
(1)
发信站:
辛巴达(FriSep2710:
08:
062002)
发信人:
Sinbad
标题:
装备Linux
(1)
发信站:
辛巴达(ThuSep2815:
13:
152000)
装备Linux
(1)
bySinbad
Aug23,2000
http:
//sinbad.dhs.org
1.安装
首先与网络隔离进行系统的安装,选择custom方式,仅仅安装需要的软件。
硬盘分区:
如果用root分区纪录数据,例如log文件和email,就可能因为拒绝服务产
生大量日志或垃圾邮件,导致系统崩溃。
所以,建议为/var开辟单独的分区,用来存
放日志和邮件,以避免root分区被溢出。
还可以为特殊的应用程序单独开一个分区,
特别是能产生大量日志的程序。
如果有不怀好意的用户,建议为/home单独分一个区,
这样他们就不能填满/分区。
一般Server分区看来是这样:
/-根分区
/var-400MB
swap-一般256MB
当系统安装完重新启动以后,就要打上安全补丁。
对RedHat系统,可以在http:
//www
找到补丁,要经常更新。
采用RPM的系统,可以
很容易的升级,例如:
rpm-Uvhwu-ftpd-2.6.0-14.6x.i386.rpm
如果系统与Internet是连接的,可以直接从ftp站点升级:
rpm-Uvhftp:
//
RH6.1以后的版本带有一个工具up2date,它能够测定哪些RPM包需要升级,然后自动从
RedHat的站点下载并完成安装。
这个软件能够很好的被定制并且易于使用。
2.关闭服务
安装完软件包和补丁以后,下面作的就是装备系统。
包括关闭一些服务、增加日志、
修改一些文件和配置TCPWrappers。
首先我们来关闭一些服务。
默认的linux是一个强大的系统,运行了很多服务。
但是有
许多服务是不需要的,很容易引起安全风险。
第一个文件是/etc/inetd.conf,它指定
了/usr/sbin/inetd将要监听的服务,你可能只需要其中的两个:
telnet和ftp,其他
的许多例如popd,imapd和rsh有可能引发安全问题。
下面的命令显示出没有被注释掉
的服务:
grep-v"^#"/etc/inetd.conf
下一个要启动的是.rc脚本,它们决定了init进程要启动哪些服务。
RH系统下,这些脚
本在/etc/rc.d/rc3.d(如果以GUI方式启动,就是/etc/rc.d/rc5.d,比如KDE,Gnom
e等等)。
要在启动时禁止某个服务,只要把大写的S替换为小写的s,同时,RH也提供
了一个很好的工具来关闭服务,只要输入/usr/sbin/setup,然后选择“systemserv
ices”,就可以定制系统启动时跑哪些服务。
另外一个选择是chkconfig命令,许多发
行版本都自带这个工具。
脚本名字中的数字是启动的顺序,以大写的K开头的是杀死进
程用的。
S05apmd(只有笔记本需要)
S10xntpd(网络时间协议)
S11portmap(运行rpc服务必需,例如NIS或NFS)
S15sound(声卡相关)
S15netfs(nfs客户端)
S20rstatd(避免运行r服务,远程用户能够从中得到很多信息)
S20rusersd
S20rwhod
S20rwalld
S20bootparamd(无盘工作站,应该很少需要此服务)
S25squid(代理服务)
S34yppasswdd(NIS服务器,此服务漏洞很多)
S35ypserv(NIS服务器,此服务漏洞很多)
S35dhcpd(dhcp服务)
S40atd(和cron很相似的定时运行程序的服务)
S45pcmcia(pcmcia卡,笔记本用)
S50snmpd(SNMP,远程用户能从中获得许多系统的信息)
S55named(DNS服务,最近版本在http:
//www.isc.org/bind.html)
S55routed(RIP,不要运行它除非你真的需要)
S60lpd(打印服务)
S60mars-nwe(Netware的文件和打印服务)
S60nfs(NFS服务器,漏洞极多,尽量不要使用)
S72amd(AutoMount,用来mount远程系统)
S75gated(另外一种路由服务,例如OSPF)
S80sendmail(邮件服务,如果你关闭sendmail,仍能够发信,只是不能收信和作中
继)
S85httpd(Web服务器,最近版本在http:
//www.apache.org)
S87ypbind(NIS客户端)
S90xfs(Xfont服务器)
S95innd(News服务器)
S99linuxconf(通过浏览器远程配置系统)
查看在关闭启动脚本之前有多少服务在运行:
psaux|wc-l
当你关闭一些服务以后,重新运行以上命令看看少了多少服务。
运行的服务越少,系
统越安全。
同时,用下面的命令看看哪些服务还在运行:
netstat-na--ip
3.日志纪录和增强
关闭一些不必要的服务以后,我们开始日志纪录,所有的日志都在/var/log目录下。
默认情况linux的日志功能很完善,除了ftp。
可以修改/etc/ftpaccess或者/etc/ine
td.conf,一般都是修改/etc/inetd.conf,下面的写法保证了每一个ftp连接的日志都
能够记录下来:
ftpstreamtcpnowaitroot/usr/sbin/tcpdin.ftpd-l-L-i-o
-l每一个ftp连接都写到syslog
-L纪录用户的每一个命令
-i文件received,纪录到xferlog
-o文件transmitted,纪录到xferlog
使用shadow密码,运行命令pwconv。
(现在的6.2版本都默认用MD5)
删除/etc/passwd&/etc/shadowv中的一些系统账号,如news等等。
如果不需要匿名ft
p服务,删除ftp用户。
对一个