熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Chroot Linux中所有的服務

2013-11-13 22:10:39  來源: Oracle 

  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_Chrootpltxt並更名為 Config_Chrootpl 這個Perl腳本讓你列出所有已安裝的服務查看配置文件配置服務並啟動和停止服務通常這就是你應該做的
  
  創建chroot目錄
  mkdir p /chroot/Config/Backup
  下載Config_Chrootpltxt 並更名為 /chroot/Config_Chrootpl
  如果你的家目錄(home directory)不是/chroot請把Perl腳本裡的$Home 變量作相應的改變
  下載我的配置文件
  現在重要的是我只在 RedHat 和 RedHat 上測試過
  
  請在Perl腳本裡作相應的改變以適應你的發行版
  
  關於chroot我寫了一遍很長的文章但有了我的腳本它變得短了很多在chroot了很多服務之後我注意到這些服務中需要被chroot的文件和配置都很相似對一個特定的服務來說判斷哪些文件需要拷貝的最容易的方法是查看man如果程序要用到庫文件就再鍵入ldd /usr/bin/file你還可以把你正在安裝的服務進行chroot並手動啟動 看看出了什麼錯或查一查它的日志文件
  
  通常要安裝一個服務可以這樣做
  
  cd /chroot
  /Config_Chrootpl config SERVICE
  /Config_Chrootpl install SERVICE
  /Config_Chrootpl start SERVICE
  
  
  
  對 Ntpd 進行 Chroot
  Ntpd 是一個時間服務它使你的計算機以及其它計算機和實際時間同步把它chroot是很簡單的
  
  cd /chroot
   # 如果你沒有使用我的配置文件請把下一行的注釋去掉
  #/Config_Chrootpl config ntpd
  /Config_Chrootpl install ntpd
  /Config_Chrootpl start ntpd
  
  
  
  對 DNS 和 named 進行 Chroot
  已經有了howto文件請看
  
  或
  
  
  如果你想用我的腳本
  
  cd /chroot
   # 如果你沒有使用我的配置文件請把下一行的注釋去掉
  #/Config_Chrootpl config named
  /Config_Chrootpl install named
  /Config_Chrootpl 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_Chrootpl config httpd
  /Config_Chrootpl install httpd
  /Config_Chrootpl 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_Chrootpl config sshd
  /Config_Chrootpl install sshd
  /Config_Chrootpl start sshd
  
  我覺得把ssh放在chroot環境下的一個真正有
From:http://tw.wingwit.com/Article/program/Oracle/201311/18386.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.