Dosyaları aynı birim içinde taşırken dosya izinleri neden korunuyor?


9

Bazen, bir dosyanın bulunduğu klasörden farklı izinlere sahip olması sorunumuz vardır.

Şimdi bunun nedenini açıklayan bir KB makalesi olduğunu öğrendim :

Varsayılan olarak, bir nesne, oluşturma sırasında veya üst klasörüne kopyalandığında veya taşındığında izinleri üst nesnesinden devralır. Bir nesneyi aynı birimdeki farklı bir klasöre taşıdığınızda bu kuralın tek istisnası oluşur. Bu durumda, orijinal izinler korunur.

Böylece kullanıcı dosyayı bir klasörden diğerine taşıdı ve orijinal klasörden izinler korundu.

Şimdi sorum şu: bu istisna neden var? Bunun arkasındaki sebep nedir?

Yanıtlar:


8

Bunu bir blog yazısında http://think-like-a-computer.com/2011/07/24/moving-files-on-the-same-ntfs-volume-does-inherit-permissions/ açıkladım ama ayrıca aşağıda açıklanmıştır.

Bir dosya kopyalandığında, yepyeni bir dosya oluşturması ve ona yeni bir izin kümesi ataması gerekir, böylece bildiğiniz gibi üst klasörden izinleri alır.

Bir dosya başka bir birime taşındığında, gerçekte yeni birime kopyalanması ve eski dosyanın silinmesidir. Bu yüzden aynı işlem tekrar yeni bir dosya olduğundan ve izinlerin ayarlanması gerektiğinden yukarıdaki gibi tekrarlanır.

Dosya aynı birim içinde taşındığında, hiçbir şey olmuyor (disk düzeyinde). Yalnızca dosyanın mantıksal yol konumunu değiştirir. Diskteki gerçek verilere ve fiziksel dosyaya dokunulmamış veya değiştirilmemiştir. 5GB dosyasını aynı sürücüdeki başka bir klasöre taşıdığınızda fark ettiniz mi, neredeyse anında yapılıyor mu? Bu nedenle, aslında hareket etmedi, ancak mantıksal olarak dosyanın bulunduğu işaretçi değişti. Hiçbir şekilde değiştirilmediğinden, izinler de değişmez.

Bu davranışın nedeni budur.

Düzenleme: Bahsetmeyi unuttuğum bir şey ... MS makalesi tamamen doğru değil. MS teklifi:

Varsayılan olarak, bir nesne, oluşturma sırasında veya üst klasörüne kopyalandığında veya taşındığında izinleri üst nesnesinden devralır. Bir nesneyi aynı birimdeki farklı bir klasöre taşıdığınızda bu kuralın tek istisnası oluşur. Bu durumda, orijinal izinler korunur.

Yukarıdaki alıntı yalnızca AÇIK olarak tanımlanmış sn izinleri verilen nesneler için geçerlidir (devralmayı kapat). Yorumlarımda belirtildiği gibi, ACL girişlerini mümkün olduğunca verimli tutmakla ilgilidir. Aşağıdaki örneği düşünün:

Açıklamayı basit tutmak için, kullanıcıların yalnızca hakları değiştirmesine izin verecek şekilde ayarlanmış bir klasörünüz olduğunu varsayalım. Bunun altında binlerce dosya var ve hiçbirinin açık izinleri yok. Her dosya için aynı izinlere sahip oldukları için ACL'ler oluşturmak çok verimli değildir, bu nedenle klasör için ONE ACL girişi ayarlar. Bir sonraki bitin anlaşılması çok önemlidir; dosyaların kendilerinde ACL PERMS YOK. Bu dosyalardan herhangi birini aynı birimde yeni bir klasöre taşıdığınızda, MS izinlerin onunla birlikte hareket ettiğini iddia eder (yukarıdaki alıntıda olduğu gibi). Kendinize bunu sorun .... nasıl? İlk etapta dosya üzerinde hiçbir izin yoktu. Bu aslında yanlış ve onaylamak için şimdi test ettim. Dosyayı taşıdığınız hedef klasörün, herkes grubunun yalnızca hakları değiştirmesine izin verme izinlerine sahip olduğunu varsayalım. Dosyanın doğrudan ACL'si olmadığından, üst klasörün ACL'sini devralır. Bu, izinlerin kullanıcıların değiştirmesinden (eski klasör) herkesin değiştirmesine (yeni klasör) değiştiği anlamına gelir.

