Mencoba mengatur rsync chroot'd

10

Saya mencoba menyiapkan server cadangan. Saya ingin chroot setiap pengguna (klien) ke direktori home-nya, dan hanya mengizinkannya menggunakan sftp dan rsync .

Saya segera menemukan bahwa saya bukan satu-satunya yang mencoba melakukan sesuatu seperti ini, dan saya menemukan panduan ini dan mengikutinya. Jadi sekarang saya punya pengguna chroot dengan sftp saja.

Kemudian saya menemukan bahwa rsync perlu ssh untuk menelurkan dirinya di komputer lain, dan sftp itu tidak cukup. Memberi setiap pengguna login ssh adalah sesuatu yang ingin saya hindari sejak awal.

Adakah yang bisa memikirkan beberapa solusi yang mungkin?

Terima kasih,

Menandai

Mark R.
sumber
Lihatlah jawaban ini, saya menulis beberapa waktu lalu serverfault.com/questions/255084/...
user9517

Jawaban:

11

Solusi sftp juga memerlukan login ssh untuk semua orang, jadi Anda belum benar-benar kehilangan apa pun di sini. Memberi akses ssh tidak selalu menyiratkan akses shell penuh, misalnya, ini menunjukkan cara menggunakan authorized_keysfile ssh untuk memungkinkan cadangan melalui rsync sambil membatasi perintah yang tersedia hanya pada penerima rsync.

Bahkan, jika Anda memilih otentikasi berbasis kunci, daripada otentikasi kata sandi (yang harus Anda lakukan), Anda dapat menjalankan semuanya di bawah satu akun pengguna alih-alih membutuhkan banyak akun. Anda akan menggunakan kunci untuk mengidentifikasi pengguna jarak jauh, dan mengarahkan penerima rsync di direktori tertentu.

Sesuatu seperti ini, di authorized_keysfile Anda :

command="/usr/bin/rsync --server -a . /tmp/user1" ssh-rsa ... user1
command="/usr/bin/rsync --server -a . /tmp/user2" ssh-rsa ... user2

Seseorang yang menggunakan user1kunci pribadi akan membuat cadangan /tmp/user1, dan seseorang yang menggunakan user2kunci pribadi akan membuat cadangan /tmp/user2. Dan seterusnya...

larsks
sumber
Tautan hilang 404.
luckydonald
Saya telah memperbarui tautannya.
larsks
6

Jalankan biasa rsyncdari klien ke server jauh, tetapi tambahkan verbose switch tambahan:, SSH -vlalu terima Sending command. Anda akan melihat perintah yang dikirim klien ke server jauh:

rsync -avz -e'ssh -v -i /ssh-keys/clientprivate.key' --bwlimit=8000 --delete root@server:/path/ /backup/myserver/ 2>&1 | grep "Sending command"

Dalam kasus saya, itu

rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path

Tambahkan ini sebagai command="..."ke /home/USER/.ssh/authorized_keysfile server jauh sebagai @ larsks disebutkan. Tambahkan pengaturan keamanan tambahan, jika perlu:

no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

Bersama:

command="rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /backup/path",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

(Diambil dari tutorial yang sangat bagus http://en.positon.org/post/Rsync-command-restriction-over-SSH )

Arnis Juraga
sumber
Jawaban pertama bagus.
slm
2

Anda perlu menyediakan beberapa bentuk akses shell untuk dapat menggunakan rsync kecuali Anda terhubung langsung ke server rsync - port defaultnya adalah 873 (TCP).

Dari halaman manual rysnc :

Ada dua cara berbeda untuk rsync untuk menghubungi sistem jarak jauh: menggunakan program remote-shell sebagai transportasi (seperti ssh atau rsh) atau menghubungi daemon rsync secara langsung melalui TCP. Transport remote-shell digunakan setiap kali jalur sumber atau tujuan berisi satu titik dua (:) pemisah setelah spesifikasi host. Menghubungi daemon rsync secara langsung terjadi ketika sumber atau jalur tujuan berisi pemisah dua titik (: :) :) setelah spesifikasi host, ATAU ketika rsync: // URL ditentukan (lihat juga FITUR RSYNC-DAEMON lqUSING VIA A REMOTE-SHELL CONNECTIONrq bagian untuk pengecualian aturan terakhir ini).

Untuk memberikan akses shell terbatas, pertimbangkan panduan berikut . (Catatan: tautan asli sudah mati) Ringkasan:

Pengaturan ini menggabungkan fitur terbaik dari rsync, SSH, dan chroot. Rsync memberikan fleksibilitas dan efisiensi dalam transfer file, SSH melindungi data yang ditransfer, dan chroot melindungi data di server dari akses yang tidak sah. Dummysh membatasi akses ke rsync saja.

Sementara server rsync mengimplementasikan chroot, ia tidak memiliki perlindungan SSH yang sering diperlukan. Selain itu, membuka port server rsync tambahan menghadirkan risiko keamanan dan terkadang tidak memungkinkan baik secara teknis maupun politis. Sftp dan scp tidak memiliki fleksibilitas dan efisiensi yang disediakan oleh rsync, terutama ketika pohon direktori terlibat, seperti situs Web.

Atau lihat menggunakan rssh (ada panduan untuk mengatur rssh di sini ):

rssh adalah shell terbatas untuk digunakan dengan OpenSSH, hanya memungkinkan scp dan / atau sftp. Sekarang juga termasuk dukungan untuk rdist, rsync, dan cvs. Misalnya, jika Anda memiliki server yang hanya ingin Anda izinkan pengguna menyalin file melalui scp, tanpa menyediakan akses shell, Anda dapat menggunakan rssh untuk melakukan itu.

runlevelsix
sumber
1
Berita terkini adalah bahwa rssh tidak dikelola dan memiliki beberapa lubang keamanan yang aneh. Periksa kembali kondisi saat ini sebelum berinvestasi di dalamnya.
chutz
2
Anda dapat menggunakan skrip perl rrsyncalih-alih rssh, termasuk dalam paket rsync resmi. Lihat derek.simkowiak.net/backing-up-multiple-servers-with-rsnapshot
unhammer
0

Anda dapat menulis shell yang membungkus rsync.

lihat ide umum di sini: https://sixohthree.com/1458/locking-down-rsync-using-ssh

di dalam pembungkus cangkang Anda, Anda dapat melakukan apa yang Anda inginkan dan mungkin chroot pengguna.

Dalam kasus saya, saya perlu mengaktifkan akun virtual menggunakan pengguna * nix yang sama. Saya berhasil melakukannya dengan menggunakan shell semacam ini ditambah banyak baris dalam file Authorized_keys. Saya belum chroot pengguna tetapi saya telah menambahkan tingkat folder pengguna dalam perintah server rsync.

lihat proses pengguna secara berbeda menggunakan kunci ssh

quazardous
sumber
0

SFTP dengan kemampuan Rsync, tanpa shell

Anda dapat menggunakan LFTP + SFTP di lingkungan chroot dan mencapai hasil yang sama seperti menggunakan rsync, tanpa memberikan pengguna shell atau melakukan kustomisasi berat dalam ssh dengan pembungkus.

Ini lebih aman dan bisa jauh lebih cepat.

Harun
sumber