by Mark Nielsen
介紹
什麼是chroot?chroot基本上重定義了一個程序的運行環境
更確切地說
它重定義了一個程序(或登錄會話)的
ROOT
目錄或
/
也就是說
對於chroot了的程序或shell來說
chroot環境之外的目錄是不存在的
那這樣又有什麼用呢?如果入侵者入侵了你的電腦
他們就不能看見你系統裡所有的文件了
這樣
就限制了入侵者可能執行的命令
從而禁止了他們溢出不安全文件的機會
但唯一的缺點是
我認為這不能阻止他們察看網絡連接和其他資料
因此
你應做一些本文未深入涉及的事情
保護網絡端口
察看是否所有的服務都以非root權限運行
另外
是否所有的服務都進行了chroot?
把系統日志轉移到其他電腦
分析日志文件
分析那些試圖探測你的計算機的隨機端口的人們
限制服務所占用的cpu和內存資源
激活用戶配額
我認為(把以非root權限運行的服務進行)chroot可以作為一道安全防線的原因是
如果入侵者得到了一個非root賬戶
但沒有使他們得到root權限的文件的話
那麼他們只能對所入侵的區域造成破壞
而且
如果root賬戶是入侵區域大部分文件的擁有者的話
入侵者是沒有多少攻擊的選擇的
顯然
如果你的賬戶被入侵
那一定是某些地方出問題了
但最好能減少入侵者所能造成的破壞
請記住 我所做的並不是
%正確的
這是我第一次嘗試這樣做
就算只是部分有效的話
也應該是很容易完成基本的配置的
我想做一個chroot的HOWTO
現在所說的只是一些基本的東西
怎樣把所有的服務都chroot呢?
好的
讓我們先創建一個目錄
/chroot
然後以下面的格式把我們的所有服務都放在它下面
Syslogd 分別和每一個服務一起運行在hroot環境下
Apache 運行在/chroot/httpd下
Ssh 運行在/chroot/sshd下
PostgreSQL 運行在/chroot/postmaster下
Sendmail 運行在 chroot環境下
但不幸的是
它必須以root權限運行
ntpd 運行在 /chroot/ntpd下
named 運行在 /chroot/named 下
每一個服務都是完全與外界隔離的
我用來創建chroot環境的Perl腳本
下載Config_Chroot
pl
txt並更名為 Config_Chroot
pl
這個Perl腳本讓你列出所有已安裝的服務
查看配置文件
配置服務
並啟動和停止服務
通常
這就是你應該做的
創建chroot目錄
mkdir
p /chroot/Config/Backup
下載Config_Chroot
pl
txt 並更名為 /chroot/Config_Chroot
pl
如果你的家目錄(home directory)不是/chroot
請把Perl腳本裡的$Home 變量作相應的改變
下載我的配置文件
現在
重要的是
我只在 RedHat
和 RedHat
上測試過
請在Perl腳本裡作相應的改變以適應你的發行版
關於chroot
我寫了一遍很長的文章
但有了我的腳本
它變得短了很多
在chroot了很多服務之後
我注意到這些服務中需要被chroot的文件和配置都很相似
對一個特定的服務來說
判斷哪些文件需要拷貝的最容易的方法是查看man
如果程序要用到庫文件
就再鍵入
ldd /usr/bin/file
你還可以把你正在安裝的服務進行chroot並手動啟動
看看出了什麼錯或查一查它的日志文件
通常
要安裝一個服務
可以這樣做
cd /chroot
/Config_Chroot
pl config SERVICE
/Config_Chroot
pl install SERVICE
/Config_Chroot
pl start SERVICE
對 Ntpd 進行 Chroot
Ntpd 是一個時間服務
它使你的計算機以及其它計算機和實際時間同步
把它chroot是很簡單的
cd /chroot
# 如果你沒有使用我的配置文件
請把下一行的注釋去掉
#
/Config_Chroot
pl config ntpd
/Config_Chroot
pl install ntpd
/Config_Chroot
pl start ntpd
對 DNS 和 named 進行 Chroot
已經有了howto文件
請看
或
如果你想用我的腳本
cd /chroot
# 如果你沒有使用我的配置文件
請把下一行的注釋去掉
#
/Config_Chroot
pl config named
/Config_Chroot
pl install named
/Config_Chroot
pl start named
把 Syslog 和其他服務一起進行chroot以及我所遇到的困難
我想把syslogd進行chroot
我遇到的困難是
syslogd默認使用/dev/log目錄
而chroot了的服務是看不見這個目錄的
因此
用syslogd做日志記錄就不是很方便了
下面是可能的解決方案
把syslogd分別和每一個服務進行chroot
我實際上就是這樣測試的
而且記錄了一些日志
我不喜歡這樣做
因為我有一個以root權限運行的服務
看看我們是否能連接到外部日志記錄設備
直接把日志記錄到文件上而不是通過syslogd
這可能是最好的安全選擇了
盡管如果被入侵
入侵者可以隨意改動日志
配置syslogd來查看幾個地方
從而得到所有的服務
你可以用syslogd的
a選項來做到
我的唯一的解決方案是確保syslogd分別和每一個服務進行chroot
我喜歡這樣的解決方案
它以非root權限在自己的chroot環境(有些像網絡端口)下記錄日志
這也許是可行的
但我正在停止我所做的
然後尋求一個更好的解決方案
如果你不想為每一個服務都配備一個獨立的syslogd
那麼當你的系統運行syslogd時
請在syslogd開始時運行下面命令
syslogd
a /chroot/SERVICE/dev/log
如果有ssh和dns要運行
那麼看上去應該像這樣
syslogd
a /chroot/ssh/dev/log
a /chroot/named/dev/log
a /dev/log
關於syslogd
我最後想說的是
我希望它能運行在非root賬戶下
我試了幾個簡單的東西
但都沒有成功
於是就放棄了
如果能讓syslogd和每一個服務一起運行在非root賬戶下
我就會對我的安全措施感到滿意了
如果可能的話
最好將日志記錄到外部設備上
對 Apache 進行 Chroot
很簡單
一旦我運行它
就可以執行Perl腳本
現在
我的配置文件是很長的
因為我必須在chroot環境下包括Perl和PostgreSQL函數庫
有一件事要注意
如果你要連接到數據庫上
請確保你的數據庫服務運行在
回環設備上
並在關於DBI的Perl腳本中指定主機為
下面是我怎樣把apache永久連接到一個數據庫上的例子
$dbh ||= DBI
>connect(
dbi:Pg:dbname=DATABASE
{PrintError=>
});
if ($dbh ) {$dbh
>{PrintError} =
;}
else
{$dbh ||= DBI
>connect(
dbi:Pg:dbname=DATABASE;host=
{PrintError=>
});}
源地址:
把apache編譯並安裝在你系統的/usr/local/apache目錄下
然後運行Perl腳本
cd /chroot
# 如果你沒有使用我的配置文件
請把下一行的注釋去掉
#
/Config_Chroot
pl config httpd
/Config_Chroot
pl install httpd
/Config_Chroot
pl start httpd
在文件裡包含以下幾行:
ExtendedStatus On
status>
SetHandler serverstatus
Order denyallow
Deny from all
Allow from
info>
SetHandler serverinfo
Order denyallow
Deny from all
Allow from
然後
在你的浏覽器裡輸入 或 並檢查!
對 Ssh 進行 Chroot
首先
如果把ssh從端口
重定向到
就理想了
然後
當你啟動ssh時
讓它在一個非root賬戶下監聽
端口
在初始化ssh連接時
我們只想讓有密碼的安全賬戶連進來
但不做其他任何事情
在他們登錄之後
運行在端口
:
的第二個ssh程序讓它們連接到真正的系統
這第二個ssh程序應該只在回環設備上監聽
這才是你應該做的
現在我們不打算去做
我們要做的唯一的事情是以這個chroot的ssh做個例子
上面提到的一個練習就請讀者自己完成
讓sshd運行在非root賬戶下
再安裝第二個監聽回環設備的sshd以使人們連進真正的系統
此外
我們只要把ssh進行chroot並讓你看一看那樣做的結果(如果你只做了這些
你不必觀察整個系統)
當然
如果能把日志記錄在外部設備上就更好了
我們應該用OpenSSH
但為了方便(這好像不是一個好的借口)
我用的是一個商業的SSH
源地址:
在/usr/local/ssh_chroot下安裝ssh並運行腳本
cd /chroot
# 如果你沒有使用我的配置文件
請把下一行的注釋去掉
#
/Config_Chroot
pl config sshd
/Config_Chroot
pl install sshd
/Config_Chroot
pl start sshd
我覺得把ssh放在chroot環境下的一個真正有
From:http://tw.wingwit.com/Article/program/Oracle/201311/18386.html