Centos
通過 ssh 使用 apache 權限的 rsync 文件
我正在通過 apache 執行 rsync 以同步資產目錄
rsync -avz -e 'ssh -l rsync -i /home/rsync/.ssh/rsync -o StrictHostKeyChecking=no' /var/www/html/site/Uploads centos@$IP:/var/www/html/site/Uploads
這可以正常工作,但所有權從 apache 更改為 centos,因為它是使用者。我可以為 apache 使用者設置密鑰,但是該使用者無法登錄,因此不起作用。
如何讓 rsync 以 apache 身份執行以保留所有權或以 centos 使用者身份執行並將所有者維護為 apache(cron 不適用於我的情況)。
所以我發現最好的方法是讓一個使用者只對那個命令有 sudo 訪問權限並使用
--rsync-path='sudo rsync'
. 例如:rsync -avz -e 'ssh -l rsync -i /home/rsync/.ssh/rsync -o StrictHostKeyChecking=no' /path/ --rsync-path='sudo rsync' rsync@xxx.xxx.xxx.xxx:/path/
目標目錄中文件的所有權完全由用於創建/傳輸它們的目標帳戶確定。(普通賬戶無法更改文件的所有權。)
如果您希望目標文件歸其所有,那麼您會想到
apache
四個選項
- 傳輸文件,以使用者身份登錄目標帳戶
apache
。使用ssh
證書,您可以避免任何嵌入密碼的需要。您還可以設置ssh
連接以拒絕除執行rsync
服務之外的任何操作。- 從目標主機拉取文件。您可以將此作業設置為經常在 cron 下執行(
rsync
沒有工作可能是一個相對便宜的選擇),或者您可以讓它檢查諸如創建文件之類的觸發器,並且只有在該觸發器被啟動時才執行整個rsync
過程.在這種情況下,我將
cron
在您的目標主機上執行,每五分鐘在本地檢查一個文件,其中包含這樣的片段test -f "$HOME"/.rsync_trigger && rsync ... && rm -f "$HOME"/.rsync_trigger
- 用於
inotifywait
在復製文件後修復文件所有權。這將要求程序以 root 身份執行,但它可以小心地自包含,以便它只能更改目標目錄中擁有centos
的文件的所有權。apache
rsync
以root身份執行複製文件。不理想,但如果一切都失敗了,可能是必要的。