• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 文件鎖定問題對sendmail的影響

    發表于:2007-06-13來源:作者:點擊數: 標簽:
    任何使用flock()或fcntl()函數的程序,或者可以由其他用戶讀取的文件使用了這兩個函數的APIs(比如帶O_EXLOCK和O_SHLOCK的"open()"),都容易受到本地的拒絕服務攻擊。 由于這種攻擊需要用戶用自己的帳號來鎖定文件,所以很容易可以找出攻擊的用戶,一般情況系

    任何使用flock()或fcntl()函數的程序,或者可以由其他用戶讀取的文件使用了這兩個函數的APIs(比如帶O_EXLOCK和O_SHLOCK的"open()"),都容易受到本地的拒絕服務攻擊。 由于這種攻擊需要用戶用自己的帳號來鎖定文件,所以很容易可以找出攻擊的用戶,一般情況系統用戶都不會使用此方法對系統進行本地的拒絕服務攻擊。

    問題簡介

    這兩種鎖定方法都可以打開一個文件并對文件進行讀取鎖定。這樣其他的進程就不能對這個文件進行寫入鎖定。另外,flock()方法允許用戶對那些他可以打開來讀取的文件進行寫入鎖定。而fcntl()鎖定的方法首先需要文件被打開,這樣從某程度上說安全性會好一點。當一個進程對一個文件進行了寫入鎖定的時候,其他任何的進程都不可以對同一個文件進行讀取或寫入鎖定。雖然flock()和fcntl()函數都存在一些安全問題,但他們的鎖定特性注定他們一定會被很多軟件所使用。

    檢查

    利用工具讀取進程文件的描述列表就可以找出正在利用鎖定的進程。其他中一個這樣的工具叫做lsof,可以在下面地址找到:

    ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/

    用這個工具你可以找出一個或多個正在對文件進行讀取或寫入鎖定的進程。

    # lsof /etc/settings

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

    lockit 25472 badguy 3rW VREG 116,131072 1841 292 /etc/settings

    在上面的例子里,用戶badguy的lockit進程(pid 25472)打開了/etc/settings進行讀取,并對它進行了寫入鎖定(從FD項可看到)。如果這是一個攻擊,管理員可以殺掉這個惡意的進程來解開鎖定。

    Sendmail文件鎖定

    在sendmail里面,多個文件被進行了鎖定,其中包括aliases、maps、statistics和pid文件。任何能打開這些文件的用戶就能使sendmail或者和他相關的程序運作不正常,同樣也會影響sendmail對數據(比如statistics文件)的更新。對于使用 flock()進行鎖定的系統,如果用戶對文件進行了寫入鎖定,那么其他的sendmail進程就不能對某些文件進行讀取,比如說alias或map數據庫。你可以用以下命令查出sendmail用哪種鎖定方法:

    sendmail -bt -d0.10 < /dev/null | grep HASFLOCK

    如果輸入結果里有HASFLOCK,那么你的系統就是使用flock()進行鎖定的,否則就是用fcntl()。在以下系統sendmail缺省下使用flock():

    SunOS 4, Ultrix, Tru64 UNIX 4.X and earlier, NeXTstep, Darwin, Mac OS X, Mach386, Convex OS, RISC/OS, Linux 1.3.95 and later, Sony NEWS, and all BSD-based systems

    在其他系統里,sendmail缺省使用fcntl()。

    由于queue文件應該本身有嚴格的權限限制,所以要進行調整的文件只有alias、map、statistics和pid文件??梢杂?TrustedUser選項把這些文件的主人換成root或者可信任的用記。設置成只有指定用戶可以對文件進行讀和寫已經足夠防止拒絕服務攻擊。下面為命令例子(按不同路徑可能要修改):

     

    chmod 0640 /etc/mail/aliases /etc/mail/aliases.

    chmod 0640 /etc/mail/*.

    chmod 0640 /etc/mail/statistics /var/log/sendmail.st

    chmod 0600 /var/run/sendmail.pid /etc/mail/sendmail.pid


    如果在重啟的時候/var/run/會被清除,需要在sendmail啟動后把最后對pid文件的chmod命令放到sendmail的啟動腳本里。

    如果文件權限為0640,那么一定要保證只有可信任的用戶屬于那一用戶組。否則的話,文件不應該設成能讓全組讀取。

    注意對純文本的alias文件(/etc/mail/aliases)進行拒絕服務攻擊,只會使得newaliases不能重建alias。對使用fcntl()鎖定的系統,數據庫文件也會像alias受攻擊時一樣。由于攻擊不影響一般的操作,可以把這些文件設置成可讀。同樣也沒有必要保護與 map數據庫有關的純文本文件,因為makemap不會鎖定這些文件。

    sendmail 8.12.4會把新建的map和alias數據庫的文件權限更改為0640。同樣,在安裝過程中如果statistics文件并不存在的話,它的權限會被改為0600。最后,pid文件的權限也會被改為0600。在sendmail的未來版本里會加進對文件進行鎖定的時間限制。

    解決方案

    由于這兩個鎖定的方法都會造成本地的拒絕服務攻擊,簡單的把所有鎖定都用fcntl()完成也解決不了問題。但是,只要用戶不能打開文件,他們就不能鎖定文件。所以暫時的解決方法就是保護所有被應用程序鎖定了的文件,這樣這些文件就不能被不可信任的用戶打開。

    (責任編輯:城塵)



    原文轉自:http://www.kjueaiud.com

    ...
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>