Centos

通過 ssh 使用 apache 權限的 rsync 文件

  • November 23, 2016

我正在通過 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四個選項

  1. 傳輸文件,以使用者身份登錄目標帳戶apache。使用ssh證書,您可以避免任何嵌入密碼的需要。您還可以設置ssh連接以拒絕除執行rsync服務之外的任何操作。
  2. 從目標主機拉取文件。您可以將此作業設置為經常在 cron 下執行(rsync沒有工作可能是一個相對便宜的選擇),或者您可以讓它檢查諸如創建文件之類的觸發器,並且只有在該觸發器被啟動時才執行整個rsync過程.

在這種情況下,我將cron在您的目標主機上執行,每五分鐘在本地檢查一個文件,其中包含這樣的片段

test -f "$HOME"/.rsync_trigger && rsync ... && rm -f "$HOME"/.rsync_trigger
  1. 用於inotifywait在復製文件後修復文件所有權。這將要求程序以 root 身份執行,但它可以小心地自包含,以便它只能更改目標目錄中擁有centos的文件的所有權。apache
  2. rsync以root身份執行複製文件。不理想,但如果一切都失敗了,可能是必要的。

引用自:https://unix.stackexchange.com/questions/324788