您的位置:积木首页 >> 网络技术频道 >> 应用集锦 >> 正文:
标题:Unix系统高级安全设置
时间:2004-7-27 来源:不详 浏览数:
第一部分 Unix历史与发展

  1.1 UNIX简介

  UNIX 已有数十年的历史,在这期间,它的改变即使没有上亿次,也有数百万次了,有成千上万的个人和公司实现了上千种不同的版本,有上百万系统管理员在从微型嵌入式系统到超级计算机上都安装过它。无可争论,没有两个实际的UNIX操作系统是完全相同的。

  UNIX”一词是属于Open Group的一个商标,该组织是一个要求符号得到正确归属的国际协会。在这数十年当中,该标识已经被冲淡到没有具体含义。虽然如此,Open Group仍发布了“The Single UNIX Specification”,这可以在http://www.UNIX-systems.org/online.html上看到。

  “Unix”是双关语,表示名字Multics,它最初被写作“Unics”,表示UNiplexed Information and Computing System。“Unix”和“UNIX”在如今都被广泛使用。曾经有一段时间,Dennis Ritchie试图宣布用小写版本,因为“UNIX”不是开头字母组成。

  许多运行Linux等类似UNIX系统的人认为他们运行的是UNIX。正式UNIX系统和非正式UNIX系统通常被认为属于一类----不论是书中、媒介、网上还是社会公认

  按照UNIX FAQ的定义,UNIX是“一个用C语言编写的操作系统,它有层次文件系统并集成了文件和设备I/O,其系统调用接口包括fork ( )和pipe ( )等服务,用户界面包括cc、troff、grep、awk等工具和一个被选择的shell”。可以再加一些,UNIX为多任务提供一致的方式,并内置有创建、同步和终止进程的操作,它可在不同种类计算机间进行移植。

  1.2 UNIX发展与历史

  1969年,Ken Thompson、Dennis Ritchie和其他一些人在AT&T贝尔实验室开始进行一个“little-used PDP-7 in a corner”的工作,它后来成为UNIX。10年里,UNIX在AT&T的发展经历了数个版本。V4(1974)用C语言重写,这成为系统间操作系统可移植性的一个里程碑。V6(1975)第一次在贝尔实验室以外使用,成为加州大学伯克利分校开发的第一个UNIX版本的基础。

  贝尔实验室继续在UNIX上工作到80年代,有1983年的System V(“五”,不是字母)版本和1989年的System V,Release 4(缩写为SVR4)版本。同时,加利福尼亚大学的程序员改动了AT&T发布的源代码,引发了许多主要论题。Berkeley Standard Distribution(BSD)成为第2个主要“UNIX”版本。

  1984年的BSD 4.2版在大学和公司计算部门中得到广泛应用,它的一些特征被吸收到SVR4中。 从90年代开始,AT&T的源代码许可证创造了市场的繁荣,不同开发者开发了数百种UNIX版本。AT&T在1993年把UNIX产业卖给了Novell, Novell两年后又把它卖给了Santa Cruz Operation。同时,UNIX商标被转让给X/Open协会,X/Open协会后来成为了Open Group。 当UNIX的经营从一个实体到另一个实体传递时,几个长期的开发开始收获果实。传统上,要得到一个运行的BSD系统,用户需要从AT&T得到源代码许可证。但到90年代早期,伯克利的开发者在BSD上做了许多工作,使原始的AT&T源代码大部分被改动了。后续的程序员,从William和Lynne Jolitz开始在网络分布环境中开发BSD,后来在1992年成为386BSD 0.1版。这个最初的“免费源代码”BSD具有三个分支,即:Net BSD、Free BSD和Open BSD,都以BSD 4.4为基础。

  1984年,程序员Richard Stallman开始开发来源于UNIX的免费GNU(GNU Not UNIX)。到90年代早期,GNU项目出现了几个编程里程碑,包括GNU C库和Bourne Again Shell (bash)的发行。整个系统除了一个关键因素即工作内核外基本完成。 接下来是芬兰赫尔辛基大学的学生Linus Torvalds。Linus看到了一个叫作Minix的小型UNIX系统,觉得自己能做得更好。1991年秋天,他发行了一个叫“Linux”的免费软件内核的源代码—是他的姓和Minux的组合。到1994年,Linus和一个内核开发小组发行了Linux 1.0版。Linus和朋友们有一个免费内核,Stallman和朋友们拥有一个免费的UNIX克隆系统的其余部分。人们把Linux内核和GNU合在一起组成一个完整的免费系统,该系统被称为“Linux”,尽管Stallman更愿意取名为“GNU/Linux System”[6]。有几种不同类别的GNU/Linux:一些可以被公司用来支持商业使用,如Red Hat、Caldera Systems和S.U.S.E;其他如Debian GNU/Linux,更接近于最初的免费软件概念。

  Linux现已发展到内核2.2版。Linux能在几种不同体系结构的芯片上运行,并已经被各界接纳或支持。其支持者有惠普、硅谷图像和Sun等有较长历史的UNIX供应商,还有康柏和Dell等PC供应商以及Oracle和IBM等主要软件供应商。或许最具讽刺的是,微软承认无所不在的免费软件的竞争性威胁,但它不愿或不能公开自己的软件源代码。后来微软开始推出Windows NT (Windows 2000)。到90年代末,许多供应商开始放弃UNIX服务器平台而转向Windows NT。例如Silicon Graphics 公司已决定把Intel硬件和NT作为未来的图形平台。

  

