歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> Chroot Linux 中所有的服務

Chroot Linux 中所有的服務

日期:2017/2/27 14:13:51   编辑:更多Linux

by Mark Nielsen (homepage) 關於作者: Mark 先生是一位將自己的時間都捐獻給 GNUJob.com 等事業的自由咨詢者,他寫了很多的文章和自由軟件,並且是 eastmont.net 的一名志願者。 摘要: 對系統服務進行 chroot 以限制入侵者可能造成的破壞,從而提高系統的安全性。 ------------------------------------------------------------ 介紹 什麼是 chroot?chroot 基本上重定義了一個程序的運行環境。更確切地說,它重定義了一個程序(或登錄會話)的“ROOT”目錄或“/”。也就是說,對於 chroot 了的程序或 shell 來說,chroot 環境之外的目錄是不存在的。 那這樣又有什麼用呢?如果入侵者入侵了你的電腦,他們就不能看見你系統裡所有的文件了。這樣,就限制了入侵者可能執行的命令,從而禁止了他們溢出不安全文件的機會。但唯一的缺點是,我認為這不能阻止他們察看網絡連接和其他資料。因此,你應做一些本文未深入涉及的事情:  保護網絡端口。  察看是否所有的服務都以非 root 權限運行。另外,是否所有的服務都進行了 chroot?  把系統日志轉移到其他電腦。  分析日志文件。  分析那些試圖探測你的計算機的隨機端口的人們。  限制服務所占用的 cpu 和內存資源。  激活用戶配額。 我認為(把以非 root 權限運行的服務進行)chroot 可以作為一道安全防線的原因是, 如果入侵者得到了一個非 root 賬戶,但沒有使他們得到 root 權限的文件的話,那麼他們只能對所入侵的區域造成破壞。 而且,如果 root 賬戶是入侵區域大部分文件的擁有者的話,入侵者是沒有多少攻擊的選擇的。顯然,如果你的賬戶被入侵, 那一定是某些地方出問題了,但最好能減少入侵者所能造成的破壞。 請記住 我所做的並不是 100% 正確的。這是我第一次嘗試這樣做,就算只是部分有效的話,也應該是很容易完成基本的配置的。我想做一個 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 7.2 和 RedHat 6.2 上測試過。. 請在 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 文件,請看 http://www.Linuxdoc.org/HOWTO/Chroot-BIND8-HOWTO.Html


或 http://www.linuxdoc.org/HOWTO/Chroot-BIND-HOWTO.html 如果你想用我的腳本 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 函數庫。有一件事要注意,如果你要連接到數據庫上,請確保你的數據庫服務運行在 127.0.0.1 回環設備上,並在關於 DBI 的 Perl 腳本中指定主機為 127.0.0.1. 下面是我怎樣把 apache 永久連接到一個數據庫上的例子: $dbh = DBI->connect('dbi:Pg:dbname=DATABASE',"","", {PrintError=>0}); if ($dbh ) {$dbh->{PrintError} = 1;} else   {$dbh = DBI->connect('dbi:Pg:dbname=DATABASE;host=127.0.0.1',"","",     {PrintError=>1});} 源地址: http://httpd.apache.org/dist/httpd/ 把 apache 編譯並安裝在你系統的 /usr/local/apache 目錄下,然後運行 Perl 腳本。 cd /chroot # 如果你沒有使用我的配置文件,請把下一行的注釋去掉。 # ./Config_Chroot.pl config httpd ./Config_Chroot.pl install httpd ./Config_Chroot.pl start  httpd 在 httpd.conf 文件裡包含以下幾行: ExtendedStatus On    SetHandler server-status    Order deny,allow    Deny from all    Allow from 127.0.0.1    SetHandler server-info    Order deny,allow    Deny from all    Allow from 127.0.0.1 然後,在你的浏覽器裡輸入 http://127.0.0.1/server-status 或 http://127.0.0.1/server-info 並檢查!  對 Ssh 進行 Chroot 首先,如果把 ssh 從端口 22 重定向到 2222 就理想了。然後,當你啟動 ssh 時,讓它在一個非 root 賬戶下監聽 2222 端口。在初始化 ssh 連接時,我們只想讓有密碼的安全賬戶連進來,但不做其他任何事情。在他們登錄之後,運行在端口 127.0.0.1:2222 的第二個 ssh 程序讓它們連接到真正的系統 -- 這第二個 ssh 程序應該只在回環設備上監聽。這才是你應該做的。現在我們不打算去做。我們要做的唯一的事情是以這個 chroot 的 ssh 做個例子。上面提到的一個練習就請讀者自己完成:讓 sshd 運行在非 root 賬戶下,再安裝第二個監聽回環設備的 sshd 以使人們連進真正的系統。

此外,我們只要把 ssh 進行 chroot 並讓你看一看那樣做的結果(如果你只做了這些,你不必觀察整個系統)。當然,如果能把日志記錄在外部設備上就更好了。我們應該用 OpenSSH,但為了方便(這好像不是一個好的借口),我用的是一個商業的 SSH。 源地址: http://www.ssh.com/prodUCts/ssh/download.cfm 在 /usr/local/ssh_chroot 下安裝 ssh 並運行腳本。 cd /chroot # 如果你沒有使用我的配置文件,請把下一行的注釋去掉。 # ./Config_Chroot.pl config sshd ./Config_Chroot.pl insta



源地址: http://www.ssh.com/prodUCts/ssh/download.cfm 在 /usr/local/ssh_chroot 下安裝 ssh 並運行腳本。 cd /chroot # 如果你沒有使用我的配置文件,請把下一行的注釋去掉。 # ./Config_Chroot.pl config sshd ./Config_Chroot.pl insta



Copyright © Linux教程網 All Rights Reserved