34

rsyncの権限を保持することを理解しています。ただし、私の場合、ローカルコンピューターには、Webサーバー用にファイルを配置するために必要なユーザーがありません。したがって、rsyncを実行するときは、所有者とグループがWebサーバー上でapacheである必要がありますが、ローカルコンピューターではユーザー名である必要があります。助言がありますか?

何をする必要があるのか​​を明確に説明したかったのです。

私のパソコン:ユーザーアカウント「michael」で「home」という名前私のウェブサーバー:ユーザーアカウント「remote」とユーザーアカウント「apache」で「server」という名前

現在の状況:私のウェブサイトは、所有者「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" ./ remote@server.com:/website
4

5 に答える 5

73

rsync v.3.1.0 以降にアクセスできる場合は、--chownオプション を使用します。

rsync -og --chown=apache:apache [src] [dst]

ここの同様の質問からの回答の詳細: ServerFault: Rsync コマンドの問題、所有者とグループの権限は変更されません

于 2015-01-05T23:42:51.507 に答える
14

所有権を正しく取得するために受信側のマシンにまとめることができるハックがあります-cronから'chmod-R apache / website'を実行することは効果的ですが、かなり厄介なオプションです-代わりに、rsyncを安全に許可することをお勧めします-over-ssh-as-apache。

このために専用のsshキーペアを作成します。

ssh-keygen -f ~/.ssh/apache-rsync

次に、〜/ .ssh / apache-rsync.pubをWebサーバーに移動し、〜apache / .ssh / authorized_keysに配置して、許可されたコマンドを慎重に指定します

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== comment@email.address

そして、「ホーム」マシンでのrsyncコマンドは次のようになります。

rsync -av --delete -e 'ssh -i ~/.ssh/apache-rsync apache@server' ./ /website

この猫の皮を剥ぐ方法は他にもありますが、これが最も明確で、回避策が最も少ないと思います。これは、セキュリティ上の最大の懸念事項であるApacheとしてシェルを取得することを防ぎます。sshをApacheとして許可することに本当に行き詰まっている場合は、他の方法があります...しかし、これが私がやった方法です。

ここでの参照:http://ramblings.narrabilis.com/using-rsync-with-ssh、http //www.sakana.fr/blog/2008/05/07/securing-automated-rsync-over-ssh/

于 2012-06-25T20:58:16.787 に答える
11

rsync の最新バージョン (少なくとも 3.1.1) では、「リモート所有権」を指定できます。

--usermap=tom:www-data

所有権を www-data (別名 PHP/Nginx) に変更します。Mac をクライアントとして使用している場合は、brew を使用して最新バージョンにアップグレードします。サーバー上で、アーカイブ ソースをダウンロードし、それを「作成」します。

于 2014-12-03T10:16:50.767 に答える
7

を使用したソリューションrsync --chown USER:GROUP [src] [dst]は、リモート ユーザーが宛先ディレクトリへの書き込みアクセス権を持っている場合にのみ機能しますが、ほとんどの場合はそうではありません。

別の解決策は次のとおりです。

概要

(srcmachine)  (rsync)   (destmachine)
  srcuser    -- SSH -->   destuser
                             |
                             | sudo su jenkins
                             |
                             v
                          jenkins

rsync したいとしましょう:

  • から:
    • 機械:srcmachine
    • ユーザー:srcuser
    • ディレクトリ:/var/lib/jenkins
  • に:
    • 機械:destmachine
    • ユーザー: SSH 接続destuserを確立します。
    • ディレクトリ:/tmp
    • 最終ファイルの所有者: jenkins.

解決

rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp

ここでもっと読む:

https://unix.stackexchange.com/a/546296/116861

于 2019-10-11T10:18:31.060 に答える