Rsyncの権限を保持することを理解しています。ただし、私の場合、ローカルコンピュータには、ファイルがWebサーバー用に必要なユーザーがいません。したがって、rsyncを実行するときは、所有者とグループがWebサーバー上のApacheである必要がありますが、ローカルコンピューター上のユーザー名である必要があります。助言がありますか?
私は何をすべきかを正確に説明するために明確にしたかったのです。
私のパーソナルコンピューター:ユーザーアカウント 'michael'で 'home'という名前のWebサーバー:ユーザーアカウント 'remote'とユーザーアカウント 'Apache'で 'server'という名前のコンピューター
現在の状況:私のWebサイトは、所有者が 'michael'の 'ホーム'にあり、所有者が 'Apache'の 'サーバー'にあります。 「home」はユーザー「michael」を使用する必要があり、「server」はユーザー「Apache」を使用する必要があります
タスク:「ホーム」上の私のウェブサイトを「サーバー」にrsyncしますが、「Apache」とグループ「Apache」によるすべてのファイル所有者がいます
問題:rsyncは、権限、所有者、およびグループを優先します。ただし、すべてのファイルがApacheの所有者である必要があります。所有者を推測しないことでユーザーの所有者が「サーバー」に置かれることはわかっていますが、そのユーザーは「リモート」であるため、「Apache」の代わりにそれを使用します。ユーザー「Apache」(これはいいでしょう)とはrsyncできませんが、セキュリティリスクを開放するつもりはありません。
解決方法に関する私の唯一のアイデア:各rsyncの後に手動でchown -Rとchgrp -Rを実行しますが、これは巨大なシステムであり、特にこれが本番環境に移行するため、これには長い時間がかかります。
誰でもこれを行う方法を知っていますか?
Rsyncに使用する現在のコマンド:rsync --progress -rltpDzC --force --delete -e "ssh -p22" ./ [email protected]:/ website
所有権を正しく取得するために受信側のマシンに組み込めるハックがあります。cronから「chmod -R Apache/website」を実行することは効果的ですが、かなり扱いにくいオプションですが、代わりにsecurelyrsync-over-ssh-as-Apacheを許可します。
このための専用のsshキーペアを作成します。
ssh-keygen -f ~/.ssh/Apache-rsync
次に〜/ .ssh/Apache-rsync.pubをウェブサーバーに移し、そこで〜Apache/.ssh/authorized_keysに入れ、許可するコマンドを慎重に指定します、そのようなもの、すべて1行で:
command="rsync --server -vlogDtprCz --delete . /website",from="IP.ADDR.OF.SENDER",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAABKEYPUBTEXTsVX9NjIK59wJ+fjDgTQtGwhATsfidQbO6u77dbAjTUmWCZjKAQ/fEFWZGSlqcO2yXXXXXXXXXXVd9DSS1tjE6vAQaRdnMXBggtn4M9rnePD2qlR5QOAUUwhyFPhm6U4VFhRoa3wLvoqCVtCV0cuirB6I45On96OPijOwvAuz3KIE3+W9offomzHsljUMXXXXXXXXXXMoYLywMG/GPrZ8supIDYk57waTQWymUyRohoQqFGMzuDNbq+U0JSRlvLFoVUZ5Piz+gKJwwiFwwAW2iNag/c4Mrb/BVDQAyEQ== [email protected]
次に、「ホーム」マシンでのrsyncコマンドは次のようになります。
rsync -av --delete -e 'ssh -i ~/.ssh/Apache-rsync Apache@server' ./ /website
この猫の皮をむく方法は他にもありますが、これは最も明確であり、回避策はほとんどありません。それは、Apacheとしてシェルを取得することを防ぎます。 Apacheとしてsshを許可することに本当に失敗している場合、他の方法があります...しかし、これは私が行った方法です。
ここでの参照: http://ramblings.narrabilis.com/using-rsync-with-ssh 、 http://www.sakana.fr/blog/2008/05/07/ secure-automated-rsync-over-ssh /
Rsync v.3.1.0以降にアクセスできる場合は、-chownオプションを使用します。
rsync -og --chown=Apache:apache [src] [dst]
ここで同様の質問からの回答の詳細: ServerFault:Rsyncコマンドの問題、所有者とグループの権限は変更されません
Rsyncの最新バージョン(少なくとも3.1.1)では、「リモート所有権」を指定できます。
--usermap=tom:www-data
トムの所有権をwww-data(別名PHP/Nginx)に変更します。 Macをクライアントとして使用している場合は、brewを使用して最新バージョンにアップグレードします。そして、サーバー上でアーカイブソースをダウンロードし、「作成」してください。
私はほとんどローカルでwindowsを使用しているので、これはサーバーとファイルを同期するために使用するコマンドラインです(debian):
user@user-PC /cygdrive/c/wamp64/www/projects
$ rsync -rptgoDvhnP --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
-n:実際にコマンドを実行するために、変更を加えずに試用を実行し、-nオプションを削除します。