Dlaczego uprawnienia do plików są zachowywane podczas przenoszenia plików w tym samym woluminie?


9

Zdarza się, że mamy problem z tym, że plik ma uprawnienia inne niż folder, w którym się znajduje.

Teraz dowiedziałem się, że jest artykuł z bazy wiedzy wyjaśniający przyczynę tego:

Domyślnie obiekt dziedziczy uprawnienia po obiekcie nadrzędnym w momencie jego tworzenia lub podczas kopiowania lub przenoszenia do folderu nadrzędnego. Jedyny wyjątek od tej reguły występuje, gdy przenosisz obiekt do innego folderu na tym samym woluminie. W takim przypadku oryginalne uprawnienia zostaną zachowane.

Tak więc użytkownik przeniósł plik z jednego folderu do drugiego, a uprawnienia z oryginalnego folderu zostały zachowane.

Moje pytanie brzmi: dlaczego ten wyjątek istnieje? Jakie jest tego uzasadnienie?

Odpowiedzi:


8

Wyjaśniłem to w poście na blogu http://think-like-a-computer.com/2011/07/24/moving-files-on-the-same-ntfs-volume-does-inherit-permissions/, ale to wyjaśniono również poniżej.

Po skopiowaniu plik musi utworzyć zupełnie nowy plik i przypisać mu nowy zestaw uprawnień, aby uzyskać uprawnienia z folderu nadrzędnego, jak wiadomo.

Gdy plik jest przenoszony na inny wolumin, tak naprawdę dzieje się tak, że jest on kopiowany na nowy wolumin, a stary plik jest usuwany. Ten sam proces powtarza się jak powyżej, ponieważ jest to nowy plik i wymaga ustawionych uprawnień.

Gdy plik jest przenoszony w tym samym woluminie, tak naprawdę nic się nie dzieje (na poziomie dysku). Po prostu zmienia lokalizację ścieżki logicznej pliku. Rzeczywiste dane i fizyczny plik na dysku nie zostały zmienione ani zmienione. Czy zauważyłeś, że kiedy przenosisz plik 5 GB do innego folderu na tym samym dysku, dzieje się to prawie natychmiast? Właśnie dlatego, ponieważ tak naprawdę nie został przeniesiony, ale zmienił się wskaźnik do miejsca, w którym logicznie istnieje plik. Ponieważ nie został w żaden sposób zmodyfikowany, uprawnienia również się nie zmieniają.

To jest powód tego zachowania.

Edycja: Coś, o czym zapomniałem wspomnieć ... Artykuł MS nie jest całkowicie dokładny. Cytat MS:

Domyślnie obiekt dziedziczy uprawnienia po obiekcie nadrzędnym w momencie jego tworzenia lub podczas kopiowania lub przenoszenia do folderu nadrzędnego. Jedyny wyjątek od tej reguły występuje, gdy przenosisz obiekt do innego folderu na tym samym woluminie. W takim przypadku oryginalne uprawnienia zostaną zachowane.

Powyższy cytat dotyczy tylko obiektów, które otrzymały WYJĄTKOWO zdefiniowane uprawnienia sec (wyłącz dziedziczenie). Jak wspomniano w moich komentarzach, chodzi o to, aby wpisy ACL były jak najbardziej wydajne. Rozważ następujący przykład:

Aby wyjaśnienie było proste, załóżmy, że masz ustawiony folder umożliwiający użytkownikom modyfikowanie tylko praw. Poniżej znajdują się tysiące plików i żaden z nich nie ma ustawionych jawnych uprawnień. Tworzenie list ACL dla każdego pliku nie jest zbyt wydajne, ponieważ mają one dokładnie takie same perms, więc ustawia JEDEN wpis ACL dla folderu. Ten następny fragment jest bardzo WAŻNY do zrozumienia; same pliki nie mają ŻADNYCH ACL. Więc kiedy przenosisz którykolwiek z tych plików do nowego folderu w tym samym woluminie, MS twierdzi, że perms przenosi się z nim (jak wyżej cytat). Zadaj sobie to .... jak? W tym pliku nie było permsów. To jest właściwie niepoprawne i właśnie to przetestowałem, aby to potwierdzić. Powiedzmy, że folder docelowy, do którego przenosisz plik, ma perms, aby umożliwić wszystkim grupom modyfikowanie tylko praw. Ponieważ plik nie ma bezpośrednio listy ACL, dziedziczy listę ACL folderu nadrzędnego. Oznacza to, że perms zmieniły się od modyfikacji użytkowników (stary folder) do modyfikacji wszystkich (nowy folder).

