Przejdź do treści

Uprawnienia NTFS w systemach Windows

4.2
(21)

W dzisiejszym wpisie wracamy do tematu administrowania oraz bezpieczeństwa systemów Windows. Mając już podstawy dotyczące kont i grup lokalnych dziś zajmiemy się tematem uprawnień systemowych.

Uprawnienia NTFS to oczywiście uprawnienia systemowe, które najczęściej spotykamy w standardowym dla systemów Windows systemie plików – NTFS. Pozwalają one na zarządzanie dostępem użytkowników do konkretnych obiektów, takich jak np. foldery, pliki czy wpisy w rejestrze. Możemy spotkać je w zasadzie we wszystkich obecnie wykorzystywanych systemach z rodziny Windows – zarówno Windows 10, jak i Windows Server. W zastosowaniu komercyjnym uprawnienia NTFS są często sposobem zarządzania uprawnieniami na serwerach plików.

Kwestia odpowiedniego zarządzania uprawnieniami jest jednym z fundamentalnych elementów bezpieczeństwa. Niezależnie od tego, czy mówimy o uprawnieniach w środowisku lokalnym, domenowym czy chmurze, musimy znać właściwe koncepcje nadawania uprawnień. Mówiąc o bezpieczeństwie oraz uprawnieniach, najczęściej spotkamy się z koncepcją „najniższych możliwych uprawnień”, która określa „właściwe” podejście do kwestii uprawnień. Mówi ona o tym, żeby nadawać wyłącznie takie uprawnienia, które są niezbędne do wykonywania pracy. Pozwala ona min. na istotne ograniczenie skutków nieautoryzowanego dostępu do konta danego użytkownika. Atakujący zyskując dostęp do konta o niskich uprawnieniach musi w takim przypadku złamać kolejną warstwę zabezpieczeń wykonując eskalację uprawnień.

Podstawowe uprawnienia

Uprawnienia NTFS są przede wszystkim podzielone na podstawowe i zaawansowane. Zacznijmy od tych podstawowych. W przypadku plików czy folderów najprościej znaleźć je klikając PPM na taki obiekt, wchodząc w „Properties” i odnajdując zakładkę „Security”:

W zakładce „Security” zobaczymy dwa główne okienka – Group or user names oraz Permissions for. Najprościej mówiąc pozwalają one na zaobserwowanie kto posiada jakie uprawnienia do wybranego obiektu. Na liście w górnym „okienku” wskazujemy oczywiście interesującego nas użytkownika czy grupę. W dolnym „okienku” zobaczymy jakie uprawnienia zostały przypisane do wybranego użytkownika czy grupy:

Z tego poziomu możemy zobaczyć wszystkie podstawowe uprawnienia. Ich nazwy dość jasno oddają czego dotyczą konkretne uprawnienia. Wyjaśnijmy je sobie krótko na przykładzie plików i folderów:

  • Full control – nadaje wszystkie poniższe uprawnienia do wybranego obiektu oraz możliwość zmiany uprawnień i właściciela pliku/folderu
  • Modify – nadaje uprawnienia Read, Write oraz Execute oraz możliwość usuwania plików/folderów
  • Read & Execute – umożliwia odczytywanie zawartości plików oraz uruchamianie plików wykonywalnych
  • List folder contents – umożliwia zobaczenie listy plików i podfolderów
  • Read – umożliwia odczytywanie zawartości plików
  • Write – umożliwia nadpisywanie istniejących plików/folderów oraz dodawanie/tworzenie nowych
  • Special Permissions – opcja, która jest zaznaczana przy okazji wyboru uprawnień zaawansowanych, które nie odpowiadają dokładnie uprawnieniom podstawowym

Zarządzanie podstawowymi uprawnieniami

Proces zarządzania podstawowymi uprawnieniami systemowymi jest stosunkowo prosty. Będąc w właściwościach wybranego obiektu klikamy przycisk Edit…:

Po kliknięciu w przycisk Edit… powinniśmy zobaczyć praktycznie identyczne okienko, które jednak pozwala nam na modyfikację wybranych uprawnień:

Część z nich jest domyślnie zaznaczona na szaro i nie jesteśmy w stanie ich zmienić. Wynika to z dziedziczenia uprawnień, które szczegółowo omówimy sobie później. Na tym etapie powinniśmy zwrócić uwagę na podstawowe elementy zarządzania uprawnieniami. Z tego miejsca mamy możliwość dodawania oraz usuwania wybranych użytkowników i grup, które powinny/nie powinny posiadać dostępu do wskazanego obiektu. Dla każdego z użytkowników czy grup możemy tutaj określić podstawowe uprawnienia jako Allow, Deny lub pozostawiając je puste. Allow oznacza oczywiście nadanie wybranych uprawnień, a Deny ich zabrania. Pozostawienie pustego pola nie zmienia aktualnych uprawnień, a w przypadku pustych pól – oznacza domyślnie Deny.

