NTFSologia, cz. II - Historia systemu plików NTFS i wprowadzenie do jego funkcjonalności     NTFS

NTFSologia, cz. III - NTFS w praktyce

Udostępnij na: Facebook

Autor: Grzegorz Niemirowski

Opublikowano: 7 kwietnia 2005 | Zaktualizowano: 15 czerwca 2007

Zawartość strony
Wielokrotne strumienie danych  Wielokrotne strumienie danych
Twarde dowiązania  Twarde dowiązania
Łącza symboliczne  Łącza symboliczne
Montowanie woluminów  Montowanie woluminów
Uprawnienia  Uprawnienia
Kopiowanie/przenoszenie na inne woluminy  Kopiowanie/przenoszenie na inne woluminy
Kopiowanie/przenoszenie w obrębie woluminu  Kopiowanie/przenoszenie w obrębie woluminu
Przeczytaj pozostałe części tego artykułu  Przeczytaj pozostałe części tego artykułu

Wielokrotne strumienie danych

Z każdym plikiem skojarzony jest nienazwany strumień danych przechowujący zawartość tego pliku. W NTFS może być więcej niż jeden strumień danych związany z danym plikiem i w ten sposób jeden plik może zawierać kilka plików. Te dodatkowe strumienie danych są identyfikowane za pomocą nazw oddzielonych od nazwy głównej za pomocą dwukropka. Chociaż plik może zawierać kilka strumieni, we właściwościach pliku nie zobaczymy rozmiaru strumieni. Możemy mieć np. pusty plik, a w strumieniach umieścić wiele megabajtów danych i mimo to we właściwościach będzie zero bajtów rozmiaru. Narzędzia dostarczane wraz z Windows nie dają w ogóle żadnych informacji o strumieniach. Nie stwierdzimy ich istnienia za pomocą Eksploratora ani polecenia dir. Można więc strumienie wykorzystać do ukrywania danych na dysku, tym bardziej, że bardzo mało osób wie o istnieniu czegoś takiego w NTFS. Strumienie danych mogą być dodawane nie tylko do plików, ale też do katalogów(!). Nie ma tu żadnej sprzeczności. Strumień dołączony do katalogu jest taki sam jak ten dołączony do pliku. Warto więc zastanowić się, czy ukrycie danych w postaci strumienia dołączonego katalogu czy pliku nie jest rozwiązaniem lepszym niż np. szyfrowanie za pomocą EFS.

Zapisać dane do strumienia można przekierowując wyjście polecenia echo:

echo Przykładowy tekst > plik.txt:strumień.txt

gdzie „strumień.txt” jest przykładową nazwą strumienia. Otwierając plik.txt zobaczymy, że jest pusty. Jednak wystarczy wpisać:

more < plik.txt:strumień.txt

aby przekonać się, że tekst nie zniknął i znajduje się w strumieniu. Można też spróbować otworzyć strumień w jakimś programie. Jednak nie zawsze będzie to możliwe, czasem muszą być spełnione dodatkowe warunki. Np. aby otworzyć strumień w notatniku musi on mieć rozszerzenie .txt.

notepad plik.txt:strumień.txt

Rys. 1. Przechowywanie pliku binarnego w strumieniu.

Rys. 1. Przechowywanie pliku binarnego w strumieniu.

Na rysunku widać nieprawidłowo wyświetlaną literę „ł”. Oczywiście nie wynika to z użycia strumieni, tylko z używania standardowo przez wiersz polecenia strony kodowej 852, a nie Windows-1250. Można to zmienić za pomocą polecenia

mode con cp select=1250

Niestety do skopiowania całego pliku do strumienia polecenie copy nie będzie przydatne, ponieważ nie obsługuje strumieni. Z pomocą może przyjść windowsowa wersja uniksowego programu cp, albo program cp z Resource Kit. Aby skopiować plik do strumienia wystarczy wpisać:

cp program.exe plik.txt:mój_programik

Rys. 2. Zapis i odczyt ze strumienia.

Rys. 2. Zapis i odczyt ze strumienia.

W drugą stronę postępujemy w równie prosty sposób:

cp plik.txt:mój_programik program.exe

Niektórzy stwierdzą, że cp nie jest konieczne, bo wystarczy wykonać:

