Mengapa izin file dipertahankan saat memindahkan file dalam volume yang sama?

9

Biasanya, kami memiliki masalah bahwa file memiliki izin berbeda dari folder tempat file itu berada.

Sekarang saya menemukan bahwa ada artikel KB yang menjelaskan alasan di balik ini:

Secara default, suatu objek mewarisi izin dari objek induknya, baik pada saat pembuatan atau ketika itu disalin atau dipindahkan ke folder induknya. Satu-satunya pengecualian untuk aturan ini terjadi ketika Anda memindahkan objek ke folder berbeda pada volume yang sama. Dalam hal ini, izin asli dipertahankan.

Jadi pengguna memindahkan file dari satu folder ke folder lain dan izin dari folder asli dipertahankan.

Pertanyaan saya sekarang adalah: mengapa pengecualian ini ada? Apa alasan di balik ini?

VVS
sumber

Jawaban:

8

Saya telah menjelaskan ini dalam posting blog http://think-like-a-computer.com/2011/07/24/moving-files-on-the-same-ntfs-volume-does-inherit-permissions/ tetapi dijelaskan di bawah ini.

Ketika sebuah file disalin, ia harus membuat file baru dan menetapkannya satu set izin baru, sehingga mendapat izin dari folder induk seperti yang Anda tahu.

Ketika suatu file dipindahkan ke volume lain, yang sebenarnya terjadi adalah bahwa itu disalin ke volume baru dan file lama dihapus. Jadi proses yang sama diulangi seperti di atas karena ini adalah file baru lagi dan memerlukan izin yang ditetapkan.

Ketika file dipindahkan dalam volume yang sama, tidak ada yang terjadi (pada level disk). Itu hanya mengubah lokasi jalur logis file. Data aktual dan file fisik pada disk belum disentuh atau diubah. Pernah perhatikan ketika Anda memindahkan file 5GB ke folder lain di drive yang sama, hal itu dilakukan hampir secara instan? Inilah sebabnya, karena sebenarnya belum dipindahkan tetapi penunjuk ke tempat file secara logis telah berubah. Karena tidak diubah dengan cara apa pun, izin tidak berubah juga.

Inilah alasan perilaku ini.

Sunting: Sesuatu yang saya lupa sebutkan ... Artikel MS tidak sepenuhnya akurat. Kutipan MS:

Secara default, suatu objek mewarisi izin dari objek induknya, baik pada saat pembuatan atau ketika itu disalin atau dipindahkan ke folder induknya. Satu-satunya pengecualian untuk aturan ini terjadi ketika Anda memindahkan objek ke folder berbeda pada volume yang sama. Dalam hal ini, izin asli dipertahankan.

Kutipan di atas hanya berlaku untuk objek yang telah diberikan izin sec didefinisikan secara EXPLICITLY (matikan warisan). Seperti yang disebutkan dalam komentar saya, ini semua tentang menjaga entri ACL seefisien mungkin. Perhatikan contoh berikut:

Agar penjelasannya sederhana, katakanlah Anda memiliki satu set folder untuk memungkinkan pengguna memodifikasi hak saja. Di bawah ini, ada ribuan file dan tidak satupun dari mereka memiliki izin yang ditetapkan. Sangat tidak efisien untuk membuat ACL untuk setiap file karena mereka adalah perm yang persis sama sehingga mengatur SATU entri ACL untuk folder. Bit selanjutnya ini sangat PENTING untuk dipahami; file-file itu sendiri tidak memiliki ACL PERMS. Jadi ketika Anda memindahkan file-file ini ke folder baru dalam volume yang sama, MS mengklaim perms bergerak dengan itu (seperti kutipan di atas). Tanyakan pada diri sendiri ini .... bagaimana? Tidak ada perms pada file di tempat pertama untuk pindah. Ini sebenarnya salah dan saya baru mengujinya sekarang untuk mengonfirmasi. Katakanlah folder tujuan yang Anda pindahkan file memiliki perms untuk memungkinkan semua orang memodifikasi hak saja. Yah karena file tidak memiliki ACL secara langsung, itu mewarisi ACL dari folder induk. Ini berarti bahwa perms telah berubah dari pengguna yang memodifikasi (folder lama) menjadi semua orang memodifikasi (folder baru).

