文、專任講師 小州

D006.jpg    

    在 Linux server 服務上,檔案系統上的檔案目錄管理一直是管理面需要持續維護的議題,裡面不外乎包含:

  1. 管理好系統使用者帳號
  2. 配置好使用者應對到檔案目錄的存取權限
  3. 備份與刪除不需要的檔案
  4. 檢視與稽核檔案使用的狀態
  5. 磁碟空間管理與存取效能調教

 這篇簡單來談談使用者程式對於系統現有檔案目錄存取狀態的稽核檢視方式。

-----------------------------------------------------------------------------------------------

檔案存取狀態檢視:

 當系統服務架設好後,若後續要檢視確認有哪些檔案目錄被存取使用,一般可以透過服務程式本身的功能進行檢視。
 下面用幾個服務項目簡單說明...

-----------------------------------------------------------------------------------------------

ftp 服務

    對於傳統的 ftp 服務,對於有上傳與下載過的檔案,其檔案的紀錄項目會儲存於 /var/log/xferlog 檔案內,內容有記錄相關完整的資訊記錄。比方以 vsftpd 服務來說,vsftpd.conf 設定檔案配置 xferlog_enable=YES 參數即可支援該功能項目。檔案的記錄內容如下:

  Sun Dec  4 00:47:58 2011 3 192.168.1.13 400802 /pub/linux/doc/report.txt b _ o a chrome@example.com ftp 0 * c

其中格式為:

 current-time (存取時間)
 transfer-time (傳輸花費時間)
 remote-host (遠端存取端的 ip 資訊)
 filesize (傳輸的檔案大小)
 filename (傳輸的檔案路徑名稱)
 transfer-type (傳輸類型a 表示 ASCII, b 表示 BINARY)
 special-actionflag (特殊旗標)
 direction (傳輸方向,o 表示 outgoing, i 表示 incoming)
 access-mode (存取類型 a 表示匿名, r 表示真實帳號登入)
 username (登入帳號名稱)
 service-name (服務名稱,一般都為 ftp)
 authentication-method (身份驗證類型  表示無, 1 表示 RFC931 Authentication,也就是 port 113 的服務驗證)
 authenticated-user-id (port 113 驗證傳回的帳號)
 completion-status (檔案傳輸狀態,c 完全表示傳輸完整, i 表示傳輸不完整)

-----------------------------------------------------------------------------------------------

samba 服務

     一般公司內部於 windows 環境很常見的服務項目。samba 服務來說在 3.0 版本開始有納入支援存取稽核的機制,而且支援不同可擴充的 vfs 機制可以達成很多額外的功能,其中包含存取的詳細資訊。

 smb.conf 內開啟分享的項目內,可以透過 vfs objects 參數來指定。以稽核來說可以使用 audit 該項目。其中配置範例像是:

  [share]
   comment = my share
   path = /samba/data
   writeable = yes
   browseable = yes
   vfs objects = audit
   audit:facility = LOCAL1
   audit:priority = NOTICE
   
 samba 的稽核功能,其中包含了稍微細部一點的項目,依據官方文件的紀錄資訊項目包含:

  connect (連結服務)
  disconnect (結束連結)
  opendir (開啟瀏覽目錄)
  mkdir (建立目錄)
  rmdir (刪除空目錄)
  open (檔案開啟)
  close (檔案關閉)
  rename (檔案重新命名)
  unlink (刪除檔案)
  chmod (變更權限)
  fchmod  (變更權限)
  chmod_acl  (變更 POSIX ACL 權限)
  fchmod_acl  (變更 POSIX ACL 權限)

    相關最後的資訊記錄,最後是透過系統 syslog() 呼叫傳給 syslog/rsyslog 這些服務程式攔截記錄,然後 syslog/rsyslog 程式依據本身的設定檔案來決定指定的 facility 與 priority 項目的訊息要放置在哪個檔案目錄內。其中以傳統 syslog 服務來說 /etc/syslog.conf 配置如下搭配使用:

  local1.=notice  /var/log/samba/audit_log


 實際的log 的資訊記錄內容如下:
 
  Jan  1 19:23:15 linux smbd_audit[23473]: connect to service ok by user kenduest
  Jan  1 19:23:16 linux smbd_audit[23473]: opendir ./
  Jan  1 19:23:31 linux smbd_audit[23473]: open 個人履歷表.doc (fd 27)
  Jan  1 19:23:31 linux smbd_audit[23473]: close fd 27
  Jan  1 19:23:32 linux smbd_audit[23473]: disconnected

 另外 vfs 項目還有 extd_audit 可以使用,詳細 samba 的使用項目建議可以參考如下網址資訊:

  http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/VFS.html

 另外非官方還有 mysql_audit 可以使用,支援把存取記錄放至於資料庫內,管理上會更為方便。