more < program.exe > plik.txt:mój_programik

i podobnie w drugą stronę.

To prawda, ale tylko w przypadku plików tekstowych, gdyż z plikami binarnymi występuje pewien kłopot. Poza tym more jest bardzo wolne w porównaniu z innymi metodami kopiowania plików.

Pomimo tego, że Windows nie dostarcza żadnych narzędzi pozwalających zlokalizować strumienie istnieją programy, które są w stanie przeprowadzic taki właśnie proces. Na Rysunku nr. 3 jest przedstawione działanie programów Streams oraz LADS.

Rys. 3. Wykrywanie strumienia za pomocą programów LADS i Streams.

Rys. 3. Wykrywanie strumienia za pomocą programów LADS i Streams.

 Do początku strony Do początku strony

Twarde dowiązania

Nazwa pliku w strukturze katalogów identyfikuje plik – zbiór danych na dysku. W NTFS-ie może istnieć wiele nazw (dowiązań) do danego pliku na woluminie, a każdy hardlink jest tak samo ważny. Plik przestaje istnieć w momencie usunięcia ostatniego hardlinku, który na niego wskazuje.

W Windows XP i 2003 dostępne jest narzędzie fsutil, a dokładniej polecenie:

fsutil hardlink create <nowa_nazwa_pliku> <istniejąca_nazwa_pliku>

Rys. 4. Użycie polecenia fsutil hardlink create.

Rys. 4. Użycie polecenia fsutil hardlink create.

Rys. 5. Program GiPo@HardLink.

Rys. 5. Program GiPo@HardLink.

Rys. 6. Użycie biblioteki HardLiner.dll.

Rys. 6. Użycie biblioteki HardLiner.dll.

Jak widać jego użycie jest bardzo proste. Występuje tylko jeden problem: fsutil działa jedynie na koncie administracyjnym, nie jest więc dostępny dla zwykłych użytkowników. Nie ma tu znaczenia fakt, że do tworzenia twardych łączy nie potrzeba uprawnień administracyjnych, a tylko uprawnienie do zapisu w katalogu, w którym chcemy utworzyć łącze. Trzeba więc poszukać rozwiązań alternatywnych, a jednym z nich jest pakiet programów GiPo@Utilities, zawierający narzędzie GiPo@HardLink. Ma ono postać prostego kreatora, w którym wybiera się istniejący plik i lokalizację dla hardlinku. Można też skorzystać z biblioteki HardLinker.dll, której zarejestrowanie w systemie (narzędziem regsvr32.exe) powoduje dodanie do menu podręcznego plików polecenia „Create hard-link”. Biblioteka ta znajduje się na licencji GPL i jest dostępna razem z kodem źródłowym.

Rys. 7. Tworzenie dowiązania symbolicznego za pomocą Junction.

Rys. 7. Tworzenie dowiązania symbolicznego za pomocą Junction.

Dowiązania symboliczne mogą być tworzone tylko w obrębie tego samego woluminu, natomiast nie można tworzyć łącz do katalogów. Te ograniczenia można obejść za pomocą innego typu łączy – łączy symbolicznych.

 Do początku strony Do początku strony

Łącza symboliczne

Dowiązania symboliczne (symlinki) funkcjonuja na innej zasadzie, niż dowiązania twarde. Mogą wskazywać na katalogi na innych woluminach, ale nie mogą pokazywać na pliki. Usunięcie katalogu, na który pokazuje symlink powoduje, że symlink ten staje się nieprawidłowy.