Perhatikan perbedaannya ?? Kali ini, memindahkan file ke folder lain dalam volume yang sama sebenarnya telah mengubah perm, sesuatu yang MS katakan tidak berfungsi. Apakah saya baru saja menemukan kesalahan dalam dokumentasi MS sejak 2000 lol ??

Sekarang lihat skenario yang sama saat menggunakan izin eksplisit. Jika Anda menetapkan izin eksplisit pada file di dalam folder ini (warisan dinonaktifkan) yang, misalnya, menolak akses pengguna baca, sekarang membuat entri ACL BARU khusus untuk file ini. Sekarang ketika Anda memindahkan file ke lokasi baru, ia memiliki entri ACL yang terkait langsung dengannya. Dalam hal ini, memindahkan file ke lokasi baru dalam volume yang sama RETAIN izinnya (seperti yang diklaim MS)!

Gagalnya besar
sumber
+1 Keduanya adalah jawaban yang baik, tetapi jawaban Anda lebih penting. Saya suka komentar Anda tentang bagaimana file 5GB bergerak secara instan. Visual yang bagus.
KCotreau
Saya cenderung berpikir bahwa "tidak ada salinan yang terjadi" adalah alasan utama mengapa ACL tidak tersentuh.
VVS
1
Tidak ada alasan teknis perubahan pada tabel sistem file seharusnya tidak mempengaruhi entri ACL yang sesuai. Saya pikir penjelasan ini benar. Tetapi saya juga berpikir itu menjelaskan efeknya, bukan penyebab sebenarnya. Penyebabnya adalah model keamanan ACL sendiri, yang berdasarkan volume. Memindahkan / menyalin operasi antara volume berbeda yang dipahami sebagai pemindahan hak istimewa dan perubahan dalam volume yang sama dengan hak istimewa agnostik. Secara default, secara alami.
A Dwarf
1
Dan secara logis, izin untuk file ditetapkan saat pembuatan. Perhatikan ketika Anda mengubah izin pada folder yang Anda harus menyebarkan izin ke semua objek anak. Itu sebabnya Windows terkadang memunculkan kotak dialog karena mengubah semua objek anak jika ada banyak.
surfasb
1
@Mucker: Maaf, tapi penjelasan Anda salah besar. Windows selalu menyimpan ACL dengan file, bahkan jika mereka diwariskan. Dan dari sudut pandang sistem file, mereka selalu bergerak dengan file tersebut jika file dipindahkan dalam volume yang sama. Bergantung pada pengaturan sistem tertentu, Windows Explorer akan masuk dan menyesuaikan izin setelah pindah. Tapi itu Explorer dan tidak ada hubungannya dengan sistem file. Dan lebih buruk lagi: itu tergantung pada versi Windows dan (seperti yang telah saya sebutkan) pengaturan sistem tertentu. Lihat blogs.msdn.com/b/oldnewthing/archive/2006/08/24/717181.aspx
Paul Groke
6

Ketika Anda memindahkan file dalam volume yang sama Anda secara tradisional menata ulang sistem file Anda . Mengubah izin file di tingkat direktori bisa mengunci Anda dari file itu saat operasi pemindahan selesai. Ini tidak diinginkan jika, misalnya, Anda hanya secara tidak sengaja memindahkan file ke sistem, atau folder dengan izin kepemilikan khusus atau jika tidak dilindungi. Tidak ada cara untuk memperbaiki kesalahan selain mengambil kepemilikan file (jika Anda memiliki hak istimewa), atau masuk dengan akun istimewa. Mempertimbangkan operasi komputer sehari-hari yang normal, Anda mungkin mendapati Anda tidak memiliki kendali atas sistem file Anda.

Perilaku ini umum di antara sebagian besar (jika tidak semua) sistem operasi memanfaatkan ACL. Ini menjamin operasi sistem file normal dalam volume oleh pengguna dan aplikasi.

