Bagaimana cara kerja izin / atribut file? Kernel-level, FS-level atau keduanya?

8

Sebuah pertanyaan yang muncul di benak saya sebelumnya: apakah izin file / atribut OS- (dan karenanya kernel-) tergantung atau apakah mereka tergantung pada filesystem? Sepertinya saya bahwa alternatif kedua adalah yang lebih logis, namun saya tidak pernah mendengar tentang reiserfsizin file, misalnya: hanya "Unix file permissions". Di sisi lain, mengutip dari artikel Wikipedia :

Ketika versi baru Windows keluar, Microsoft telah menambah inventaris atribut yang tersedia pada sistem file NTFS

yang tampaknya menunjukkan bahwa atribut file Windows entah bagaimana terikat pada sistem file.

Bisakah seseorang tolong beri saya pencerahan?

Joseph R.
sumber

Jawaban:

7

Baik kernel dan sistem file memainkan peran. Izin disimpan dalam sistem file, sehingga perlu ada tempat untuk menyimpan informasi dalam format sistem file. Izin ditegakkan dan dikomunikasikan ke aplikasi oleh kernel, sehingga kernel harus menerapkan aturan untuk menentukan apa artinya informasi yang tersimpan dalam sistem file.

"Izin file Unix" merujuk pada sistem izin tradisional yang melibatkan tiga tindakan (baca, tulis, jalankan) yang dikendalikan melalui tiga tipe peran (pengguna, grup, lainnya). Tugas filesystem adalah menyimpan 3 × 3 = 9 bit informasi. Tugas kernel adalah menafsirkan bit-bit ini sebagai izin; khususnya, ketika suatu proses mencoba operasi pada suatu file, kernel harus menentukan, mengingat pengguna dan grup bahwa proses itu berjalan, bit izin file, dan operasi yang diminta, apakah akan mengizinkan operasi. ("Izin file Unix" juga biasanya termasuk bit setuid dan setgid , yang tidak sepenuhnya merupakan izin.)

Sistem unix modern dapat mendukung bentuk izin lainnya. Sebagian besar sistem unix modern (Solaris, Linux, * BSD) mendukung daftar kontrol akses yang memungkinkan pemberian izin baca / tulis / excecute untuk lebih dari satu pengguna dan lebih dari satu grup untuk setiap file. Sistem file harus memiliki ruang untuk menyimpan informasi tambahan ini, dan kernel harus menyertakan kode untuk mencari dan menggunakan informasi ini. Ext2, reiserfs, btrfs, zfs, dan sebagian besar format sistem file unix modern lainnya menentukan tempat untuk menyimpan ACL tersebut. Mac OS X mendukung serangkaian ACL yang berbeda yang mencakup izin non-tradisional seperti "append" dan "create subdirectory"; format sistem file HFS + mendukungnya. Jika Anda memasang volume HFS + di Linux, ACL ini tidak akan diberlakukan karena kernel Linux tidak mendukungnya.

Sebaliknya, ada sistem operasi dan sistem file yang tidak mendukung kontrol akses. Sebagai contoh, FAT dan varian dirancang untuk sistem operasi pengguna tunggal dan media yang dapat dilepas dan izinnya terbatas untuk membaca / membaca-menulis dan disembunyikan / terlihat. Ini adalah izin yang diberlakukan oleh DOS . Jika Anda memasang sistem file ext2 pada DOS, itu tidak akan memberlakukan izin ext2. Sebaliknya, jika Anda mengakses sistem file FAT di Linux, semua file akan memiliki izin yang sama.

Versi Windows yang berurutan telah menambahkan dukungan untuk lebih banyak jenis izin. Sistem file NTFS diperluas untuk menyimpan izin tambahan tersebut. Jika Anda mengakses sistem file dengan izin yang lebih baru pada sistem operasi yang lebih lama, OS tidak akan tahu tentang izin yang lebih baru ini dan karenanya tidak akan menegakkan mereka. Sebaliknya, jika Anda mengakses sistem file yang lebih lama dengan sistem operasi yang lebih baru, itu tidak akan berisi izin baru dan terserah pada OS untuk memberikan cadangan yang masuk akal.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
"Tugas kernel adalah menafsirkan bit-bit ini sebagai izin; khususnya, ketika suatu proses mencoba operasi pada file, kernel harus menentukan [...]" Tidak berarti bahwa kernel secara teori dapat diubah menjadi abaikan semua itu dan baca datanya? (Semacam akses disk langsung) Atau ada sesuatu yang mencegahnya?
Overmind
@ Luar Tentu saja. Kode kernel memiliki akses ke semuanya. Disk tidak tahu apa-apa tentang proses, pengguna, atau izin. Kernel memberitahu disk “beri saya blok 232876” dan disk membalas dengan isi blok. Menentukan proses mana yang dapat mengakses blok mana (atau bagian mana dari blok) yang merupakan tugas kernel.
Gilles 'SO- berhenti menjadi jahat'
4

Dalam rangka untuk pengguna hak-hak tertentu baik kernel dan filesystem harus mendukung mereka. Jika filesystem bahkan tidak mendukung hak akses paling dasar maka kode filesystem harus memalsunya (misalnya dengan opsi mount umaskuntuk vfat).

Hauke ​​Laging
sumber
3

Pemahaman saya adalah bahwa kernel mengimplementasikan inode di VFS. inode berisi informasi izin (UNIX dan ACL) bersama dengan metadata lain dan sistem file dapat memperluas inode untuk menambahkan fitur. Jika Anda tertarik, baca di Linux VFS - hal-hal berdarah jika Anda bukan seorang programmer sistem.

Mel Boyce
sumber
1

Sebagai aturan umum, izin file dan atribut file disimpan ke filesistem [cara yang tepat tergantung pada filesystem yang bersangkutan (ext3 / 4, riser, NTFS dll ...)] tetapi digunakan oleh kernel, biasanya untuk menegakkan sesuatu.

Sebagai contoh Kernel di * nix like sistema adalah "the thing" yang mengetahui arti dari UID yang terkait dengan file / direktori. File UID hanyalah sebuah nomor yang disimpan di samping file tertentu oleh sistem file tetapi "terjemahan" nomor tersebut ke pengguna tertentu (dan hak terkait untuk melakukan sesuatu atau tidak) dilakukan oleh kernel.

DavAlPi
sumber