Authorized_keysを使用して、任意のディレクトリに制限されたrsync(rrsync)スクリプトを許可します。

Authorized_keysを使用して、任意のディレクトリに制限されたrsync(rrsync)スクリプトを許可します。

自動バックアップ

Webサーバー(WebServer)のさまざまなディレクトリからローカルバックアップサーバー(BackupServer)にデータをコピーするバックアップソリューションを実装したいと思います。バックアップは無人で実行する必要があるため、鍵ベースの認証とパスワードのない秘密鍵を使用したいと思います。

権限Rsync

バックアップするディレクトリは、権限を持つユーザーだけが読み取ることができます。 rsyncを使ってファイルをコピーしたいです。専用のバックアップユーザーを作成し、ユーザーがvisudoルールを使用してパスワードの入力を求めずにsudoを使用してrsyncを実行できるようにしました。

backup-user ALL = NOPASSWD: /usr/bin/rsync

セキュリティに関する考慮事項

バックアップユーザーが実行できるコマンドを制限するために、Webサーバーのauthorized_keysファイルにコマンドリストを追加してセキュリティを強化したいと思います。述べたようにrrsyncをインストールしました。この投稿

command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...

Rrsyncにはサブディレクトリが必要です。

通常のrsyncとは異なり、rrsyncはここで説明されているように、認証キーファイルのサブディレクトリを期待します。ブログ投稿

command="/usr/share/rsync/rrsync  /var/backup/client1/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa 

この制限は機能しますが、/var/backup/client1/という1つの特定のディレクトリのみをバックアップできます。

rsyncコマンドにBackupServerでバックアップしたいディレクトリを提供したいと思います。たとえば、rsyncのようにrrsyncを使用できますか?

rsync -avze ssh --rsync-path='sudo rrsync' [email protected]:/media/data  /backups/Server/

追加のガイドライン

Authorized_hostsのcommand = "..."部分がそのユーザーの実行可能なコマンドを提供されたコマンドに制限していることを認識していますが、通常のrsyncを使用すると、次のタスクを実行してバックアップしたいパスにパラメータを提供できます。

command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"

rrsyncでは動作しません。

許容されるソリューション

これは技術的に質問に対する明確な答えではありませんが、Gilesが投稿したソリューションは非常に良いアプローチだと思います。バックアップしたい物理ディレクトリのすべてのビューのルートフォルダを作成しました。したがって、認証をrrsyncにのみ安全に制限できます。

One time todo

    sudo mkdir /mnt/Backups-Rsync-Readonly
    sudo chown -R rsync-backup /mnt/Backups-Rsync-Readonly
    sudo mkdir /mnt/Backups-Rsync-Readonly/VAR-WWW
    sudo mkdir /mnt/Backups-Rsync-Readonly/MySQL-Backups
    sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/
    sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/MySQL-Backups
    sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/VAR-WWW

ビューの作成(再起動すると消えます)

    sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /var/www /mnt/Backups-Rsync-Readonly/VAR-WWW
    sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /MySQL-Dumps /mnt/Backups-Rsync-Readonly/MySQL-Backups

Fstabバージョン

    /home/stefan/Scans    /mnt/Backups-Rsync-Readonly/VAR-WWW fuse.bindfs perms=0000:u=rD,force-user=rsync-backup 0   0

認証キー

command="/usr/bin/rrsync -ro /mnt/Backups-Rsync-Readonly",from="192.168.0.10",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB

答え1

1 つの可能性は、以下を使用して、専用ユーザーがバックアップできるようにするディレクトリの読み取り専用ビューを作成することです。ファイルシステムバインディング。 sudoをまったく使用しないでください。rrsyncそのユーザーを許可するコマンドのみを生成します。ワンタイム設定:

mkdir /somewhere/backup-views /somewhere/backup-views/dir1 /somewhere/backup-views/dir2
chmod 700 /somewhere/backup-views
setfacl -m u:rx:backup-user /somewhere/backup-views

起動するたびに設定:

bindfs -o perms=a+r-w /actual/dir1 /somewhere/backup-views/dir1
bindfs -o perms=a+r-w /actual/dir2 /somewhere/backup-views/dir2

または対応する行/etc/fstab

/actual/dir1 /somewhere/backup-views/dir1 bindfs perms=a+r-w
/actual/dir2 /somewhere/backup-views/dir2 bindfs perms=a+r-w

次に、バックアップユーザーrsyncがで実行されるように設定します/somewhere/backup-views

関連情報