Sebaliknya, saat memindahkan file di antara volume, Anda biasanya memberikan file untuk dikontrol oleh sesuatu atau orang lain. Masuk akal, seperti yang Anda sadari, untuk file kemudian memasukkan izin folder target, yang akan memberikan target izin yang diperlukan untuk kemudian mengatur ulang sistem file sendiri sesuai keinginan mereka.

Tentu ini tidak selalu diinginkan. Untuk alasan itu memindahkan dan menyalin operasi dapat didefinisikan dengan aturan pewarisan izin khusus. Dari artikel yang sama:

  • Untuk mempertahankan izin ketika file dan folder disalin atau dipindahkan, gunakan utilitas Xcopy.exe dengan / O atau / X switch. Izin asli objek akan ditambahkan ke izin yang dapat diwarisi di lokasi baru.

  • Untuk menambahkan izin asli objek ke izin yang dapat diwarisi saat Anda menyalin atau memindahkan objek, gunakan utilitas Xcopy.exe dengan sakelar –O dan –X.

A Dwarf
sumber
"Ini tidak diinginkan jika, misalnya, Anda hanya secara tidak sengaja memindahkan file ke sistem, atau folder dengan izin kepemilikan khusus atau dilindungi." - Jadi, Anda memindahkan file misalnya ke folder dengan izin hanya menulis dan masih dapat memindahkan file kembali .. mengapa ini tidak diinginkan tentang volume yang berbeda?
VVS
1
@VVS karena ACL adalah model keamanan berbasis sistem file. Setiap volume memiliki sistem file sendiri dan akibatnya ACL table sendiri. Dari perspektif keamanan ACL, volume yang berbeda setara dengan "pengguna" yang berbeda. Dengan memindahkan file ke volume yang berbeda, Anda mentransfer kontrol ke "pengguna" itu. Tetapi Anda masih diberi pilihan untuk tidak melakukannya jika memang Anda menginginkannya. Hanya saja perilaku default mengatasi masalah keamanan ACL.
A Dwarf
1

OK Ini benar-benar lowdown. Pertama - apakah kita berbicara tentang satu PC atau server? Saya berasumsi kita berbicara tentang Server. Jadi .... sebagai Wintel Admin of Company A Anda membuat sistem file pada drive jaringan di server baru Anda. Anda mendasarkannya pada departemen yaitu masing-masing departemen memiliki folder dan masing-masing folder memiliki ACL yang unik karena masalah kerahasiaan, seperti mungkin normanya - ya? Karena itu, jika Anda akan memindahkan file ke folder departemen lain, mengapa Anda TIDAK ingin mewarisi perms folder baru itu? Apa yang saya maksud adalah ... mengapa mereka memiliki sistem file berbasis izin jika Anda tidak akan menggunakannya? Saya bisa memberikan contoh kehidupan nyata di mana penting untuk file / folder yang dipindahkan untuk selalu mewarisi ACL folder orang tua mereka, tanyakan saja kepada saya.

Memindahkan file dalam volume atau memindahkannya dari vol X ke vol Y ... apa perbedaan utama? Anda memindahkan lokasi beberapa file - di volume yang berbeda atau tidak membuat perbedaan kecil dalam lingkungan perusahaan sejauh yang saya bisa lihat. Alasan sebenarnya mengapa satu menyertakan warisan secara default dan yang lainnya belum disebutkan oleh Mucker - yaitu "efisiensi". Menyeret dan menjatuhkan file dalam volume hanya mengubah entri Indeks - file tidak dipindahkan dan info ACL-nya dibiarkan sendiri. Membuat operasi sederhana. Ketika file dipindahkan di seluruh volume, namun, file dan ACL mereka telah didefinisikan ulang, sehingga melakukannya dengan baik dan termasuk warisan masuk akal karena tidak dikenakan biaya overhead dihindari.

Saya tidak mengerti mengapa Microsoft tidak mengatasi masalah ini. Apakah terlalu sulit untuk memasukkan kotak dialog sebagai bagian dari drag and drop Explorer? Sesuatu seperti "Anda telah memindahkan file ke lokasi dengan hak akses yang berbeda, apakah Anda ingin mewarisi izin folder induk yang baru? Y atau N?"

Salam, Stonegiant

Stonegiant
sumber