Unix操作系统网络相关的两个安全问题

虽然已经有许多文章对有关Unix网络的安全性问题进行了广泛的论述,但随着技术的进步和人们对安全问题的认识的深入,总是不断有安全问题被暴露出来,并被加以修正 。本文介绍两个由于技术上认识不足而造成的安全问题,并给出解决方法 。
关机用户的安全问题 。
近年来,许多文章相继介绍了一种所谓最安全的Unix的关机用户 。其主要思想是直接在/etc/passwd文件或/etc/shadow文件中的关机用户一行的末尾加入/etc/shutdown命令或加入/etc/haltsys命令以代替/bin/sh命令 。这样即使有人知道了关机用户的密码(或没有设置关机用户的密码),也不能通过关机用户进入Unix系统,关机用户被严格界定为有且仅有关机功能的超级用户 。这一关机用户已被公认为“最安全的关机用户 。
【Unix操作系统网络相关的两个安全问题】该用户和其他的关机方法相比安全性有所提高,特别是在单机状态下,其安全性值得信赖 。但令人遗憾的是,该关机用户在Unix网络中也存在着一定的安全隐患 。这主要是由关机用户本身的用途所造成的,首先由于网络中的用户几乎都需要关机用户,所以关机用户往往不设密码或由多人同时掌握密码;另一方面要关闭Unix系统就必须使关机用户具有超级用户的权限 。这样,虽然不能用DEL键中断或su命令等手段非法侵入Unix系统, 但利用一些网络远程命令却有可能通过关机用户侵入Unix系统,甚至进入超级用户root的sh状态 。
1.提出问题
假设计算机A中有一个关机用户名为shutdown,其设置和权限控制按“最安全的关机用户的方法设定,因为系统管理员、软件管理员、一般操作员都要使用该用户, 故而未对其设置密码 。设计算机A的IP地址为129.15.21.77 。
此时如果想从另一台计算机(假设为计算机B)中向计算机A发起攻击,则利用Unix系统网络远程命令, 通过计算机A的“最安全的关机用户:shutdown即可达到目的 。首先在计算机B中的/etc/hosts文件中加入如下代码:
129.15.21.77 hostshut
然后在计算机B中进入任何一个普通用户,键入以下命令:
rcmd hostshut -l shutdown vi /etc/passwd
或 rcmd hostshut -l shutdown vi /etc/shadow
这样,该普通计算机用户已在计算机B中用vi命令打开了计算机A中包括root超级用户在内的所有用户的密码文本 。接下来只要改动或删除这些密码,就可以轻松地用telnet、rlogin等远程命令登录到计算机A的任何一个用户中 。如果此时闯入的是一个恶意用户, 对计算机A来说其后果将不堪设想 。
2.解决问题
为了解决这个安全问题,首先可以封闭inetd守护进程中的部分远程功能,如telnet、shell、login、exec等,方法是直接用vi修改/etc/inetd.conf文件,在上述功能前添加#号,然后执行/etc/inetd命令即可 。但这样大大削弱了Unix系统的网络功能,并可能影响到其他计算机应用方案的实施 。
经过实践,笔者发现了一种相当安全的关机方法,该方法采用了输入/输出重定向、Unix哑终端技术和Unix定时系统来实现安全的关机 。具体做法如下:
首先在超级用户中输入如下命令,使tty12终端成为哑终端:
#disable /dev/tty12
由于需要在哑终端tty12中运行关机程序,而哑终端的窗口在原始模式下工作, 所以不能用Unix系统命令read进行输入,必须自己编写一个能在原始模式下实现输入/输出功能的程序 。用cc -lcurses命令编译以下源程序,并生成可执行文件safehalt:
file://安全关机程序
#include
#include
#include
#include
main()
{
WINDOW *win;
char til[]=“是否现在关机?确认请按yes:,s1[4],sum[100];

推荐阅读