Zauważ różnicę? Tym razem przeniesienie pliku do innego folderu w tym samym woluminie faktycznie zmieniło perms, coś, co MS mówi, że tego nie robi. Czy właśnie znalazłem błąd w dokumentacji MS od 2000 lol ??

Teraz spójrz na ten sam scenariusz, gdy używasz jawnych uprawnień. Jeśli ustawisz wyraźne uprawnienia do pliku w tym folderze (wyłączono dziedziczenie), co na przykład odmawia użytkownikom dostępu do odczytu, tworzy teraz NOWY wpis ACL specjalnie dla tego pliku. Teraz, kiedy przenosisz plik do nowej lokalizacji, ma on bezpośrednio powiązany z nim wpis ACL. W takim przypadku przeniesienie pliku do nowej lokalizacji w tym samym woluminie ZACHOWA swoje uprawnienia (jak twierdzi MS)!


+1 Obie są dobrymi odpowiedziami, ale twoja jest bardziej istotna. Podoba mi się twój komentarz na temat tego, jak plik 5GB przesuwa się natychmiast. Dobra grafika.
KCotreau

Wydaje mi się, że „brak kopii” jest głównym powodem, dla którego ACL nie jest dotykany.
VVS,

1
Nie ma technicznego powodu, aby zmiana w tabeli systemu plików nie miała wpływu na odpowiedni wpis ACL. Myślę, że to wyjaśnienie jest poprawne. Myślę jednak, że opisuje on efekt, a nie rzeczywistą przyczynę. Przyczyną jest własny model bezpieczeństwa ACL, który jest oparty na woluminie. Operacje przenoszenia / kopiowania między różnymi woluminami są rozumiane jako przeniesienie uprawnień, a zmiany w obrębie tego samego woluminu są niezależne od uprawnień. Domyślnie oczywiście.
Dwarf

1
I logicznie, uprawnienia do pliku są ustalane podczas tworzenia. Zauważ, że kiedy zmieniasz uprawnienia do folderu, musisz propagować uprawnienia do wszystkich obiektów potomnych. Dlatego Windows czasami wyświetla okno dialogowe, ponieważ zmienia wszystkie obiekty potomne, jeśli jest ich dużo.
surfasb

1
@Mucker: Przepraszamy, ale twoje wyjaśnienie jest po prostu błędne. System Windows zawsze przechowuje listy ACL z plikami, nawet jeśli są one dziedziczone. Z punktu widzenia systemu plików zawsze przenoszą się wraz z plikiem, jeśli plik jest przenoszony w tym samym woluminie. W zależności od niektórych ustawień systemu Eksplorator Windows włączy się i dostosuje uprawnienia po przeniesieniu. Ale to jest Explorer i nie ma nic wspólnego z systemem plików. I gorzej: zależy to od wersji systemu Windows i (jak już wspomniałem) pewnych ustawień systemu. Zobacz blogs.msdn.com/b/oldnewthing/archive/2006/08/24/717181.aspx
Paul Groke

6

Podczas przenoszenia plików na tym samym wolumenie tradycyjnie zmieniasz układ plików . Zmiana uprawnień do plików na poziomie katalogu może zablokować dostęp do tego pliku w momencie zakończenia operacji przenoszenia. Jest to niepożądane, jeśli na przykład przypadkowo przeniesiono plik do systemu lub folder ze specjalnymi uprawnieniami własności lub w inny sposób chroniony. Nie byłoby innego sposobu skorygowania błędu niż przejęcie własności pliku (jeśli masz uprawnienia) lub zalogowanie się na konto uprzywilejowane. Biorąc pod uwagę normalną codzienną pracę komputera, możesz stwierdzić, że nie masz kontroli nad systemem plików.

To zachowanie jest powszechne wśród większości (jeśli nie wszystkich) systemów operacyjnych korzystających z ACL. Gwarantuje normalne działanie systemu plików w obrębie woluminu zarówno przez użytkowników, jak i aplikacje.