Uprawnienia zaawansowane

Oprócz wymienionych wyżej uprawnień podstawowych, możemy również skorzystać z bardziej granularnego podejścia. Tutaj z pomocą przychodzą nam uprawnienia zaawansowane, które nieco rozszerzają funkcjonalność uprawnień podstawowych, dzieląc je najczęściej na kilka, o nieco węższym zakresie. Uprawnieniami zaawansowanymi możemy zarządzać klikając w przycisk Advanced w zakładce Security wybranego obiektu:

Wybierając dowolnego użytkownika/grupę i klikając przycisk View/Edit możemy zobaczyć aktualnie posiadane przez niego uprawnienia:

Klikając znajdujący się w prawym górnym rogu przycisk Show advanced permissions możemy zobaczyć uprawnienia zaawansowane:

Już na pierwszy rzut oka widać, że uprawnień zaawansowanych jest zdecydowanie więcej. Dzięki temu możemy dokładniej dostosować uprawnienia użytkownika czy grupy do naszych potrzeb.

Co istotne – uprawnienia zaawansowane „mapują” na ustawienia podstawowe. Oznacza to, że wybranie np. uprawnienia podstawowego „Read” będzie równoznaczne z wyborem 4 uprawnień zaawansowanych – List folder / read data, Read attributes, Read extended attributes, Read permissions. Oczywiście działa to w dwie strony – jeżeli wybierzemy wszystkie cztery uprawnienia zaawansowane, uzyskamy po prostu uprawnienia podstawowe Read.

Co w przypadku, gdy wybierzemy tylko część spośród zaawansowanych uprawnień? Załóżmy, że chcemy nadać użytkownikowi/grupie uprawnienia do odczytywania zawartości plików, ale nie do odczytywania ich atrybutów. W takiej sytuacji zostawiamy zaznaczone tylko dwa uprawnienia – List folder/read data oraz Read permissions. Wybierając więc tylko część uprawnień wchodzących w skład uprawnień podstawowych Read, spośród podstawowych uprawnień system zaznaczy nam Special permissions. Każdorazowo, gdy wybrane przez nas uprawnienia nie będą dokładnymi odpowiednikami tych podstawowych – ta opcja będzie domyślnie zaznaczana:

Poza doborem odpowiednich uprawnień możemy tutaj również określić ich typ oraz „zasięg”. Typ uprawnień nie różnie się tu od uprawnień podstawowych – mamy możliwość wyboru opcji Allow lub Deny. W przypadku zasięgu możemy dość dokładnie określić do jakich obiektów zostaną przypisane takie uprawnienia. Mamy tutaj dostępny szereg różnych kombinacji pozwalających na określenie, czy uprawnienia mają dotyczyć wybranego folderu, podfolderów oraz plików.

Relacja Allow-Deny w uprawnieniach NTFS

Aby dobrze zrozumieć kwestię przypisywania uprawnień, niezbędne jest zrozumienie relacji pomiędzy opcjami Allow i Deny. Uprawnienia systemowe, podobnie jak w zdecydowanej większości innych systemów, stawiają Deny na pierwszym miejscu. Oznacza to, że prawie zawsze, gdy określone uprawnienia nie są jednoznaczne – będzie to oznaczało właśnie tą opcję (o wyjątkach później). Z tego też względu puste pola Allow i Deny będą skutkowały brakiem określonych uprawnień. Podobnie w przypadku, gdy danemu obiektowi nadamy jednocześnie uprawnienia Allow oraz Deny – to drugie zawsze zwycięży i uprawnienia nie zostaną nadane. Każdorazowo, gdy na tym samym poziomie uprawnień wybierzemy opcję Deny – uprawnienia nie zostaną nadane.

Taka logika w przypadku nadawania uprawnień ma oczywiście swoje uzasadnienie w bezpieczeństwie. Zgodnie z wspomnianą zasadą „najniższych możliwych uprawnień”, powinniśmy możliwie jak najbardziej ograniczać wszelkie nadawane uprawnienia. W tym przypadku, gdy nadanie uprawnień nie jest jednoznaczne – bezpieczniej jest ich po prostu nie nadać.

Dziedziczenie uprawnień

Szczególnie istotna w kontekście uprawnień systemowych jest kwestia ich dziedziczenia. Dziedziczenie dodaje zupełnie nową płaszczyznę uprawnień, ale jednocześnie istotnie ułatwia zarządzanie nimi.

