天天看點

Linux下共享檔案系統檔案傳輸的簡單設計(轉載)

共享檔案系統檔案傳輸,是網絡偵控項目中的一個實際操作。它是為了抵制入侵者進入内網而提出的一種安全解決方案。在實際傳輸過程中,拓撲圖如下:

Linux下共享檔案系統檔案傳輸的簡單設計(轉載)

實際環境均在Linux主機下進行。采用OCFS2檔案叢集的方式。外部主機A和内部主機B之間的通訊,均通過共享存儲空間C進行接受和發送。這樣即使入侵者拿下外部主機A,也無法滲透内網。這樣可以確定内部主機B是安全的。在此“共享檔案系統檔案傳輸”設計中,主要是實作A--->C--->B這樣一個檔案傳輸過程。在以下分析中,将會給出一種簡單的設計思路。

首先,我來介紹下叢集系統OCFS(RAC)。RAC的全稱是什麼呢,就是Real Application Cluster,是一種在叢集的環境下實作共享的一種資料庫存儲形式。在通常我們的資料庫,如果是單機版的資料庫,當資料檔案磁盤不能通路,那麼這個資料庫就挂掉了。如果是叢集共享資料庫的話,其中一種方法就是在某個節點存放資料檔案,其餘的資料庫都通過NFS或者Samba來進行共享,雖然資料庫的資料處理能力得到了很大的提高,不過如果這個存儲節點挂掉的話,同樣資料庫也就宕掉了。而OCFS則是一種無斷點恢複的存儲形式,在整體給人的感覺就是每台資料伺服器都有自己的檔案系統,但是這些檔案系統又仿佛隻是同一個檔案系統,因為資料更新或者其他的操作都是很統一的。即使某台電腦挂了,其餘的伺服器照樣運作,不會出現資料庫的異常,而如果想新加入一台伺服器也是很簡單的事。由此可見在共享檔案系統檔案傳輸設計中,選擇OCFS2系統是最好的選擇。

由于采用OCFS檔案系統,共享磁盤C既可看作主機A的一個本地磁盤,又可看作B的一個本地磁盤。如圖:

Linux下共享檔案系統檔案傳輸的簡單設計(轉載)

在這樣一個網絡配置環境下,程式初步實作算法如下:

1. 主機A每隔10分鐘檢測一次,把“/root/A”目錄下的檔案拷貝到共享磁盤C的 “/mnt/share”上,然後删除/root/A中的檔案。(此時,共享磁盤C已經挂載到主機A的/mnt/share下。可以了解為主機A把/root/A下的檔案移動到主機A的/mnt/share下)。

2. 主機B每隔10分鐘檢測一次共享磁盤C的”/mnt/share”。如果發現有檔案存在,則把共享磁盤C下的檔案拷貝到主機B的/root/B下。然後删除共享磁盤C下的檔案。(此時,共享磁盤C已經挂載到主機B的/mnt/share下。可以了解為主機B把/mnt/share下的檔案移動到主機B的/root/B下)

通過以上分析,可簡化程式核心為如下:

主機A上應用的程式:

#include   <stdio.h>  

#include   <dirent.h>     

int main(void)  

{  

DIR   *directory_pointer;   

For(;;)

{

If((directory_pointer=opendir("/root/A"))!=NULL)  

system(mv /root/A/* /mnt/share);  

sleep(600);

}

主機B上應用的程式:

If((directory_pointer=opendir("/mnt/share"))!=NULL)  

system(mv /mnt/share/* /root/B);  

以上程式隻是一個體系構架。具體判斷讀取順序,可以使用信号來進行控制。

另:XEYE網站,餘弦說11月初将重新開放。到時,我将對QQ2009正式版SP4文本資訊和檔案傳輸資料流傳輸的安全性研究心得和大家分享,希望可以抛磚引玉。