Farkı fark ettiniz mi ?? Bu sefer, bir dosyayı aynı birimdeki başka bir klasöre taşımak aslında izinleri değiştirdi, MS'in yapmadığı bir şey. Ben sadece 2000 lol beri MS belgelerinde bir hata buldunuz mu?

Şimdi açık izinleri kullanırken aynı senaryoya bakın. Örneğin, kullanıcıların okuma erişimini reddeden bu klasördeki bir dosyada (devralma kapalı) açık izinler ayarlarsanız, artık bu dosya için özel olarak YENİ bir ACL girişi oluşturur. Şimdi dosyayı yeni bir konuma taşıdığınızda, onunla doğrudan ilişkili bir ACL girişi var. Bu durumda, bir dosyayı aynı birimde yeni bir konuma taşımak izinlerini (MS'in iddia ettiği gibi) döndürür!


+1 Her ikisi de iyi yanıtlar, ama sizinki daha önemli. 5GB dosyasının anında nasıl hareket ettiği hakkındaki yorumunuzu beğendim. İyi görsel.
KCotreau

ACL'ye dokunulmamasının ana nedeni "kopya olmuyor" diye düşünmeye meyilliyim.
VVS

1
Dosya sistemi tablosundaki bir değişikliğin karşılık gelen ACL girişini etkilememesi için teknik bir neden yoktur. Bence bu açıklama doğru. Ancak bunun gerçek nedeni değil, etkiyi açıkladığını düşünüyorum. Bunun nedeni, ACL'nin birim başına düşen kendi güvenlik modelidir. Farklı birimler arasındaki taşıma / kopyalama işlemleri, ayrıcalık agnostikleriyle aynı birim içindeki ayrıcalıkların ve değişikliklerin aktarılması olarak anlaşılmaktadır. Varsayılan olarak, doğal olarak.
Bir Cüce

1
Ve mantıksal olarak, bir dosya için izinler oluşturma sırasında ayarlanır. Bir klasördeki izinleri değiştirdiğinizde, izinleri tüm alt nesneye yaymanız gerektiğine dikkat edin. Bu nedenle, Windows çok fazla varsa tüm alt nesneleri değiştirdiğinden bazen bir iletişim kutusu atar.
surfasb

1
@ Mucker: Üzgünüm, ama açıklaman yanlış. Windows , devralınmış olsalar bile ACL'leri her zaman dosyalarla birlikte depolar. Ve dosya sistemi bakış açısından, dosya aynı birim içinde taşınırsa daima dosyayla birlikte taşınırlar. Belirli sistem ayarlarına bağlı olarak, Windows Gezgini geçişten sonra izinleri ayarlayacak ve ayarlayacaktır. Ama bu Explorer ve dosya sistemi ile ilgisi yoktur. Ve daha da kötüsü: Windows sürümüne ve (daha önce de belirttiğim gibi) belirli sistem ayarlarına bağlıdır. Bkz. Blogs.msdn.com/b/oldnewthing/archive/2006/08/24/717181.aspx
Paul Groke

6

Dosyaları aynı birim içinde taşırken geleneksel olarak dosya sisteminizi yeniden düzenlersiniz . Dosya izinlerini dizin düzeyinde değiştirmek, taşıma işlemi tamamlandığında sizi bu dosyadan çıkarabilir. Örneğin, yanlışlıkla bir dosyayı bir sisteme veya özel sahiplik izinlerine sahip veya başka bir şekilde korunan bir klasöre taşımışsanız bu istenmeyen bir durumdur. Hatayı düzeltmenin (ayrıcalıklarınız varsa) veya ayrıcalıklı bir hesapla oturum açmaktan başka bir yolu yoktur. Bir bilgisayarın normal günlük çalışması göz önüne alındığında, dosya sisteminiz üzerinde hiçbir kontrolünüz olmadığını görebilirsiniz.

Bu davranış, ACL kullanan çoğu (hepsi olmasa da) işletim sistemi arasında yaygındır. Birimlerdeki kullanıcılar ve uygulamalar tarafından normal dosya sistemi işlemlerini garanti eder.

Tersine, dosyaları birimler arasında taşıdığınızda, geleneksel olarak bir şeyin veya başka birinin kontrolü için bir dosya veriyorsunuz. Bildiğiniz gibi, dosyanın hedef klasör izinlerini içermesi mantıklıdır, bu da hedefe uygun gördüklerinde kendi dosya sistemini yeniden düzenlemek için gerekli izinleri verecektir.

Doğal olarak bu her zaman arzu edilmez. Bu nedenle, taşıma ve kopyalama işlemleri özel izin devralma kuralları ile tanımlanabilir. Aynı makaleden:

  • Dosyalar ve klasörler kopyalanırken veya taşınırken izinleri korumak için, Xcopy.exe yardımcı programını / O veya / X anahtarıyla kullanın. Nesnenin orijinal izinleri yeni konumdaki devralınabilen izinlere eklenir.

  • Bir nesneyi kopyalarken veya taşırken bir nesnenin özgün izinlerini devralınabilir izinlere eklemek için, XO.exe yardımcı programını –O ve –X anahtarlarıyla kullanın.


"Örneğin, bir dosyayı yanlışlıkla bir sisteme veya özel sahiplik izinlerine sahip veya başka bir şekilde korunan bir klasöre taşımışsanız bu istenmeyen bir durumdur." - Yani bir dosyayı örneğin izinsiz izinlere sahip bir klasöre taşırsınız ve dosyayı geri taşıyabilirsiniz .. neden farklı birimler için bu istenmiyor?
VVS

1
@VVS çünkü ACL bir dosya sistemi tabanlı güvenlik modelidir. Her birim kendi dosya sistemini ve dolayısıyla kendi ACL tablolarını içerir. ACL güvenliği açısından farklı bir birim, farklı bir "kullanıcının" eşdeğeridir. Bir dosyayı farklı bir birime taşıyarak denetimi o "kullanıcıya" aktarırsınız. Ama yine de gerçekten arzu edip etmeme seçeneğiniz var. Sadece varsayılan davranış ACL güvenlik endişelerini giderir.
Bir Cüce

1

Tamam Bu gerçek alçalma. İlk olarak - tek bir bilgisayar veya sunucudan mı bahsediyoruz? Sanırım bir Sunucudan bahsediyoruz. Yani .... A şirketinin Wintel Yöneticisi olarak yeni sunucunuzdaki bir ağ sürücüsünde bir dosya sistemi oluşturursunuz. Departmanlara dayandırıyorsunuz, yani her departmanın bir klasörü var ve gizlilik sorunları nedeniyle her klasörün kendine özgü ACL'si var, muhtemelen norm - evet? Bu nedenle, bir dosyayı başka bir bölümün klasörüne taşıyacaksanız, neden onun yeni klasörün izinlerini devralmasını istemesiniz? Demek istediğim ... neden kullanmıyorsan neden izin tabanlı bir dosya sistemine sahipsin? Taşınan dosyaların / klasörlerin her zaman ana klasörün ACL'sini devralmasının önemli olduğu gerçek bir örnek verebilirim , sadece bana sorun.

Bir birim içindeki dosyaları taşımak veya vol X'ten vol Y'ye taşımak ... temel fark nedir? Bazı dosyaların konumunu farklı birimler arasında taşıyorsunuz veya görebildiğim kadarıyla şirket ortamında küçük bir fark yaratmıyor. Birinin varsayılan olarak miras içermesi ve diğerinin Mucker tarafından daha önce bahsedilmemesinin gerçek nedeni - bu "verimlilik" tir. Bir birimdeki dosyaları sürükleyip bırakmak yalnızca Dizin girişini değiştirir; dosyalar taşınmaz ve ACL bilgileri tek başına kalır. Basit bir işlem yapar. Dosyalar hacimleri karşısında taşındığında, ancak, dosyalar ve bunların ACL var bu yüzden yapıyor, yeniden tanımlanması düzgün ve bir önlenebilir yormayan olarak miras iyi mantıklı dahil.

Microsoft'un neden bu sorunu çözmediğini anlayamıyorum. Explorer'ın sürükleyip bırakma işleminin bir parçası olarak bir iletişim kutusu eklemek çok zor olur mu? "Dosyaları farklı erişim haklarına sahip bir konuma taşıdınız, yeni üst klasörün izinlerini mi devralmak istiyorsunuz? Y veya N?"

Saygılarımızla, Stonegiant

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.