SCO Unix操作系统因其运行稳定,对硬件配置的要求不高,目前正被广泛应用于银行、电信、保险、证券、铁路等行业,但这些行业一般都不是单机应用,而是使用内部网络进行数据处理,对系统安全性的要求又相当高。SCO Unix支持网络功能,但网络安全要靠系统管理员手工限定。
笔者单位用装有SCO OpenServer5.0.5版本操作系统的IBM Netfinity系列服务器作为应用系统的前置机,后台主机用RS/6000小型机,考虑到应用的实际情况,租用电信的DDN线路来连接各前置机和主机。整个网络除本单位内部各主机可以互通外,还与人行和其他中间业务单位的主机互通。虽然在路由器上进行了一定的安全设置,但网络上主机互通给系统带来了极大的不安全因素。笔者根据多年的系统维护和开发经验,对单位的所有前置机进行了一定的安全限制,最大限度地保障了应用需要和系统安全,以下步骤均在SCO OpenServer5.0.5操作系统上应用通过。
1.为所有前置机建立信任关系
中心机房备有一台和前置机相同配置的服务器,专门用来管理前置机,也用此机对前台进行应用程序的上传更新。通过下面的方法建立信任关系,如管理机的主机名为sqls,地址为130.30.1.200,则在前置机的/etc/hosts文件中加入一行130.30.1.200 sqls,然后在前置机的超级用户根目录下创建文件.rhosts,文件写入sqls后保存。SCO Unix操作系统安装时并没有.rhosts文件,需要建立信任关系时,必须手工建立此文件。建立好信任关系后,管理机就可以直接用rlogin、rcp等远程命令来管理和控制前置机了,所有这些r 开头的命令都不需要输入密码。而前置机则不允许直接rlogin 到管理机上,所以信任关系的建立是单向的。我们要求下级信用社的系统管理员自己掌握超级用户和一般用户的密码,并定期更换。建立信任关系后,日常管理和维护就方便了。
2.修改Telnet、Ftp端口参数
我们知道,无论是Windows还是Unix操作系统,都有端口号这个概念,计算机之间的通讯,是通过对应的端口号实现的。一般系统都用缺省的端口号,比如Ftp的端口号为21,Telnet的端口号为23,Http的端口号为80 等,当我们使用Telnet登录到其它计算机上时,系统就使用默认端口号23,这是很不安全的。笔者对辖内的前置机和管理机进行了Telnet和Ftp端口号的更改,具体为编辑/etc/services文件,找到想要修改的Telnet和Ftp行,修改端口号,比如把Telnet的23/tcp改成6364/tcp,但不要用/etc/services文件中已存在的端口号。这样使用Telnet命令登录到该主机时,必须给出端口号,即用Telnet xxx.xxx.xxx.xxx 6364 才能进行登录,否则会被系统拒绝。通过修改端口号可以使不知道相应端口号的远程用户不能登录,进一步提高了系统的安全性。
3.禁止对前置机使用Ftp传输文件
如果系统对用户的Ftp权限不做限制,那么用户不仅可以通过Ftp来获得操作系统的重要文件(如/etc/passwd、/etc/hosts等),还可以进一步得到其他重要的数据文件,造成数据的泄露。笔者单位的前置机上因装有多个应用系统,建立的用户也比较多,所以应对大部分用户的Ftp权限进行限制。具体做法是,创建编辑/etc/ftpusers文件,把不允许使用Ftp功能的用户写到该文件中,每个用户占一行,保存后即时生效,这些用户就不能使用Ftp命令进行连接了。
4.禁止外来主机远程登录到前置机
笔者单位以前曾经发生过这样的事情,某个信用社的系统管理员利用其他途径获得了另外一个信用社前置机的用户密码,于是他就通过自己的主机远程登录到另外那个信用社的计算机上,进行一些非法操作。虽然没造成严重的后果,但这件事给笔者敲响了警钟,必须严格限制非法登录。笔者首先在/etc/profile文件中case "$0" in -sh | -rsh | -ksh | -rksh)下添加限制非授权主机远程登录代码:
remote_ip=who -mx|awk ‘{print $6}'
PTTY=who -mx|awk ‘{ printf“%.4s\n”, $2; }'
if [ “$PTTY” =“ttyp” ]
then
remote=who -mx
if [ -n “remote_ip” -a “x$remote_ip” != “x” ]
then
case $remote_ip in
130.30.1.100) echo “成功 $remote $LOGNAME” >> /usr/adm/telnet.log;;
130.30.1.201) echo “成功 $remote $LOGNAME” >> /usr/adm/telnet.log;;
sqls) echo “成功 $remote $LOGNAME”>> /usr/adm/telnet.log;;
*)
echo “被杀 $remote” >> /usr/adm/telnet.log
echo “\n\t\t哈哈哈!你被我抓到了!你的地址($remote_ip)”
echo “ ”
exit
esac
fi
fi
以上代码用来记录远程登录到本机的历史,笔者创建的日志文件为/usr/adm/telnet.log,该文件会记录远程用户登录时的用户名、时间、终端号以及IP地址,可以随时查看此文件。然后在所有用户的.profile文件里加入trap''0 1 2 3 14 15,屏蔽键盘中断,防止允许远程登录的主机用键盘中断进入操作系统的命令行提示符。
5.清除SCO Unix系统中的大漏洞
完成上面的几步后,应该说已经比较安全了,但还是存在不安全因素,因为SCO Unix 有一个大BUG——任何普通用户都可以成为超级用户,笔者相信知道这个漏洞的人不会很多,但作为一个金融计算机工作者,有必要向国内所有同行提个醒,及早消除安全隐患。可进行如下操作:
①用普通用户登录到系统,然后进入一个可以写的目录;
②ln /etc/shadow debug.log;
③/etc/sysadm.d/bin/userOsa >>ttt。
则/etc/shadow文件被覆盖,任何人可以用/etc/passwd中存在的任何用户登录而无需密码。若第二步改为ln /etc/passwd debug.log 则/etc/passwd被覆盖,谁也登录不上来了!之所以会出现这样的现象,主要是因为SCO Unix 中/etc/sysadm.d/bin/us-
erOsa 程序在运行时会生成一个名叫debug.log的文件,这个文件用户属于root 组,而且此程序有BUG,不会检查用户权限,因此可以覆盖任何文件,包括passwd和shadow。你在一个可写目录中建立连接将某个文件指向debug.log文件,运行userOsa将出错信息写入debug.log文件时,实际上就覆盖了那个你想破坏的文件!奇怪的是,这个漏洞好像跟机器有关系,笔者单位有20%的计算机存在此漏洞,而其余的计算机做第二步连接时就报错。要清除此漏洞,可用超级用户登录,进到/etc/sysadm.d/bin下,执行chmod o-x userOsa即可。