I odwrotnie, podczas przenoszenia plików między woluminami tradycyjnie oddajesz plik do kontroli przez coś lub kogoś innego. Jak dobrze zdajesz sobie sprawę, sensowne jest, aby plik zawierał uprawnienia do folderu docelowego, co da celowi niezbędne uprawnienia do zmiany układu własnego systemu plików według własnego uznania.

Oczywiście nie zawsze jest to pożądane. Z tego powodu operacje przenoszenia i kopiowania można zdefiniować za pomocą specjalnych reguł dziedziczenia uprawnień. Z tego samego artykułu:

  • Aby zachować uprawnienia podczas kopiowania lub przenoszenia plików i folderów, użyj narzędzia Xcopy.exe z przełącznikiem / O lub przełącznikiem / X. Oryginalne uprawnienia obiektu zostaną dodane do uprawnień dziedzicznych w nowej lokalizacji.

  • Aby dodać oryginalne uprawnienia obiektu do uprawnień dziedziczonych podczas kopiowania lub przenoszenia obiektu, użyj narzędzia Xcopy.exe z przełącznikami –O i –X.


„Jest to niepożądane, jeśli na przykład przypadkowo przeniesiono plik do systemu lub folder ze specjalnymi uprawnieniami własności lub w inny sposób chroniony”. - Więc przenosisz plik np. Do folderu z uprawnieniami tylko do zapisu i nadal możesz przenieść plik z powrotem .. dlaczego nie jest to pożądane w przypadku różnych woluminów?
VVS,

1
@VVS, ponieważ ACL jest modelem bezpieczeństwa opartym na systemie plików. Każdy wolumin posiada własny system plików, a tym samym własne tabele ACL. Z punktu widzenia bezpieczeństwa ACL, inny wolumin jest odpowiednikiem innego „użytkownika”. Przenosząc plik na inny wolumin, przekazujesz kontrolę temu „użytkownikowi”. Ale nadal masz opcję, aby tego nie robić, jeśli rzeczywiście tego pragniesz. Po prostu domyślne zachowanie rozwiązuje problemy bezpieczeństwa ACL.
Dwarf

1

OK To jest prawdziwy błąd. Po pierwsze - czy mówimy o pojedynczym komputerze czy serwerze? Zakładam, że mówimy o serwerze. Więc ... jako administrator firmy A firmy Wintel tworzysz system plików na dysku sieciowym na nowym serwerze. Opierasz go na działach, tzn. Każdy dział ma folder, a każdy folder ma swoją unikalną listę ACL ze względu na kwestie poufności, co jest prawdopodobnie normą - tak? Dlatego jeśli zamierzasz przenieść plik do folderu innego działu, dlaczego na ziemi NIE miałbyś chcieć, aby dziedziczył perms z nowego folderu? Mam na myśli to, dlaczego… dlaczego masz system plików oparty na uprawnieniach, jeśli nie zamierzasz go używać? Mogę dać ci prawdziwy przykład, w którym ważne jest, aby przeniesione pliki / foldery zawsze dziedziczyły ACL folderu nadrzędnego, po prostu zapytaj mnie.

Przenoszenie plików w woluminie lub przenoszenie ich z tomu X do tomu Y ... jaka jest zasadnicza różnica? Przenosisz lokalizację niektórych plików - w różnych woluminach lub nie ma to większego znaczenia w środowisku korporacyjnym, o ile widzę. Prawdziwy powód, dla którego jedno domyślnie obejmuje dziedziczenie, a drugie nie zostało jeszcze wspomniane przez Muckera - to jest „wydajność”. Przeciąganie i upuszczanie plików w woluminie zmienia tylko wpis indeksu - pliki nie są przenoszone, a informacje o ACL są pozostawione same sobie. Umożliwia prostą obsługę. Kiedy pliki są przenoszone między woluminami, pliki i ich listy ACL muszą zostać ponownie zdefiniowane, więc robienie tego poprawnie i uwzględnianie dziedziczenia ma sens, ponieważ nie wiąże się to z koniecznością narzutu.

Nie rozumiem, dlaczego Microsoft nie rozwiązuje tego problemu. Czy dołączenie okna dialogowego jako elementu przeciągania i upuszczania w Eksploratorze byłoby zbyt trudne? Coś w rodzaju „Przeniosłeś pliki do lokalizacji z różnymi prawami dostępu, czy chcesz odziedziczyć uprawnienia nowego folderu nadrzędnego? T czy N?”

Pozdrawiam, Stonegiant

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.