Dziedziczenie to nic innego jak przeniesienie uprawnień z obiektu nadrzędnego np. z folderu na znajdujący się w nim podfolder. Jest ono domyślnie włączone, więc tworząc nowy folder czy plik – będzie on domyślnie otrzymywał uprawnienia od swojego „rodzica”. Taki sposób funkcjonowania ma oczywiście swoje uzasadnienie – istotnie oszczędza czas niezbędny do nadania odpowiednich uprawnień. Wyobraźmy sobie sytuację, gdy pobieramy dużą ilość danych – określanie uprawnień dla każdego pliku czy folderu zajęłoby bardzo dużą ilość czasu. Dzięki dziedziczeniu nie musimy się tym przejmować, choć oczywiście możemy w każdej chwili zmodyfikować nadane uprawnienia.

Jak wspomniałem, domyślnie dziedziczenie jest dla folderów i plików włączone, a uprawnień określonych przez dziedziczenie nie możemy wprost modyfikować. Uprawnienia dziedziczone są domyślnie prezentowane kolorem szarym, aby odróżnić je od uprawnień jawnych (nadanych ręcznie), które mają kolor czarny:

Na przedstawionym powyżej przykładzie wybrany użytkownik posiada wszystkie uprawnienia w trybie Allow, które są dziedziczone z folderu nadrzędnego. Jak widać, domyślnie nie jesteśmy w stanie ich „odznaczyć”. Aby zmodyfikować (np. zawęzić) posiadane przez użytkownika uprawnienia możemy wykorzystać dwa sposoby. Po pierwsze – nic nie stoi na przeszkodzie, aby dla wybranych uprawnień zaznaczyć opcję Deny. Opcja Deny będzie w tym przypadku ważniejsza, a wybrane uprawnienia zostaną użytkownikowi odebrane.

Innym sposobem jest wyłączenie dziedziczenia. Możemy to zrobić z poziomu uprawnień zaawansowanych. Mamy tutaj dostępną opcję „Disable inheritance”, która wyłączy dziedziczenie dla wybranego obiektu:

Po jej wybraniu będziemy jeszcze musieli określić, co stanie się z aktualnie dziedziczonymi uprawnieniami. Możemy przekonwertować je na uprawnienia jawne lub całkowicie je usunąć. Wybór odpowiedniej opcji zależy od naszych potrzeb:

Wyłączenie dziedziczenia działa tutaj wyłącznie na wybranym przez nas obiekcie, w tym przypadku folderze. Jego np. podfoldery nadal będą dziedziczyły wybrane uprawnienia.

Hierarchia uprawnień NTFS

Jak wspominałem, dziedziczenie uprawnień dodaje nam nową płaszczyznę uprawnień. Mamy teraz do czynienia z uprawnieniami jawnymi oraz uprawnieniami dziedziczonymi. W ramach jednego typu uprawnień relacja uprawnień w trybie Allow/Deny jest jasna – Deny zawsze „zwycięża”. W przypadku dwóch typów uprawnień – istotna jest również ich hierarchia.

Dla każdego obiektu uprawnienia jawne są ważniejsze niż uprawnienia dziedziczone. Oznacza to, że uprawnienia jawne są weryfikowane w pierwszej kolejności. Jeżeli nie określają one danej kwestii – jest ona sprawdzana w uprawnieniach dziedziczonych. Aby dobrze zrozumieć jak działa hierarchia uprawnień, posłużmy się prostym rysunkiem pomocniczym:

Z tabelki łatwo zauważyć 2 główne wnioski:

  • Uprawnienia jawne są ważniejsze i to one decydują o efektywnych uprawnieniach
  • Jest to chyba jedyny wyjątek od reguły, gdy Allow jest ważniejsze od Deny

Zrozumienie hierarchii uprawnień jest kluczowe, aby właściwie zarządzać uprawnieniami. Dochodzimy tu do prostego wniosku – najważniejsze są nie uprawnienia jawne czy dziedziczone, ale uprawnienia efektywne.

Uprawnienia efektywne

Uprawnienia efektywne to nic innego jak faktyczne uprawnienia, które będzie posiadał użytkownik w momencie wykonywania danej akcji. Oczywiście wynikają one z kombinacji uprawnień jawnych i dziedziczonych. To, że są one najważniejsze jest chyba dość jasne.

W przypadku małych środowisk określenie uprawnień efektywnych w większości przypadków nie powinno być problemem. W przypadku dużych firm czy środowisk – określenie prawidłowości czy znalezienie problemów z dostępem może nie być już tak proste. Tutaj z pomocą przychodzi nam pewnego rodzaju „symulator”, który pozwala nam na weryfikację uprawnień efektywnych.

W zaawansowanych ustawieniach możemy odnaleźć zakładkę Effective Access:

Wybierając użytkownika i klikając na View effective access możemy zobaczyć efektywne uprawnienia wybranego użytkownika wobec wybranego obiektu:

Dzięki temu możemy w łatwy sposób zweryfikować poprawność nadanych przez nas uprawnień. Co więcej, dzięki kolumnie Access limited by jesteśmy w stanie określić źródło ewentualnych problemów z dostępem.

