IT培训,读书、登山探险。
全部博文(26)
分类: LINUX
2012-03-29 13:18:14
因为时间的的关系,本次实验记录中的图片来不及上传,随后附上。
实战: 随手设置-------改变 Linux系统安全命运
虚拟实验环境准备: VMware workstation rhel4 一台(其中一台为客户机)
物理主机: RedHat Enterpris Linux AS 4.0 一台,windows xp一台
实验时间: 60分钟 (日期: 2008年4月8日)
实验人:baobing9966_Ren
Chapter 1 Lab
背景知识回顾
1. Linux是什么?
Linux是一个诞生于网络、成长于网络且成熟于网络的奇特的操作系统。
1991年,芬兰大学生Linus Torvalds萌发了开发一个自由的UNIX操作系统的想法,当年,Linux就诞生了,为了不让这个羽毛未丰的操作系统矢折,Linus将自已的作品Linux通过Internet发布。从此一大批知名的、不知名的电脑黑客、编程人员加入到开发过程中来,Linux逐渐成长起来。
Linux一开始是要求所有的源码必须公开,并且任何人均不得从Linux交易中获利。然而这种纯粹的自由软件的理想对于Linux的普及和发展是不利的,于是Linux开始转向GPL,成为GNU阵营中的主要一员。
现在,Linux凭借优秀的设计,不凡的性能,加上IBM、INTEL、CA、CORE、ORACLE等国际知名企业的大力支持,市场份额逐步扩大,逐渐成为主流操作系统之一。
2. Linux系统结构
3. UNIX, GNU, Linux 的关键人物及贡献
Ken Thompson, Dennis Ritchie:UNIX;60 年代末
Brian Kernighan, Dennis Ritchie:The C Programming Language;70 年代末
Richard Stallman:FSF,GNU,GPL,emacs,gcc;80 年代中
Andrew S. Tanenbaum:MINIX,Operating Systems: Design and Implementation; 80 年代末,90年代初
Linus Torvalds:Linux;90 年代
Eric Raymond:《黑客文化简史》,《如何成为一名黑客》,《大教堂和市集》,《开拓智域》,《魔法大锅炉》
自由软件领袖 Richard Stallman
4. Linux的未来之路
5. 安全:一个经验定义
通常感觉:安全就是“避免冒险和危险”
在计算机科学中,安全就是防止:
未授权的使用者访问信息
未授权而试图破坏或更改信息
6. 安 全 分 类
7. 安全功能概述
8. 安全领域
物理安全:控制人和物资来往,自然灾害
操作/步骤安全
人事安全:雇佣员工,背景调查,监测和控制
系统安全:用户访问和确认控制,授权,维护文件和文件系统完整,备份, 监测进程,日志保存和审计
网络安全:保护网络和远程通讯设备,保证网络服务和传输,反窃听,控 制从不可信网络上的访问,防火墙和监测进入
9. 安全工具
该工具的源代码是否可用?
该工具是否易于安装?
工具是否可靠?
工具是否是否合理易用?
工具的开销是否高效?
工具是否可维护?
工具是否依赖于其他(可能不安全的)的程序?
该工具可否在不同的UNIX产品间移植?
该工具是否有害处?
一石二鸟,会打死好鸟
10. 公开源代码的益处
Eric Raymond: 给足够多的眼睛,则所有的缺陷都能够找出
Richard Stallman: bug 就像影子一样,只存在太阳照不到的地方
事实证明: 很多高级软件使用者,包括一些研究机构,从他们的使用和研究状况来看,开源软件的安全性确实要好一些,而这很大程度上就在于开源软件的开放性和随时弥补性.
开源软件,很大程度上是一种全球的智慧,是全体软件设计研究人员共同的兴趣和爱好的结晶.
11. 10个通用的安全准则
• 通过隐藏来实现安全是不可行的,总有人在监视你
• 暴露缺陷和错误对安全有好处,最好在修复后再宣布
• 将直接使用的比例降低
• 在某些人犯错误之前将它做好
• 设置担心被抓住是聪明的开始
• 总有某个人比你更精明,拥有更多知识和更精良的装备
• 没有完全包办的安全方案
• 好与坏混合起来就成为灰色
• 试着去喜欢敌人
• 信任是一个相对的概念
12. 攻击的定义
可能导致一个网络受到破坏、网络服务受到影响的所有行为都应称为攻击,也可以说攻击
是指谋取超越目标网络安全策 略所限定的服务
(入侵)或者使目标网络服务受到影响甚至停止(攻击) 的所有行为。
攻击行为从攻击者开始在接触目标机的那个时刻起可以说就 已经开始了。
“Some attacks are carried out for the sole purpose of disabling a machine as completely as possible. This type of attack is called a Denial of Service (DoS).”
13. 攻击的动机
14. 网络安全系统为什么会失败
木桶”理论
从技术角度分析
首先,从芯片、操作系统到应用程序,任何一个环节都可能被开发者留下“后门”。其次,网络设备和软件不可能是完美的,在设计开发过程中必然会出现缺陷和漏洞。
对于网络企业网或者ISP的公网来说,管理的失败是网络安全体系失败的非常重要的原因。
15. 制定安全规划
• 安全评价
• 遇险评估
• 哪些信息和系统资源需要保护
• 系统中有多少数据且多大价值
• 系统面临那些危险
• 危险发生的可能性有多大
• 保护系统所需的时间和工具的开销
• 在现实世界中,不安全所受的损失和安全保护的开销之间要进行权衡
16. Linux安全模型
Chapter 2 Lab
Linux系统安全设置步骤
一直以来,许多人认为,Linux系统本身就是很安全的,不需要做太多的安全防护,另外基于Linux系统的防护、杀毒软件目前还较少被大众认知,因而在很多时候,我们安装完linux系统,经常不知道系统本身的安全设置从何做起,有的管理员干脆不做任何设置,或者随便下载安装一个杀毒软件完事,这样的做法基本起不了什么作用。其实如windows server 2003系统本身也是一样,其系统自身的安全设置如果到位,对于服务器的整体安全是非常关键的。笔者因为业务的关系,和铁通数据中心有较多的接触,通过对一些不法分子对服务器攻击方式的了解,更是深深体会到这点。很多时候,安装完操作系统,一些看似随手进行的设置,很可能改变了操作系统的安全命运。
Linux安全配置步骤
1. BIOS Security
任何系统,给BIOS设置密码都是必须的,以防止其它用户通过在BIOS中改变启动顺序, 用特殊的启动盘启动你的系统.
2. 磁盘分区
1、如果是新安装系统,对磁盘分区应考虑安全性:
1)根目录(/)、用户目录(/home)、临时目录(/tmp)和/var目录应分开到不同的磁盘分区;
2)以上各目录所在分区的磁盘空间大小应充分考虑,避免因某些原因造成分区空间用完而导致系统崩溃;
2、对于/tmp和/var目录所在分区,大多数情况下不需要有suid属性的程序,所以应为这些分区添加nosuid属性;
l 方法一:修改/etc/fstab文件,添加nosuid属性字。例如:
/dev/hda2 /tmp ext2 exec,dev,nosuid,rw 0 0
l 方法二:如果对/etc/fstab文件操作不熟,建议通过linuxconf程序来修改。
* 运行linuxconf程序;
* 选择"File systems"下的"Access local drive";
* 选择需要修改属性的磁盘分区;
* 选择"No setuid programs allowed"选项;
* 根据需要选择其它可选项;
* 正常退出。(一般会提示重新mount该分区)
3.安装
l 对于非测试主机,不应安装过多的软件包。这样可以降低因软件包而导致出现安全漏洞的可能性。
l 对于非测试主机,在选择主机启动服务时不应选择非必需的服务。例如routed、ypbind等。
4. 安全配置与增强
l 内核升级。
l GNU libc共享库升级。(警告:如果没有经验,不可轻易尝试。可暂缓。)
l 关闭危险的网络服务。echo、chargen、shell、login、finger、NFS、RPC等
l 关闭非必需的网络服务。talk、ntalk、pop-2等
l 常见网络服务安全配置与升级
l 确保网络服务所使用版本为当前最新和最安全的版本。
5. Grub Security
对GRUB 进行多重加密,确保系统启动安全
6. 禁止所有默认的被操作系统本身启动的且不需要的帐号,当你第一次装上系统时就应该做此检查,Linux提供了各种帐号,你可能不需要,如果你不需要这个帐号,就移走它,你有的帐号越多,就越容易受到攻击
在终端上打入下面的命令删掉下面的用户。
[root@test]# userdel adm
[root@test]# userdel lp
[root@test]# userdel sync
[root@test]# userdel shutdown
[root@test]# userdel halt
[root@test]# userdel mail
如果你不用sendmail服务器,procmail.mailx,就删除这个帐号
[root@test]# userdel news
[root@test]# userdel uucp
[root@test]# userdel gopher
[root@test]# userdel ftp 如果你不允许匿名FTP,就删掉这个用户帐号。
7. 密码安全
安装linux时默认的密码最小长度是5个字节,但这并不够,要把它设为7个字节以上。修改最短密码长度需要编辑login.defs文件(vi /etc/login.defs)
PASS_MAX_DAYS 99999 ##密码设置最长有效期(默认值)
PASS_MIN_DAYS 0 ##密码设置最短有效期
PASS_MIN_LEN 5 ##设置密码最小长度
PASS_WARN_AGE 7 ##提前多少天警告用户密码即将过期。
设置一个强口令。
修改密码长度需要编辑login.defs文件,使用命令:
vi /etc/login.defs,如下图所示:
8. 打开密码的shadow功能.
在RedHat Enterprise Linux中,此功能默认为打开,来对password加密,如果没有打开系统shadow功能,使用/usr/sbin/authconfig工具,如下图所示:
如果想把已有的密码和组转变为shadow格式,可以分别使用pwov,grpconv命令
修改/etc/host.conf
/etc/host.conf文件说明了如何解析地址。编辑此文件,加入如下几行:
第一行设置定义首先通过DNS解析IP地址,然后通过hosts文件解析。
第二行设置检测/etc/hosts文件中的主机是否拥有多个IP地址(例如有多个以太网口网卡)。
第三行设置说明要注意对本机未经许可的电子欺骗。
9. 修改/etc/host.conf
/etc/host.conf文件说明了如何解析地址。编辑此文件,加入如下几行:
第一行设置定义首先通过DNS解析IP地址,然后通过hosts文件解析。
第二行设置检测/etc/hosts文件中的主机是否拥有多个IP地址(例如有多个以太网口网卡)。
第三行设置说明要注意对本机未经许可的电子欺骗。
10. 使/etc/services等系统重要文件免疫
在linux下,有些配置文件是不允许任何人修改的,为了防止被误删或修改,可以设定该文件的"不可修改位(immutable)":
chattr +i filename,使用chattr(change attribute) 指令:
例如:
给系统服务端口列表文件加锁
主要作用:防止未经许可的删除或添加服务
chattr +i /etc/services
给系统的用户名密码存放文件加锁:
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/fstab
如果需要修改文件则:chattr -i /etc/fstab以后再修改文件。
Chattr命令参数详解
11. 不允许从不同的控制台进行root登录
/etc/securetty文件允许个人定义root用户从那全TTY 设备登录。
编辑/etc/securetty文件,将不需要登录的tty设备加#注销掉, 来禁止从该tty设备进行root登录
12. 防止任何人使用su命令成为root
建议尽量限制用户通过su成为root
首先编辑su文件(vi /etc/pam.d/su),在文件头部加入如下二行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel
编辑完成后,只有wheel组的成员才能用su命令成为root.
举例:让haha用户成为wheel组的成员
#usermod –G10 admin
G表示用户所在的其他组,10是wheel组的ID值,Admin代表加入到wheel组的用户。
/etc/pam.d/su文件修改如下:
13. 取消root命令历史记录
在linux下,系统会自动记录用户输入过的命令,而root用户发出的命令往往具有敏感的信息,为了保证安全性,一般应该不记录或者少记录root的命令历史记录。
用编辑命令来打开/etc/目录下面的profile文件,并在其中输入如下内容:
HISTFILESIZE=0
HISTSIZE=0
如果执行再严格的话,在/etc/skel/.bash_logout文件中添加如下一行:
rm –f $HOME/.bash_history
如此,当用户每次注销时,“bash_history”都会被删除
14. 给执行关闭或启动时执行程序的script文件设置,此文件在RedHat Enterprise Linux中默认权限为755.
Script(脚本)文件在/etc/rc.d/init.d目录下,执行如下命令:
如此设置之后,只有root用户才能对这些script文件进行操作。
15. 自动注销root帐户
root帐户是Linux系统中的超级管理员,如果系统管理员在工作时离开,系统会自动在设定的时间内注销,以保证不给不法分子留有可乘之机.通过修改TMOUT参数实现此功能,编辑/etc/profile文件,在”HISTFILESIZE=“这一行的下一行加入此行:TMOUT = 30
编辑后的文件如图所示:
16. 禁止不使用的SUID/SGID程序
如果一个程序被设置成了SUID root,那么普通用户就可以以root身份来运行这个程序,所以应尽可能少使用SUID/SGID程序,禁止不必要的SUID/SGID程序员
什么是SUID与SGID呢?
我们看到/usr/bin/passwd文件前面的属性,在原来的X的位置有一个S属性,这就是所谓的SUID。同理,当一个文件权限是-r-xr-s—x,那么就是所谓的的SGID。
当一个文件具有SUID时,同时others群组也具有可执行权限,那么others群组执行该程序时,others群组将拥有该文件的owner权限.
通过比较/etc/shadow和/usr/bin/passwd
进一步理解SUID:
我们看到,/etc/shadow文件只有root用户对其有读得的权限,但是我们知道普通用户就可以自己修改密码,为什么?
答案是使用SUID,/usr/bin/passwd文件具有SUID属性,当用户使用/usr/bin/passwd这个执行文件时,在执行passwd命令修改时就具有/usr/bin/passswd文件的拥有者root的权限.换句话说,当一个普通用户执行passwd时,将具有root权限,可想而知,这样就是非常的不安全.
禁止不使用的SUID/SGID程序
如果一个程序被设置成了SUID root,那么普通用户就可以以root身份来运行这个程序。应尽可能的少使用SUID/SGID 程序,禁止所有不必要的SUID/SGID程序。
查找root-owned程序中使用’s’位的程序,使用如下命令:
find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
• 用下面命令禁止选中的带有’s’位的程序:
[root@kapil /]# chmod a-s [program]
• 命令执行情况如图所示:
举例:修改部分系统文件的SUID和SGID的权限
chmod a-s /usr/bin/chage
chmod a-s /usr/bin/gpasswd
chmod a-s /usr/bin/wall
chmod a-s /usr/bin/chfn
chmod a-s /usr/bin/chsh
chmod a-s /usr/bin/newgrp
chmod a-s /usr/bin/write
chmod a-s /usr/sbin/usernetctl
chmod a-s /usr/sbin/traceroute
chmod a-s /bin/mount
chmod a-s /bin/umount
chmod a-s /bin/ping
chmod a-s /sbin/netreport
17.关闭系统不使用的服务
cd /etc/init.d #进入到系统init进程启动目录
在这里有两个方法,可以关闭init目录下的服务,
一、将init目录下的文件名mv成*.old类的文件名,即修改文件名,作用就是在系统启动的时候找不到这个服务的启动文件。
二、使用chkconfig系统命令来关闭系统启动等级的服务。
在使用以下任何一种方法时,请先检查需要关闭的服务是否是本服务器特别需要启动支持的服务,以防关闭正常使用的服务。
修改文件名的方法 Cd /etc/init.d/
mv apmd apmd.old ##笔记本需要
mv netfs netfs.old ## nfs客户端
mv yppasswdd yppasswdd.old ## NIS服务器,此服务漏洞很多
mv ypserv ypserv.old ## NIS服务器,此服务漏洞很多
mv dhcpd dhcpd.old ## dhcp服务
mv portmap portmap.old ##运行rpc(111端口)服务必需
mv lpd lpd.old ##打印服务
mv nfs nfs.old ## NFS服务器,漏洞极多
mv sendmail sendmail.old ##邮件服务, 漏洞极多
mv snmpd snmpd.old ## SNMP,远程用户能从中获得许多系统信息
mv rstatd rstatd.old ##避免运行r服务,远程用户可以从中获取很多信息
mv atd atd.old ##和cron很相似的定时运行程序的服务
使用chkcofig命令来关闭不使用的系统服务
chkconfig –level 35 apmd off
chkconfig –level 35 netfs off
chkconfig –level 35 yppasswdd off
chkconfig –level 35 ypserv off
chkconfig –level 35 dhcpd off
chkconfig –level 35 portmap off
chkconfig –level 35 lpd off
chkconfig –level 35 nfs off
chkconfig –level 35 sendmail off
chkconfig –level 35 snmpd off
chkconfig –level 35 rstatd off
chkconfig –level 35 atd off
18.使Control-Alt-Delete关机键无效
把“/etc/inittab”文件中的一行注释掉可以禁止用 Control-Alt-Delete关闭计算机。如果服务器不是放在一个安全的地方,这非常重要。
编辑inittab文件(vi /etc/inittab)把这一行:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
改为:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
用下面的命令使改变生效:
[root@deep]# /sbin/init q
19.为关键分区建立只读属性
Linux的文件系统可以分成几个主要的分区,每个分区分别进行不同的配置和安装,一般情况下至少要建立/、/usr/local、/var和/home等分区。
/usr可以安装成只读并且可以被认为是不可修改的。如果/usr中有任何文件发生了改变,那么系统将立即发出安全报警。当然这不包括用户自己改变/usr中的内容。
/lib、/boot和/sbin的安装和设置也一样。在安装时应该尽量将它们设置为只读,并且对它们的文件、目录和属性进行的任何修改都会导致系统报警。
当然将所有主要的分区都设置为只读是不可能的,有的分区如/var等,其自身的性质就决定了不能将它们设置为只读,但应该不允许它具有执行权限。
20.linux 主机防ping
第一种方法就是用防火墙(iptables)
第二种方法,只需要修改一个参数就可以防止所有的ping。
找到 /proc/sys/net/ipv4/icmp_echo_ignore_all 这个文件,默认文件内容为0,我们改成1 这样就会屏蔽所有的ping命令!输入以下命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
为了使系统每次启动后自动运行此命令,加下面的一行命令到/etc/rc.d/rc.local 文件 :
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
21. 隐藏系统信息
在默认情况下,在登录到Linux系统时,会显示Linux发行版的名称、版本、内核版本、服务器的名称等等,对于黑客来说,这些信息是入侵的第一手资料。隐藏系统信息(RedHat Enterprise Linux 4.0)的修改如下: