信息网络安全保护工作知识手册第七部分 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
http://www.sina.com.cn 2006年05月24日 19:25 新浪科技 | ||||||||||
第七部分 UNIX操作系统安全 一、如何设置安全强壮的密码 密码也是UNIX系统安全基础的核心,用户密码不适当造成的安全问题也是攻击侵入系统的主要手段之一。如果系统安全危及到密码,那么已经建立的基本安全机制和模式将遭
•大写字母 •小写字母 •数字 •非字母数字的字符,如标点符号等 安全的密码还要符合下列的规则 •不使用普通的名字或昵称 •不使用普通的个人信息,如生日日期 •密码里不含有重复的字母或数字 •至少使用八个字符 root用户可以使用下面的命令和参数来增强对用户密码的管理: 1. passwd –n 30 帐号名 #强迫用户每30天修改一次密码 例如: [root@mobile root]# passwd -n 30 bkbll Adjusting aging data for user bkbll. passwd: Success 2. passwd –l 帐号名 #封锁用户帐好,禁止登陆 更多命令可以参看man帮助页,man passwd 如何保护帐号数据库文件 Unix系统中的帐号数据库文件(/etc/passwd文件)是整个系统中最重要的文件,它包含了每个用户的信息(加密后的口令也可能存于/etc/shadow文件中)。它每一行分为7个部分,依次为用户登录名,加密过的口令,用户号,用户组号,用户全名,用户主目录和用户所用的Shell程序,其中用户号(UID)和用户组号(GID)用于Unix系统唯一地标识用户和同组用户及用户的访问权限。因此,此文件便成为了入侵者的首要目标。所以Password文件必须是不能被除root外的任何用户写入。 为了防范基于字典的攻击,在安装UNIX操作系统必须选择shadow密码技术,即DES不可逆算法加密技术。加密的密码从/etc/passwd文件移植到/etc/shadow,这个文件必须只有root可读。由于不能被别的用户读取,所以加密的密码通常的用户不可见,也就避免了上面讨论的字典攻击。 二、UNIX文件权限如何识别 文件权限是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命令来改变权限,这很简单,察看相应的帮助就知道怎么修改权限(man chmod,man umask命令)。 三、什么是设置用户ID(SUID) UNIX允许程序在运行的时候取得其它的UID,SUID表示”设置用户ID”;当用户执行一个SUID文件时,用户ID在程序运行过程中被置为文件拥有者的用户ID。如果文件属于root,那用户就成为超级用户。 四、什么是设置组ID(SGID) UNIX允许程序在运行的时候取得其它的GID;当一个用户执行SGID文件时,用户的组被置为文件的组。 五、SUID与SGID程序有何风险 SUID和SGID程序潜在了重要的安全漏洞,特别是SUID或SGID设为root的程序,这是网络入侵者非常爱用的入侵口。因为该程序执行权限和root一样,如果程序代码有缺陷,就很容易被人利用以获得一个root的shell。 六、如何查找出SUID和SGID程序 系统管理员应该定期察看系统中有哪些SUID和SGID文件,可用下面的命令可以实现: find / -type f \( -perm -004000 –o –perm -002000 \) –exec ls –lg {} \; 七、如何消除rlogin登录风险 rlogin命令属于远程登录访问命令,是从Berkeley UNIX的品种中演变出来的,适应于网络供给及分布式系统访问,rlogin命令可以被设置成不需要输入密码。与此类命令相关的配置文件有两个,分别是/etc/hosts.equiv(有些系统不支持此文件)和远程系统的.rhost文件(在远程用户的主目录下)。在一般的rlogin执行过程中,etc/hosts.equiv文件用来检查源系统的主机名;如果出现,则进一步的远程登陆过程继续;如果未出现,那么第二个文件(.rhosts)将被用来检查源主机的主机名。任何一种方法,可能都要呈现给远程主机要求的登录名以作为用户的身份;然而,如果系统主机名没呈现,或不匹配.rhost文件里的内容,则rlogin程序将自动地要求输入密码。 第一个文件hosts.equiv是系统级文件,主要由系统或网络管理员来维护。如果这个文件的权限被危及,那么几乎任何一个入侵者都能远程地登录到目标主机上;第二个文件.rhost存在于目标系统的主目录里,它的权限也一定要安全地维护。 八、如何关闭系统中不必要的服务 Unix系统中有许多用不着的服务自动处于激活状态,它们中可能存在的安全漏洞使攻击者甚至不需要账户就能控制机器。为了系统的安全,应把该关的功能关闭,该限制的文件限制访问权限。可以用如下方法来关闭: a.以root权限进入系统,或提升到 root; b.备份inetd的配置文件/etc/inetd.conf ; c. cp /etc/inetd.conf /etc/inetd.conf.BACKUP ; d.编辑/etc/inetd.conf文件; e.用”#”符号注释掉不需要的服务,使其处于不激活的状态; f.最后请重新启动计算机。 在确实需要很高安全的机器上,最好注释掉telnet和ftp,即使要使用此两项服务,也要对使用情况进行限制,如用TCP Wrapper(host.allow,host.deny)对使用telnet或ftp的IP地址进行限制。 九、UNIX日志文件放在何处 网管主要靠系统的日志文件来获得侵入的痕迹以及其他访问信息。那到底这些LOG日志文件放在哪里呢?这主要依靠的是你所进入的UNIX系统系统,各个系统有些不同的LOG文件,但大多数都应该有差不多的位置,最普通的位置就是下面的这几个位置: ● /usr/adm - 早期版本的UNIX ● /var/adm - 新一点的版本使用这个位置 ● /var/log - 一些版本的Solaris,Linux BSD,Free BSD使用这个位置 ● /etc - 大多数UNIX版本把utmp放在此处,一些系统也把wtmp放在这里,这也是 syslog.conf的位置 十、何区分UNIX系统各种日志文件 既然我们已经了解了UNIX系统日志文件的位置,那么知道每个日志的作用也是十分重要的,下面即是UNIX中各个日志文件所包含的内容: ●acct 或 pacct -- 记录每个用户使用的命令记录; ●access_log – 此记录文件会有什么站点连接过你的服务器; ●aculog -- 保存着你拨出去的MODEMS记录; ●lastlog -- 记录了用户最近登录记录和每个用户的最初目的地,有时是最后不成功的登录记录; ●loginlog -- 记录一些不正常的登录记录; ●messages -- 记录输出到系统控制台的记录; ●security -- 记录一些使用UUCP系统企图进入限制范围的事例; ●sulog -- 记录使用su命令的记录; ●utmp -- 记录当前登录到系统中的所有用户; ●utmpx -- UTMP的扩展; ●wtmp -- 记录用户登录和退出事件; ●syslog -- 最重要的日志文件,使用syslogd守护程序来获得日志信息; ●uucp --记录信息包括UUCP发出和接受的呼叫,发出的请求,发送者,发送时间和发送主机; ●lpd-errs -- 处理打印机故障信息的日志; ●ftp日志 --记录每一个FTP访问记录; ●httpd日志 --记录每一个WEB访问记录; ●history日志 -- 这个文件保存了用户最近输入命令的记录; 十一、UNIX系统的安全审计 (1)、对系统用户登陆的安全审计 UNIX下系统用户登陆的安全审计工具主要有lastlog和WTMP。 lastlog文件(此文件一般在/var/log目录下,各种UNIX系统可能不同)记录每个用户的最近一次登陆时间和每个用户的最初目的地。当一个用户登陆到UNIX系统时,注册程序在lastlog文件中查找该用户的UID.如果程序找到了该用户的UID,UNIX系统就会为用户显示最后一次登陆的时间等。有些UNIX既显示成功的登陆也显示失败的登陆尝试。 通常用户登陆进系统后就会显示最后一次登陆的时间及IP地址等信息。 WTMP文件(此文件一般在/var/adm目录下,各种UNIX系统可能不同)记录用户登陆和退出时间。它随着用户每一次的登陆和退出会持续增长。在有些UNIX版本中,一些程序如(ftp等)也在WTMP中。 通常使用last和ac命令来访问WTMP文件,last和ac命令会根据WTMP的记录及命令的输入参数产生不同的报告。 (2)、对FTP服务的安全审计 FTP要根据具体使用的服务程序来区分它的安全审计,如果不使用系统自带的FTP服务器软件,则一般的FTP服务器软件都有日志记录功能,各种服务器软件可能会有不同的方式和日志文件。这里我们只介绍系统自带的FTP服务器软件。 系统自带的FTP服务器软件一般使用ftpd程序来接受用户的连接,它使用syslog来处理它产生的消息。执行带-l选项的ftpd能激活日志记录功能。在inetd.conf文件调用ftpd的行如下所示: ftpstreamtcpnowaitroot/etc/ftpdftpd -l 应该编辑syslog.conf文件加入如下一行: daemon.infoftplogfile 另外,在有些UNIX版本中,系统可能也会使用WTMP来记录FTP的用户登陆信息。因此这些系统中也可以last命令来查看ftp用户登陆的情况。 (3)、对在线用户的安全审计 UTMP文件(此文件一般在/var/log目录下,各种UNIX系统可能不同)记录当前登陆到系统的所有用户。这个文件随着用户进入和离开系统而不断地变化。它不会为系统的用户保持很长的历史记录,只记录此时联机的有那些用户。 通常可以使用用户who或者w命令来查看UTMP的日志记录。 (4)、对网络安全的安全审计 UNIX下使用syslog来作为系统的日志工具。syslog能够方便记录各种程序产生的日志。 为了利用syslog,在后台执行一个名为syslogd的守护程序。当syslogd接收到消息时,它检查自己的配置文件syslog.conf,找出消息的响应目标。在大多数的默认配置中,syslog把大多数的消息传递给/var/adm/message文件。大多数的守护程序及各种服务程序的消息一般都记录在这里。另外,我们也可以使用第三方工具来加强网络安全的安全审计,如TCP_Wrapper。 十二、UNIX工具的使用 (一) SATAN的使用 SATAN是当今最流行的扫描工具之一。 SATAN 的英文名为 Security Administrator Tool For Analyzing Networks,翻译成中文为:安全管理员的网络分析工具。SATAN 是一个分析网络的安全管理和测试、报告工具。它用来搜集网络上主机的许多信息,并可以识别且自动报告与网络相关的安全问题。 SATAN 是一个软件包,是为UNIX环境编写的。在发布的时候,它是一个基于XWindows系统的安全程序,具有友好的用户界面。它具有HTML接口,能通过当前系统中的浏览器,如Netscape,进行浏览和操作;能以各种方式选择目标;可以以表格方式显示结果;当发现漏洞时,会出现一些上下文敏感的指导显示。SATAN 是为UNIX操作系统设计的,主要是用C和Perl语言编写,为了用户界面的友好性,还用了一些HTML技术。运行时,除了命令行方式,还可以通过浏览器来操作。它能在许多UNIX平台上运行,有时根本不需要改变代码,而在其他非UNIX平台上也只是略作移植即可。 运行SATAN时如果不带参数,它就会自动运行WWW浏览器。也可以在命令行运行它,后面跟一个想要扫描的主机名。再次要提醒的是,如果要收集信息,必须是以超级用户的身份运行它,普通用户则不能收集这些信息。用户可以同时运行多个SATAN进程,但每个进程必须使用它自己的那个数据库。数据库可以在命令行通过-d参数指定。可以对一个IP地址块,包括256个地址(satan -d x.x.x x.x.x),使用一个数据库。当数据收集完毕,可以使用浏览器来合并数据。在此之后,可以使用浏览器的打印功能打印出结果。大多数文档都可以通过浏览器来阅读。SATAN借助于浏览器,使其使用非常方便,任何使用过浏览器的用户都会驾轻就熟的使用它。 进入SATAN的开始界面后,将出现几个功能项: SATAN Data Management (SATAN 数据管理) SATAN Target selection (SATAN 目标选择) SATAN Reporting & Data Analysis (SATAN 报告和数据分析) SATAN Configuration Management (SATAN 配置管理) SATAN Documentation (SATAN 在线文档) SATAN Troubleshooting (SATAN 疑难问题解答) 就像面对平常的Netscape Nangator 或者 Microsoft Internet Explorer中的超文本链接一样,可以单击任何一个链接。不同的是,此时,所有的文档都是取自本机的一些目录下面,而不是来自某个WWW服务器。当遇到问题时,随时都可以调出在线文档,来寻找问题的解答。 SATAN用于扫描远程主机的许多已知漏洞,下面是它扫描的主要的一些系统漏洞: * FTPD 脆弱性及FTP目录是否可写 * NFS脆弱性 * NIS脆弱性 * RSH脆弱性 * sendmil服务器脆弱性 具体为: * 向任何主机调用的NFS文件系统 * NIS口令文件可被任何主机访问 * 旧版本(在8.6.10前)的sendmail * 从任何主机上的rexd访问 * X 服务器访问控制无效 * 借助FTPD的对任意文件的访问 * 可写匿名FTP根目录 要再次强调的是,这些都是已知的漏洞,SATAN并不能发现新的安全漏洞,也就是说,最终无法通过手工完成的事,SATAN也办不到。但是SATAN可以自动执行这些已知漏洞的检测,而且能以便于使用的方式提供信息。关于这一工具,最后要说的是,尽管SATAN 已经是名满天下,但是,还是有许多系统,包括美国军方的一些网络,被一些年轻的黑客使用这种工具侵入到系统中。因此,国内的网络用户和安全管理员们决不能因为SATAN扫描的是一些众所周知的陈旧的系统缺陷而掉以轻心,以为软件开发商已经修补了这些安全隐患或自己的系统的配置是安全正确的。 (二) TCP_Wrapper Tcp_wrapper是Wietse Venema开发的一个可用于各种Unix平台的免费软件,Tcp_wrapper随着应用逐渐成为一种标准的Unix安全工具,成为unix守护程序inetd的一个插件。通过Tcp_wrapper,管理员可以设置对inetd提供的各种服务进行监控和过滤。 我们知道,unix中各种服务的实现是基于inetd这个守护进程的,每当有网络服务请求时,无论是ftp,telnet,rlogin等等,这种请求都被送到处于侦听状态的inetd守护进程,inetd再根据请求启动相应服务.inetd的设置是根据/etc目录下inetd.conf决定的。inetd.conf中标识了每种服务由什么进程来控制,我们抽取一行如下: telnet stream tcp nowait root /usr/sbin/in.telnted in.telned 从上面这一行我们可以看到,telnet这个服务,是由/usr/sbin目录下的in.telnetd来控制的,每当有telnet的连接请求时,inetd就指导in.telnetd来启动telnet服务。这是unix默认的连接方式,在这个过程中,没有管理员可以控制的部分,也没有连接纪录。 而在安装了Tcp_wrapper的主机上,管理员可以对上述服务加以控制,当Tcp_wrapper编译安装成功后,会生成一个tcpd程序,它可以在inetd.conf这个控制文件中取代in.telnetd的位置,这样,每当有telnet的连接请求时,tcpd即会截获,先读取管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的in.telnetd程序,由in.telnetd完成以后的工作。如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。除in.telnetd以外,tcpd还可以替代其它各种tcp服务。 Tcp_wrapper访问控制的实现是依靠两个文件:hosts.allow,hosts.deny来实现的。这两个文件的语法是比较简单的,基本语法就是: 服务类型:本服务有效ip范围: 许可或拒绝。 如hosts.allow中为: in.telnetd : sec.topsec.com.cn : allow in.ftpd : 10.68.32. : allow 而hosts.deny为: all : all 这两个文件的意思是对telnet来讲,只允许来自sec.topsec.com.cn的连接,对ftp而言,允许10.68.32这个c类地址的连接。 hosts.deny文件中的all : all表示除了这些以外,拒绝来自任何地方的任何服务.以上只是对访问控制文件的一个简单说明,管理员可以参看Tcp_wrapper的相应说明定制更为复杂的控制策略。 编辑/etc/inetd.conf,将原telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd中的/usr/sbin/in.telnetd替换为tcpd及其所在路径,比如:即telnet stream tcp nowait root /sbin/tcpd in.telnetd 其它ftp,tftp,rsh,rlogin等同样操作即可,建议至少替换telnet,ftp,rsh,rlogin这几个守护程序。 编辑结束后,保存文件,ps –ef | grep inetd找出inetd的进程号,kill –HUP 重启inetd进程使改动生效。 接着我们编辑/etc/syslog.conf文件,加入日志纪录功能,在此例中即: #tcp wrapper log local3.info /var/log/tcplog 编辑结束后,保存文件, 在/var/log下生成tcplog文件,注意这个文件的读写属性, 应该只对root有读写权限。然后ps –ef | grep syslogd,找出syslogd的进程号,kill –HUP 重启syslogd进程使改动生效。最后一项工作是编辑hosts.deny和hosts.allow文件,按上面的语法编辑即可。至此所有工作完成,我们可以用上述两个文件的设置来试一试,假设主机refuse(IP 11.22.33.44)telnet本机,我们看一看系统的反应。 refuse#telnet www.topsec.com.cn Trying www.topsec.com.cn ... Connected to www.topsec.com.cn Connection closed by foreign host. 我们再看看本机Tcp_wrapper的日志,多了一条: Apr 2 13:56:20 yiming in.telnetd[1769]: refused connect from 11.22.33.44 更多的使用方法请参考该软件的帮助文件。 |