热门推荐:超线程光波机器人精美壁纸美国精美瀑布图片大开眼界

 


  

  第二部分 Unix典型安全隐患

  2.1 RPC守护进程程序的错误使入侵者可以直接获得root权限

  对Unix威胁最大可以说就是rpc上面的漏洞,远程过程调用(Remote Procedure Call)允许一台计算机上的程序去执行另一台计算机上的程序。它们广泛的应用在各种网络服务中,如文件共享服务NFS。有很多漏洞是RPC本身的缺陷导致的,它们正不停的涌现出来。有很明显的证据表明,1999年末2000年初大规模的分布式拒绝服务攻击中,很多被作为攻击跳板的牺牲品就是因为存在RPC漏洞。在Solar Sunrise事件期间,对美国陆军广为人知的成功攻击就是因为在数百台国防部的系统中找到了一个RPC漏洞。

  2.2 一些应用的远程漏洞

  远程漏洞可以使远程攻击者在只对开放了有漏洞服务的应用利用的情况下,就可以得到一些权限或者root权限。

  例如:BIND程序存在的问题,利用nxt,qinv,in.named可直接得到root权限BIND(Berkeley Internet Name Domain)软件包是域名服务(DNS)的一个应用最广泛的实现软件--我们所有人都通过它来定位Internet上的系统,只需知道域名(如www.cnns.net)而不用知道IP地址,由此可体会它的重要性--这使它成为最受欢迎的攻击目标。

  2.3 本地漏洞

  本地漏洞虽然没有上面两种漏洞那么严重,但是他也是评估系统安全与否的一个重要因素,它可以使权限地的系统用户来提升自己的系统权限,或者使一个得到了一些权限的远程攻击者,扩大自己的战果,提升权限。

  例如,ff.core缓冲区溢出漏洞,一个普通用户只要执行一个简单的脚本,就可以令缓冲区溢出从而的到一个root shell。

  2.4 暴露系统信息

  严格的说这不是漏洞,但是他核你的系统安全相关。举例子来说,finger暴露了系统合法用户名,默认shell等等信息,这就可以被攻击者利用起来猜密码。再如某个软件的版本号暴露,就会令攻击者,针对此版本来进行攻击,这就使攻击者更容易的入侵的系统。

  