System Windows nie dostarcza żadnych narzędzi do zarządzania dowiązaniami symbolicznymi. Najczęściej wykorzystywanym programem jest Junction – to konsolowe narzędzie pozwalające na tworzenie i usuwanie symlinków. Wywołanie programu bez parametrów powoduje wyświetlenie dostępnych parametrów. Jeśli jako parametr podamy katalog, Junction pokaże, czy jest to rzeczywiście katalog, czy tylko symlink do katalogu. Jeśli dodatkowo użyjemy parametru –s Junction będzie szukać symlinków w podanym katalogu, lecz nie sprawdzi jednak czy ten katalog sam nie jest symlinkiem. Aby utworzyć łącze należy podać dwa parametry: ścieżkę do tworzonego łącza i ścieżkę do katalogu docelowego. Aby usunąć link należy podać jego ścieżkę i parametr –d. Symlinki można też kasować z poziomu Eksploratora czy innych programów, tak jak zwykłe katalogi. Należy jednak pamiętać o bardzo ważnej rzeczy – nie każdy menedżer plików lub inny program pozwalający kasować katalogi uwzględnia coś takiego jak dowiązania symboliczne. Kasowanie zazwyczaj przebiega w ten sposób, że jeśli katalog nie jest pusty, usuwana jest jego zawartość, a dopiero gdy zostanie opróżniony, kasowany jest on sam. Istnieje więc niebezpieczeństwo, że usunięta zostanie zawartość katalogu, do którego prowadzi symlink. Niestety, explorer.exe należy do programów nierozpoznających symlinki. Nie pokaże więc, czy to co próbujemy skasować jest folderem czy tylko dowiązaniem. Przy próbie usunięcia dowiązania usunie też zawartość folderu docelowego. Należy więc pamiętać, gdzie się zrobiło symlink, a gdy nie jest się pewnym sprawdzić, np. programem Junction. Bezpiecznie można usuwać symlinki poleceniem rmdir, ponieważ oprócz Junction istnieją inne programy do tworzenia dowiązań symbolicznych, należy do nich m.in. Winbolic.

To, że zazwyczaj symlinki nie są rozpoznawane i widziane jako zwykle katalogi nie stanowi zwykle dużego problemu, daje natomiast duże możliwości. Przede wszystkim bardzo ułatwiają organizację rozmieszczenia danych, co pozwala zapomnieć, na jakiej partycji znajduje się dany katalog. Jeśli np. jakiś program znajduje się na dysku C:, można przenieść jego katalog na partycję D:, a w starym miejscu zrobić dowiązanie do nowego. Dzięki temu nie trzeba się martwić ścieżkami do plików tego programu zapisanymi w rejestrze i różnych plikach, bo one nadal będą poprawne.

Podczas eksperymentów z dowiązaniami symbolicznymi Czytelnicy na pewno zadadzą sobie pytanie: a co się stanie jeśli w katalogu zrobię symlink do tego właśnie katalogu? Wtedy nastąpi zapętlenie – po wejściu do katalogu z linkiem do samego siebie znów zobaczymy ten sam katalog. Będziemy mogli do niego wejść jeszcze raz i po raz kolejny... Na szczęście Microsoft przewidział taką sytuację i nie można tak wchodzić bez końca, ponieważ ograniczenie to wynosi 16 razy. Zapobiega to zapętlaniu się np. programom kopiującym, czy kompresującym.

 Do początku strony Do początku strony

Montowanie woluminów

Zwykle woluminy montowane są jako litery dysków. Dzięki NTFS można jednak zamontować je tak jak w systemach uniksowych – do pustego katalogu. Jest to, podobnie jak symlinki i hardlinki, bardzo przydatna funkcja ułatwiająca organizację dostępu do danych. Wolumin może być zamontowany w kilku miejscach na raz, np. stacja dyskietek może być widoczna jako dysk A: oraz katalog C:\Dyskietka.

Można też usunąć wszystkie punkty montowania i tym samym uczynić wolumin niedostępnym. Ponieważ tylko administratorzy mogą zamontować wolumin, tylko oni będą mogli go używać.

Windows pozwala dosyć łatwo montować i odmontowywać woluminy i za pomocą konsoli Zarządzanie dyskami możemy sprawdzić w jakich punktach dany wolumin jest zamontowany, możemy też dodawać i usuwać punkty montowania. Dla zwolenników rozwiązań tekstowych Microsoft przygotował program mountvol. Jeśli wywołamy go bez parametrów, wyświetlona zostanie krótka pomoc na temat użycia narzędzia oraz lista woluminów wraz z punktami montowania. Aby utworzyć nowy punkt montowania, podajemy programowi mountvol dwa parametry: ścieżkę punktu montowania oraz nazwę woluminu. Nazwa woluminu to ten długi ciąg znaków wyświetlany przy uruchomieniu mountvol bez parametrów lub z parametrem /L. W celu usunięcia punktu montowania należy podać ścieżkę do niego oraz parametr /D.

