2015年4月6日星期一

Samba VFS 模組及功能

Samba 能讓不同系統的使用者經網絡共享文件
雖然 Samba 只會記錄使用者的登錄時間,但透過 VFS 可以將使用者的活動記錄,有效跟進使用者對文件的操作

要使用 VFS 當然要先安裝 VFS 模組
在 terminal 輸入
sudo apt-get install samba-vfs-modules
記錄 Samba 使用者的活動,稱為 audit
VFS 提供 full_audit 來記錄使用者活動
以 Linux Mint 17.1 為例
修改 /etc/samba/smb.conf 輸入
sudo vim /etc/samba/smb.conf
在 [global] 的位置加入
vfs objects = full_audit
full_audit:prefix = [%U:%g@%I]
full_audit:success = all
full_audit:failure = all
full_audit:facility = local7
full_audit:priority = info
注意:因為在下發現很多教學網,vfs objects 的 objects ,一些有 s 一些冇 s ,所以在下到 Samba VFS 查證後,確定是有 s
full_audit:prefix 是 Samba audit 的前綴字串,可以是任意字串
根據 Samba 內建定義變數
%U 為使用者名稱
%g 為使用者群組
%I 為 IP 地址
除了在下運用的 3種 內建定義變數可以到 Variable Substitutions @ Samba 尋找
full_audit:success 及 full_audit:failure 分別是使用者存取到 Samba 後的活動,執行動作出現成功或失敗的記錄參巧
all 為記錄任何動作,有全選自然有全不選,為 none
但任何動作都記錄可能對管理員要檢查使用者活動變得困難
因此可能指定某些動作才盡行記錄,例如
pwrite 為使用者上載檔案
rename 為使用者向指定檔案更改檔名
unlink 為使用者向移除指定檔案
同樣還有其他動作可以到 Description @ Samba VFS 尋找
full_audit:facility 為設定嚴重程度,由 0 至 7 ,越小越嚴重
  1. 緊急級別 (Emergency) ,系統不穩定,有機會導至崩潰
  2. 警戒級別 (Alert) ,系統開始變得不穩
  3. 臨界級別 (Critical) ,系統持續發生錯誤
  4. 錯誤級別 (Error) ,已發生錯誤,但系統仍能進行修復
  5. 警告級別 (Waning) ,有機會對系統造成問題,需要注意系統運作
  6. 通知級別 (Notification) ,對系統不具威脅,但需要注意系統有潛在問題
  7. 資訊級別 (Informational) ,對系統不具威脅,只作資訊傳回處理
  8. 偵錯級別 (Debugging) ,對系統不具威脅,只作偵錯處理
在下設定為 6 只是對於這些情況屬於資訊級別,閣下若認為非常嚴重,亦可以設定為 0 的緊急級別
full_audit:priority 為優先程度,會影響處理的優先次序,以 info < notice < warning < debug < alert ,以 info 等級最低,同樣由閣下自行判斷優先程度
但留意 full_audit:success 及 full_audit:failure 設定為 all 會將所以動作記錄,只是使用者每次登入 Samba 都有 672 個記錄
過量記錄反而會造成不良的管理,因此在下不建議使用 all ,應以每個不同的動作作為記錄
在下建議記錄 full_audit:success 設定為 connect, mkdir, pwrite, rename, rmdir, unlink 一般使用者常用的動作 (設定格式只需要用空格不需要有「,」)
而 full_audit:failure 則為可以設定為 none 不作記錄
完成 Samba 設定後輸入
sudo service smbd restart
sudo service rsyslog restart
重新啟動 smbd 及 rsyslog 服務,然後登入 Samba 伺服器測試
輸入
cat /var/log/syslog | grep 'smbd_audit'
顯示類似
Jan  1 00:00:00 test smbd_audit: test|127.0.0.1|test-server|connect|ok|IPC$
Jan  1 00:00:00 test smbd_audit: test|127.0.0.1|test-server|connect|ok|test
的資料表示成功載入 full_audit

但 /var/log/syslog 是整個系統大大小小的資訊都會記錄下來,將 full_audit 的資訊獨記錄,在分析會比較簡單
輸入
sudo vim /etc/rsyslog.d/50-default.conf
將 *.*;auth,authpriv.none -/var/log/syslog 修改為 *.*;local6,auth,authpriv.none -/var/log/syslog
並在該行下插入新行為 local6.* /var/log/samba/audit.log

#*.*;auth,authpriv.none -/var/log/syslog
*.*;local6,auth,authpriv.none -/var/log/syslog
local6.* /var/log/samba/audit.log
為避免錯誤修改,在下建議使用 # 保留不使用該行,再插入新行
不過由於 full_audit 的操作權並非 root 而是 syslog:adm 因此並不能建立 /var/log/samba/audit.log
必須由管理手動建立,並將修改擁有者,再加上操作權,輸入
file='/var/log/samba/audit.log'
sudo touch "${file}"
sudo chown syslog:adm "${file}"
sudo chmod 0666 "${file}"
當登入時 Samba 時, full_audit 的資訊便會記錄在 /var/log/samba/audit.log

Samba 原本不會像現代具有 GUI 的作業設計一般具有「回收」概念
使用者將文件刪除,雖然 full_audit 能翻查使用者的動作,但仍不能將檔案復原
不過 VFS 有提供 recycle 功能,當使用者進行刪除動作,會模擬成「回收」
在 terminal 輸入
sudo vim /etc/samba/smb.conf
在 [global] 的位置加入
vfs objects = recycle
recycle:repository = /home/%U/.recycle
recycle:keeptree = yes
recycle:versions = yes
recycle:noversions = *.jpg *.png *.gif
recycle:minsize = 0
recycle:maxsize = 0
同樣在設定後,必須重新起動 Samba 才能接受新配置
recycle:repository 為設定「回收」的路徑位置
recycle:keeptree 為設定是否將「回收」的檔案以樹狀檢視方式類似 fake root 的方式保存
recycle:versions 為設定是否將「回收」的檔案設定回收版本,除了初版,往後的回收版本會以「Copy #n of filename」方式「回收」
recycle:minsize 為設定為當檔案小於設定值時不作回收,0 為不限,以 byte 計算
recycle:maxsize 為設定為當檔案大於設定值時不作回收,0 為不限,以 byte 計算
recycle:noversions 當 recycle:versions 為 yes 時才能生效,列入子集中的檔名不會有回收版本,能使用 ? 或 * 等 wlidcard 字元
還有更多設定可以到 Recycle @ Samba 尋找
但在設定前提,模擬成「回收」的路徑必須具使用者的存取權
假設「回收」的路徑為每個使用者的家目錄,只需要在各使用者建立「回收」路徑,便可以讓相對的使用者進行「回收」
但若果 Samba 允許匿名登錄,若需要讓匿名登錄使用者都能使用「回收」,便需要開放為 0777 的存取權
或建立專有位置,例如建立 recycle 使用者,放置「回收」檔案

沒有留言 :

發佈留言