-----------------------------------------------------------------------------------------------

使用 audit 服務程式:

     不過若要記錄是使用者登入系統後操作程式存取檔案目錄這類資訊的話,就屬於比較一般性質的使用,非特定服務的項目要記錄存取的話,系統有提供比較低階層面的記錄應對,那就是透過 audit 服務程式的稽核來達成需求。

     audit 服務主要需要搭配 linux 系統核心的支援才可以使用,只要確認是 kernel 2.6 的版本開始就沒有問題。剩下 部分只要確認有安裝該套件包,系統開機有載入該服務就可以直接使用該功能。以 redhat-based linux 來說,請於安裝上 audit 套件包後才可以進行使用。

 確認套件是否有安裝:

  rpm -qa | grep audit

 要安裝上該套件:

  yum install audit
 
 啟動該服務:

  /etc/init.d/auditd start
 
 檢視開機時是否啟動
 
  chkconfig --list auditd
 
 設定開機時自動啟動

  chkconfig auditd on

-----------------------------------------------------------------------------------------------

使用 audit 套件包內的相關程式:

    audit 套件包內提供了幾個程式可以進行新增與檢視記錄規則,以及存取記錄的檢視。其中命令清單如下:

 auditctl (控制系統核心的稽核功能,其中包含新增與刪除稽核項目)
 ausearch (給條件查詢稽核的記錄內容)
 aureport (稽核報告清單檢視)

-----------------------------------------------------------------------------------------------

建立 audit 稽核規則:

 下面先介紹幾個使用範例讓大家知道程式使用方式....

使用範例 1: ( 提供新增監視 /etc/passwd 規則項目 )
 
 # auditctl -w /etc/passwd -p rw -k pwfile

參數說明如下:
 
 -w 參數表示 watch,後面接上要監視的路徑項目,這邊是指定查看 /etc/passwd 檔案。使用 -W 表示刪除該規則。
 -p 參數表示 permission filter,可以指定針對哪些動作才要監視,可以傳入有 [r|w|x|a] 這幾個字元列表提供 read/write/execute/attribute change 項目
 -k 參數表示 keyword,後續可以透過該 keyword 項目來進行規則查詢,或者是規則的異動項目
 
使用範例 2:( 新增只要有刪除檔案動作的系統函數被呼叫 )
 
 # auditctl -a exit,always -S unlink
 
參數說明如下:

 -a 表示附加規則,若使用 -d 表示刪除規則。若是使用 -A 表示再最前面插入規則。-a 後面要傳入兩個項目,第一個稱呼 list,這邊傳入 exit 表示該指定所執行的程式結束後才記錄,第二個項目稱呼 action,這邊傳入 always 表示一定要記錄上。詳細可傳入項目可以參考 man auditctl 說明。
 
 -S 表示要監視的系統呼叫的名稱。比方這邊傳入 unlink,表示檔案刪除的系統呼叫。比方傳入 mount 表示檔案系統有進行掛載。使用 all 表示全部

 