O możliwości montowania woluminów do katalogów wie bardzo mało programów, nawet Windows ignoruje ją w niektórych przypadkach. Przykładowo jeśli napęd CD-ROM nie jest zamontowany do katalogu „a” jako literka, to nie działa funkcja autoodtwarzania.

Rys. 8. Montowanie napędu CD ROM do katalogu.

Rys. 8. Montowanie napędu CD ROM do katalogu.

Rys. 9. Napęd CD ROM zamontowany w katalogu C:\CD ROM.

Rys. 9. Napęd CD ROM zamontowany w katalogu C:\CD ROM.

 Do początku strony Do początku strony

Uprawnienia

NTFS posiada rozbudowany system uprawnień, które dają możliwość dokładnego ustalenia jakie czynności można wykonywać na systemie plików. Każdy, kto korzysta z systemu operacyjnego loguje się na określone konto, a Windows na podstawie listy uprawnień skojarzonych z danym plikiem decyduje czy zezwalać na określone operacje podejmowane przez użytkownika.

Każdy plik/katalog na partycji NTFS ma dwie listy: SACL (System Access Control List) wykorzystywaną przez system Windows do inspekcji oraz DACL (Discretionary Access Control List) zawierającą uprawnienia przyznane użytkownikom i grupom użytkowników. Każda z list kontroli dostępu posiada wpisy ACE (Access Control Entry), a każdy taki wpis zawiera kod użytkownika lub grupy i spis uprawnień. Jest to więc inny model zabezpieczeń niż w tradycyjnym schemacie uniksowym, gdzie określało się prawa do odczytu, zapisu i wykonania dla właściciela, grupy do której on należy oraz pozostałych użytkowników oraz ewentualne dodatkowe bity. W NTFS do ACL możemy dodawać wielu użytkowników i grupy oraz nadawać im różne uprawnienia.

W Windows NT było 6 uprawnień (patrz Tabela 1 – Uprawnienia NT). Istniało też uprawnienie do kasowania podkatalogów i plików, lecz nie było ono dostępne oddzielnie, ale jako część uprawnienia „pełna kontrola”. Umożliwiało ono usuniecie zawartości katalogu, do którego się odnosiło, nawet jeśli użytkownik nie miał praw do kasowania tej zawartości.

Tabela 1. Uprawnienia NT
Uprawnienie Skrót Uprawnienie dla plików Uprawnienia dla katalogów
Odczyt R Odczyt zawartości Odczyt zawartości
Zapis W Zmiana zawartości Tworzenie plików lub katalogów
Wykonanie X Uruchomienie programu Przechodzenie przez strukturę katalogu
Kasowanie D Kasowanie pliku Kasowanie katalogu
Zmiana uprawnień P Zmiana uprawnień do pliku Zmiana uprawnień do katalogu
Przejęcie na własność O Przejęcie własności pliku Przejęcie własności katalogu

 

Wraz z Windows 2000 rozszerzono ilość uprawnień do 13, a w rzeczywistości tych 13 uprawnień istniało w NTFS wcześniej, jednak były one widoczne jako 6 bardziej ogólnych. Występuje jeszcze czternaste uprawnienie służące do synchronizacji i niedostępne oddzielnie. Kontroluje ono dostęp przez wielowątkowe aplikacje.

Aby ustawianie uprawnień było łatwiejsze, w Windows dostępne są gotowe zestawy uprawnień: Każdy plik i katalog ma swojego właściciela, który może ustawiać uprawnienia. Aby przejąć plik innego użytkownika należy mieć uprawnienie do przejmowania własności pliku/katalogu. Standardowo nie należy samemu uczynić innego użytkownika właścicielem i trzeba w tym celu użyć windowsowej wersji programu chown. Jako pierwszy parametr podajemy użytkownika, który ma się być właścicielem, a następnie listę plików. Możemy użyć parametru –r, aby zmienić właściciela rekursywnie w podkatalogach.

W Windows NT można było tylko nadawać uprawnienia, a jeśli użytkownik miał dane uprawnienie lub należał do grupy mającej uprawnienie, mógł

