DeltaCopy同步資料後的權限問題

前陣子使用DeltaCopy完成unix、windows兩種系統之間的同步後,無論是unix同步到windows,windows同步到unix、及windows同步到windows,都很正常。直到有天,某位同事將他個人電腦(WIN7)上的程式同步到主機(windows server)後,就出現了問題…

當他由他個人電腦上發動同步後,我們連到主機上的web,iis都會出現請輸入帳號密碼的對話框。有趣的是,只有他同步程式才有此狀況,其他人同步卻正常。

查了一下,發現是因為當他同步後,會異動到主機上的權限(原因後述)。導致iis無法以IUSR_XXX匿名的身份讀取檔案,於是,iis只好詢問該用什麼帳號?就跳出帳號密碼對話框,要求使用者輸入帳號、密碼,以我們輸入的帳號身份去讀取檔案。

一開始的處理方式,是採取連到主機上重新設定正常的權限方式來解決(繼承父親權限)。這方法雖然有效,卻很不方便…

後來,看到DeltaCopy的FAQ中,有提到一個解法- Question: I am running into permission problems when accessing files copied through DeltaCopy Server.

不過,這個解法也不是很方便。其實,這功能應該也只是去執行chmod 777。如要自己寫script,如下…
chmod -R 777 /cygdrive/yourDISK/yourDIR/

為何只有那位同事有問題?因為他電腦作業系統為WIN7,目錄預設的權限設定比其他人的WIN XP嚴謹。

為了能一氣呵成完成同步,嘗試使用rsync的參數避免將個人PC的權限帶到主機上。於是採用以下指令解決了
rsync -avPC --no-p --no-g
沒想到,這樣的解法在另一台主機上卻出現更奇怪的問題。就是每當他同步完成,administrator居然會無法存取剛同步過的目錄、檔案。當我們把參數 --no-g 拿掉,同步就正常。感覺上,這樣的參數DeltaCopy在對應回windows的權限時,似乎會設定administrator(DeltaCopy service所用的帳號)不允許(deny)存取。

繼續追查問題過程中,發現在那位同事的目錄中增加everyone群組權限後,同步就正常了。就算不使用參數,同步後也沒權限問題發生。後來發現,只要使用DeltaCopy同步後,Rsync會給予幾個權限(模擬由unix轉換。另外,會無法繼承父親權限),有三個權限需注意
  1. everyone群組
    當同事在win7目錄中增加everyone權限,rsync同步後會『自動』給予『周遊資料夾/執行檔案』、『列出資料夾/讀取資料』,這樣iis的帳號才能讀取。
  2. none群組
    這個群組應該是rsync無法正常對應windows群組所造成。
  3. administrator,因為service綁在這個使用者
註:iis需『列出資料夾/讀取資料』的權限

那,當我們來源端目錄就是沒有everyone權限時,該如何解決?最後我是採用以下參數,同步的權限問題問題才算解決了…
rsync -avPC --no-g --chmod=+r --delete

這狀況有辦法完美解決嗎?我覺得應該是沒辦法,畢竟windows、unix兩種系統的權限機制不同。也難怪DeltaCopy官方文件-Syncrify和DeltaCopy的差異中有句話… XD
DeltaCopy uses CYGWIN libraries to run rsync on Windows. Windows ACL is not compatible with UNIX Posix permissions. Due to this compatibility users often run into permission issues on the server-end.

留言