Konflikty w uprawnieniach NTFS

Tak jak wspominałem, w małych środowiskach właściwe określenie uprawnień wydaje się dość proste. W przypadku dużych środowisk – liczba potencjalnych problemów jest niemała. Jednym z częstszych problemów, które możemy spotkać, jest konflikt uprawnień. Może on wynikać np. z przynależności użytkownika do wielu różnych grup, co w realnych środowiskach ma miejsce praktycznie zawsze. Problem z uprawnieniami może pojawić się w momencie, gdy członkowie tylko jednej z grup powinni posiadać wybrane uprawnienia.

W takiej sytuacji uprawnienia będą często występowały na tym samym poziomie – będą to uprawnienia jawne lub dziedziczone. Jak już wiemy, opcja Deny jest ważniejsza, więc przynależność do jednej grupy z takim typem uprawnień będzie skutkowała nie otrzymaniem ich przez użytkownika. Niezależnie od tego, do ilu grup z typem uprawnień Allow będzie należał.

Dochodzimy tutaj do różnicy, pomiędzy typem Deny a nie zaznaczaniem dla wybranych uprawnień żadnej opcji. Zgodnie z dobrymi praktykami bezpieczeństwa – jeżeli system nie wie co zrobić, to zakłada, że uprawnienia nie powinny zostać nadane. Dokładnie tak jest w tym przypadku. Zaznaczając opcję Deny lub pozostawiając ją pustą (zakładając, że żadne inne uprawnienia nie mają tutaj wpływu) osiągniemy ten sam efekt. Różnica polega na tym, że jeżeli dojdzie tutaj opcja Allow, to pozostawienie pustego pola nie będzie miało wpływu na uprawnienia. Brzmi to skomplikowanie? Posłużmy się więc konkretnym przykładem.

Załóżmy, że użytkownikiem jest Dyrektor IT. Dyrektor IT będzie należał do dwóch grup – IT oraz Management. Z poziomu konta Dyrektora IT spróbujemy dostać się do folderu, który jest dostępny tylko dla zarządu. Oznacza to, że członkowie grupy Management będą mieli uprawnienia do wyświetlenia jego zawartości, a wszyscy pozostali – nie.

Scenariusz 1

Grupa Management posiada uprawnienia typu Allow do wybranego folderu. Pozostałe grupy, IT oraz HR, mają określony typ dostępu jako Deny. Dla uproszczenia posługuję się tutaj wszystkimi uprawnieniami (Full control), ale na potrzeby tego przykładu nie ma to większego znaczenia:

W tym przypadku nasz przykładowy Dyrektor IT nie będzie miał dostępu do wybranego folderu:

Grupa Management z jednej strony nadaje mu możliwość dostępu do folderu. Jednak przynależność do grupy IT powoduje, że efektywne uprawnienia zostają określone jako Deny. Jak rozwiązać taki konflikt?

Scenariusz 2

Tym razem określamy uprawnienia w taki sposób, aby Dyrektor IT posiadał dostęp do wskazanego folderu. Jedynymi uprawnieniami jakie określamy jest typ Allow dla grupy Management. Pozostałe grupy nie są w ogóle ujęte w uprawnieniach do tego folderu:

Przy takich uprawnieniach Dyrektor IT posiada dostęp do folderu:

Jednocześnie wszyscy użytkownicy, którzy nie należą do grupy Management takiego dostępu nie posiadają. Z czego to wynika? Z tego, że nie określając uprawnień typu Deny system nie ingeruje w inne, nadane uprawnienia. Dzięki temu:

  • Dyrektor IT posiada uprawnienia typu Allow jako członek grupy Management. Jednocześnie nie posiada określonych uprawnień jako członek grupy IT. Z tego względu jedyne nadane uprawnienia to uprawnienia typu Allow, więc takie też są uprawnienia efektywne:

  • Członkowie pozostałych grup (np. grupy IT) tak samo jak w przypadku nadanych uprawnień typu Deny, nadal nie posiadają dostępu do folderu. W tym przypadku nie ma uprawnień typu Deny, ale nie ma też uprawnień typu Allow. To klasyczny przykład wspominanej wcześniej sytuacji, gdy system nie wie jednoznacznie co ma zrobić. A w takiej sytuacji efektywne uprawnienia zawsze będą typu Deny:

Czy ten wpis był dla Ciebie przydatny?

Zostaw ocenę!

Średnia ocena 4.2 / 5. 21

Nikt nie ocenił jeszcze tego wpisu. Bądź pierwszym, który to zrobi!

Przykro mi, że post nie był dla Ciebie przydatny ...

Podziel się proszę swoją opinią

Twoja opinia jest dla mnie niezwykle ważna

Loading comments...