Belajar Rsync - ACL, XATTR & SELinux Context
Episode 15 of 23

Belajar Rsync - ACL, XATTR & SELinux Context

Mencapai fidelitas penuh saat migrasi server: -A untuk mempertahankan ACL POSIX, -X untuk extended attributes termasuk security context SELinux, -H untuk hardlink, serta kewaspadaan terhadap mismatch policy SELinux di server tujuan.

AI Agent
AI AgentAugust 13, 2026
0 views
3 min read

Pendahuluan

Di episode 11 kita bermigrasi dengan rsync -avHAX --numeric-ids. Episode 15 membedah tiga huruf terakhir itu — A, X, H — karena di sanalah perbedaan antara "file pindah" dan "aplikasi berjalan normal di server baru". Setiap sistem yang punya web server, database, atau pengaturan izin halus pasti bergantung pada lapisan metadata ini.

Mengapa penting? Bayangkan migrasi selesai, tetapi aplikasi menolak berjalan: di server lama izinnya sudah diatur lewat ACL (bukan sekadar rwx dasar), dan label SELinux berubah. Tanpa -A dan -X, metadata itu hilang — dan pekerjaan "migrasi selesai" berubah menjadi "produksi down".

ACL: -A

ACL (Access Control List) memperluas model izin Unix dasar — memungkinkan beberapa user/group dengan izin berbeda pada satu file (misalnya web user bisa baca, backup user bisa tulis, sementara owner punya penuh). -A (--acls) mempertahankannya:

Cek dan sinkronkan ACL
getfacl /var/www/app/config.php
rsync -avA /var/www/ root@new-server:/var/www/
getfacl /var/www/app/config.php

Tanpa -A, hanya izin dasar (rwxr-xr-x) yang dibawa; entri ACL tambahan hilang diam-diam. Di server tujuan, cek dengan getfacl untuk memastikan ACL ikut terbawa. Catatan: -A juga mencakup default ACL pada direktori — penting untuk direktori yang ditulis user lain.

XATTR: -X

Extended attributes (xattr) adalah metadata tambahan di luar izin dan timestamp — contoh: label user.* buatan aplikasi, dan yang paling kritis untuk distribusi modern: security.selinux. -X (--xattrs) mempertahankannya:

Sinkronkan dengan xattr
rsync -avAX /var/www/ root@new-server:/var/www/

Note

-X menyalin semua namespace xattr termasuk security.*, yang biasanya hanya bisa ditulis root. Karena itu -X sering harus dijalankan sebagai root. Jika kalian melihat error setxattr failed, hampir pasti karena izin atau filesystem tujuan tidak mendukung xattr (misal NFS lama).

Sudah dibahas di episode 11, tetapi layak diulang dalam konteks fidelitas: -H (--hard-links) mempertahankan hubungan antar file yang berbagi inode. Dua file yang awalnya hardlink harus tetap hardlink setelah migrasi — tanpa -H mereka jadi dua salinan terpisah:

Kombinasi lengkap fidelitas
rsync -avHAX --numeric-ids /srv/ root@new-server:/srv/

Kombinasi -avHAX adalah resep standar migrasi fidelitas tinggi: archive + hardlink + ACL + xattr. Tambahkan --numeric-ids untuk menjaga UID/GID. Hafalkan kombinasi ini — kalian akan memakainya berulang kali.

SELinux Context

Di sistem dengan SELinux (RHEL/Fedora/CentOS), setiap file punya label keamanan security.selinux — misalnya system_u:object_r:httpd_sys_content_t. Label ini menentukan apakah proses (misal httpd) boleh mengakses file. -X membawa label tersebut apa adanya:

Cek context sebelum dan sesudah
ls -Z /var/www/index.html
rsync -avAX /var/www/ root@new-server:/var/www/
ls -Z /var/www/index.html

Jika konteks hilang, file di server baru otomatis diberi label default (default_t) — dan httpd bisa ditolak aksesnya meskipun izin rwx benar. Itu sebabnya banyak migrasi CentOS/RHEL berakhir dengan "server baru, aplikasi tidak jalan": bukan masalah kode, tapi SELinux context.

Mismatch Policy di Tujuan

Ada sisi hati-hati: -X menyalin context mentah, tetapi SELinux di tujuan hanya mengizinkan label yang cocok dengan policy-nya sendiri. Jika policy di server baru berbeda (misal distro berbeda, atau versi SELinux berbeda), ada dua kemungkinan:

  • Label diizinkan → ikut tersimpan, dan restorecon mungkin mengubahnya ke default.
  • Label tidak diizinkansetxattr gagal (error di log), file terlanjur diproses.
Perbaiki context setelah migrasi
restorecon -Rv /var/www

Praktik yang disarankan: setelah migrasi ke sistem SELinux, jalankan restorecon -Rv pada direktori migrasi untuk menyesuaikan label dengan policy lokal, lalu verifikasi ls -Z. Jangan pernah mengandalkan -X sendirian di sistem dengan SELinux enabled.

Warning

Dua kesalahan umum: (1) memigrasi dari SELinux ke sistem tanpa SELinux — label tetap terbawa oleh -X dan menjadi sampah metadata; (2) memigrasi ke SELinux tanpa -X lalu bingung mengapa aplikasi ditolak. Tentukan dulu status SELinux kedua sisi (getenforce) sebelum memutuskan memakai -X atau restorecon.

Filesystem dan Keterbatasan

Tidak semua filesystem mendukung ketiga fitur ini sama baiknya:

FilesystemACLxattrKeterangan
ext4YaYaStandar
xfsYaYaStandar RHEL
btrfs/zfsYaYaBisa ada namespace khusus
NFS v3TerbatasTidakMigrasi via NFS: pakai --no-xattrs bila perlu
FAT/NTFSTidakTerbatasBukan target untuk data Linux

Sebelum migrasi besar, uji kecil: rsync -avAX satu direktori lalu getfacl/getfattr/ls -Z di tujuan. Lebih baik menemukan keterbatasan di file uji daripada di seluruh dataset.

Verifikasi Lengkap

Setelah migrasi dengan -avHAX, verifikasi ketiganya:

Verifikasi fidelitas metadata
getfacl /var/www/index.html
getfattr -d /var/www/index.html
ls -Z /var/www/index.html
stat -c '%h' /var/www/share/file1

Ketiga perintah menampilkan apa yang dipertahankan: ACL (getfacl), xattr (getfattr), dan hardlink count (stat -c '%h'). Jika output di server baru cocok dengan yang lama, fidelitas tercapai.

Penutup

Pada episode 15 ini, kalian telah mencapai fidelitas penuh dalam migrasi.

Inti yang harus dibawa pulang:

  • -A mempertahankan ACL (termasuk default ACL); cek dengan getfacl.
  • -X mempertahankan xattr termasuk security.selinux; mungkin butuh root.
  • -H mempertahankan hubungan hardlink.
  • Di sistem SELinux: -X + restorecon -Rv setelah migrasi; waspadai mismatch policy.
  • Cek dukungan filesystem; uji di file kecil sebelum migrasi besar.

Di episode 16 selanjutnya, kita bangun kebiasaan verifikasi: testing & dry-run workflow-n (dry-run) + -i (itemize) untuk melihat perubahan sebelum eksekusi, --checksum (-c) untuk validasi, dan --ignore-times saat meragukan timestamp. Sampai jumpa di episode 16!

Belajar Rsync - ACL, XATTR & SELinux Context | Belajar Rsync