rsync権限により、ローカルディレクトリへのリモートディレクトリのバックアップが拒否されました


11

タイトルに記載されているエラーが発生します。

私はこの同様の質問を見つけました:リモートマシンでroot権限でrsyncを実行します。それは私の質問に答えません。

私はリモートサーバーの管理者でありrsync、ローカルボックスへのファイルのバックアップに使用したいと思います。これが私のrsyncコマンドです:

$ rsync -avz me@myserver.com:/var/www/ /backups/Sites/MySite/

ほとんど動作します。ログインはキーペア経由です。パスワードを使用することはできません(編集:SSH経由でログインするため)。権限のため、いくつかのファイルは転送されません。これらの権限を変更したくありません。

ここにエラーがあります:

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

そのファイルの権限を変更したくありません。それ(およびそれを好む他の人)は(rootを除いて)読み取り可能であってはなりません。

これはcronジョブで実行する必要があり、私はrsyncコマンドのみを使用する単純な1行のソリューションを好みます。次の選択は、cronジョブから呼び出すことができるシェルスクリプトです。リモートマシンに手動でログインしてrootになることはできません(これが実行されているときはスリープ状態になるためです)。

rsyncを使用してローカルボックスにバックアップするにはどうすればよいですか?


ssh me@myserver.com "cat /var/www/webapp/securestuff/install.php"> localfileのようなものを見せていただけますか?
Florenz Kley

@Florenz Kley:私はあなたのコメントを理解していません
MountainX

ファイルを読み取れることを示し、動作するrsyncコマンドを示します:-)。grawityのオプション#2がおそらく最善の策です。
Florenz Kley、2012年

@Florenz Kley:ssh me@myserver.com "echo mypassword | sudo -S cat /var/www/webapp/securestuff/install.php"> localfile
MountainX

わかったrsync: send_files failed to open "/cygdrive/...": Permission denied (13)。したがって、私のソースコンピュータはWindows cygwinでした。少し異なる状況ですが、後世のために、私の解決策はcmd.exeを右クリックして[ 管理者として実行 ] でした。
ボブスタイン

回答:


8

許可はあなたは、あなたがそうでなければ読むことができないファイルをバックアップすることはできませんでしょういずれかする必要が変更されたり、ルートによってオーバーライド

より詳細なオプション:

  • root@myserver.com直接のようにrsyncすることで許可を上書きします。(

  • ...またはサーバー上でsudoを設定して、サーバーrsync側コンポーネントをパスワードなしで実行できるようにします。

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    そして

    rsync --rsh="ssh me@myserver.com sudo" -avz /var/www/ /backups/...
    
  • サーバーに専用の「website-backup」アカウントを作成します。ファイルの権限を変更して、「website-backup」アカウントで読み取り可能にします。ACLを使用できますsetfacl。このアカウントを他の目的で使用しないでください。

    rsync -avz website-backup@myserver.com:/var/www/ /backups/sites/mysite/
    
  • / var / www /を暗号化されたtarballにダンプするスクリプトをサーバーに書き込みます。繰り返しますが、これはrootとして(crontabを介して)、またはそのスクリプトにパスワードを要求しないようにsudoを構成することによって行うことができます。例えば:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r mountainx@example.com
    

    毎回tarball全体をプルすることでバックアップが行われるため、大規模なサイトでは非効率になる可能性があります。

    ssh me@myserver.com "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    パスワード要件は、sudoersを編集することで削除されます

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    

ありがとう。良い提案。おそらくどちらかが私のために働くでしょう。superuser.com/questions/270911/…で解決策を使用することも検討しています。その潜在的な副作用を理解できる場合。
MountainX

ところで、私は最後の2つの選択肢のどちらかを意味しました。SSHを介してrootとしてログインすることは、サーバーでは許可されていません。
MountainX

@MountainX:「rsync via sudo」を別の選択肢として分離しました。それもうまくいくかもしれません。
user1686

ありがとう!「sudoを介したrsync」が私の好みの選択です。私はあなたの提案を試みます。サーバー上のUbuntuでvisudoを使用してこれを実装する必要があるようです。私はvisudoをあまりいじっていませんが、あなたは私を始めるのに十分なほど私を与えてくれました。再度、感謝します。
MountainX

5

リモートホストでrsyncデーモンを実行するには

uidルート

/etc/rsyncd.confファイル。

これにより、デーモンはCAP_DAC_OVERRIDE機能を使用し、権限/所有権を変更せずにローカルファイルシステムを読み取ることができます。

バックアップを作成するだけの場合は、rsyncを読み取り専用モードに設定することをお勧めします。

読み取り専用= true


0

ファイルが読み取り専用の場合は、ファイルシステムからファイルを読み取ってバックアップするアクセス権rootが必要rootです。 rsyncrawデバイスからではなく、ファイルシステムからファイルを読み取っています。

dumpddおよびファイルではなくパーティションをコピーする同様のバックアップを除いて、バックアッププログラムはファイルシステムからファイルを読み取ります。バックアップユーティリティは、それらを実行するために使用されるユーザーIDの権限がアクセスを妨げているファイルの読み取りとバックアップに失敗します。これはあなたが遭遇しているケースです。

ほとんどの場合、バックアップソフトウェアを信頼して、すべてのデータを読み取れるようにする必要があります。これは、すべてのデータでバックアップメディアを信頼する必要があることも意味します。場合によっては、一部のファイルをバックアップから除外し、別の方法を使用してそれらのコンテンツをバックアップすることができます。

編集:データをアーカイブする(すべての権限をコピーする)ため、両方のサーバーでrootアクセスが必要になります。これをバックアップとして実行する場合は、rsyncを使用してファイルを読み取るが、ファイルを独自のディレクトリツリーに格納するBackupPCのようなソリューションを確認することができます。


rsync rootアクセスを与える方法があります。私はそれらを知りません。私が求めているのは、これらのファイルをバックアップするためのrsync rootアクセスを与える方法です。たぶん、「リモートマシンでroot権限でrsyncを実行する」への回答を再検討して、それが理解できるかどうかを確認する必要があるかもしれません...
MountainX
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.