![](/img/trans.png)
[英]Apache2 user (www-data) permission denied for folder owned by www-data
[英]rsync over SSH preserve ownership only for www-data owned files
我使用rsync將Web文件夾結構從本地服務器復制到遠程服務器。 兩台服務器都是ubuntu linux。 我使用以下命令,它運行良好:
rsync -az /var/www/ user@10.1.1.1:/var/www/
本地系統和遠程系統的用戶名不同。 根據我的閱讀,可能無法保留所有文件和文件夾所有者和組。 沒關系,但我想保留兩個服務器上都存在的www-data用戶的所有者和組。
這可能嗎? 如果是這樣,我將如何做到這一點?
**編輯**
有人提到rsync能夠在這里保留遠程文件同步的所有權和組: http : //lists.samba.org/archive/rsync/2005-August/013203.html
**編輯2 **
由於這里有許多有用的評論和答案,我最終獲得了理想的效果。 假設源計算機的IP是10.1.1.2,目標計算機的IP是10.1.1.1。 我可以在目標機器上使用這一行:
sudo rsync -az user@10.1.1.2:/var/www/ /var/www/
這樣可以保留具有通用用戶名的文件的所有權和組,例如www-data。 請注意,使用不帶sudo
rsync
不會保留這些權限。
您還可以使用--rsync-path
選項在目標主機上sudo rsync:
# rsync -av --rsync-path="sudo rsync" /path/to/files user@targethost:/path
這允許您在targethost上作為user
進行身份驗證,但仍然可以通過sudo
獲得特權寫入權限。 您必須在目標主機上修改您的sudoers文件,以避免sudo請求您的密碼。 man sudoers
或運行sudo visudo
的指示和樣品。
您提到您希望保留www-data擁有的文件的所有權,但不保留其他文件的所有權。 如果這是真的,那么除非你實現chown
或第二次運行rsync
來更新權限,否則你可能會失敗。 沒有辦法告訴rsync只保留一個用戶的所有權。
也就是說,你應該閱讀rsync的--files-from
選項。
rsync -av /path/to/files user@targethost:/path
find /path/to/files -user www-data -print | \
rsync -av --files-from=- --rsync-path="sudo rsync" /path/to/files user@targethost:/path
我沒有測試過這個,所以我不確定管道查找輸出到--files-from=-
確切方法。 你無疑需要進行實驗。
我有類似的問題,並欺騙rsync命令,
rsync -avz --delete root @ xxxx:/ home // domains / site / public_html / / home / domains2 / public_html && chown -R wwwusr:wwwgrp / home / domains2 / public_html /
當rsync成功完成時,&&運行對文件夾的chown(無論rsync完成狀態如何,1x'&'將運行chown)
據我所知,如果你不是root用戶,你不能將文件chown
給別人。 因此,您必須使用www-data
帳戶進行rsync
,因為將使用指定的用戶作為所有者創建所有文件。 所以你需要事后chown
文件。
本地系統和遠程系統的root用戶不同。
這是什么意思? root用戶是uid 0.他們有什么不同?
對要復制的目錄具有讀取權限的任何用戶都可以確定哪些用戶名擁有哪些文件。 只有root才能更改正在寫入的文件的所有權。
您當前正在源計算機上運行該命令,該命令限制您對與user@10.1.1.1關聯的權限的寫入。 相反,您可以嘗試在目標計算機上以root身份運行該命令。 您在源計算機上的讀取權限不是問題。
所以在目標機器(10.1.1.1)上,假設源是10.1.1.2:
# rsync -az user@10.1.1.2:/var/www/ /var/www/
確保您的組在兩台計算機上都匹配。
另外,使用DSA或RSA密鑰設置對user@10.1.1.2的訪問權限,這樣可以避免密碼浮動。 例如,以目標計算機上的root身份運行:
# ssh-keygen -d
然后獲取文件/root/.ssh/id_dsa.pub
的內容並將其添加到源計算機上的~user/.ssh/authorized_keys
。 您可以從目標計算機以root身份ssh user@10.1.1.2
查看它是否有效。 如果您收到密碼提示,請檢查錯誤日志以查看密鑰無效的原因。
好吧,你可以完全跳過rsync的挑戰,只需通過tar隧道即可。
sudo tar zcf - /path/to/files | \
ssh user@remotehost "cd /some/path; sudo tar zxf -"
您需要像Graham描述的那樣設置SSH密鑰。
請注意,這會處理完整目錄副本,而不是像rsync這樣的增量更新。
這里的想法是:
我主要在本地使用windows,所以這是我用來與服務器同步文件的命令行(debian):
user@user-PC /cygdrive/c/wamp64/www/projects
$ rsync -rptgoDvhP --chown=www-data:www-data --exclude=.env --exclude=vendor --exclude=node_modules --exclude=.git --exclude=tests --exclude=.phpintel --exclude=storage ./website/ username@hostname:/var/www/html/website
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.