Openrsync - Implementasi rsync oleh tim OpenBSD
(github.com/kristapsdz)- openrsync adalah implementasi rsync dengan lisensi BSD (ISC), dan saat ini telah digabungkan ke base OpenBSD
- Kompatibel dengan rsync terbaru dan pengujian menggunakan rsync 3.1.3, tetapi dapat berjalan selama mendukung protokol 27
- Karena tidak menerima seluruh argumen baris perintah rsync, melainkan hanya sebagian argumen, saat menggunakan openrsync dan rsync bersama-sama harus memakai flag yang didukung oleh kedua sisi
- Sistem operasi yang didukung secara resmi adalah OpenBSD, dan juga disertakan glue portabilitas agar dapat dikompilasi dan dijalankan di sistem UNIX lain
- Dokumentasi standarnya berupa halaman manual; detail protokol ada di rsync(5) dan rsyncd(5), sedangkan dokumentasi utilitas ada di openrsync(1)
- Proyek ini ditulis sebagai bagian dari rpki-client(1) untuk OpenBSD, dan didanai oleh NetNod, IIS.SE, SUNET, dan 6connect
- Instalasi dilakukan di sistem UNIX umum dengan
./configure,make,make install, dan tidak bertabrakan dengan instalasi rsync yang sudah ada - Algoritme rsync dibagi menjadi sender dan receiver; sender membuat daftar file sumber dan metadata, lalu kedua sisi mengurutkan nama file secara leksikografis untuk mereferensikan entri berdasarkan posisi
- Sinkronisasi file biasa akan dilewati jika ukuran file dan waktu modifikasi sama; jika berbeda, data yang berubah direkonstruksi menggunakan hash cepat tipe Adler-32 4-byte dan hash MD4 lambat 16-byte untuk setiap blok berukuran tetap
- Ukuran blok secara default adalah nilai akar kuadrat dari ukuran total file yang dibulatkan, dengan ukuran minimum 700 B, dan hasil akar kuadrat untuk alasan yang tidak diketahui dibulatkan naik ke kelipatan 8
- Sesi dibagi menjadi klien yang dijalankan pengguna dan proses server yang berjalan di remote; server dapat dijalankan on-demand melalui ssh(1) atau beroperasi sebagai daemon jaringan yang berjalan terus-menerus
- Berbeda dengan generator pada rsync yang berjalan sebagai proses terpisah di samping receiver, openrsync menggabungkan generator dan receiver dalam satu proses dan merespons permintaan baca/tulis melalui event loop
- Dari sisi keamanan, pledge(2) milik OpenBSD membatasi operasi sistem menurut mode eksekusi, dan unveil(2) hanya mengizinkan akses filesystem di bawah direktori tujuan
- Dalam mode server, seed hash MD4 dibuat dengan arc4random(3), bukan time(3)
- Dapat diporting ke Linux (glibc·musl), FreeBSD, NetBSD, Mac OS X, dan OmniOS, dan GitHub CI menguji arsitektur x86_64, aarch64, s390x, tetapi kendala utama portabilitas adalah menyesuaikan fitur keamanan yang setara dengan pledge dan unveil milik OpenBSD
1 komentar
Komentar Hacker News
Penjelasan bahwa jika server jarak jauh adalah sumber atau tujuan, klien membuat child dengan
fork(2), lalu memulai serveropenrsyncdi host jarak jauh melaluissh(1), dan setelah itu klien serta server berkomunikasi lewat pipesocketpair(2), terasa ambigu tentang bagaimana tepatnya itu bekerjaMungkin maksudnya child hasil fork meneruskan koneksi ke parent melalui sepasang socket, atau menghubungkan stdin/stdout ke “pipe” socket pair lalu
execsshTapi ini seperti mengatakan pergi ke bandara dengan mobil lalu bilang pergi ke Australia dengan mobil
Sejak
openrsyncdiumumkan saya sudah memakainya di sana-sini, dan seiring waktu jelas makin bagus. Saya menantikan saat ia bisa dipakai sepenuhnyaNamun ada satu hal yang tidak cocok dengan Samba
rsyncuntuk pola penggunaan saya:openrsync --rsync-path=openrsync -av -e ssh /etc/services example.com:/tmp/servicesPerilaku yang saya harapkan adalah membuat file
/tmp/servicesdi remote, tetapi yang terjadi justru membuat/tmp/services/servicesMirroring direktori yang umum seperti
-av -e ssh /path/to/src/ example.com:/path/to/dst/bekerja seperti Sambarsyncrsync“biasa”. Untuk menyinkronkan isinya saja, sepertinya perlu trailing slash setelahservicesSunting: ternyata
rsync“biasa” saya juga adalahopenrsyncdi macOS/tmp/servicessudah ada di tujuanSalah satu bagian paling membingungkan dari
rsyncadalah cara menangani direktori dan trailing slashrsync, saya paham dorongan itu, tetapi membuatserviceskedua jauh lebih masuk akal dan merupakan default yang lebih amanJika ada kesempatan mengubah default
rsyncke arah yang tidak terlalu gila, kita harus menyelamatkan generasi mendatang dari kebingungan iniMelihat lonjakan mendadak commit vibe coding di codebase
rsyncbelakangan ini, lengkap dengan regresi yang ditimbulkannya, ini kabar yang sangat baikrsyncselalu kokoh jadi saya sempat mengabaikan komentar ini, tetapi setelah upgrade skrip backup saya benar-benar rusakIsu-isu terbaru di GitHub merangkum banyak bug yang masuk dalam 2 patch terakhir, termasuk commit sekitar 9 ribu baris yang tampaknya nyaris tak ada gunanya
LLM memang membuat penulisan kode jadi lebih cepat dan mudah, tetapi yang selalu penting adalah berpikir. Saya tidak mengerti kenapa perangkat lunak yang sudah setua dan seterpercaya ini malah dirusak
Bagi yang butuh latar belakang pengembangan paket ini, proyek ini saat ini sedang dikembangkan sebagai bagian dari validator RPKI
https://medium.com/@jobsnijders/a-proposal-for-a-new-rpki-va...
Ada juga implementasi Go dari Michael Stapelberg / tim Gokrazy: https://github.com/gokrazy/rsync
https://github.com/gokrazy/rsync/graphs/contributors
Inti dari pekerjaan porting yang sebenarnya adalah menyamai fitur keamanan yang disediakan oleh
pledge(2)danunveil(2)milik OpenBSD. Keduanya merupakan elemen krusial dari fungsi sistemTanpa fitur-fitur ini, sistem akan menerima data arbitrer dari jaringan publik
https://justine.lol/pledge/
Di Alpine Linux edge saya tidak melihat
pledge. Apakah ada yang pernah menguji Pledge di Linux? Apakah saya salah memahami risiko memakaiopenrsynctanpapledge, atau artikel ini memang hanya untuk pengguna OpenBSD?pledge,unveil, atau Capsicum. Yang ada adalahcgroups, namespace, dan berbagai hal lain yang harus digabungkan untuk melakukan hal serupaLinux dibangun bukan sebagai fitur isolasi dengan konsep utuh melalui syscall dan path kernel tertentu, melainkan sebagai sekumpulan sistem yang ditambahkan berulang kali lalu saling digabung untuk membentuk sandboxing atau pembatasan kemampuan
Belakangan tampaknya Linux juga punya fitur baru seperti Landlock, tetapi mungkin itu pun dibangun di atas komponen dasar Linux yang sudah ada alih-alih dibuat benar-benar dari nol
Kata “berantakan” di sini mungkin berarti tersebar di mana-mana. Terlalu banyak cara untuk mengunci sesuatu, dan memilih mana yang terbaik mengharuskan Anda menggali dalam tiap subsistem, kontras dengan cukup memakai 1–2 syscall sederhana
Dan di bawahnya tertulis: “Mungkin bisa dengan Capsicum milik FreeBSD, tetapi fasilitas keamanan Linux berantakan dan perlu sentuhan ahli untuk benar-benar diamankan”
Jadi portable di sini berarti bisa dikompilasi dan dijalankan, bukan berarti memiliki fitur keamanan yang sama
Akan bagus kalau
pledge/unveilmasuk ke Linux upstream, tapi saya tidak berharap banyakBerbeda dari pernyataan “tanpa fitur-fitur ini sistem menerima data arbitrer dari jaringan publik”,
pledgeatauunveiltidak mengubah apakah data arbitrer diterima atau tidak. Keduanya membatasi hal-hal yang bisa dilakukan proses yang sudah ditembus kerentananDi bagian
Securityini dijelaskan dengan benar, jadi saya tidak tahu dari mana ungkapan itu berasalVersi ini adalah yang dipakai mulai macOS 15.0
Sunting: lucunya memang dimasukkan di 15.0, tetapi perubahan yang memutus kompatibilitas mundur sepertinya baru benar-benar dilepas di 15.4. https://apple.stackexchange.com/a/479297
Karena belum mendukung protokol
rsyncterbaru, belum ada dukungan timestamp 64-bit, sehingga pada filesystem baru metadata sebenarnya tidak bisa disinkronkanSaya penasaran kenapa namanya begitu.
Openrsyncterdengar seperti alternatif open source untuk program closed-sourcePadahal
Rsyncasli juga GPL, bukan? Apakah maksudnya hanya “lebih terbuka” karena lisensinya lebih permisif?open, sepertiopenssh,openbgpd,openntpd,opensmtpd