NTFSologia, cz. III - NTFS w praktyce
Autor: Grzegorz Niemirowski
Opublikowano: 7 kwietnia 2005 | Zaktualizowano: 15 czerwca 2007
Zawartość strony
Wielokrotne strumienie danych | |
Twarde dowiązania | |
Łącza symboliczne | |
Montowanie woluminów | |
Uprawnienia | |
Kopiowanie/przenoszenie na inne woluminy | |
Kopiowanie/przenoszenie w obrębie woluminu | |
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.
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.
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.
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. 5. Program GiPo@HardLink.
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.
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
Łą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
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. 9. Napęd CD ROM zamontowany w katalogu C:\CD ROM.
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. 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. 13. Okienko zaawansowanego ustawiania uprawnień.
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
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
Przeczytaj pozostałe części tego artykułu
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 |