Izinkan skrip rsync (rrsync) terbatas untuk direktori arbitrer dengan otor_keys

10

Mengotomatiskan Cadangan

Saya ingin menerapkan solusi cadangan dengan menyalin data dari berbagai direktori dari server Web (WebServer) ke server cadangan lokal (BackupServer). Cadangan harus dijalankan tanpa pengawasan dan oleh karena itu saya ingin menggunakan otentikasi berbasis kunci dengan kunci pribadi tanpa kata sandi.

Rsync istimewa

Direktori yang ingin saya backup hanya dapat dibaca oleh pengguna yang memiliki hak istimewa. Saya ingin menggunakan rsync untuk menyalin file. Saya membuat pengguna cadangan khusus dan memungkinkan pengguna untuk mengeksekusi rsync dengan sudo tanpa diminta kata sandi dengan aturan visudo:

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

Pertimbangan Keamanan

Saya ingin meningkatkan keamanan dengan membatasi perintah yang dapat dilakukan pengguna cadangan dengan menambahkan daftar perintah ke file Authorized_key dari WebServer. Saya menginstal rrsync sebagaimana disebutkan dalam posting ini .

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

Rrsync mengharapkan subdirektori

Berbeda dengan rsync normal, rrsync mengharapkan subdirektori akan disediakan dalam file kunci resmi, seperti yang dijelaskan dalam posting blog ini

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

Pembatasan ini berfungsi tetapi itu hanya memungkinkan saya untuk membuat cadangan satu direktori tertentu yaitu / var / backup / client1 /

Saya ingin memberikan direktori yang ingin saya backup dari BackupServer dalam perintah rsync. Apakah ada kemungkinan untuk menggunakan rrsync persis seperti rsync, mis:

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

Klarifikasi tambahan

Saya menyadari bahwa bagian perintah = "..." di dalam otor_hosts memang membatasi perintah yang dapat dieksekusi untuk pengguna ini persis seperti yang disediakan, tetapi dengan rsync yang normal, saya dapat melakukan sesuatu seperti ini untuk menyediakan jalur yang saya ingin backup sebagai sebuah parameter:

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

Ini tidak berfungsi dengan rrsync.

Solusi yang Diterima

Meskipun secara teknis bukan jawaban pasti untuk pertanyaan itu, saya pikir solusi yang diposting oleh Gilles adalah pendekatan yang sangat bagus. Saya membuat folder root untuk semua tampilan direktori aktual yang ingin saya backup. Untuk alasan ini saya dapat dengan aman membatasi otentikasi hanya ke 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

Buat tampilan (hilang setelah reboot)

    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

Versi fstab

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

Kunci Resmi

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
Stefan
sumber
Dan pertanyaannya adalah? command=Opsi di authorized_keyshanya menerima satu perintah yang dijalankan. Hanya itu saja.
Jakuje
Saya mencoba untuk mengklarifikasi pertanyaan
Stefan

Jawaban:

6

Satu kemungkinan adalah membuat tampilan read-only dari direktori yang Anda inginkan agar pengguna khusus dapat membuat cadangan, dengan bindfs . Jangan gunakan sudo sama sekali; buat rrsyncsatu-satunya perintah yang diizinkan untuk pengguna ini. Pengaturan satu kali:

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

Pengaturan setelah setiap boot:

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

Atau baris yang sesuai di /etc/fstab:

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

Kemudian mendirikan pengguna cadangan untuk menjalankan rsyncpada /somewhere/backup-views.

Gilles 'SANGAT berhenti menjadi jahat'
sumber