使用範例 3:( 新增檢視 pid 為 100 的程式的所有系統呼叫 )

 # auditctl -a entry,always -S all -F pid=100
 
 這表示新增附加一個規則,針對系統某個執行中 PID 為 100 的程式進行系統呼叫的監視。-a 後面使用 entry 表示該呼叫時候就直接記錄, 而不是程式結束後才進行記錄。
 

D022.jpg  

檢視與列出 audit 稽核規則與報表:

 列出規則部分,主要是使用 auditctl 命令。要搜尋稽核結果,都使用 ausearch 命令。其中 ausearch 的檢索可以依據不同條件來配合使用,
 其中主要有:
 
  -f 指定檔案目錄名稱
  -k 指定 keyword
  -ts 指定起始的時間
  -te 指定結束的時間
  -sc 指定系統呼叫名稱
  -pid 指定 pid 編號
 
 下面提供一些使用的例子提供給大家參考

使用範例1: (列出所有新增的稽核規則列表)

 # auditctl -l
 
 顯示內容如下:
 
 LIST_RULES: entry,always pid=100 (0x64) syscall=all
 LIST_RULES: exit,always syscall=unlink
 LIST_RULES: exit,always watch=/etc/passwd perm=rw key=pwfile

 
使用範例2: (搜尋稽核記錄內的項目)

 # ausearch -f /etc/passwd -i
 
 列出稽核記錄內有包含 /etc/passwd 檔案清單項目。
 
 其中 -i 參數表示轉換資訊,比方把內容的 uid=500 轉成 uid=username 方式,時間格式也幫你轉成實際可閱讀的格式。
 
 type=SYSCALL msg=audit(01/02/12 11:11:25.937:7017) : arch=i386 syscall=open success=yes exit=4 a0=834f9d0 a1=8000 a2=0 a3=8000 items=1 ppid=24772 pid=24795 auid=kendlee uid=kendlee gid=kendlee euid=kendlee suid=kendlee fsuid=kendlee egid=kendlee sgid=kendlee fsgid=kendlee tty=pts0 ses=268 comm=less exe=/usr/bin/less subj=user_u:system_r:unconfined_t:s0 key=pwfile
 
 type=SYSCALL msg=audit(01/02/2012 11:39:15.265:8348) : arch=i386 syscall=open success=yes exit=3 a0=bfa99ca7 a1=8000 a2=0 a3=8000 items=1 ppid=25262 pid=25263 auid=kendlee uid=kendlee gid=kendlee euid=kendlee suid=kendlee fsuid=kendlee egid=kendlee sgid=kendlee fsgid=kendlee tty=(none) ses=268 comm=cat exe=/bin/cat subj=user_u:system_r:unconfined_t:s0 key=pwfile

 上面記錄表示有一個帳號名稱為 kendlee 的使用者,透過 less 與 cat 命令打開 /etc/passwd 檔案
 
使用範例3: (指定特定的命令的動作目進行搜尋)

 # ausearch -f /etc/passwd -x less
 
 使用的意思同上一個例子運用方式,但是指定只有 less 該命令執行產生的項目

 
使用範例4: (搜尋稽核記錄內的項目)

 # ausearch -k pwfile -i

 列出稽核記錄內有 keyword 為 pwfile 項目
 
 type=SYSCALL msg=audit(01/02/12 11:10:49.491:6995) : arch=i386 syscall=open success=yes exit=3 a0=bf934cbb a1=8000 a2=0 a3=8000 items=1 ppid=24738 pid=24760 auid=kendlee uid=kendlee gid=kendlee euid=kendlee suid=kendlee fsuid=kendlee egid=kendlee sgid=kendlee fsgid=kendlee tty=pts0 ses=268 comm=cat exe=/bin/cat subj=user_u:system_r:unconfined_t:s0 key=pwfile

 上面記錄內表示有一個帳號名稱為 kendlee 的使用者,透過 cat 命令打開 /etc/passwd 檔案
 