wykonać daną akcję. W Windows 2000 wprowadzono odmowę uprawnienia, która jest ważniejsza niż przyznanie uprawnienia. Jeśli użytkownik ma prawo do zapisu pliku, ale należy do grupy, która ma odmowę, nie będzie mógł dokonać zapisu w tym pliku. Daje to dużo większą elastyczność przyznawania uprawnień.

KLUCZ:    • = Zaznaczony

Tabela 2. Uprawnienia 2000 w stosunku do uprawnień z NT
Uprawnienia (Windows 2000 i Windows NT 4.0 SCM) Odczyt (R) Zapis (W) Wykonanie (X) Kasowanie (D) Zmiana uprawnień (P) Przejęcie na własność (O)
Przechodzenie przez katalog / Wykonanie pliku          
Wylistowanie zawartości katalogu / Odczyt danych          
Odczyt atrybutów        
Odczyt atrybutów rozszerzonych          
Tworzenie plików / Zapis danych          
Tworzenie katalogów / Dołączanie danych          
Zapis atrybutów          
Zapis atrybutów rozszerzonych          
Kasowanie podkatalogów i plików            
Kasowanie          
Odczyt uprawnień      
Zmiana uprawnień          
Przejęcie na własność          

 

KLUCZ:    • = Zaznaczony

Tabela 3. Standardowe zestawy uprawnień NT
Standardowe grupy uprawnień Typ obiektu Odczyt (R) Zapis (W) Wykonanie (X) Kasowanie (D) Zmiana uprawnień (P) Przejęcie na własność (O) Opis
Brak dostępu Katalogi lub pliki             Brak dostępu do pliku lub katalogu.
Listowanie zawartości Tylko katalogi         Użytkownik może sprawdzać zawartość katalogu i przemieszczać się po jego strukturze.
Odczyt Katalogi lub pliki         Użytkownik może odczytywać pliki i katalogi, przechodzić przez katalogi i uruchamiać programy.
Dodawanie Tylko katalogi         Użytkownik może dodawać katalogi i pliki oraz przechodzić przez katalogi.
Dodawanie i odczyt Tylko katalogi       Użytkownik może dodawać pliki lub katalogi oraz odczytywać i wykonywać pliki.
Zmiana Katalogi lub pliki     Użytkownik może odczytywać, zapisywać, wykonywać i kasować pliki i katalogi. Nie może skasować tego katalogu. Nie może zmieniać uprawnień ani właściciela pliku.
Pełna kontrola Katalogi lub pliki Przyznane są wszystkie uprawnienia łącznie z możliwością kasowania plików i podkatalogów, nawet tych, do których użytkownik nie ma dostępu.

 

KLUCZ:    • = Zaznaczony

Tabela 4. Standardowe zestawy uprawnień 2000
Uprawnienia (Windows 2000 i Windows NT 4.0 SCM) Odczyt Zapis Wyświetlanie zawartości Odczyt i wykonanie Modyfikacja Pełna kontrola
Przechodzenie przez folder / Wykonanie pliku    
Wyświetlanie zawartości / Odczyt danych  
Odczyt atrybutów  
Odczyt atrybutów rozszerzonych  
Tworzenie plików / Zapis danych      
Tworzenie katalogów / Dołączanie danych      
Zapis atrybutów      
Zapis atrybutów rozszerzonych      
Usuwanie podkatalogów i plików          
Usuwanie        
Odczyt uprawnień
Zmiana uprawnień          
Przejęcie na własność          

 

