Zfs: Atribut File

Dibuat pada 3 Mei 2011  ·  12Komentar  ·  Sumber: openzfs/zfs

Secara internal ZFS sudah memiliki semua kode untuk menangani atribut file dengan benar (tidak dapat diubah/hanya-baca/dll). Mereka bahkan harus diterapkan jika Anda mengimpor kumpulan dari platform yang berbeda dengan set atribut ini. Apa yang hilang adalah antarmuka yang diperlukan untuk ruang pengguna untuk memanipulasinya. Di Linux ini biasanya dilakukan dengan utilitas lsattr/chattr. Namun, atribut file yang didukung oleh alat ini hanya sebagian tumpang tindih dengan kumpulan atribut file Solaris. Itu berarti kita perlu menulis alat kita sendiri untuk memanipulasinya di Linux, atau kita perlu mem-port utilitas Solaris. Prasyarat untuk pekerjaan ini adalah membuat penangan kebijakan keamanan bekerja untuk memastikan hanya pengguna yang berwenang yang dapat memanipulasi atribut file.

Feature

Komentar yang paling membantu

@behlendorf Apakah ada dokumentasi atau manual yang mencantumkan atribut mana yang didukung dan apa yang mereka lakukan pada sistem ZFS?

Semua 12 komentar

Saya pikir mendukung atribut standar Linux seperti immutable, append-only, dll. di ruang FS_*_FL, bahkan jika nanti Anda memutuskan untuk mengimpor alat Solaris untuk hal yang sama, akan bermanfaat. Banyak sistem file berbeda di Linux mendukung antarmuka lsattr/chattr ioctl() untuk menyetel flag ini, meskipun beberapa sistem file menerjemahkan flag ke (hampir) nilai pada disk yang setara untuk digunakan sendiri.

Bukan tidak mungkin untuk menambahkan atribut baru ke FS_*_FL jika umumnya berguna (saya tidak tahu atribut apa yang dimiliki Solaris yang tidak dimiliki Linux), meskipun ruang itu sudah habis sehingga tidak dapat ditambahkan mau tak mau .

Saya setuju, beberapa bulan yang lalu saya melakukan terobosan awal untuk mencoba mendukung atribut Linux standar. Saya memutuskan pada saat itu bahwa immutable, append-only, dan nodump adalah satu-satunya atribut yang umum antara Solaris dan Linux. Sayangnya, saya tidak dapat menemukan waktu untuk menyelesaikan pekerjaan ini tetapi cabang pengembangan tersedia. Di bawah ini adalah daftar lengkap atribut zfs hanya untuk referensi.

 /*
 * Atribut level file tambahan, yang disimpan
 * di bagian atas zp_flags
 */
 #define ZFS_READONLY 0x0000000100000000ull
 #define ZFS_HIDDEN 0x0000000200000000ull
 #define ZFS_SYSTEM 0x0000000400000000ull
 #define ZFS_ARCHIVE 0x0000000800000000ull
 #define ZFS_IMMUTABLE 0x0000001000000000ull
 #define ZFS_NOUNLINK 0x0000002000000000ull
 #define ZFS_APPENDONLY 0x0000004000000000ull
 #define ZFS_NODUMP 0x0000008000000000ull
 #define ZFS_OPAQUE 0x00000010000000000ull
 #define ZFS_AV_QUARANTINED 0x0000020000000000ull
 #define ZFS_AV_MODIFIED 0x00000040000000000ull
 #define ZFS_REPARSE 0x00000080000000000ull
 #define ZFS_OFFLINE 0x0000100000000000ull
 #define ZFS_SPARSE 0x0000200000000000ull

Seperti yang saya sebutkan di milis, saya melihat ini, dan memikirkan pemetaan. Berikut adalah pemikiran saya untuk dipertimbangkan orang lain sebanyak atau sesedikit yang mereka inginkan:

Pemetaan yang jelas:
ZFS_IMMUTABLE <-> FS_IMMUTABLE_FL
ZFS_APPENDHANYA <-> FS_APPEND_FL
ZFS_NODUMP <-> FS_NODUMP_FL

Mungkin ide yang bagus untuk alasan kompatibilitas:
Jika ZFS_IMMUTABLE pernah disetel, hapus ZFS_NOUNLINK. Ini akan memungkinkan pengguna untuk menghapus ZFS_NOUNLINK dengan: chattr +i FILE ; chattr -i FILE

