authorized_keysで任意のディレクトリに制限付きのrsync(rrsync)スクリプトを許可します


10

バックアップの自動化

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

特権Rsync

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

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

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

WebServerの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 /のみをバックアップできます

rsyncコマンドでBackupServerからバックアップしたいディレクトリを提供したいと思います。rsyncとまったく同じようにrrsyncを使用する可能性はありますか?

rsync -avze ssh --rsync-path='sudo rrsync' backupuser@111.222.33.44:/media/data  /backups/Server/

追加の説明

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

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

これはrrsyncでは機能しません。

承認されたソリューション

技術的にはこの質問に対する明確な回答ではありませんが、Gillesによって投稿されたソリューションは非常に優れたアプローチだと思います。バックアップする実際のディレクトリのすべてのビューのルートフォルダを作成しました。このため、認証を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

Authorized_keys

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

そして問題は?command=オプションin authorized_keysは、実行されるコマンドを1つだけ受け入れます。それだ。
Jakuje

私は質問を明確にしようとしました
ステファン

回答:


6

1つの可能性は、bindfsを使用して、専用ユーザーがバックアップできるようにするディレクトリの読み取り専用ビューを作成することです。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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.