Nawet gdy na dysku znajduje się mała ilość plików, zachodzi problem z nadaniem uprawnień dla grupy plików, np. dla katalogu i jego zawartości. Co prawda nowe pliki i katalogi będą dziedziczyć uprawnienia z katalogu nadrzędnego, ale co zrobić z już istniejącymi obiektami? Windows NT posiada funkcję ustawienia takich samych praw dla całego katalogu i jest to bardzo przydatne, ale tylko doraźnie. Problem pojawia się wtedy, gdy niektóre podkatalogi mają mieć trochę inne prawa. Dlatego model dziedziczenia z Windows NT, nazywany statycznym, w Windows 2000 zastąpiono go nowym, tzw. dynamicznym. Możemy zaznaczyć, że plik/katalog ma dziedziczyć uprawnienia z katalogu nadrzędnego, co oznacza, że zmiany w uprawnieniach katalogu nadrzędnego zostaną skopiowane na ten plik/katalog. Może on mieć jednak ustawione też inne prawa, które będą istniały obok tych dziedziczonych. Zmiana praw w katalogu nadrzędnym spowoduje więc zmianę tylko części praw. Przy odznaczeniu opcji dziedziczenia użytkownik jest pytany, czy dziedziczone prawa mają być usunięte, czy też skopiowane i przechowywane jak reszta uprawnień. Oczywiście istnieje nadal możliwość zresetowania praw obiektów podrzędnych i włączenia dziedziczenia przez nie praw z katalogu nadrzędnego. Jest to opcja „Zamień wpisy uprawnienia na wszystkich obiektach podrzędnych, na wpisy tutaj pokazane, stosowane do obiektów podrzędnych”. Dziedziczenie własności plików i katalogów wygląda analogicznie jak dziedziczenie uprawnień.

Rys. 10. Okienko ustawienia uprawnień.

Rys. 10. Okienko ustawienia uprawnień.

Rys. 11. Okienko ustawień standardowych.

Rys. 11. Okienko ustawień standardowych.

System Windows może przeprowadzać inspekcję użycia uprawnień, zarówno prób udanych i jak i zakończonych niepowodzeniem. Informacje o zaistniałych zdarzeniach są zapisywane w dzienniku zdarzeń. Zarządzanie inspekcją wygląda prawie tak samo jak ustawianie praw, ale może być przeprowadzane tylko przez administratora. Tak samo wybieramy użytkowników i prawa, których użycie chcemy śledzić, natomiast zamiast przyznania prawa lub odmowy mamy sukces lub niepowodzenie. Można zaznaczyć obydwa. Ustawień dziedziczenia zasad inspekcji dokonuje się w ten sam sposób jak dziedziczenia uprawnień.

Rys. 12. Zmiana właściciela pliku programem chown.

Rys. 12. Zmiana właściciela pliku programem chown.

Rys. 13. Okienko zaawansowanego ustawiania uprawnień.

Rys. 13. Okienko zaawansowanego ustawiania uprawnień.

 Do początku strony Do początku strony

Kopiowanie/przenoszenie na inne woluminy

Podczas kopiowania/przenoszenia pliku na inny wolumin NTFS jest tworzony po prostu nowy plik, co powoduje niezachowywanie uprawnienia. Obiekt dziedziczy prawa po katalogu, do którego został skopiowany, a użytkownik kopiujący plik staje się jego właścicielem i twórcą. Podczas przenoszenia pliku na wolumin, który nie jest sformatowany w systemie plików NTFS, wszystkie atrybuty typowe dla tego systemu plików zostają utracone. Obejmuje to uprawnienia, inspekcję, kompresję, szyfrowanie, dodatkowe strumienie danych itp.

 Do początku strony Do początku strony

Kopiowanie/przenoszenie w obrębie woluminu

Podczas przenoszenia pliku nic się faktycznie z nim nie dzieje, zmienia się tylko jego nazwa, która przecież może być jedną z wielu. Plik jest faktycznie tym samym plikiem, więc zachowuje uprawnienia, ustawienia inspekcji i inne ustawienia. Odrębna sytuacja występuje przy kopiowaniu, gdyż tutaj zostaje utworzony nowy plik. Jego uprawnienia i zasady inspekcji są więc dziedziczone z katalogu nadrzędnego, a jego właścicielem staje się użytkownik kopiujący. Inne atrybuty zostają skopiowane z oryginalnej lokalizacji.

 Do początku strony Do początku strony

Przeczytaj pozostałe części tego artykułu


Grzegorz Niemirowski Grzegorz Niemirowski (MVP, MCP)
Studiuje na kierunku Electrical and Computer Engineering na Politechnice Warszawskiej. Rozwija program OE PowerTool - dodatek ulepszający Outlook Express. Autor strony www.grzegorz.net, poświęconej Windows, programowaniu, Outlook Express i OE PowerTool. Bierze udział w konstruowaniu satelitów studenckich.
 Do początku strony Do początku strony

NTFSologia, cz. II - Historia systemu plików NTFS i wprowadzenie do jego funkcjonalności     NTFS