热门推荐:超线程光波机器人精美壁纸美国精美瀑布图片大开眼界

 


  

  第三部分 常见Unix安全设置方案

  3.1 Solaris 系列

  3.1.1 PROM OpenBoot 和物理安全

  3.1.1.1 OpenBoot安全级别

  none :不需要任何口令。所有OpenBoot设置都可以修改,任何人只要物理接触到主控台,就可以完全控制。command:除了boot和go之外所有命令都需要口令。full:除了go命令之外所有命令都需要口令。

  3.1.1.2 改变OpenBoot安全级别

  首先使用eeprom security-password 命令设置OpenBoot口令,然后在root登入状态使用eeprom security-mode=command命令改变安全级别为command或在OK状态:ok setenv security-mode=command的密码保护来实现。

  3.1.2 文件系统的安全

  3.1.2.1 基础知识

  文件系统是unix系统安全的核心。在unix中,所有的事物都是文件。Unix中的基本文件类型有正规文件、目录、特殊文件、链接、Sockets等等。这些不同类型的文件以一个分层的树结构进行组织,以一个叫"root"的目录为起始位置("/")。整个就是一个文件系统。每个文件对应一个"i节点","i节点"包括UID(文件拥有者)、GID(文件所在组)、模式(文件的权限)、文件大小、文件类型、ctime("i节点"上次修改时间)、mtime(文件上次修改时间)、atime(文件上次访问时间)、nlink(链接数)。它表示了文件的基本属性。

  大家注意到,"/"下有很多的目录,那么这些目录是干什么的呢?下面简要介绍一下目录结构。如下:

  /bin 用户命令的可执行文件

  /dev 特殊设备文件

  /etc 系统执行文件、配置文件、管理文件,主要是配置文件

  /home 用户起始目录

  /lib 引导系统以及在root文件系统中运行命令所需的共享库文件

  /lost+found 与特定文件系统断开连结的丢失文件

  /mnt 临时安装的文件系统(如光驱、软驱)

  /proc 一个伪文件系统,用来作为到内核数据结构或正在运行的进程的接口(用于调试)

  /sbin 只有root使用的可执行文件和只需要引导或安装/usr的文件

  /tmp 临时文件

  /usr 为用户和系统命令使用的可执行文件、头文件、共享库、帮助文件、本地程序(在/usr

  /local中)

  /var 用于电子邮件、打印、cron等的文件,统计文件,日志文件

  文件系统有多种类型,unix内核支持如下文件系统:

  1) ext2 固定和可移动磁盘都支持的一种高性能文件系统,用于linux

  2) msdos 由MS-DOS和Windows使用

  3) umsdos Linux使用的一种扩充的DOS文件系统,支持长文件名、权限设置

  4) iso9660 遵从ISO9660标准的CD-ROM文件系统

  5) hpfs High Performance Filesystem,高性能文件系统,OS/2使用

  6) minix 在Minux OS中使用,最早的Linux文件系统

  7) nfs 用来访问远程计算机中磁盘的网络文件系统

  8) swap 用作交换的磁盘分区

  3.1.2.2 文件权限

  文件权限是unix文件系统安全的关键。Unix中的每个用户有一个唯一的用户名和UID(用户ID号),每个用户属于一个或多个组。基本分组成员在/etc/passwd中定义,附加的分组成员在/etc/group中定义。例如,用户tiger的UID为225,分组为11(students),此外,他还是分组185(postgraduates)的成员。每个文件和目录有三组权限,一组是文件的拥有者、一组是文件所属组的成员、一组是其他所有用户。"r"表示可读,"w"表示可写,"x"表示可执行。一共9位(每组3位),合起来称为模式位(mode bits)。

  模式位通常由一列10个字符来表示,每个字符表示一个模式设置,第一个指明文件类型,如(d表示目录,-表示普通文件,l表示链接文件等等)。例如,用ls -l 命令显示如下:

  drwxr-xr-x 2 root root 1024 Aug 13 09:22 backup/

  -rw-r--r-- 1 root root 1824 Apr 21 18:45 client.c

  -rw------- 1 root root 65536 Apr 22 17:56 core

  -rw-r----- 1 root root 2351 Apr 22 14:01 cry1.bak

  -rwxr-xr-x 1 root root 27492 Apr 21 18:47 crypt*

  -rw-r----- 1 tiger tiger 2450 Apr 22 15:16 cryption_server.c

  -rw-r----- 1 tiger tiger 1544 Apr 22 15:02 myinclude.h

  -rwxr-xr-x 1 root root 8280 May 3 10:35 test*

  例如最后一行以"-"开始,表示test使一个普通文件,文件拥有者可以读写执行、本组其他成员可以读执行、其他用户可以读执行。我们可以用chmod和umask命令来改变权限,这很简单,察看相应的帮助就知道怎么修改权限。

  3.1.2.3 SUID/SGID

  为什么要单独把他们从文件权限中分出来讲呢?因为,这是网络入侵者非常爱用的入侵入口。SUID表示"设置用户ID",SGID表示"设置组ID"。当用户执行一个SUID文件时,用户ID在程序运行过程中被置为文件拥有者的用户ID。如果文件属于root,那用户就成为超级用户。同样,当一个用户执行SGID文件时,用户的组被置为文件的组。例如,PS命令以SUID root运行,他从系统内存中读取,这是一般用户不能做的。SUID程序代表了重要的安全漏洞,特别是SUID设为root的程序。

  Unix实际上有两种类型的用户ID。"real user ID"是在登录过程中建立的用户ID。 "effective user ID"是在登录后的会话过程中通过SUID和SGID位来修改。当一个用户运行一条命令时,进程继承了用户登录Shell的权限,这时"real user ID"和"effective user ID"是相同的。当SUID位被设置时,进程继承了命令拥有者的权限。例如普通用户运行passwd命令时,他能够修改/etc/passwd文件,尽管文件是属于root的。这成为可能是因为passwd命令以root的SUID权限运行。那么如何识别SUID程序呢?我们检查文件的权限模式,在它的第四位如果不是"x",而是"s",就是一个SUID程序。例如,ls -l /bin/su命令显示: -rwsr-xr-x 1 root root 14888 Aug 15 1999 /bin/su* 表明su是一个SUID程序。

  Unix系统安全的一种典型攻击就是创建一个SUID是root的shell拷贝,然后把他隐藏。通过调用后门,攻击者就获得了root的权利。例如,某个系统管理员忘了关闭某个root的Shell,一个坏人经过运行如下命令:

  cp /bin/bash /home/badman/.bash; chmod 4777 /home/badman/.bashbadman现在就有了一个bash的SUID root拷贝任其处理。他就有完整的root权限了。因此,系统管理员应该定期察看系统中有哪些SUID和SGID文件。用下面的命令可以实现:find / -type f \( -perm -4000 -o -perm -2000 \) -ls

  当然,攻击者可以通过修改find命令来逃避检测,所以要运行专门的检测软件(如Tripwire)来进行检查。

  3.1.2.4 加密与验证

  Tripwire工具提出了使用密码校验和来确定文件是否经过了未认证的修改,加密技术可以用来保护机密文件甚至整个文件系统。加密是通过密钥将明文转化为一堆乱码的密文,从而起到保护文件内容的作用。Unix常用的加密算法有crypt(最早的加密工具)、DES(目前最常用的)、IDEA(国际数据加密算法)、RC4、Blowfish(简单高效的DES)、RSA等等。具体的加密算法这里不再阐明,需要了解请阅读Bruce Schneier的《应用密码学》一书。注意单向hash函数,他处理任意长度的信息并返回一个固定长度的hash值(128位)。常用的有MD5、SHA、HAVAL、Snefru等等。单向hash函数经常和公开密钥算法一起来创建数字签名,提供身份证明。与传统的签名相比,数字签名还可以指出文件是否被修改过。

  PGP是unix下用来保护信息特别是电子邮件的工具。他使用IDEA算法为数据加密,使用RSA算法来进行密钥管理和数字签名,使用MD5来作为一个单向hash函数。其特点在于安全:不仅内容被伪装,连发送者的签名也加密。PGP还可以用来加密本地文件。现在常用的Linux下的PGP工具为:pgpe(加密)、pgps(签名)、pgpv(确认/解密)、pgpk(管理密钥)。请参考相应的帮助来使用。

  "特洛伊木马"的故事不知道大家听说过没有。古希腊人久攻特洛伊城不下,于是假装求和,送了一个巨大的木马作为礼物,向城主Minerva表示和解。特洛伊人将木马拉入城内,到了夜晚,藏在木马中的希腊士兵钻出来,里应外合,攻破特洛伊城。在计算机安全领域,这种欺骗技巧成为攻击计算机安全的一种标准方式。他藏在你的计算机里,随时可能爆发,如果攻击者需要的话。因此,一旦一个系统被装了特洛伊木马,他就不能在信任了,必须从新安装。怎么避免呢,要养成良好的习惯,例如:限制下载,只从有声望的站点下载东西;检验下载的文件;避免运行已编译好的二进制代码,从源代码开始编译;不执行不信任的电子邮件发送的程序;不执行从非信任的Web站点得到的Java applets和Javacript。

  MD5校验和有时与软件一起发行,用户可以用他来检验一个软件包。用户可以运行Red Hat Linux中包含的md5sum工具,例如:md5sum cops.1.04.tar.gz 结果:lfa416872934e5bee99068f9989cb8b0 cops.1.04.tar.gz 和软件包自带的校验和文件比较,如果不符,则说明文件在传输过程中出了问题,最好从新下载,本文件不可靠。md5sum还可以用来检验系统文件,在第一次安装系统之后对重要的li

  lo系统二进制文件进行一下校验:md5sum lilo,其结果应该一直保持不变,除非升级。

  3.1.2.5 完整性检查

  完整性是安全系统的核心属性。用户需要知道昨天写的文件和今天打开的文件没有被改动。攻击者可以用很多方法破坏文件系统,从依靠错误配置的权限获益到放置特洛伊木马和病毒。Linux中用cksum命令对一个特定文件执行16位校验和的计算,上面的md5sum也是一个检验的命令。

  RPM(Red Hat Package manager)是由Red Hat Software开发并包含在其Linux产品之中的多功能软件安装管理器。他可以用来建立、安装、查询、检验、升级和卸载独立的软件包。

  3.1.2.6 加密文件系统

  加密文件系统是文件系统安全的一个更引人注目的方法。他根据一个简单的推断:如果一个系统保存机密数据,那么就应该以加密形式保存。加密文件系统(CFS)的核心思想是: CFS为目录和文件提供一个透明的接口,并自动使用用户的密钥加密。一条单独的命令把一个密钥和一个目录关联起来,从这时起,目录的内容在写时自动加密,在打开时自动解密。

  一个由意大利人开发的透明加密文件系统(TCFS),用户甚至不知道他们的文件倍加密了。从下面的地址下载:http://tcfs.dia.unisa.it/

  3.1.2.7 备份

  备份的重要性我想不需要多说了,那么备份有那些策略呢?常见的有:系统初装时的备份、定期备份、增量式备份(只备份改动的)、特别备份(为某些文件备份)等等。Linux系统提供了以下备份工具:

  1

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 


(责任编辑:笑虎)
最近更新
今日推荐
热点文章