Ide gila 1:
Petakan ZFS_READONLY, ZFS_HIDDEN, ZFS_SYSTEM, dan ZFS_ARCHIVE dan crtime ke pengguna yang kompatibel dengan Samba. DOSATTRIB xattr.

Ide gila 2:
Menyetel FS_TOPDIR_FL pada direktori menyetel properti sehingga operasi mkdir() di direktori itu membuat set data ZFS baru. Ini akan berguna untuk /home, misalnya. Maka Anda tidak perlu mengaitkan perubahan ZFS ke useradd di Linux. Dan merupakan ide yang masuk akal untuk chattr +T /home di ext[234]. Bahkan jika Anda tidak mengaitkan FS_TOPDIR_FL ke sana, gagasan tentang properti ZFS untuk efek ini akan tetap berguna di /home.

Halo,

apakah ada kemajuan tentang topik ini? Saya baru-baru ini mengalihkan server media saya ke ZFS tetapi saya melewatkan kemungkinan untuk mengatur flag yang tidak dapat diubah. Saya ingin "melindungi" beberapa file, apakah ada solusi untuk mengatur bendera? Mungkin melalui program eksternal? Apakah ini akan berhasil?

Terima kasih!

@cyberius0 Tidak ada yang sedang mengerjakan ini. Tapi kalau ada yang mau, saya siap.

id ingin mencobanya jika seseorang akan mengarahkan saya ke arah yang benar. Saya membutuhkan fitur ini.

+1

Ide Gila 2 @rlaager terdengar sangat berguna. Saya ingin meminta itu menjadi sesuatu.

+1

Perlu dicatat bahwa antarmuka atribut file Linux menderita ras TOCTOU yang tidak terjadi pada Solaris. Alat userland di Solaris dan Linux melakukan modifikasi pada atribut file sebagai argumen dan atribut file disimpan di dalam inti dan di disk sebagai topeng bit, tetapi kesamaan berakhir di sana.

Di Solaris, daftar nilai mana yang akan berubah, disertai dengan nilai apa yang akan berubah, dikirim ke kernel. Tindakan mengambil bitmask saat ini, memodifikasinya dan menyimpannya kemudian diproses di bawah zp->z_lock. Ini memastikan bahwa semua perubahan bersifat atomik, yang merupakan cara yang tepat untuk melakukan sesuatu. Di Linux, tanggung jawab untuk modifikasi diserahkan kepada pengguna. Utilitas userland akan mendapatkan bitmask saat ini, membuat perubahan dan mengirim bitmask baru yang menggantikan yang lama. Karena userland tidak dapat mengunci file dari modifikasi, dua utas bersamaan yang menyentuh bit berbeda pada file yang sama dapat berupa perubahan keduanya atau hanya 1 perubahan.

zfsonlinux/zfs#1693 membuat ZFSOnLinux rentan terhadap masalah ini dengan menerapkan beberapa kode terjemahan antara antarmuka Linux dan antarmuka ZFS dari Solaris. Untungnya, modifikasi atribut file yang cepat seperti itu jarang terjadi, yang mungkin mengapa ini tidak terdeteksi ketika atribut file pertama kali diimplementasikan di Linux. Kita harus menghentikan antarmuka Linux dan mendukung antarmuka atom sesuai dengan apa yang dilakukan Solaris ketika kita mengimplementasikan alat modifikasi atribut file kita sendiri. Itu akan diperlukan untuk mengekspos berbagai atribut file ZFS yang kita warisi dari Solaris.

Dukungan untuk pemetaan yang jelas telah digabungkan dan akan menjadi bagian dari 0.6.3.

  • ZFS_IMMUTABLE <-> FS_IMMUTABLE_FL
  • ZFS_APPENDHANYA <-> FS_APPEND_FL
  • ZFS_NODUMP <-> FS_NODUMP_FL

Ini tidak mencakup atribut yang ada di Linux tetapi tidak untuk Illumos dan sebaliknya. Karena kita harus menangani kasus per kasus, saya pikir masuk akal untuk menutup masalah ini. Kami dapat membuka masalah baru untuk setiap atribut sesuai kebutuhan untuk membahas detail tentang bagaimana seharusnya berperilaku.

9d31779 Menerapkan Dukungan Atribut File
3b4f425 Refactor inode_owner_or_capable() pemeriksaan autotools

@behlendorf Apakah ada dokumentasi atau manual yang mencantumkan atribut mana yang didukung dan apa yang mereka lakukan pada sistem ZFS?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat