2015-06-05 26 views
2

世界!以root身份運行rsync:不允許操作

我有一個備份腳本,它可以爲每個用戶運行rsync,並將他們的/User/user文件夾歸檔到我們的共享驅動器上。遇到一個有趣的問題rsync:當作爲當前用戶從shell執行腳本爲「sudo」時,我無法保留其他用戶的權限。它會出錯並說:rsync: chown <path> - operations not permitted(1)

我必須chown每個用戶的文件夾作爲root執行命令之前嗎? 正在使用和有問題的命令:

/usr/bin/rsync -av --human-readable --progress /Users/$name/ --exclude=".*" --exclude="Public" /Backup/$name\ -\ $(date +%m-%d-%y) --exclude=".*/" 

謝謝!

+0

「我必須將每個用戶的文件夾作爲root用戶」嗎?嘿,別這麼做,你的用戶會殺了你。 – 4ae1e1

+0

@ 4ae1e1你有一個好點... – Tan

+0

這個「共享驅動器」究竟是什麼?如果您試圖「手動」sudo chown'文件,會發生什麼? –

回答

3

這是因爲目標位於安裝的網絡捲上。你以root身份運行rsync,但這隻允許你改變本地(客戶端)計算機的所有權 - 就文件服務器而言,你是通過身份驗證的用戶,即不是root用戶(除非你'使用NFS,在這種情況下它更復雜)。由於您是以普通用戶的身份向服務器進行身份驗證,因此您在服務器上創建的所有文件都將歸該普通用戶所有,而您將無權更改該文件。

我看到了兩個可能的解決方案:

  • 不要嘗試設置所有權在服務器上。使用rsync -rltgoDv ...而不是rsync -av ...-a相當於-rlptgoD;如果不註冊-p意味着它不會嘗試設置目標文件的所有權,它只會將它們全部存儲爲當前(通過身份驗證的服務器)用戶。

  • 如果您確實需要保留所有權(並且您的本地帳戶與服務器上的帳戶相同),請通過SSH運行rsync而不是文件共享,然後以root用戶身份運行SSH。像rsync -av ... [email protected]:/Backup/$name\ -\ $(date +%m-%d-%y) ...

    請注意,允許根SSH進入服務器通常是一個壞主意。如果您想這樣做,我會創建一個SSH公鑰/私鑰對(使用加密的私鑰),將其用於驗證,並將服務器配置爲拒絕基於密碼的SSH驗證(至少對於root用戶) 。

+0

完美。感謝你的快速回復。這可能是最好的,我使用正確的'rysnc'參數和標誌來存儲文件作爲當前用戶,你完全做到了。 – Tan

相關問題