使用範例5: (指定時間範圍內來搜尋稽核記錄內的項目)

 # ausearch -ts today     ( 指定今天開始的稽核記錄 )
 # ausearch -ts 11:20     ( 指定 11:20 開始的稽核記錄 )
 # ausearch -ts today 11:20    ( 指定今天的 11:20 開始的稽核記錄 )
 # ausearch -ts today 11:20    ( 指定今天的 11:20 開始的稽核記錄 )
 # ausearch -ts 12/31/2010    ( 指定 12/31/2010 到現在的稽核記錄)
 # ausearch -ts 12/31/2010 -te 1/10/2011 ( 指定 12/31/2010 ~ 1/10/2011 到現在的稽核記錄)
 
   其中時間格式語法會參考 locale 語系設定,使用上要特別小心。詳細時間語法部分可以 man ausearch 查詢

使用範例6: (指定系統呼叫項目進行搜尋)
 
 # ausearch -sc unlink -i

 type=PATH msg=audit(01/02/2012 11:33:58.939:7906) : item=1 name=/tmp/testfile2 inode=114917379 dev=fd:04 mode=file,664 ouid=kendlee ogid=kendlee rdev=00:00 obj=user_u:object_r:tmp_t:s0

 type=PATH msg=audit(01/02/2012 11:36:51.252:8302) : item=1 name=/tmp/testfile inode=114917379 dev=fd:04 mode=file,664 ouid=kendlee ogid=kendlee rdev=00:00 obj=user_u:object_r:tmp_t:s0

     上面記錄內表示有個帳號為 kendlee 刪除了 /tmp/testfile1 與 /tmp/testfile2 檔案,透過 -sc 指定 unlink 系統呼叫產生的稽核結果。

2011-10-27-3.gif  
 

, , , , ,

lccnetvip 發表在 痞客邦 PIXNET 留言(7) 人氣()


留言列表 (7)

發表留言
  • 莫言
  • 真是專業的解說,對於接觸LINUX有瓶頸的人來說,這樣的文章是多多益善的~感恩!
  • 磚磚
  • 好專業的教學技術文章,雖然我看不懂,但是實屬專業的解說阿~ 認同樓上+1
  • 感謝來參觀

    lccnetvip 於 2012/01/07 23:16 回覆

  • 睡過頭
  • ㄜ~~說明的非常的詳細,一開始我還以為是教怎麼開FTP或是samba的服務,後來詳細一看才知道是檔案目錄的檢視,果然還是不能只看抬頭的說,讚的啦~~
  • 希望對你有所收穫~有空多來逛逛

    lccnetvip 於 2012/01/07 23:16 回覆

  • 食客
  • 實用實用!~~
    我就不客氣的吃下去囉~~
  • 請細嚼慢嚥喔~~^^感謝支持

    lccnetvip 於 2012/01/10 10:23 回覆

  • ghost
  • 專業技術分享
    感謝您的無私奉獻喔!!
  • 不客氣喔~歡迎多來逛逛

    lccnetvip 於 2012/02/03 16:46 回覆

  • 訪客
  • 請問NFS server是否有稽核紀錄可以查詢呢?比如查詢哪些user有mount過?然後修改上面的某個檔案?
  • 小州老師回覆:在 SunOS/Solaris 系統上,nfs 可以透過 nfslogd 程式提供 log 紀錄,不過這部份似乎並沒有在 linux 上面直接看到就是,所以目前就作者知道的,在 linux 下沒有可以稽核 nfs 存取紀錄方式

    lccnetvip 於 2012/02/08 18:20 回覆

  • 訪客
  • 感謝回覆,不過您說"所以筆者目前對 nfs 本身存取分享的檔案清單紀錄部份似乎知道的方式可以紀錄應對。" ,這句話我有點不懂。
  • 意思是:目前就作者知道的,在 linux 下沒有可以稽核 nfs 存取紀錄方式

    lccnetvip 於 2012/02/08 18:14 回覆

【 X 關閉 】

【PIXNET 痞客邦】國外旅遊調查
您是我們挑選到的讀者!

填完問卷將有機會獲得心動好禮哦(注意:關閉此視窗將不再出現)

立即填寫取消