UNIX系統下的使用者限制(轉)

ba發表於2007-08-16
UNIX系統下的使用者限制(轉)[@more@]摘要

  本文將討論在Linux系統中,系統管理員如何對遠端使用者和本地使用者進行限制。限制使用者能夠進行的操作,能夠降低系統遭受內部攻擊的的風險。

  在傳統的UNIX系統中,使用者的限制是由檔案的許可權、密碼和其它標準的UNIX訪問控制完成的。燃而,除此之外還需要更為嚴格的使用者限制,以便能夠對使用者進行保護以及保護系統不受淘氣使用者的破壞。本文將討論在Linux系統中,系統管理員如何對遠端使用者和本地使用者進行限制。限制使用者能夠進行的操作,能夠降低系統遭受內部攻擊的的風險。但是,對root使用者的許可權限制不在本文的討論範圍之內,感興趣的人可以參考利用capability特徵保護系統的安全。

1.使用者限制的目標

  對於使用者限制,不同的環境有不同的目標,需要不同的工具實現。例如,限制不經意的使用者使用UNIX shell和防止熟練攻擊者利用SUID程式進行攻擊是不同的。而且,不同程度的限制可能需要不同的環境,例如只允許使用某些使用者或者只拒絕使用某些程式。

2.檔案的許可權

  我們首先從最弱的限制--UNIX許可權開始。在大多數情況下,這已經足夠。透過設定許可權,我們可以控制哪些可執行檔案可以讓使用者使用。除了那些允許非信任使用者執行的程式,其它的程式都不應該是隨便哪個使用者都可以執行的;所有使用者可寫的分割槽,例如:/tmp和/home,都應該使用noexec引數載入(man mount)。做到這些,基本可以保證系統的安全。noexec引數能夠阻止使用者下載或者建立自己的可執行程式。如果一部分使用者需要比較高的許可權,我們可以把這些使用者集中到一個特殊的使用者組,把程式設定為允許這個組執行。透過Linux檔案系統的屬性(attribute),例如:immutable、append-only等,還可以對root許可權進行控制,詳細請參考檔案系統安全-EXT2檔案系統的屬性

3.使用PAM進行許可權限制

  另外一種簡單(比較脆弱)的限制可以透過Linux系統資源限制實現。限制使用者能夠使用的系統資源,可以阻止惡意使用者透過一些卑劣的手段,例如:fork大量的程式、填充垃圾檔案,實現消耗系統的資源(磁碟空間、記憶體以及CPU時間等)的目的。Linux的插入式認證模組(Pluggable Authentication Module))能夠用來進行系統資源限制。本文我們將只是進行一般性的討論,詳情請參考Securing and Optimizing Linux: RedHat Edition - A Hands-on Guide、 Using Pam。

  PAM的使用者限制檔案一般是/etc/security/limits.conf,其語法如下所示:

  domain type item value

  每個域的意義如下表:

domain
可以是:

· 一個使用者名稱;

· 一個使用者組名,語法為@group,例如:@nixe0n;

· 還可以是統配符*,表示所有的使用者

type
有兩種型別:

· hard:由超級使用者和系統核心所做的硬性限制,普通使用者無權修改;

· soft:使用者可以根據需要,在hard的限制範圍內修改被限制的資源,可以看作是預設設定;

item
被限制的專案包括:

· core:限制core檔案的大小(以KB為單位);

· data:程式資料段的最大值(以KB為單位);

· fsize:檔案的最大值(以KB為單位);

· memlock:最大的加鎖記憶體空間(單位KB);

· nofile:開啟檔案的最大數量;

· rss:RSS(Resident Set Size)的最大值(單位KB);

· 最大的棧值(以KB為單位);

· cpu:最大的CPU時間;

· nproc:使用者的最大程式數量;

· as:地址空間限制;

· maxlogs:這個使用者最大的登入數;

· priority:使用者程式的優先順序;


  例如:

# EXAMPLE /etc/security/limits.conf file:

# =======================================

#

* soft core 0

* hard rss 10000

* hard nproc 20

  這個配置檔案設定使用者core檔案的大小是0,使用者可以根據需要修改;每個程式RSS最大是10000KB;最多可以執行20個程式。

  下面這個檔案是針對特殊使用者組foo所做的一些限制:

@foo hard core 0

@foo hard rss 2000

@foo hard nproc 200

@foo hard fsize 100000

@foo hard nofile 100

@foo hard cpu 10

@foo hard priority 5

  然後,需要在/etc/pam.d/login檔案中加入以下條目,才能是限制生效:

session required /lib/security/pam_limits.so

  實際上,PAM可以實現更細粒度的顯示,詳情請參考RedHat技術白皮書:Enhanced Console Access。

4.受限shell

  bash本身也有一定的限制功能,就是透過其(受限shell)restricted shell功能,所做的限制包括:阻止使用者改變目錄和環境變數;重定向輸出;使用絕對路徑執行命令;使用exec命令和其它一些操作。如果bash是以rbash為名啟動,或者使用-r選項執行,它就稱為受限shell。受限shell能夠使系統環境更好控制。如果啟動受限shell,以下操作將被禁止:

使用cd命令切換目錄;
設定或者取消SHELL、PATH、ENV或者BASH_ENV環境變數;
以絕對路徑執行命令;
使用絕對路徑指定的檔名作為內建命令.的引數;
使用絕對路徑指定的檔名作為內建命令hash的引數;
在啟動時,從shell環境匯入函式的定義;
在啟動時,解析SHELLOPTS的值;
使用
>、>|、<>、>&、&>和>>

等重定向操作重定向輸出;

使用exec命令使其它的命令代替當前shell;
使用-f和-d選項開啟/關閉內建命令;
對內建命令使用-p選項;
關閉受限模式。
  下面我們實際試驗一下:

#adduser nixe0n

#passwd nixe0n

#ln -s /bin/bash /bin/rbash

#echo "/bin/rbash">>/etc/shells

#chsh -s /bin/rbash nixe0n

#cd ~nixe0n

#su nixe0n

$

  然後,執行:

  $cd /

  就會出現以下錯誤:

  rbash: cd: restricted

5.chroot

  另外一種限制方式是透過chroot,把使用者限制在一個指定的目錄。這種方式確實能夠提供一定程度的安全性,如果不能獲得root許可權,使用者將無法脫離監獄環境。因此,為了阻止使用者獲得chrooted目錄之外目錄的訪問權,應該慎重選擇監獄環境內的應用程式。

6.結論

  本文我們討論了Linux系統對使用者的幾種限制方式,除了以上這些方式,還可以使用Linux核心的capability特性,詳情請參考利用capability特性加強Linux系統的安全性。具體的使用要根據實際情況的需要,既要考慮系統的安全性,又要顧及到是否給使用者造成不便。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961734/,如需轉載,請註明出處,否則將追究法律責任。

相關文章