Slow7 - Linuxhttp://slow7.pl/linux2022-04-12T17:06:29+00:00Joomla! - Open Source Content ManagementMacierze RAID w systemie Linux2017-04-02T17:55:58+00:002017-04-02T17:55:58+00:00http://slow7.pl/linux/item/143-macierze-raid-w-systemie-linuxpikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/a9ccd7cd1c4267a50c67ac0bd7180172_S.jpg" alt="Macierze RAID w systemie Linux" /></div><div class="K2FeedIntroText"><p>O macierzach w systemie Windows (bądź jak kto woli o pulach magazynu) już stosowny wpis napisałem (a nawet dwa) jednak do tej pory nic nie zostało powiedziane jak łączenie dysków w jedną, wspólną przestrzeń dyskową przeprowadzić w systemie Linux. Czas nadrobić tę zaległość a więc po zapoznaniu się z tym artykułem dowiesz się jak utworzyć i zarządzać macierzą RAID w systemie Linux.</p>
</div><div class="K2FeedFullText">
<p> </p>
<p>Jak utworzyć macierz w systemie Windows oraz jak nią zarządzać dowiesz się Czytelniku po lekturze tych wpisów:</p>
<ul>
<li style="padding-left: 60px;"><a href="http://slow7.pl/server-2003-2008/item/108-windows-server-2012-poradnik-administratora-serwer-plikow">Windows Server 2012. Poradnik administratora. Serwer plików </a></li>
<li style="padding-left: 60px;"><a href="http://slow7.pl/item/98-zarzadzanie-dyskami-czyli-slow-kilka-o-partycjach-i-woluminach" title="Zarządzanie dyskami czyli słów kilka o partycjach i woluminach">Zarządzanie dyskami czyli słów kilka o partycjach i woluminach</a></li>
</ul>
<p> </p>
<p>Utworzenie macierzy przeprowadzimy w systemie Linux Ubuntu 16.04 a zajmiemy się macierzami typu RAID0, RAID1 oraz RAID5.</p>
<p> </p>
<p>Zanim przejdziemy do ich konfiguracji szybkie przypomnienie dotyczące typu tworzonych macierzy.</p>
<p> </p>
<p>Wikipedia bardzo fajnie podaje definicję i sens stosawnia tego typu rozwiązania (źródło: <a href="https://pl.wikipedia.org/wiki/RAID">https://pl.wikipedia.org/wiki/RAID</a>)</p>
<p> </p>
<p>RAID (ang. Redundant Array of Independent Disks – nadmiarowa macierz niezależnych dysków) – sposób wykorzystania w systemie komputerowym dwóch lub większej liczby dysków twardych, w którym dyski te współpracują pomiędzy sobą. Osiąga się w ten sposób szereg różnorodnych możliwości nieosiągalnych przy użyciu zarówno pojedynczego dysku, jak i kilku dysków podłączonych jako oddzielne.</p>
<p> </p>
<p>Rozwiązania typu RAID używane są w następujących celach:</p>
<ul>
<li style="padding-left: 60px;">zwiększenie niezawodności (odporność na awarie);</li>
<li style="padding-left: 60px;">zwiększenie wydajności transmisji danych;</li>
<li style="padding-left: 60px;">powiększenie przestrzeni dostępnej jako jedna całość.</li>
</ul>
<p> </p>
<p>W artykule zajmiemy się macierzą RAID0, RAID1 oraz RAID5 tak więc zanim przejdziemy do konfiguracji krótkie omówienie.</p>
<p> </p>
<p><strong>RAID0 (tzw. striping)</strong></p>
<p> </p>
<p>Do utworzenia macierzy należy użyć przynajmniej dwa dyski (można więcej), powstała macierz oczywiście w systemie będzie widziana jako pojedynczy dysk (tak samo jest w przypadku RAID1 oraz RAID5), przy czym dostępna przestrzeń równa jest: <strong>liczba dysków x rozmiar najmniejszego z dysków</strong> (w wpisie będziemy łączyć dwa dyski o rozmiarze 5 GB tak więc całkowity rozmiar utworzonej macierzy wyniesie 10 GB). Zapis danych rozłożony jest pomiędzy dyskami co oznacza, że dany plik (a raczej jego część) tak naprawdę zapisywany jest na każdym z dysków wchodzącym w skład macierzy. Dzięki równoległemu zapisowi pliku znacząco podnosimy wydajność wykonywanych operacji odczytu/zapisu w myśl zasady - „co ma wykonać jeden to w dwójkę pójdzie szybciej”. Wadą tego typu rozwiązania jest wzrost awaryjności gdyż w przypadku wystąpienia usterki jednego z dysków tracimy dostęp do przechowywanych danych.</p>
<p> </p>
<p>Macierz RAID0 schematycznie została pokazana na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p> </p>
<p><strong>RAID1 (tzw. mirroring)</strong></p>
<p> </p>
<p>Praca macierzy opiera się na replikacji zapisywanych danych pomiędzy dyskami budującymi macierz. Całkowity pojemność macierzy przyjmuje rozmiar najmniejszego użytego dysku. Priorytetem przy wyborze tego typu rozwiązania jest bezpieczeństwo przechowywanych danych ponieważ awaria dysku nie powoduje utraty plików gdyż ich kopia znajduje się na innym dysku wchodzącym w skład macierzy. Wadą macierzy RAID1 jest zmniejszona szybkość zapisu danych (choć zależne jest to wyboru strategii zarządzania bo np. możliwe jest użycie dwóch macierzy RAID0 a następnie połączenie ich w macierz RAID1).</p>
<p> </p>
<p>Macierz użyta w wpisie przyjmie rozmiar 8 GB gdyż do jej zbudowania zostaną użyte dwa dyski o takiej właśnie pojemności.</p>
<p> </p>
<p>Schemat zapisu danych na macierzy typu RAID1 został przedstawiony poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p><strong>RAID5</strong></p>
<p> </p>
<p>Praca macierzy opiera się na wyliczeniu tzw. sum kontrolnych, których zadaniem jest przywrócenie danych w przypadku awarii jednego z dysków. Sumy te są rozproszone po całej strukturze dysku co oznacza, że są one zapisywane na każdym z dysków. Do budowy macierzy należy przeznaczyć minimum trzy dyski przy czym jej pojemnośc równa się: <strong>n minus 1</strong> dysków (do obliczenia całkowitej pojemności macierzy brany jest dysk o najmniejszym rozmiarze). Użycie tego typu macierzy zapewnia Nam zwiększone bezpieczeństwo przechowywanych danych przy jednoczesnym zapewnieniu wysokich wartości odczytu i zapisu.</p>
<p> </p>
<p>Do utworzenia macierzy RAID5 użyjemy trzech dysków o pojemności 10 GB każdy tak więc całkowity rozmiar macierzy wyniesie 20 GB (3 dyski razy 10 GB minus pojemność najmniejszego czyli 10 GB).</p>
<p> </p>
<p>Schemat zapisu danych na macierzy RAID5 został ukazany na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image3.png" alt="image3" width="700" height="413" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>To co zostało już kilka razy zaznaczone ale nie powiedziane wprost to sprawa pojemności użytych dysków, które posłużą do zbudowania macierzy. Jak już pewnie sam do tego Czytelniku doszedłeś to przy konfiguracji macierzy nie opłaca używać się nośników o różnej pojemności gdyż zawsze wiąże się to z marnotrastwem pojemności dysku. Dlatego też dobrą zasadą jest używanie dysków o takim samym rozmiarze.</p>
<p> </p>
<p>Przechodzimy do konfiguracji macierzy.</p>
<p> </p>
<p>Po podłączeniu nowych dysków twardych rozpoczynamy od sprawdzenia czy dyski te widoczne są w systemie. Do sprawdzenia może posłużyć Nam komenda: <strong>lsblk</strong> Jak widać poniżej wszystkie 6 dysków jest aktywnych (dyski od sdb do sdh - dwa o pojemności 5GB, dwa o pojemności 8GB i trzy o pojemności 10 GB).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wylistowanie dostępnych dysków możemy również sprawdzić za pomocą innego polecenia (a tak naprawdę dwóch połączonych ze sobą poleceń): <strong>ls | grep sd </strong>(polecenie wydajemy po przejściu do folderu /dev/).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po upewnieniu się, że wszystkie z podłączonych dysków działają prawidłowo przechodzimy do utworzenia na nich partycji. Partycję utworzymy za pomocą narzędzia: <strong>fdisk</strong>.</p>
<p> </p>
<p>Poniżej na rysunku została przedstawiona lista wszystkich dostępnych opcji, zaś my wykorzystamy kilka z nich:</p>
<ul>
<li style="padding-left: 60px;">n - definicja nowej partycji,</li>
<li style="padding-left: 60px;">m - pomoc,</li>
<li style="padding-left: 60px;">L - lista typów partycji,</li>
<li style="padding-left: 60px;">w - zapis ustawień.</li>
</ul>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image6.png" alt="image6" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Narzędzie wywołujemy z parametrem dysku - polecenie przyjmie postać: <strong>fdisk /dev/sdb</strong></p>
<p> </p>
<p>Po wywołaniu polecenia (przez operację tworzenia partycji przeprowadzi nas kreator) na pierwsze pytanie dotyczące wyświetlenia pomocy odpowiadamy przecząco - wybieramy: <strong>n</strong> (wyświetlenie pomocy odbywa się po wybraniu znaku: <strong>m</strong>) - punkt 1.</p>
<p> </p>
<p>Na każdym z dysków będzie tworzona tylko jedna podstawowa partycja (partycji tej zostanie przypisane całe dostępne miejsce) dlatego też by utworzyć partycję tego typu na kolejne pytanie odpowiadamy poprzez wprowadzenie znaku: <strong>p</strong> - punkt 2</p>
<p> </p>
<p>Kolejne pytania kreatora dotyczą numeru partycji (punkt 3) oraz definicji numeru pierwszego i ostatniego sektora dysku (punkt 4). Na pytania te odpowiadamy wybierając klawisz <strong>Enter</strong> akceptując tym samym zaproponowane opcje domyślne.</p>
<p> </p>
<p>Po zatwierdzeniu wszystkich opcji partycja zostaje utworzona (punkt 5).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image7.png" alt="image7" width="700" height="360" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią czynność jaką musimy wykonać jest zdefiniowanie typu partycji. Aby określić typ partycji należy wprowadzić znak: <strong>t</strong> - punkt 6.</p>
<p> </p>
<p>Aby poznać wszystkie możliwości została wprowadzona litera: <strong>L</strong> po wybraniu, której wyświetli się tabela wszystkich dostępnych opcji - punkt 7.</p>
<p> </p>
<p>Ponieważ tworzona partycja będzie należeć do macierzy jej typ ustalamy na: <strong>Linux RAID auto </strong>Typ ten definiujemy poprzez wprowadzenie wartości: <strong>fd</strong> - punkt 8.</p>
<p> </p>
<p>Aby zatwierdzić całość wprowadzonych ustawień wybieramy: <strong>w</strong> Narzędzie <strong>fdisk</strong> kończy swoje działanie - punkt 9.</p>
<p> </p>
<p>Wszystkie opcje dotyczące struktury dysku zostały zdefiniowane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image8.png" alt="image8" width="700" height="593" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Operację tą powtarzamy dla wszystkich pozostałych dysków (od sdc do sdh).</p>
<p> </p>
<p>Po definicji partycji dysku, efekt przeprowadzonej konfiguracji sprawdzimy poprzez ponowne wybranie polecenia: <strong>lsblk</strong> (użycie parametru <strong>-a</strong> powoduje ukazanie wszystkich dysków). Partycje podstawowe na wszystkich dyskach zostały utworzone (jedna partycja na każdym z dysków: od sbb1 do sdh1).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I ten sam efekt uzyskamy wydając znane Nam już polecenie: <strong>ls /dev/ | grep sd</strong> - jak widać i tu wydanie komendy uwidacznia fakt utworzenia partycji dla każdego z dysków.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tworzenie macierzy rozpoczniemy od utworzenia macierzy typu RAID0.</p>
<p> </p>
<p>Do utworzenia wszystkich macierzy oraz do zarządzania nimi użyjemy narzędzia: <strong>mdadm</strong> Jeśli nie mamy go zainstalowanego pobieramy je za pomocą polecenia: <strong>apt-get install mdadm</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image11.png" alt="image11" width="700" height="377" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Program został zainstalowany.</p>
<p> </p>
<p>Aby utworzyć macierz należy posłużyć się poleceniem o ogólnej składni: <strong>mdadm --create <nazwa_tworzonej_macierzy> --level=<typ_macierzy> --raid-devices=<liczba_dysków_wchodzących_w_skład_macierzy> <definicja_dysków> </strong></p>
<p> </p>
<p>W scenariuszu przyjęto, że macierz RAID0 (nazwa: <strong>md1</strong>) będzie składać się z dwóch dysków <strong>sdb1</strong> oraz <strong>sdc1</strong> tak więc polecenie tworzące macierz przyjmie postać: <strong>mdadm --create /dev/md1 --level=raid0 --raid-devices=2 /dev/sdb1 /dev/sdc1</strong> Po wydaniu komendy macierz RAID0 została utworzona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image12.png" alt="image12" width="700" height="98" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przechodzimy do utworzenia macierzy RAID1 (nazwa: <strong>md2</strong>). W skład macierzy wchodzą również dwa dyski: <strong>sdd1</strong> oraz <strong>sde1</strong> - polecenie tworzące macierz przyjmie kształt: <strong>mdadm --create /dev/md2 --level=raid1 --raid-devices=2 /dev/sdd1 /dev/sde1</strong> Macierz RAID1 została utworzona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image13.png" alt="image13" width="700" height="181" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią macierz jaką utworzymy będzie macierz typu RAID5 (nazwa: <strong>md3</strong>) W skład macierzy wejdą trzy dyski: <strong>sdf1</strong>, <strong>sdg1</strong> oraz <strong>sdh1</strong>. Aby utworzyć macierz wydajemy komendę: <strong>mdadm --create /dev/md3 --level=raid5 --raid-devices=5 /dev/sdf1 /dev/sdg1</strong> <strong>/dev/sdh1</strong> I tym razem utworzenie macierzy kończy się powodzeniem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image14.png" alt="image14" width="700" height="88" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wszystkie trzy macierze zostały utworzone (od md1 do md3) aby zweryfikować ich stan możemy posłużyć się kilkoma poleceniami. Pierwszym z nich jest komenda: <strong>mdadm --query <nazwa_macierzy></strong> Jak widać poniżej wydając polecenie odnośnie wszystkich trzech macierzy uzyskujemy informację o: wielkości macierzy (jak można zauważyć wartości wyliczone przy opisie typu macierzy są zgodne z wartościami rzeczywistymi), typu macierzy, ilości dysków budujących macierz oraz liczbie dysków zapasowych (do tematu wrócimy w dalszej części wpisu).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image15.png" alt="image15" width="700" height="166" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Bardziej szczegółowe informacje na temat danej macierzy uzyskamy wydając polecenie: <strong>mdadm --detail <nazwa_macierzy></strong> Poniżej przedstawiono wynik jaki uzyskano po wydaniu polecenia odnośnie macierzy <strong>/dev/md1</strong></p>
<p> </p>
<p>Informacje zostały wzbogacone o: czas utworzenia macierzy, aktualny status macierzy, ilość dysków wadliwych oraz nazwy dysków wchodzących w jej skład.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image16.png" alt="image16" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Te same polecenie lecz tym razem sprawdzamy macierz RAID1 (<strong>/dev/md2</strong>)</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image17.png" alt="image17" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I macierz RAID5 (<strong>/dev/md3</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image18.png" alt="image18" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnim poleceniem jakie możemy użyć by zweryfikować stan macierzy jest komenda: <strong>cat /proc/mdstat</strong> Po wydaniu komendy poznamy stan wszystkich macierzy dostępnych w systemie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image19.png" alt="image19" width="700" height="228" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wydanie opisanych poleceń potwierdziło iż wszystkie z utworzonych macierzy działają prawidłowo. Aby móc zacząć zapisywanie plików ostatnią czynność jaką musimy wykonać jest formatowanie. Proces formatowania wykonamy za pomocą polecenia: <strong>mkfs.<system_plików> <nazwa_macierzy></strong> Wszystkie macierze formatujemy z wykorzystaniem systemu plików <strong>ext4</strong>. Macierze zostały sformatowane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image20.png" alt="image20" width="700" height="639" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wykonaniu formatowania macierze zostaną automatycznie zamontowane. Efekt montowania możemy śledzić np. z wykorzystaniem graficznego trybu użytkownika w oknie menadżera plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image21.png" alt="image21" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierze dysku zostały poprawnie utworzone i zamontowane od tej pory możemy rozpocząć prowadzenie zapisu plików.</p>
<p> </p>
<p>Kolejną czynność jaką wykonamy jest dodanie odpowiednich informacji do pliku <strong>/etc/fstab</strong> tak by macierze te były automatycznie montowane wraz ze startem systemu. Aby dokonać wpisu do pliku /etc/fstab musimy znać tak zwany numer UUID (ang. Universally Unique IDentifier) macierzy. Identyfikator ten jest 128-bitowym unikalnym numerem, generowanym losowo na podstawie posiadanego w systemie sprzętu oraz wartości zegara systemowego. Sprawdzenie UUID dokonamy z wykorzystaniem polecenia: <strong>blkid</strong> Wpis w pliku /etc/fstab możemy dokonać przy użyciu zdefiniowanej nazwy macierzy ale jest to sposób nie zalecany gdyż w niektórych dystrybucjach Linuxa wcześniej określona nazwa macierzy po restarcie komputera może ulec zmianie. Tak więc odpowiednie wpisy bezpieczniej jest wykonać właśnie z wykorzystaniem identyfikatora UUID.</p>
<p> </p>
<p>Numer UUID jest również wyświetlany po wydaniu komendy: <strong>mdadm --detail <nazwa_macierzy> </strong>lecz nie jest to identyfikator macierzy lecz ostatniego dysku, który do macierzy został dodany.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image22.png" alt="image22" width="700" height="305" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po poznaniu numerów UUID macierzy przechodzimy do edycji pliku <strong>/etc/fstab</strong>. Edycje oczywiście możemy wykonać w dowolnym edytorze, Ja wybrałem <strong>mcedit</strong>. Po otwarciu pliku należy dodać trzy dodatkowe wpisy dla każdej z macierzy osobno. Ogólna składnia wpisu wygląda następująco: <strong>UUID="<identyfikator_UUID>" <punkt_montowania> ext4 defaults 0 0 </strong>Na rysunku poniżej zaprezentowano dodanie wpisów odnoszących się do wcześniej utworzonych macierzy.</p>
<p> </p>
<p>Przyjęto następujące punkty montowań:</p>
<ul>
<li style="padding-left: 60px;">macierz md1 (RAID0) - /dev/macraid0</li>
<li style="padding-left: 60px;">macierz md2 (RAID1) - /dev/macraid1</li>
<li style="padding-left: 60px;">macierz md13(RAID5) - /dev/macraid5</li>
</ul>
<p> </p>
<p><strong><img src="http://slow7.pl/images/stories/linux/macierz/image23.png" alt="image23" width="700" height="406" style="display: block; margin-left: auto; margin-right: auto;" /> </strong></p>
<p>Aby montowanie zakończyło się sukcesem należy utworzyć katalogi, które odpowiadają zdefiniowanym punktom montowania.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image24.png" alt="image24" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Można by było w tym momencie wykonać restart komputera ale za nim to wykonamy sprawdźmy czy na pewno wszystko przebiegnie po Naszej myśli. Edycja pliku <strong>/etc/fstab</strong> niesie za sobą ryzyko popełnienia błędu, który może doprowadzić do nieuruchomienia się systemu. Dlatego zawsze warto przed wykonaniem ponownego uruchomienia komputera upewnić się, że wszystko zostało skonfigurowane prawidłowo.</p>
<p> </p>
<p>Wykonanie montowania w zdefiniowanych lokacjach nie powiedzie się, gdyż utworzone macierze domyślnie zostały uaktywnione i ich punkt montowania został przypisany do innej lokacji. Aby sprawdzić ich stan należy posłużyć się poleceniem: <strong>df -h </strong>Jak widać poniżej wszystkie trzy macierze zostały zamontowane w katalogu <strong>/media/luk/</strong></p>
<p> </p>
<p>Aby je zwolnić wydajemy polecenie: <strong>umount <nazwa_macierzy> </strong>Macierze został zwolnione.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image25.png" alt="image25" width="700" height="394" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdzenia poprawności montowania z wykorzystaniem wpisów zdefiniowanych w <strong>/etc/fstab</strong> wykonamy za pomocą komendy: <strong>mount -a</strong> Jak widać poniżej wydanie polecenia i ponowne sprawdzenie uwidacznia fakt poprawnego zamontowania macierzy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image26.png" alt="image26" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przed wykonaniem restartu komputera na każdej z macierzy został zapisany plik tekstowy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatni test to ponowne uruchomienie komputera. Host został zrestartowany.</p>
<p> </p>
<p>Po uruchomieniu maszyny sprawdzamy stan macierzy. Jak można zaobserwować macierze zostały zamontowane prawidłowo. Uważny Czytelnik na pewno zauważy fakt zmiany nazw macierzy:</p>
<ul>
<li style="padding-left: 60px;">macierz /dev/md1 na /dev/md127 - RAID0</li>
<li style="padding-left: 60px;">macierz /dev/md2 na /dev/md125 - RAID1</li>
<li style="padding-left: 60px;">macierz /dev/md3 na /dev/md126 - RAID5</li>
</ul>
<p> </p>
<p>Zmiana nazwy jest jak najbardziej działaniem prawidłowym i jak już wspomniałem w niektórych dystrybucjach Linuksa występuje. Dlatego też co już również zaznaczyłem wpisy w pliku <strong>/etc/fstab</strong> wykonujemy z wykorzystaniem identyfikatora UUID.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkowo stan macierz sprawdzono z wykorzystaniem polecenia: <strong>cat /proc/mdstat</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image29.png" alt="image29" width="700" height="209" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierze działają prawidłowo i tak naprawdę wpis ten można by było w tym miejscu zakończyć. Ale jak już mamy macierze skonfigurowane sprawdźmy jak poradzić sobie w sytuacji w której jeden z dysków tworzących macierz ulega uszkodzeniu.</p>
<p> </p>
<p>Rozpoczynamy od macierzy RAID0. Została zasymulowana sytuacja uszkodzenia macierzy - jeden z dysków macierzy został celowo odłączony.</p>
<p> </p>
<p>Jak widać poniżej ponowne uruchomienie komputera kończy się niepowodzeniem. Macierz RAID1 oraz RAID5 zostają zamontowane prawidłowo, montowanie macierzy RAID0 kończy się niepowodzeniem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image30.png" alt="image30" width="700" height="225" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na szczęście dla Nas system Ubuntu został wyposażony w mechanizm uruchomienia się w trybie awaryjnym. Jeśli z jakiś powodów system nie może załadować się prawidłowo tryb recovery zostanie uruchomiony automatyczne. Po uruchomieni systemu w trybie tym należy zalogować się z uprawnieniami użytkownika <strong>root</strong>. Po poprawnym wykonaniu tego kroku przechodzimy do edycji pliku <strong>/etc/fstab</strong> w którym to blokujemy wykonanie linii wpisu dotyczącego macierzy RAID0 (do blokowanie wykorzystujemy znak komentarza - #).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image31.png" alt="image31" width="700" height="524" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zapisie zmian wykonujemy ponowny rozruch maszyny i sprawdzamy zamontowane macierze.</p>
<p> </p>
<p>Macierze RAID znów zmieniły swoją numerację:</p>
<ul>
<li style="padding-left: 60px;">macierz /dev/md125 - RAID0 - nieobecna</li>
<li style="padding-left: 60px;">macierz /dev/md127 - RAID1</li>
<li style="padding-left: 60px;">macierz /dev/md126 - RAID5</li>
</ul>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdzamy szczegóły macierzy RAID0 - jak można zauważyć macierz ta jest nieaktywna.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dostęp do plików zapisanych na macierzy został utracony. W przypadku tego typu macierzy tak naprawdę niewiele można zrobić, sposób alokacji danych (podział ich na różne dyski) na dyskach skutecznie uniemożliwi Nam ich odzyskanie. Szybkość zapisu w tego typu macierzach jest okupiona bezpieczeństwem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy zatem co stanie się w przypadku macierzy typu RAID1.</p>
<p> </p>
<p>Uszkodzeniu ulega jeden z dysków macierzy i tak jak poprzednio system nie zostaje poprawnie uruchomiony. Zostają zamontowane macierze RAID0 (macierz została przywrócona poprze podłączenie uprzednio odłączonego dysku) oraz RAID5.</p>
<p> </p>
<p>System uruchamia się w trybie awaryjnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image35.png" alt="image35" width="700" height="234" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tak jak w przypadku RAID0 w pliku <strong>/etc/fstab</strong> zostaje zablokowana linia montowania macierzy lecz tym razem blokujemy wpis odnoszący się do macierzy <strong>RAID1</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image36.png" alt="image36" width="700" height="517" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu zmian ich zapisie restartujemy komputer, system uruchamia się prawidłowo.</p>
<p> </p>
<p>Macierze RAID ponownie zmieniły swoją numerację:</p>
<ul>
<li style="padding-left: 60px;">macierz /dev/md125 - RAID0</li>
<li style="padding-left: 60px;">macierz /dev/md126 - RAID1 - nieobecna</li>
<li style="padding-left: 60px;">macierz /dev/md127 - RAID5</li>
</ul>
<p> </p>
<p>Sprawdzamy stan macierzy RAID1. Po analizie danych stan macierzy został ustalony na: <strong>inactive</strong> (bardzo często zdarza się, że w przypadku niedziałających prawidłowo macierzy narzędzie <strong>mdadm</strong> źle definiuje jej typ, jak się Czytelniku przyjrzysz typ macierzy został ustalony na RAID0 co oczywiście jest błędem).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby macierz naprawić (wszak po to definiowaliśmy macierz RAID1 by w razie jej awarii nie utracić dostępu do swoich plików) w pierwszej kolejności należy ją zatrzymać. Zatrzymanie realizujemy za pomocą polecenia: <strong>mdadm --stop <nazwa_macierzy></strong> Macierz RAID1 przestała być aktywna.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image38.png" alt="image38" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Za pomocą komendy: <strong>lsblk</strong> sprawdzamy identyfikatory dysków (odłączenie dysku spowodowało zmianę ich nazw) jak widać poniżej jedynym dyskiem nieprzypisanym do macierzy jest dysk sdd1 tak więc dysk ten musi należeć do macierzy RAID1. Aby macierz uaktywnić wydajemy polecenie: <strong>mdadm --assemble --force <nazwa_macierzy> <nazwa_dysku></strong> Po wydaniu komendy macierz została uruchomiona z jednym aktywnym dyskiem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby sprawdzić stan macierzy wydajemy polecenie: <strong>mdadm --detail <nazwa_macierzy> </strong>Przeglądając uzyskane wyniki zauważyć można, że jest to macierz typu RAID1 a w jej skład wchodzi tylko jeden dysk.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przejdźmy zatem do jej zamontowania i sprawdzenia czy uzyskamy dostęp do naszych plików.</p>
<p> </p>
<p>W tym celu w pliku <strong>/etc/fstab</strong> ponownie uaktywniamy linię odpowiedzialną za automatyczne zamontowanie macierzy RAID1 podczas startu sytemu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image41.png" alt="image41" width="700" height="461" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po naniesieniu poprawek za pomocą komendy: <strong>mount -a</strong> wykonujemy operację montowania macierzy (punkt 1). Próba podłączenia macierzy do zasobu kończy się niepowodzeniem (punkt 2). Powodem takiego stanu rzeczy jest brak katalogu. Szybko poprawiamy konfigurację poprzez utworzenie folderu <strong>/dev/macraid1</strong> (punkt 3) i ponawiamy próbę montowania. Tym razem próba kończy się powodzeniem (punkt 4).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierz została podłączona. Fakt ten potwierdzamy wydaniem polecenia: <strong>df -h</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image43.png" alt="image43" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatni test to próba otwarcia pliku i jak widać kończy się on sukcesem. Odzyskaliśmy dostęp do naszych plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image44.png" alt="image44" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Naprawmy naszą macierz RAID1 i dodajmy do niej drugi, sprawny dysk. Napęd został podłączony do hosta. Po uruchomieniu systemu sprawdzamy litery dysku. Jak widzimy niżej jedynym wolnym dyskiem jest dysk <strong>sdd1</strong> (po podłączeniu nowego dysku zmieniają się ich nazwy a także po raz kolejny nazwy macierzy: /dev/md125 - macierz RAID1) i to jego włączymy w strukturę macierzy RAID1.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image45.png" alt="image45" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby upewnić się co do nazwy macierzy sprawdzamy jej stan.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image46.png" alt="image46" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po sprawdzeniu i upewnieniu się co do nazwy macierzy i jej typu przystępujemy do dołączenia nowego dysku. Dysk dodajemy za pomocą już znanego Nam polecenia: <strong>mdadm --add <nazwa_dysku></strong> Dysk został dodany poprawnie. Ponowne sprawdzenie stanu macierzy ukazuje fakt jej odbudowy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image47.png" alt="image47" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierz RAID1 została w pełni odbudowana i odzyskała swoją sprawność.</p>
<p> </p>
<p>Zanim przejdziemy dalej wykonajmy jeszcze jeden eksperyment. Do macierzy został dodany nowy dysk <strong>/dev/sdd1</strong>, drugim dyskiem wchodzącym w jej skład jest napęd <strong>/dev/sde1</strong> zasymulujmy uszkodzenie tego napędu i sprawdźmy czy w dalszym ciągu będzie możliwy dostęp do plików. Tak więc scenariusz sprowadza się do sytuacji w której mieliśmy działającą macierz RAID1 złożoną z dwóch dysków, pierwszy z nich uległ uszkodzeniu, macierz naprawiliśmy dodając nowy dysk (zastępując ten wadliwy) lecz niestety dotąd dobry dysk numer dwa również ulega awarii (sytuacja trochę naciągana ale nie niemożliwa).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image48.png" alt="image48" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dysk <strong>/dev/sde1 </strong>za pomocą komendy: <strong>mdadm <nazwa_macierzy> --fail <nazwa_dysku></strong> odznaczamy jako uszkodzony. Sprawdzenie stanu macierzy potwierdza fakt odznaczenia dysku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dysk <strong>/dev/sde1</strong> z macierzy RAID1 został usunięty.</p>
<p> </p>
<p>Pomimo usunięcia dysku dostęp do naszych danych jest nadal możliwy ponieważ ich kopia znajduje się na drugim dysku. Nasz test zakończył się powodzeniem ponieważ macierz zdążyła się odbudować.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Naprawmy naszą macierz i dodajmy z powrotem dysk <strong>/dev/sde1</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dysk został dodany, sprawdzenie stanu macierzy uwidacznia jej odbudowę. Po odbudowaniu macierz RAID1 wraca do pełnej funkcjonalności.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W przypadku macierzy RAID1 mamy do czynienia z sytuacją odwrotną niż w przypadku RAID0 - bezpieczeństwo przechowywanych danych ma wyższy priorytet niż szybkość ich zapisu/odczytu.</p>
<p> </p>
<p>Do rozważenia pozostała Nam sytuacja w której to uszkodzeniu ulega macierz typu RAID5. Procedura uzyskiwania dostępu do danych jest bardzo podobna do tej przedstawionej w opisie macierzy RAID1 ale nic nie stoi na przeszkodzie by ją szybko omówić.</p>
<p> </p>
<p>Jeden z dysków tworzących macierz zostaje uszkodzony jak już pewnie Czytelniku się domyślasz efektem tego jest brak dostępu do systemu (na szczęście mamy tryb awaryjny). Macierz RAID0 oraz RAID1 zostają zamontowane prawidłowo.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image53.png" alt="image53" width="700" height="262" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po uruchomieniu trybu awaryjnego w pliku <strong>/etc/fstab </strong>blokujemy wpis dotyczący montowania macierzy RAID5.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image54.png" alt="image54" width="700" height="517" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po poprawnym uruchomieniu systemu sprawdzamy stan zamontowanych macierzy.</p>
<p> </p>
<p>Nazwy macierzy przedstawiają się następująco:</p>
<ul>
<li style="padding-left: 60px;">macierz /dev/md125 - RAID0</li>
<li style="padding-left: 60px;">macierz /dev/md127 - RAID1</li>
<li style="padding-left: 60px;">macierz /dev/md126 - RAID5 - nieobecna</li>
</ul>
<p> </p>
<p>Wyświetlając szczegóły macierzy RAID5 (i tu ponownie macierz zostaje błędnie zidentyfikowana) jej stan zostaje określony jako: <strong>inactive</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image55.png" alt="image55" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby odzyskać dostęp do danych:</p>
<p style="margin-left: 30px;">1 - zatrzymujemy macierz - <strong>mdadm --stop <nazwa_macierzy></strong></p>
<p style="margin-left: 30px;">2 - ponownie uruchamiamy macierz wraz z definicją dysków - <strong>mdadm --assemble --force <nazwa_macierzy> <nazwa_dysku></strong></p>
<p> </p>
<p>Sprawdzenie stanu macierzy (punkt 3) potwierdza fakt jej uruchomienia.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image56.png" alt="image56" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Gdy macierz działa w pliku <strong>/etc/fstab</strong> uaktywniamy wpis odnoszący się do jej montowania.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image57.png" alt="image57" width="700" height="562" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby macierz została prawidłowo zamontowana musimy ponownie utworzyć katalog, który został zdefiniowany w pliku <strong>/etc/fstab</strong> Brak punktu montowania uniemożliwi załadowanie macierzy.</p>
<p> </p>
<p>Po wykonaniu tych wszystkich czynności dostęp do plików zostaje przywrócony.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image58.png" alt="image58" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeżeli chcemy macierz usunąć musimy wykonać następujące kroki:</p>
<p style="margin-left: 30px;">- wykasowanie wpisów w pliku <strong>/etc/fstab</strong> odnoszących się do skonfigurowanych macierzy,</p>
<p style="margin-left: 30px;">- zatrzymanie macierzy - polecenie: <strong>mdadm --stop <nazwa_macierzy></strong></p>
<p style="margin-left: 30px;">- usunięcie dysków wchodzących w skład macierzy - polecenie: <strong>mdadm <nazwa_macierzy> -r <nazwa_dysku></strong></p>
<p style="margin-left: 30px;"><strong>- </strong>jeżeli dysk ma pracować jako normalny wolumin warto również wydać polecenie: <strong>dd if=/dev/zero of=<nazwa_dysku> bs=1M count=1024</strong> celem usunięcia informacji dotyczących konfiguracji dysku (ostrożnie z poleceniem, gdyż jego użycie wiąże się z zniszczeniem danych przechowywanych na dysku) a następnie użycia narzędzia <strong>fdisk</strong> celem utworzenia nowych partycji.</p>
<p> </p>
<p>Z narzędziem <strong>mdadm</strong> związana jest jeszcze jedna ciekawa funkcja a mianowicie podczas konfiguracji macierzy można zdefiniować <strong>dysk zapasowy</strong> tzw. spare devices, który w razie wystąpienia awarii przejmie zadania dysku uszkodzonego.</p>
<p> </p>
<p>Prześledźmy sposób konfiguracji mechanizmu na przykładzie macierzy RAID1 (z macierzą typu RAID0 funkcja ta nie ma zastosowania).</p>
<p> </p>
<p>W systemie istnieją trzy dyski: sdb1, sdc1 oraz sdd1. Dwa pierwsze z nich posłużą do zbudowania macierzy zaś trzeci będzie dyskiem zapasowym.</p>
<p> </p>
<p>Rozpoczniemy od utworzenia macierzy RAID1 złożonej z dwóch dysków i jednego zapasowego. Aby skonfigurować macierz wydajemy polecenie: <strong>mdadm --create <nazwa_macierzy> --level=<typ_macierzy> --raid-devices=<ilość_dysków> <nazwa_dysków> --spare-devices=<ilość_dysków_zapasowych> <nazwa_dysków></strong></p>
<p> </p>
<p>Tak więc podstawiając wszystkie dane aby utworzyć macierz RAID1 z wykorzystaniem dwóch dysków sdb1 oraz sdc1 i jednym zapasowym sdd1 należy wydać polecenie jak na zrzucie poniżej. Macierz RAID1 została utworzona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image59.png" alt="image59" width="700" height="181" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy dane szczegółowe macierzy. Jak można zauważyć macierz tworzą 3 dyski przy czym dwa z nich są aktywne a zaś jeden jest dyskiem zapasowym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image60.png" alt="image60" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po utworzeniu macierzy przeprowadzamy jej formatowanie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image61.png" alt="image61" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Oraz celem automatycznego montowania dodajemy odpowiedni wpis w pliku <strong>/etc/fstab</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image62.png" alt="image62" width="700" height="427" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierz została zamontowana w lokacji <strong>/dev/macraid1</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na macierzy został utworzony plik: <strong>plikmacraid1.txt</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image64.png" alt="image64" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wykonaniu tych wszystkich czynności celem ostatecznego sprawdzenia dokonujemy restartu komputera.</p>
<p> </p>
<p>Ładowanie systemu przebiega bez żadnych problemów a jak się można domyślać po ponownym uruchomieniu hosta następuje zmiana nazwy macierzy. Macierz z <strong>/dev/md1</strong> została przemianowana na <strong>/dev/md127</strong></p>
<p> </p>
<p>Ponowne sprawdzenie szczegółów macierzy potwierdza, iż wszystko jest w porządku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierz działa i jest sprawna czas zatem sprawdzić jak zachowa się ona w sytuacji uszkodzenia jednego z dysków.</p>
<p> </p>
<p>Dysk sdb1 ulega awarii i odznaczamy go jako uszkodzony (punkt 1) po wykonaniu tej operacji sprawdzamy szczegóły macierzy (punkt 2). Dotąd nie aktywny dysk sdd1 automatycznie przejął (bez żadnej ingerencji) zadania dysku sdb1 (punkt 3) - rozpoczęła się odbudowa macierzy tak by przywrócić jej pełną funkcjonalność.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image66.png" alt="image66" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dostęp do zapisanych plików jest oczywiście możliwy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image67.png" alt="image67" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dotarliśmy do końca - mam nadzieję, że po lekturze tego wpisu macierze w systemie Linux nie będą miały przed Tobą żadnych tajemnic.</p>
<p> </p>
<hr />
<p> </p>
<p>BIBLIOGRAFIA:</p>
<p> </p>
<p><a href="https://forum.ivorde.com/mdadm-how-can-i-destroy-or-delete-an-array-t85.html">https://forum.ivorde.com/mdadm-how-can-i-destroy-or-delete-an-array-t85.html</a></p>
<p><a href="https://raid.wiki.kernel.org/index.php/RAID_setup">https://raid.wiki.kernel.org/index.php/RAID_setup</a></p>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-create-raid-arrays-with-mdadm-on-ubuntu-16-04">https://www.digitalocean.com/community/tutorials/how-to-create-raid-arrays-with-mdadm-on-ubuntu-16-04</a></p>
<p><a href="http://www.tecmint.com/create-raid0-in-linux/">http://www.tecmint.com/create-raid0-in-linux/</a></p></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/a9ccd7cd1c4267a50c67ac0bd7180172_S.jpg" alt="Macierze RAID w systemie Linux" /></div><div class="K2FeedIntroText"><p>O macierzach w systemie Windows (bądź jak kto woli o pulach magazynu) już stosowny wpis napisałem (a nawet dwa) jednak do tej pory nic nie zostało powiedziane jak łączenie dysków w jedną, wspólną przestrzeń dyskową przeprowadzić w systemie Linux. Czas nadrobić tę zaległość a więc po zapoznaniu się z tym artykułem dowiesz się jak utworzyć i zarządzać macierzą RAID w systemie Linux.</p>
</div><div class="K2FeedFullText">
<p> </p>
<p>Jak utworzyć macierz w systemie Windows oraz jak nią zarządzać dowiesz się Czytelniku po lekturze tych wpisów:</p>
<ul>
<li style="padding-left: 60px;"><a href="http://slow7.pl/server-2003-2008/item/108-windows-server-2012-poradnik-administratora-serwer-plikow">Windows Server 2012. Poradnik administratora. Serwer plików </a></li>
<li style="padding-left: 60px;"><a href="http://slow7.pl/item/98-zarzadzanie-dyskami-czyli-slow-kilka-o-partycjach-i-woluminach" title="Zarządzanie dyskami czyli słów kilka o partycjach i woluminach">Zarządzanie dyskami czyli słów kilka o partycjach i woluminach</a></li>
</ul>
<p> </p>
<p>Utworzenie macierzy przeprowadzimy w systemie Linux Ubuntu 16.04 a zajmiemy się macierzami typu RAID0, RAID1 oraz RAID5.</p>
<p> </p>
<p>Zanim przejdziemy do ich konfiguracji szybkie przypomnienie dotyczące typu tworzonych macierzy.</p>
<p> </p>
<p>Wikipedia bardzo fajnie podaje definicję i sens stosawnia tego typu rozwiązania (źródło: <a href="https://pl.wikipedia.org/wiki/RAID">https://pl.wikipedia.org/wiki/RAID</a>)</p>
<p> </p>
<p>RAID (ang. Redundant Array of Independent Disks – nadmiarowa macierz niezależnych dysków) – sposób wykorzystania w systemie komputerowym dwóch lub większej liczby dysków twardych, w którym dyski te współpracują pomiędzy sobą. Osiąga się w ten sposób szereg różnorodnych możliwości nieosiągalnych przy użyciu zarówno pojedynczego dysku, jak i kilku dysków podłączonych jako oddzielne.</p>
<p> </p>
<p>Rozwiązania typu RAID używane są w następujących celach:</p>
<ul>
<li style="padding-left: 60px;">zwiększenie niezawodności (odporność na awarie);</li>
<li style="padding-left: 60px;">zwiększenie wydajności transmisji danych;</li>
<li style="padding-left: 60px;">powiększenie przestrzeni dostępnej jako jedna całość.</li>
</ul>
<p> </p>
<p>W artykule zajmiemy się macierzą RAID0, RAID1 oraz RAID5 tak więc zanim przejdziemy do konfiguracji krótkie omówienie.</p>
<p> </p>
<p><strong>RAID0 (tzw. striping)</strong></p>
<p> </p>
<p>Do utworzenia macierzy należy użyć przynajmniej dwa dyski (można więcej), powstała macierz oczywiście w systemie będzie widziana jako pojedynczy dysk (tak samo jest w przypadku RAID1 oraz RAID5), przy czym dostępna przestrzeń równa jest: <strong>liczba dysków x rozmiar najmniejszego z dysków</strong> (w wpisie będziemy łączyć dwa dyski o rozmiarze 5 GB tak więc całkowity rozmiar utworzonej macierzy wyniesie 10 GB). Zapis danych rozłożony jest pomiędzy dyskami co oznacza, że dany plik (a raczej jego część) tak naprawdę zapisywany jest na każdym z dysków wchodzącym w skład macierzy. Dzięki równoległemu zapisowi pliku znacząco podnosimy wydajność wykonywanych operacji odczytu/zapisu w myśl zasady - „co ma wykonać jeden to w dwójkę pójdzie szybciej”. Wadą tego typu rozwiązania jest wzrost awaryjności gdyż w przypadku wystąpienia usterki jednego z dysków tracimy dostęp do przechowywanych danych.</p>
<p> </p>
<p>Macierz RAID0 schematycznie została pokazana na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p> </p>
<p><strong>RAID1 (tzw. mirroring)</strong></p>
<p> </p>
<p>Praca macierzy opiera się na replikacji zapisywanych danych pomiędzy dyskami budującymi macierz. Całkowity pojemność macierzy przyjmuje rozmiar najmniejszego użytego dysku. Priorytetem przy wyborze tego typu rozwiązania jest bezpieczeństwo przechowywanych danych ponieważ awaria dysku nie powoduje utraty plików gdyż ich kopia znajduje się na innym dysku wchodzącym w skład macierzy. Wadą macierzy RAID1 jest zmniejszona szybkość zapisu danych (choć zależne jest to wyboru strategii zarządzania bo np. możliwe jest użycie dwóch macierzy RAID0 a następnie połączenie ich w macierz RAID1).</p>
<p> </p>
<p>Macierz użyta w wpisie przyjmie rozmiar 8 GB gdyż do jej zbudowania zostaną użyte dwa dyski o takiej właśnie pojemności.</p>
<p> </p>
<p>Schemat zapisu danych na macierzy typu RAID1 został przedstawiony poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p><strong>RAID5</strong></p>
<p> </p>
<p>Praca macierzy opiera się na wyliczeniu tzw. sum kontrolnych, których zadaniem jest przywrócenie danych w przypadku awarii jednego z dysków. Sumy te są rozproszone po całej strukturze dysku co oznacza, że są one zapisywane na każdym z dysków. Do budowy macierzy należy przeznaczyć minimum trzy dyski przy czym jej pojemnośc równa się: <strong>n minus 1</strong> dysków (do obliczenia całkowitej pojemności macierzy brany jest dysk o najmniejszym rozmiarze). Użycie tego typu macierzy zapewnia Nam zwiększone bezpieczeństwo przechowywanych danych przy jednoczesnym zapewnieniu wysokich wartości odczytu i zapisu.</p>
<p> </p>
<p>Do utworzenia macierzy RAID5 użyjemy trzech dysków o pojemności 10 GB każdy tak więc całkowity rozmiar macierzy wyniesie 20 GB (3 dyski razy 10 GB minus pojemność najmniejszego czyli 10 GB).</p>
<p> </p>
<p>Schemat zapisu danych na macierzy RAID5 został ukazany na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image3.png" alt="image3" width="700" height="413" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>To co zostało już kilka razy zaznaczone ale nie powiedziane wprost to sprawa pojemności użytych dysków, które posłużą do zbudowania macierzy. Jak już pewnie sam do tego Czytelniku doszedłeś to przy konfiguracji macierzy nie opłaca używać się nośników o różnej pojemności gdyż zawsze wiąże się to z marnotrastwem pojemności dysku. Dlatego też dobrą zasadą jest używanie dysków o takim samym rozmiarze.</p>
<p> </p>
<p>Przechodzimy do konfiguracji macierzy.</p>
<p> </p>
<p>Po podłączeniu nowych dysków twardych rozpoczynamy od sprawdzenia czy dyski te widoczne są w systemie. Do sprawdzenia może posłużyć Nam komenda: <strong>lsblk</strong> Jak widać poniżej wszystkie 6 dysków jest aktywnych (dyski od sdb do sdh - dwa o pojemności 5GB, dwa o pojemności 8GB i trzy o pojemności 10 GB).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wylistowanie dostępnych dysków możemy również sprawdzić za pomocą innego polecenia (a tak naprawdę dwóch połączonych ze sobą poleceń): <strong>ls | grep sd </strong>(polecenie wydajemy po przejściu do folderu /dev/).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po upewnieniu się, że wszystkie z podłączonych dysków działają prawidłowo przechodzimy do utworzenia na nich partycji. Partycję utworzymy za pomocą narzędzia: <strong>fdisk</strong>.</p>
<p> </p>
<p>Poniżej na rysunku została przedstawiona lista wszystkich dostępnych opcji, zaś my wykorzystamy kilka z nich:</p>
<ul>
<li style="padding-left: 60px;">n - definicja nowej partycji,</li>
<li style="padding-left: 60px;">m - pomoc,</li>
<li style="padding-left: 60px;">L - lista typów partycji,</li>
<li style="padding-left: 60px;">w - zapis ustawień.</li>
</ul>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image6.png" alt="image6" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Narzędzie wywołujemy z parametrem dysku - polecenie przyjmie postać: <strong>fdisk /dev/sdb</strong></p>
<p> </p>
<p>Po wywołaniu polecenia (przez operację tworzenia partycji przeprowadzi nas kreator) na pierwsze pytanie dotyczące wyświetlenia pomocy odpowiadamy przecząco - wybieramy: <strong>n</strong> (wyświetlenie pomocy odbywa się po wybraniu znaku: <strong>m</strong>) - punkt 1.</p>
<p> </p>
<p>Na każdym z dysków będzie tworzona tylko jedna podstawowa partycja (partycji tej zostanie przypisane całe dostępne miejsce) dlatego też by utworzyć partycję tego typu na kolejne pytanie odpowiadamy poprzez wprowadzenie znaku: <strong>p</strong> - punkt 2</p>
<p> </p>
<p>Kolejne pytania kreatora dotyczą numeru partycji (punkt 3) oraz definicji numeru pierwszego i ostatniego sektora dysku (punkt 4). Na pytania te odpowiadamy wybierając klawisz <strong>Enter</strong> akceptując tym samym zaproponowane opcje domyślne.</p>
<p> </p>
<p>Po zatwierdzeniu wszystkich opcji partycja zostaje utworzona (punkt 5).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image7.png" alt="image7" width="700" height="360" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią czynność jaką musimy wykonać jest zdefiniowanie typu partycji. Aby określić typ partycji należy wprowadzić znak: <strong>t</strong> - punkt 6.</p>
<p> </p>
<p>Aby poznać wszystkie możliwości została wprowadzona litera: <strong>L</strong> po wybraniu, której wyświetli się tabela wszystkich dostępnych opcji - punkt 7.</p>
<p> </p>
<p>Ponieważ tworzona partycja będzie należeć do macierzy jej typ ustalamy na: <strong>Linux RAID auto </strong>Typ ten definiujemy poprzez wprowadzenie wartości: <strong>fd</strong> - punkt 8.</p>
<p> </p>
<p>Aby zatwierdzić całość wprowadzonych ustawień wybieramy: <strong>w</strong> Narzędzie <strong>fdisk</strong> kończy swoje działanie - punkt 9.</p>
<p> </p>
<p>Wszystkie opcje dotyczące struktury dysku zostały zdefiniowane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image8.png" alt="image8" width="700" height="593" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Operację tą powtarzamy dla wszystkich pozostałych dysków (od sdc do sdh).</p>
<p> </p>
<p>Po definicji partycji dysku, efekt przeprowadzonej konfiguracji sprawdzimy poprzez ponowne wybranie polecenia: <strong>lsblk</strong> (użycie parametru <strong>-a</strong> powoduje ukazanie wszystkich dysków). Partycje podstawowe na wszystkich dyskach zostały utworzone (jedna partycja na każdym z dysków: od sbb1 do sdh1).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I ten sam efekt uzyskamy wydając znane Nam już polecenie: <strong>ls /dev/ | grep sd</strong> - jak widać i tu wydanie komendy uwidacznia fakt utworzenia partycji dla każdego z dysków.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tworzenie macierzy rozpoczniemy od utworzenia macierzy typu RAID0.</p>
<p> </p>
<p>Do utworzenia wszystkich macierzy oraz do zarządzania nimi użyjemy narzędzia: <strong>mdadm</strong> Jeśli nie mamy go zainstalowanego pobieramy je za pomocą polecenia: <strong>apt-get install mdadm</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image11.png" alt="image11" width="700" height="377" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Program został zainstalowany.</p>
<p> </p>
<p>Aby utworzyć macierz należy posłużyć się poleceniem o ogólnej składni: <strong>mdadm --create <nazwa_tworzonej_macierzy> --level=<typ_macierzy> --raid-devices=<liczba_dysków_wchodzących_w_skład_macierzy> <definicja_dysków> </strong></p>
<p> </p>
<p>W scenariuszu przyjęto, że macierz RAID0 (nazwa: <strong>md1</strong>) będzie składać się z dwóch dysków <strong>sdb1</strong> oraz <strong>sdc1</strong> tak więc polecenie tworzące macierz przyjmie postać: <strong>mdadm --create /dev/md1 --level=raid0 --raid-devices=2 /dev/sdb1 /dev/sdc1</strong> Po wydaniu komendy macierz RAID0 została utworzona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image12.png" alt="image12" width="700" height="98" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przechodzimy do utworzenia macierzy RAID1 (nazwa: <strong>md2</strong>). W skład macierzy wchodzą również dwa dyski: <strong>sdd1</strong> oraz <strong>sde1</strong> - polecenie tworzące macierz przyjmie kształt: <strong>mdadm --create /dev/md2 --level=raid1 --raid-devices=2 /dev/sdd1 /dev/sde1</strong> Macierz RAID1 została utworzona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image13.png" alt="image13" width="700" height="181" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią macierz jaką utworzymy będzie macierz typu RAID5 (nazwa: <strong>md3</strong>) W skład macierzy wejdą trzy dyski: <strong>sdf1</strong>, <strong>sdg1</strong> oraz <strong>sdh1</strong>. Aby utworzyć macierz wydajemy komendę: <strong>mdadm --create /dev/md3 --level=raid5 --raid-devices=5 /dev/sdf1 /dev/sdg1</strong> <strong>/dev/sdh1</strong> I tym razem utworzenie macierzy kończy się powodzeniem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image14.png" alt="image14" width="700" height="88" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wszystkie trzy macierze zostały utworzone (od md1 do md3) aby zweryfikować ich stan możemy posłużyć się kilkoma poleceniami. Pierwszym z nich jest komenda: <strong>mdadm --query <nazwa_macierzy></strong> Jak widać poniżej wydając polecenie odnośnie wszystkich trzech macierzy uzyskujemy informację o: wielkości macierzy (jak można zauważyć wartości wyliczone przy opisie typu macierzy są zgodne z wartościami rzeczywistymi), typu macierzy, ilości dysków budujących macierz oraz liczbie dysków zapasowych (do tematu wrócimy w dalszej części wpisu).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image15.png" alt="image15" width="700" height="166" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Bardziej szczegółowe informacje na temat danej macierzy uzyskamy wydając polecenie: <strong>mdadm --detail <nazwa_macierzy></strong> Poniżej przedstawiono wynik jaki uzyskano po wydaniu polecenia odnośnie macierzy <strong>/dev/md1</strong></p>
<p> </p>
<p>Informacje zostały wzbogacone o: czas utworzenia macierzy, aktualny status macierzy, ilość dysków wadliwych oraz nazwy dysków wchodzących w jej skład.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image16.png" alt="image16" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Te same polecenie lecz tym razem sprawdzamy macierz RAID1 (<strong>/dev/md2</strong>)</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image17.png" alt="image17" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I macierz RAID5 (<strong>/dev/md3</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image18.png" alt="image18" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnim poleceniem jakie możemy użyć by zweryfikować stan macierzy jest komenda: <strong>cat /proc/mdstat</strong> Po wydaniu komendy poznamy stan wszystkich macierzy dostępnych w systemie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image19.png" alt="image19" width="700" height="228" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wydanie opisanych poleceń potwierdziło iż wszystkie z utworzonych macierzy działają prawidłowo. Aby móc zacząć zapisywanie plików ostatnią czynność jaką musimy wykonać jest formatowanie. Proces formatowania wykonamy za pomocą polecenia: <strong>mkfs.<system_plików> <nazwa_macierzy></strong> Wszystkie macierze formatujemy z wykorzystaniem systemu plików <strong>ext4</strong>. Macierze zostały sformatowane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image20.png" alt="image20" width="700" height="639" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wykonaniu formatowania macierze zostaną automatycznie zamontowane. Efekt montowania możemy śledzić np. z wykorzystaniem graficznego trybu użytkownika w oknie menadżera plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image21.png" alt="image21" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierze dysku zostały poprawnie utworzone i zamontowane od tej pory możemy rozpocząć prowadzenie zapisu plików.</p>
<p> </p>
<p>Kolejną czynność jaką wykonamy jest dodanie odpowiednich informacji do pliku <strong>/etc/fstab</strong> tak by macierze te były automatycznie montowane wraz ze startem systemu. Aby dokonać wpisu do pliku /etc/fstab musimy znać tak zwany numer UUID (ang. Universally Unique IDentifier) macierzy. Identyfikator ten jest 128-bitowym unikalnym numerem, generowanym losowo na podstawie posiadanego w systemie sprzętu oraz wartości zegara systemowego. Sprawdzenie UUID dokonamy z wykorzystaniem polecenia: <strong>blkid</strong> Wpis w pliku /etc/fstab możemy dokonać przy użyciu zdefiniowanej nazwy macierzy ale jest to sposób nie zalecany gdyż w niektórych dystrybucjach Linuxa wcześniej określona nazwa macierzy po restarcie komputera może ulec zmianie. Tak więc odpowiednie wpisy bezpieczniej jest wykonać właśnie z wykorzystaniem identyfikatora UUID.</p>
<p> </p>
<p>Numer UUID jest również wyświetlany po wydaniu komendy: <strong>mdadm --detail <nazwa_macierzy> </strong>lecz nie jest to identyfikator macierzy lecz ostatniego dysku, który do macierzy został dodany.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image22.png" alt="image22" width="700" height="305" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po poznaniu numerów UUID macierzy przechodzimy do edycji pliku <strong>/etc/fstab</strong>. Edycje oczywiście możemy wykonać w dowolnym edytorze, Ja wybrałem <strong>mcedit</strong>. Po otwarciu pliku należy dodać trzy dodatkowe wpisy dla każdej z macierzy osobno. Ogólna składnia wpisu wygląda następująco: <strong>UUID="<identyfikator_UUID>" <punkt_montowania> ext4 defaults 0 0 </strong>Na rysunku poniżej zaprezentowano dodanie wpisów odnoszących się do wcześniej utworzonych macierzy.</p>
<p> </p>
<p>Przyjęto następujące punkty montowań:</p>
<ul>
<li style="padding-left: 60px;">macierz md1 (RAID0) - /dev/macraid0</li>
<li style="padding-left: 60px;">macierz md2 (RAID1) - /dev/macraid1</li>
<li style="padding-left: 60px;">macierz md13(RAID5) - /dev/macraid5</li>
</ul>
<p> </p>
<p><strong><img src="http://slow7.pl/images/stories/linux/macierz/image23.png" alt="image23" width="700" height="406" style="display: block; margin-left: auto; margin-right: auto;" /> </strong></p>
<p>Aby montowanie zakończyło się sukcesem należy utworzyć katalogi, które odpowiadają zdefiniowanym punktom montowania.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image24.png" alt="image24" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Można by było w tym momencie wykonać restart komputera ale za nim to wykonamy sprawdźmy czy na pewno wszystko przebiegnie po Naszej myśli. Edycja pliku <strong>/etc/fstab</strong> niesie za sobą ryzyko popełnienia błędu, który może doprowadzić do nieuruchomienia się systemu. Dlatego zawsze warto przed wykonaniem ponownego uruchomienia komputera upewnić się, że wszystko zostało skonfigurowane prawidłowo.</p>
<p> </p>
<p>Wykonanie montowania w zdefiniowanych lokacjach nie powiedzie się, gdyż utworzone macierze domyślnie zostały uaktywnione i ich punkt montowania został przypisany do innej lokacji. Aby sprawdzić ich stan należy posłużyć się poleceniem: <strong>df -h </strong>Jak widać poniżej wszystkie trzy macierze zostały zamontowane w katalogu <strong>/media/luk/</strong></p>
<p> </p>
<p>Aby je zwolnić wydajemy polecenie: <strong>umount <nazwa_macierzy> </strong>Macierze został zwolnione.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image25.png" alt="image25" width="700" height="394" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdzenia poprawności montowania z wykorzystaniem wpisów zdefiniowanych w <strong>/etc/fstab</strong> wykonamy za pomocą komendy: <strong>mount -a</strong> Jak widać poniżej wydanie polecenia i ponowne sprawdzenie uwidacznia fakt poprawnego zamontowania macierzy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image26.png" alt="image26" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przed wykonaniem restartu komputera na każdej z macierzy został zapisany plik tekstowy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatni test to ponowne uruchomienie komputera. Host został zrestartowany.</p>
<p> </p>
<p>Po uruchomieniu maszyny sprawdzamy stan macierzy. Jak można zaobserwować macierze zostały zamontowane prawidłowo. Uważny Czytelnik na pewno zauważy fakt zmiany nazw macierzy:</p>
<ul>
<li style="padding-left: 60px;">macierz /dev/md1 na /dev/md127 - RAID0</li>
<li style="padding-left: 60px;">macierz /dev/md2 na /dev/md125 - RAID1</li>
<li style="padding-left: 60px;">macierz /dev/md3 na /dev/md126 - RAID5</li>
</ul>
<p> </p>
<p>Zmiana nazwy jest jak najbardziej działaniem prawidłowym i jak już wspomniałem w niektórych dystrybucjach Linuksa występuje. Dlatego też co już również zaznaczyłem wpisy w pliku <strong>/etc/fstab</strong> wykonujemy z wykorzystaniem identyfikatora UUID.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkowo stan macierz sprawdzono z wykorzystaniem polecenia: <strong>cat /proc/mdstat</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image29.png" alt="image29" width="700" height="209" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierze działają prawidłowo i tak naprawdę wpis ten można by było w tym miejscu zakończyć. Ale jak już mamy macierze skonfigurowane sprawdźmy jak poradzić sobie w sytuacji w której jeden z dysków tworzących macierz ulega uszkodzeniu.</p>
<p> </p>
<p>Rozpoczynamy od macierzy RAID0. Została zasymulowana sytuacja uszkodzenia macierzy - jeden z dysków macierzy został celowo odłączony.</p>
<p> </p>
<p>Jak widać poniżej ponowne uruchomienie komputera kończy się niepowodzeniem. Macierz RAID1 oraz RAID5 zostają zamontowane prawidłowo, montowanie macierzy RAID0 kończy się niepowodzeniem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image30.png" alt="image30" width="700" height="225" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na szczęście dla Nas system Ubuntu został wyposażony w mechanizm uruchomienia się w trybie awaryjnym. Jeśli z jakiś powodów system nie może załadować się prawidłowo tryb recovery zostanie uruchomiony automatyczne. Po uruchomieni systemu w trybie tym należy zalogować się z uprawnieniami użytkownika <strong>root</strong>. Po poprawnym wykonaniu tego kroku przechodzimy do edycji pliku <strong>/etc/fstab</strong> w którym to blokujemy wykonanie linii wpisu dotyczącego macierzy RAID0 (do blokowanie wykorzystujemy znak komentarza - #).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image31.png" alt="image31" width="700" height="524" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zapisie zmian wykonujemy ponowny rozruch maszyny i sprawdzamy zamontowane macierze.</p>
<p> </p>
<p>Macierze RAID znów zmieniły swoją numerację:</p>
<ul>
<li style="padding-left: 60px;">macierz /dev/md125 - RAID0 - nieobecna</li>
<li style="padding-left: 60px;">macierz /dev/md127 - RAID1</li>
<li style="padding-left: 60px;">macierz /dev/md126 - RAID5</li>
</ul>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdzamy szczegóły macierzy RAID0 - jak można zauważyć macierz ta jest nieaktywna.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dostęp do plików zapisanych na macierzy został utracony. W przypadku tego typu macierzy tak naprawdę niewiele można zrobić, sposób alokacji danych (podział ich na różne dyski) na dyskach skutecznie uniemożliwi Nam ich odzyskanie. Szybkość zapisu w tego typu macierzach jest okupiona bezpieczeństwem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy zatem co stanie się w przypadku macierzy typu RAID1.</p>
<p> </p>
<p>Uszkodzeniu ulega jeden z dysków macierzy i tak jak poprzednio system nie zostaje poprawnie uruchomiony. Zostają zamontowane macierze RAID0 (macierz została przywrócona poprze podłączenie uprzednio odłączonego dysku) oraz RAID5.</p>
<p> </p>
<p>System uruchamia się w trybie awaryjnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image35.png" alt="image35" width="700" height="234" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tak jak w przypadku RAID0 w pliku <strong>/etc/fstab</strong> zostaje zablokowana linia montowania macierzy lecz tym razem blokujemy wpis odnoszący się do macierzy <strong>RAID1</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image36.png" alt="image36" width="700" height="517" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu zmian ich zapisie restartujemy komputer, system uruchamia się prawidłowo.</p>
<p> </p>
<p>Macierze RAID ponownie zmieniły swoją numerację:</p>
<ul>
<li style="padding-left: 60px;">macierz /dev/md125 - RAID0</li>
<li style="padding-left: 60px;">macierz /dev/md126 - RAID1 - nieobecna</li>
<li style="padding-left: 60px;">macierz /dev/md127 - RAID5</li>
</ul>
<p> </p>
<p>Sprawdzamy stan macierzy RAID1. Po analizie danych stan macierzy został ustalony na: <strong>inactive</strong> (bardzo często zdarza się, że w przypadku niedziałających prawidłowo macierzy narzędzie <strong>mdadm</strong> źle definiuje jej typ, jak się Czytelniku przyjrzysz typ macierzy został ustalony na RAID0 co oczywiście jest błędem).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby macierz naprawić (wszak po to definiowaliśmy macierz RAID1 by w razie jej awarii nie utracić dostępu do swoich plików) w pierwszej kolejności należy ją zatrzymać. Zatrzymanie realizujemy za pomocą polecenia: <strong>mdadm --stop <nazwa_macierzy></strong> Macierz RAID1 przestała być aktywna.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image38.png" alt="image38" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Za pomocą komendy: <strong>lsblk</strong> sprawdzamy identyfikatory dysków (odłączenie dysku spowodowało zmianę ich nazw) jak widać poniżej jedynym dyskiem nieprzypisanym do macierzy jest dysk sdd1 tak więc dysk ten musi należeć do macierzy RAID1. Aby macierz uaktywnić wydajemy polecenie: <strong>mdadm --assemble --force <nazwa_macierzy> <nazwa_dysku></strong> Po wydaniu komendy macierz została uruchomiona z jednym aktywnym dyskiem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby sprawdzić stan macierzy wydajemy polecenie: <strong>mdadm --detail <nazwa_macierzy> </strong>Przeglądając uzyskane wyniki zauważyć można, że jest to macierz typu RAID1 a w jej skład wchodzi tylko jeden dysk.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przejdźmy zatem do jej zamontowania i sprawdzenia czy uzyskamy dostęp do naszych plików.</p>
<p> </p>
<p>W tym celu w pliku <strong>/etc/fstab</strong> ponownie uaktywniamy linię odpowiedzialną za automatyczne zamontowanie macierzy RAID1 podczas startu sytemu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image41.png" alt="image41" width="700" height="461" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po naniesieniu poprawek za pomocą komendy: <strong>mount -a</strong> wykonujemy operację montowania macierzy (punkt 1). Próba podłączenia macierzy do zasobu kończy się niepowodzeniem (punkt 2). Powodem takiego stanu rzeczy jest brak katalogu. Szybko poprawiamy konfigurację poprzez utworzenie folderu <strong>/dev/macraid1</strong> (punkt 3) i ponawiamy próbę montowania. Tym razem próba kończy się powodzeniem (punkt 4).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierz została podłączona. Fakt ten potwierdzamy wydaniem polecenia: <strong>df -h</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image43.png" alt="image43" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatni test to próba otwarcia pliku i jak widać kończy się on sukcesem. Odzyskaliśmy dostęp do naszych plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image44.png" alt="image44" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Naprawmy naszą macierz RAID1 i dodajmy do niej drugi, sprawny dysk. Napęd został podłączony do hosta. Po uruchomieniu systemu sprawdzamy litery dysku. Jak widzimy niżej jedynym wolnym dyskiem jest dysk <strong>sdd1</strong> (po podłączeniu nowego dysku zmieniają się ich nazwy a także po raz kolejny nazwy macierzy: /dev/md125 - macierz RAID1) i to jego włączymy w strukturę macierzy RAID1.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image45.png" alt="image45" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby upewnić się co do nazwy macierzy sprawdzamy jej stan.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image46.png" alt="image46" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po sprawdzeniu i upewnieniu się co do nazwy macierzy i jej typu przystępujemy do dołączenia nowego dysku. Dysk dodajemy za pomocą już znanego Nam polecenia: <strong>mdadm --add <nazwa_dysku></strong> Dysk został dodany poprawnie. Ponowne sprawdzenie stanu macierzy ukazuje fakt jej odbudowy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image47.png" alt="image47" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierz RAID1 została w pełni odbudowana i odzyskała swoją sprawność.</p>
<p> </p>
<p>Zanim przejdziemy dalej wykonajmy jeszcze jeden eksperyment. Do macierzy został dodany nowy dysk <strong>/dev/sdd1</strong>, drugim dyskiem wchodzącym w jej skład jest napęd <strong>/dev/sde1</strong> zasymulujmy uszkodzenie tego napędu i sprawdźmy czy w dalszym ciągu będzie możliwy dostęp do plików. Tak więc scenariusz sprowadza się do sytuacji w której mieliśmy działającą macierz RAID1 złożoną z dwóch dysków, pierwszy z nich uległ uszkodzeniu, macierz naprawiliśmy dodając nowy dysk (zastępując ten wadliwy) lecz niestety dotąd dobry dysk numer dwa również ulega awarii (sytuacja trochę naciągana ale nie niemożliwa).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image48.png" alt="image48" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dysk <strong>/dev/sde1 </strong>za pomocą komendy: <strong>mdadm <nazwa_macierzy> --fail <nazwa_dysku></strong> odznaczamy jako uszkodzony. Sprawdzenie stanu macierzy potwierdza fakt odznaczenia dysku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dysk <strong>/dev/sde1</strong> z macierzy RAID1 został usunięty.</p>
<p> </p>
<p>Pomimo usunięcia dysku dostęp do naszych danych jest nadal możliwy ponieważ ich kopia znajduje się na drugim dysku. Nasz test zakończył się powodzeniem ponieważ macierz zdążyła się odbudować.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Naprawmy naszą macierz i dodajmy z powrotem dysk <strong>/dev/sde1</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dysk został dodany, sprawdzenie stanu macierzy uwidacznia jej odbudowę. Po odbudowaniu macierz RAID1 wraca do pełnej funkcjonalności.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W przypadku macierzy RAID1 mamy do czynienia z sytuacją odwrotną niż w przypadku RAID0 - bezpieczeństwo przechowywanych danych ma wyższy priorytet niż szybkość ich zapisu/odczytu.</p>
<p> </p>
<p>Do rozważenia pozostała Nam sytuacja w której to uszkodzeniu ulega macierz typu RAID5. Procedura uzyskiwania dostępu do danych jest bardzo podobna do tej przedstawionej w opisie macierzy RAID1 ale nic nie stoi na przeszkodzie by ją szybko omówić.</p>
<p> </p>
<p>Jeden z dysków tworzących macierz zostaje uszkodzony jak już pewnie Czytelniku się domyślasz efektem tego jest brak dostępu do systemu (na szczęście mamy tryb awaryjny). Macierz RAID0 oraz RAID1 zostają zamontowane prawidłowo.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image53.png" alt="image53" width="700" height="262" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po uruchomieniu trybu awaryjnego w pliku <strong>/etc/fstab </strong>blokujemy wpis dotyczący montowania macierzy RAID5.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image54.png" alt="image54" width="700" height="517" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po poprawnym uruchomieniu systemu sprawdzamy stan zamontowanych macierzy.</p>
<p> </p>
<p>Nazwy macierzy przedstawiają się następująco:</p>
<ul>
<li style="padding-left: 60px;">macierz /dev/md125 - RAID0</li>
<li style="padding-left: 60px;">macierz /dev/md127 - RAID1</li>
<li style="padding-left: 60px;">macierz /dev/md126 - RAID5 - nieobecna</li>
</ul>
<p> </p>
<p>Wyświetlając szczegóły macierzy RAID5 (i tu ponownie macierz zostaje błędnie zidentyfikowana) jej stan zostaje określony jako: <strong>inactive</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image55.png" alt="image55" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby odzyskać dostęp do danych:</p>
<p style="margin-left: 30px;">1 - zatrzymujemy macierz - <strong>mdadm --stop <nazwa_macierzy></strong></p>
<p style="margin-left: 30px;">2 - ponownie uruchamiamy macierz wraz z definicją dysków - <strong>mdadm --assemble --force <nazwa_macierzy> <nazwa_dysku></strong></p>
<p> </p>
<p>Sprawdzenie stanu macierzy (punkt 3) potwierdza fakt jej uruchomienia.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image56.png" alt="image56" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Gdy macierz działa w pliku <strong>/etc/fstab</strong> uaktywniamy wpis odnoszący się do jej montowania.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image57.png" alt="image57" width="700" height="562" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby macierz została prawidłowo zamontowana musimy ponownie utworzyć katalog, który został zdefiniowany w pliku <strong>/etc/fstab</strong> Brak punktu montowania uniemożliwi załadowanie macierzy.</p>
<p> </p>
<p>Po wykonaniu tych wszystkich czynności dostęp do plików zostaje przywrócony.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image58.png" alt="image58" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeżeli chcemy macierz usunąć musimy wykonać następujące kroki:</p>
<p style="margin-left: 30px;">- wykasowanie wpisów w pliku <strong>/etc/fstab</strong> odnoszących się do skonfigurowanych macierzy,</p>
<p style="margin-left: 30px;">- zatrzymanie macierzy - polecenie: <strong>mdadm --stop <nazwa_macierzy></strong></p>
<p style="margin-left: 30px;">- usunięcie dysków wchodzących w skład macierzy - polecenie: <strong>mdadm <nazwa_macierzy> -r <nazwa_dysku></strong></p>
<p style="margin-left: 30px;"><strong>- </strong>jeżeli dysk ma pracować jako normalny wolumin warto również wydać polecenie: <strong>dd if=/dev/zero of=<nazwa_dysku> bs=1M count=1024</strong> celem usunięcia informacji dotyczących konfiguracji dysku (ostrożnie z poleceniem, gdyż jego użycie wiąże się z zniszczeniem danych przechowywanych na dysku) a następnie użycia narzędzia <strong>fdisk</strong> celem utworzenia nowych partycji.</p>
<p> </p>
<p>Z narzędziem <strong>mdadm</strong> związana jest jeszcze jedna ciekawa funkcja a mianowicie podczas konfiguracji macierzy można zdefiniować <strong>dysk zapasowy</strong> tzw. spare devices, który w razie wystąpienia awarii przejmie zadania dysku uszkodzonego.</p>
<p> </p>
<p>Prześledźmy sposób konfiguracji mechanizmu na przykładzie macierzy RAID1 (z macierzą typu RAID0 funkcja ta nie ma zastosowania).</p>
<p> </p>
<p>W systemie istnieją trzy dyski: sdb1, sdc1 oraz sdd1. Dwa pierwsze z nich posłużą do zbudowania macierzy zaś trzeci będzie dyskiem zapasowym.</p>
<p> </p>
<p>Rozpoczniemy od utworzenia macierzy RAID1 złożonej z dwóch dysków i jednego zapasowego. Aby skonfigurować macierz wydajemy polecenie: <strong>mdadm --create <nazwa_macierzy> --level=<typ_macierzy> --raid-devices=<ilość_dysków> <nazwa_dysków> --spare-devices=<ilość_dysków_zapasowych> <nazwa_dysków></strong></p>
<p> </p>
<p>Tak więc podstawiając wszystkie dane aby utworzyć macierz RAID1 z wykorzystaniem dwóch dysków sdb1 oraz sdc1 i jednym zapasowym sdd1 należy wydać polecenie jak na zrzucie poniżej. Macierz RAID1 została utworzona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image59.png" alt="image59" width="700" height="181" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy dane szczegółowe macierzy. Jak można zauważyć macierz tworzą 3 dyski przy czym dwa z nich są aktywne a zaś jeden jest dyskiem zapasowym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image60.png" alt="image60" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po utworzeniu macierzy przeprowadzamy jej formatowanie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image61.png" alt="image61" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Oraz celem automatycznego montowania dodajemy odpowiedni wpis w pliku <strong>/etc/fstab</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image62.png" alt="image62" width="700" height="427" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierz została zamontowana w lokacji <strong>/dev/macraid1</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na macierzy został utworzony plik: <strong>plikmacraid1.txt</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image64.png" alt="image64" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wykonaniu tych wszystkich czynności celem ostatecznego sprawdzenia dokonujemy restartu komputera.</p>
<p> </p>
<p>Ładowanie systemu przebiega bez żadnych problemów a jak się można domyślać po ponownym uruchomieniu hosta następuje zmiana nazwy macierzy. Macierz z <strong>/dev/md1</strong> została przemianowana na <strong>/dev/md127</strong></p>
<p> </p>
<p>Ponowne sprawdzenie szczegółów macierzy potwierdza, iż wszystko jest w porządku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Macierz działa i jest sprawna czas zatem sprawdzić jak zachowa się ona w sytuacji uszkodzenia jednego z dysków.</p>
<p> </p>
<p>Dysk sdb1 ulega awarii i odznaczamy go jako uszkodzony (punkt 1) po wykonaniu tej operacji sprawdzamy szczegóły macierzy (punkt 2). Dotąd nie aktywny dysk sdd1 automatycznie przejął (bez żadnej ingerencji) zadania dysku sdb1 (punkt 3) - rozpoczęła się odbudowa macierzy tak by przywrócić jej pełną funkcjonalność.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image66.png" alt="image66" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dostęp do zapisanych plików jest oczywiście możliwy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/macierz/image67.png" alt="image67" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dotarliśmy do końca - mam nadzieję, że po lekturze tego wpisu macierze w systemie Linux nie będą miały przed Tobą żadnych tajemnic.</p>
<p> </p>
<hr />
<p> </p>
<p>BIBLIOGRAFIA:</p>
<p> </p>
<p><a href="https://forum.ivorde.com/mdadm-how-can-i-destroy-or-delete-an-array-t85.html">https://forum.ivorde.com/mdadm-how-can-i-destroy-or-delete-an-array-t85.html</a></p>
<p><a href="https://raid.wiki.kernel.org/index.php/RAID_setup">https://raid.wiki.kernel.org/index.php/RAID_setup</a></p>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-create-raid-arrays-with-mdadm-on-ubuntu-16-04">https://www.digitalocean.com/community/tutorials/how-to-create-raid-arrays-with-mdadm-on-ubuntu-16-04</a></p>
<p><a href="http://www.tecmint.com/create-raid0-in-linux/">http://www.tecmint.com/create-raid0-in-linux/</a></p></div>Windows i Linux w jednej stali sieci.2016-12-30T19:16:40+00:002016-12-30T19:16:40+00:00http://slow7.pl/linux/item/134-windows-i-linux-w-jednej-stali-siecipikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/62fb5f1024529266c6e71c0c0c9ddb3c_S.jpg" alt="Windows i Linux w jednej stali sieci." /></div><div class="K2FeedIntroText"><p>Administrując dana siecią komputerową prędzej czy później zmierzysz się z scenariuszem w którym będziesz musiał skonfigurować udostępnianie zasobów pomiędzy systemami Linux oraz Windows. Aby sprostać zadaniu w artykule opis sytuacji obejmujący udostępnianie plików pomiędzy systemem Windows-Linux, Linux-Windows oraz Linux-Linux.</p>
</div><div class="K2FeedFullText">
<p>Przechodzimy do scenariusza pierwszego w którym systemem udostępniającym pliki jest Windows natomiast klientem host pracujący pod kontrolą systemu Linux.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Komunikacja pomiędzy komputerami jest oczywiście zapewniona (ping z hosta Linux w kierunku hosta Windows).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Rozpoczynamy od utworzenia w systemie Windows folderu do którego będą mieli dostęp użytkownicy systemu Linux. Nazwa zasobu została ustalona na: <strong>linux_udostepniony</strong>.</p>
<p> </p>
<p>Zasób został udostępniony dla Wszystkich z możliwością <strong>odczytu</strong> i <strong>zapisu</strong>. Udostępnienie realizujemy po zaznaczeniu danego folderu i po wybraniu z menu kontekstowego <strong>Udostępnij</strong> a następnie <strong>Określone osoby</strong> bądź po wybraniu <strong>Właściwości</strong> i przejściu na kartę <strong>Udostępnianie</strong> (przycisk: <strong>Udostępnij</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image3.png" alt="image3" width="700" height="487" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po określeniu kont mających prawo do korzystania z zasobu, zasób staje się widoczny w otoczeniu sieciowym. Folder jest osiągalny za pomocą adresu: <strong>\\XXX\linux_udostepniony</strong> (wykorzystanie nazwy komputera) bądź <strong>\\192.168.1.50\linux_udostepniony</strong> (wykorzystanie adresu IP komputera).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Konfiguracja na systemie Windows została wykonana. Przechodzimy do systemu Linux a mówiąc bardziej szczegółowo do Ubuntu 16.04</p>
<p> </p>
<p>W systemie tym zostaną przedstawione dwa przykłady: pierwszy będzie obejmował uzyskanie dostępu do udostępnionego zasobu z wykorzystaniem wiersza poleceń drugi zaś z wykorzystaniem GUI (dla każdego coś się znajdzie).</p>
<p> </p>
<p>Rozpoczynamy od wiersza poleceń. Pierwszą czynnością jest zainstalowanie dodatkowych pakietów. W tym celu uruchamiamy terminal i wydajemy polecenie: <strong>apt-get install cifs-utils</strong></p>
<p> </p>
<p>Dzięki instalacji pakietu otrzymamy możliwość wykorzystania protokołu SMB/CIFS (ang. Server Message Block protokół służący udostępnianiu zasobów komputerowych, m.in. drukarek czy plików, znany jest również pod nazwą CIFS ang. Common Internet File System). Dodatkowo pakiet dostarcza narzędzia do zarządzania punktami montowań sieciowych systemów plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po prawidłowym zainstalowaniu pakietu <strong>cifs-utils </strong>tworzymy katalog do którego zamontujemy udostępniony folder w systemie Windows (punkt 1). Jak widać poniżej katalog został utworzony poprawnie (punkt 2). Nazwa katalogu została ustalona na: <strong>na_windows</strong> a został on utworzony w katalogu domowym użytkownika <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image6.png" alt="image6" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Powracamy jeszcze na chwilę do systemu Windows i w udostępnionym zasobie tworzymy plik tekstowy o nazwie: <strong>tekst.txt</strong>, do zawartości pliku został dopisany tekst: <strong>plik_udostepniony</strong> Dodatkowo został sprawdzony adres IP hosta Windows - <strong>192.168.1.50</strong> oraz nazwa użytkownika - <strong>luk</strong> (informacje będą potrzebne za chwilę).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image7.png" alt="image7" width="700" height="487" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Powracamy do systemu Ubuntu w którym wykonamy czynność zamontowania zasobu sieciowego do utworzonego przed chwilą katalogu.</p>
<p> </p>
<p>Montowanie zasobu przeprowadzamy za pomocą polecenia: <strong>mount.cifs <udostępniony_zasób_sieciowy> <katalog_montowania> -o user=<nazwa_użytkownika></strong></p>
<p> </p>
<p>W scenariuszu zmienne przyjęły następujące wartości:</p>
<p style="margin-left: 30px;"><strong>udostępniony_zasób_sieciowy </strong>- ścieżka sieciowa do zasobu sieciowego - <strong>//192.168.1.50/linux_udostepniony</strong> - do określenia ścieżki sieciowej został użyty adres IP hosta Windows,</p>
<p style="margin-left: 30px;"><strong>katalog_montowania</strong> - katalog na komputerze lokalnym do którego montujemy udostępniony zasób sieciowy - <strong>~/na_windows</strong> - ścieżka określa katalog domowy użytkownika <strong>root</strong> (użyta tylda) i katalog: <strong>na_windows</strong></p>
<p style="margin-left: 30px;"><strong>user=<nazwa_użytkownika> </strong>- nazwa użytkownika w systemie Windows, który ma prawo skorzystać z udostępnionego zasobu - <strong>user=luk</strong></p>
<p> </p>
<p>Po wydaniu polecenia aby zakończyć proces montowania zasobu należy podać hasło użytkownika <strong>luk</strong> (oczywiście podajemy hasło używane w systemie Windows).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image8.png" alt="image8" width="700" height="52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Czas sprawdzić efekt przeprowadzonej konfiguracji. Po przejściu do katalogu <strong>na_windows</strong> (punkt 1) sprawdzamy jego zawartość (punkt 2). Jak widać zamieszczony przez Nas plik<strong> tekst.txt</strong> znajduje się w zamontowanym katalogu (punkt 3).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby upewnić się że wszystko jest po Naszej myśli, plik <strong>tekst.txt</strong> zostaje wyedytowany i do pliku zostaje dodane: <strong>dopisane z systemu linux</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image10.png" alt="image10" width="700" height="441" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przejściu do systemu Windows widać efekt zmian. Tekst dodany w systemie Linux jest widoczny w systemie Windows.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image11.png" alt="image11" width="700" height="579" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dzięki zamontowaniu udostępnionego zasobu sieciowego w systemie Windows do utworzonego katalogu w systemie Linux uzyskaliśmy możliwość przenoszenia plików pomiędzy oboma systemami.</p>
<p> </p>
<p>Dzięki przeprowadzonej konfiguracji oraz w połączeniu z narzędziem <strong>mc</strong> w bardzo prosty sposób możemy realizować operację kopiowania plików pomiędzy systemami.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image12.png" alt="image12" width="700" height="499" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Do odmontowania zasobu wykorzystaj polecenie: <strong>umount <nazwa_zasobu></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeżeli chcemy uzyskać dostęp do zasobu z wykorzystaniem interfejsu graficznego należy rozpocząć od uruchomienia menedżera plików. Po uruchomieniu narzędzia z prawej strony odszukujemy gałąź <strong>Sieć</strong>. Po jej wybraniu powinny ukazać się Nam wszystkie komputery do których mamy dostęp z poziomu naszej sieci. Nasz testowy zasób sieciowy jest udostępniany na komputerze o nazwie <strong>XXX</strong> tak więc aby uzyskać do niego dostęp klikamy na ikonę z nazwą komputera. Po wybraniu ikony reprezentującej dany komputer zostaniemy poproszeni o podanie poświadczeń użytkownika mającego prawo skorzystania z zasobu. Podobnie jak w przypadku wiersza poleceń podajemy dane uwierzytelniające użytkownika, którego konto znajduje się w systemie Windows.</p>
<p> </p>
<p>Dodatkowo możemy określić jedną z trzech opcji dotyczącą zachowania wprowadzonego hasła.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image14.png" alt="image14" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po dokonaniu poprawnego uwierzytelnienia uzyskamy dostęp do udostępnionego zasobu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image15.png" alt="image15" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I podobnie jak w przypadku użycia wiersza poleceń tak i tu dokonujemy edycji pliku poprzez dopisanie komentarza: <strong>dopisane z GUI</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image16.png" alt="image16" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak się można domyślać zmiany zostaną odzwierciedlone w systemie Windows.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image17.png" alt="image17" width="700" height="579" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Życie administratora jest znacznie bardziej skomplikowane i czasem te najprostsze rozwiązania musimy nieco zmodyfikować tak by odpowiadały one Naszym potrzebom. Tak więc powyższy przykład zmodyfikujmy i prześledźmy scenariusz w którym użytkownikom systemu Linux nałożymy pewne ograniczenie polegające na zdefiniowaniu ilości przestrzeni dyskowej, która może być przez Nich wykorzystywana. Czyli jak w praktyce w systemie Windows skonfigurować mechanizm <strong>quota</strong>.</p>
<p> </p>
<p>Scenariusz zakłada, że użytkownik systemu Linux ma do swojej dyspozycji 100 MB wolnego miejsca, przestrzeń tę może wykorzystać w sposób dowolny lecz niemożliwy będzie zapis nowych plików powyżej ustalonego limitu.</p>
<p> </p>
<p>Rozpoczynamy od uruchomienia konsoli MMC (w oknie <strong>Uruchom</strong> - skrót:Win+R wpisujemy mmc) i dodaniu przystawki <strong>Użytkownicy i grupy lokalne</strong> (czynności tej nie da się wykonać w wersjach Home systemu Windows). Przystawka oczywiście musi uwzględniać użytkowników i grupy komputera lokalnego.</p>
<p> </p>
<p>Dodanie przystawki zrealizujemy po wybraniu z menu konsoli MMC opcji <strong>Plik</strong> a następnie <strong>Dodaj/Usuń przystawkę</strong>. W nowo otwartym oknie z listy dostępnych przystawek odszukujemy przystawkę <strong>Użytkownicy i grupy lokalne </strong>i za pomocą przycisku <strong>Dodaj</strong> umieszczamy ją w sekcji <strong>Wybrane przystawki</strong>. Zatwierdzamy wybór klawiszem <strong>OK</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image18.png" alt="image18" width="700" height="508" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po rozwinięciu przystawki odszukujemy gałąź <strong>Użytkownicy</strong> i po kliknięciu na nią PPM z menu kontekstowego wybieramy opcję <strong>Nowy użytkownik</strong>. W oknie <strong>Nowy użytkownik</strong> definiujemy dane niezbędne do utworzenia nowego konta. Niezbędne dane, które należy podać to <strong>nazwa użytkownika</strong> oraz <strong>hasło</strong>, pozostałe opcje są ustawieniami opcjonalnymi. Całość konfiguracji zatwierdzamy przyciskiem <strong>Utwórz</strong>. Konto nowego użytkownika zostało utworzone. W dalszej części opisu posłużono się kontem o nazwie: <strong>jankow</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image19.png" alt="image19" width="700" height="403" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Kolejną czynnością jest utworzenie grupy, której zadaniem będzie zebrać wszystkie konta użytkowników łączących się z hostem Windows przy wykorzystaniu systemu Linux.</p>
<p> </p>
<p>Nie zamykamy przystawki lecz z dostępnych gałęzi wybieramy <strong>Grupy</strong> a następnie z menu kontekstowego wskazujemy opcję <strong>Nowa grupa</strong>. W nowo otwartym oknie <strong>Nowa grupa</strong> definiujemy nazwę tworzonej grupy (grupę nazwano: <strong>linux_users</strong>) oraz opcjonalnie możemy określić jej krótki opis.</p>
<p> </p>
<p>Po definicji nazwy grupy za pomocą przycisku <strong>Dodaj</strong> określamy jej członków. Użytkownik <strong>jankow</strong> został dodany do grupy <strong>linux_users</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image20.png" alt="image20" width="700" height="403" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W systemie Windows konfigurację przydziałów przeprowadzamy za pomocą karty <strong>Przydział</strong> dostępnej w <strong>Właściwościach</strong> danego dysku/partycji. Po przejściu do karty wybieramy przycisk <strong>Pokaż ustawienia przydziałów</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image21.png" alt="image21" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po uaktywnieniu funkcji <strong>Przydziałów</strong> przechodzimy do ich konfiguracji:</p>
<p style="margin-left: 30px;">1 - celem włączenia funkcji zaznaczamy <strong>Włącz zarządzanie przydziałami</strong>,</p>
<p style="margin-left: 30px;">2 - zaznaczamy opcję <strong>Odmów miejsca na dysku użytkownikom przekraczającym limit przydziałów</strong>,</p>
<p style="margin-left: 30px;">3 - opcjonalnie możemy włączyć rejestrowanie zdarzeń związanych z przekroczeniem zdefiniowanego limitu (tzw. quota twarda) oraz osiągnięciem progu ostrzeżenia (tzw. quota miękka).</p>
<p style="margin-left: 30px;">4 - wybieramy przycisk <strong>Wpisy przydziałów</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image22.png" alt="image22" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W nowo otwartym oknie <strong>Wpisy przydziału dla …</strong> z górnego menu wybieramy <strong>Przydział</strong> a następnie <strong>Nowy wpis przydziału </strong>W kolejnym oknie definiujemy użytkowników co do których konfigurowany przydział będzie miał zastosowanie (dodajemy użytkownika <strong>jankow</strong>, niestety nie da się zdefiniować grupy). Po wybraniu <strong>OK</strong> ustalamy limit przydziału oraz próg po którym będzie generowane ostrzeżenie o wysokim wykorzystaniu przydzielonego miejsca.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image23.png" alt="image23" width="700" height="375" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zatwierdzeniu wszystkich ustawień przydział został skonfigurowany.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image24.png" alt="image24" width="700" height="298" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na pytanie dotyczące włączenia przydziału i aktualizacji statystyk wykorzystania dysku odpowiadamy twierdząco wybierając przycisk <strong>OK</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią rzeczą jaką musimy wykonać to nadanie uprawnień grupie <strong>linux_users</strong> do udostępnionego zasobu <strong>linux_udostepniony</strong>. Otwieramy okno <strong>Udostępnienia plików</strong> dla zasobu i za pomocą przycisku <strong>Dodaj</strong>, dopisujemy grupę, pozwalając jej tym samym na korzystanie z zasobu. Prawa dla grupy <strong>linux_users </strong>zostały ustalone na <strong>odczyt/zapis</strong>. Całość zatwierdzamy przyciskiem <strong>Udostępnij</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image26.png" alt="image26" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby grupa mogła prowadzić swobodny zapis należy dodatkowo zdefiniować prawa systemu plików. W tym celu na zakładce <strong>Udostępnianie</strong> wybieramy przycisk <strong>Udostępnienie zaawansowane</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W oknie <strong>Udostępnienie zaawansowane</strong> wybieramy przycisk <strong>Uprawnienia</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po otwarciu nowego okna do sekcji <strong>Nazwy grup lub użytkowników</strong> za pomocą przycisku <strong>Dodaj</strong> należy dopisać grupę <strong>linux_users</strong> oraz określić jej uprawnienia. Uprawnienia grupy zostały określone na: <strong>Pełna kontrola </strong>Całość konfiguracji oczywiście należy zatwierdzić.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Konfiguracja w systemie Windows została zakończona. Przechodzimy z powrotem do systemu Linux. Za pomocą znanego Nam polecenia montujemy udostępniony zasób do katalogu lokalnego. Aby móc skorzystać z zasobu należy podać poświadczenia użytkownika: <strong>jankow</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image30.png" alt="image30" width="700" height="75" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zasób został zamontowany. Sprawdźmy zatem czy przydział działa. Limit plików został ustalony na 100 MB tak więc po wykorzystaniu go dalszy zapis będzie niemożliwy. Zostały przygotowane dwa pliki o rozmiarze 61 MB każdy, co jak łatwo obliczyć łączny rozmiar plików wynosi 122 MB czyli więcej niż ustalony przydział. Jak widać poniżej udało się z hosta Linux (panel lewy) przekopiować plik: <strong>film_1.avi</strong> do lokalizacji sieciowej (panel prawy).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image31.png" alt="image31" width="700" height="503" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wykonajmy kopiowanie drugiego pliku. Operacja ta (co jak można było się spodziewać) kończy się niepowodzeniem - całe dostępne miejsce w ramach przydzielonego limitu zostało wykorzystane. Otrzymujemy komunikat błędu o niemożności wykonania operacji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image32.png" alt="image32" width="700" height="503" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ponieważ podczas definicji quoty została zaznaczona opcja rejestracji tego typu zdarzeń, tak więc wpis o zajściu zostanie zapisany w dzienniku. Po otwarciu okna <strong>Podglądu zdarzeń</strong> w sekcji <strong>System</strong> odnajdujemy wpis o przekroczeniu limitu ustalonego przydziału.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image33.png" alt="image33" width="700" height="504" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby zasób sieciowy był automatycznie montowany wraz ze startem systemu do pliku konfiguracyjnego <strong>/etc/fstab </strong>należy dodać wpis jak na zrzucie poniżej:</p>
<p style="margin-left: 30px;">1 - ścieżka do zasobu sieciowego,</p>
<p style="margin-left: 30px;">2 - ścieżka do katalogu w którym zasób ma zostać zamontowany,</p>
<p style="margin-left: 30px;">3 - system plików,</p>
<p style="margin-left: 30px;">4 - opcje dodatkowe takie jak nazwa użytkownika czy hasło.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image34.png" alt="image34" width="700" height="300" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<hr />
<p>Udostępnianie plików z wykorzystaniem systemu Windows wraz z dostępem do nich z poziomu Linux mamy omówione. Odwracamy sytuację czyli zadanie polega na utworzeniu zasobu w systemie Linux, tak by był on dostępny dla hostów pracujących pod kontrolą systemu Windows.</p>
<p> </p>
<p>Topologia sieciowa zostaje zachowana.</p>
<p> </p>
<p>Konfigurację rozpoczynamy od systemu Linux a mówiąc bardziej szczegółowo od instalacji serwera Samba. Aby zainstalować niezbędne pakiety wydajemy polecenie: <strong>apt-get install samba</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image35.png" alt="image35" width="700" height="260" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Serwer Samba został zainstalowany kolejny krok to definicja użytkowników, którzy za pośrednictwem serwera będą mogli skorzystać z udostępnionego zasobu. Przypisanie użytkowników realizujemy za pomocą komendy: <strong>smbpasswd -a <nazwa_użytkownika></strong> Poniżej została przeprowadzona operacja dodania konta: <strong>luk</strong> do usługi serwera Samba.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Mała uwaga (a nawet dwie) odnośnie czynności związanych z ustaleniem konta serwisu Samba. (Uwaga nr 1) Dodawane konto musi istnieć w systemie Linux czyli nie zdefiniujemy konta serwera Samba użytkownikowi, który nie posiada konta w systemie Linux. (Uwaga nr 2) Definicja hasła następuje w sposób całkowicie niezależny od tego już istniejącego. Oznacza to, że hasło wykorzystywane do realizacji zadań wynikających z uruchomienia serwera Samba może różnić się od tego wykorzystywanego do procesu logowania do systemu Linux.</p>
<p> </p>
<p>Po dodaniu konta do serwera Samba, celem zarządzania nim, można użyć następujących przełączników:</p>
<ul>
<li style="padding-left: 60px;"><strong>-x</strong> - skasowanie użytkownika,</li>
<li style="padding-left: 60px;"><strong>-d</strong> - wyłączenie konta użytkownika,</li>
<li style="padding-left: 60px;"><strong>-e</strong> - włączenie konta użytkownika.</li>
</ul>
<p> </p>
<p>Aby zmienić hasło danemu użytkownikowi użyj ponownie polecenia: <strong>smbpasswd -a <nazwa_użytkownika></strong></p>
<p> </p>
<p>Następnym krokiem jaki musimy wykonać jest określenie katalogu, który będzie dostępny dla użytkowników Windows a tym samym zasobu w którym będą mogli oni prowadzić proces zapisu i odczytu plików.</p>
<p> </p>
<p>W scenariuszu został użyty katalog <strong>użytkownik_windows</strong> znajdujący się w katalogu domowym użytkownika <strong>luk</strong>. Katalog został założony.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po założeniu katalogu należy go udostępnić tak by był on osiągalny z poziomu <strong>Otoczenia sieciowego</strong> systemu Windows. Udostępnienie realizujemy poprzez edycję pliku konfiguracyjnego serwera Samba: <strong>/etc/samba/smb.conf</strong> Aby móc edytować plik wydajemy polecenie: <strong>mcedit /etc/samba/smb.conf </strong>(edycję przeprowadzamy z uprawnieniami root-a oraz z wykorzystaniem edytora mcedit).</p>
<p> </p>
<p>Plik <strong>smb.conf</strong> zawiera szereg ustawień wpływających na pracę serwera omówienie ich wszystkich wykracza poza ramy artykułu (serwerem Samba zajmiemy się jeszcze w odrębnych artykułach, jego użycie zostało również opisane w wpisie: <a href="http://slow7.pl/item/74-active-directory-w-wydaniu-linux" title="Active Directory w wydaniu Linux">Active Directory w wydaniu Linux</a>).</p>
<p> </p>
<p>W sekcji konfiguracji globalnej za pomocą parametru: <strong>workgroup</strong> definiujemy nazwę grupy roboczej (została pozostawiona domyślna nazwa WORKGROUP) - punkt 1. Opcjonalnie za pomocą parametru <strong>netbios name</strong> ustalamy nazwę komputera (punkt 2) zaś parametru <strong>server string</strong> opis (punkt 3).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image38.png" alt="image38" width="700" height="409" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzonych ustawieniach restartujemy serwer Samba poleceniem: <strong>service smbd restart</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Host w <strong>Otoczeniu sieciowym</strong> systemu Windows powinien być widoczny i jak widać poniżej tak rzeczywiście jest. Do zasobu nie mamy jeszcze dostępu gdyż żadnego katalogu znajdującego się w systemie Linux nie udostępniliśmy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image40.png" alt="image40" width="700" height="594" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Podczas instalacji systemu Linux można było określić nazwę komputera, nazwa ta będzie się wyświetlać na liście komputerów obecnych w sieci. Jeśli istniejąca nazwa komputera nam nie odpowiada, oczywiście możemy ją zmienić. Zmianę wykonujemy poprzez edycję dwóch plików: <strong>/etc/hostname </strong>oraz <strong>/etc/hosts</strong>.</p>
<p> </p>
<p>W pierwszym pliku, obecną nazwę zastępujemy nową i tak samo postępujemy z drugim plikiem (nazwa komputera będzie znajdowała się obok adresu IP należącego do sieci 127.0.0.0/8 - tzw. <strong>adresu localhost</strong> - wysyłając ping na podany adres „pingujesz” sam siebie).</p>
<p> </p>
<p>Przechodzimy do określenia zasobu, którego definicję rozpoczynamy od nadania mu nazwy. Nazwę zapisujemy w nawiasach kwadratowych - <strong>[uzytkownik_windows]</strong> Po określeniu nazwy definiujemy opcje dodatkowe:</p>
<p style="margin-left: 30px;">1 - <strong>path = <ścieżka_do udostępnianego_zasobu></strong> Ponieważ zapis realizowany przez użytkowników systemu Windows będzie realizowany w katalogu: <strong>uzytkownik_windows</strong> znajdujący się w folderze domowym użytkownika <strong>luk</strong> tak więc wpis przyjmie postać:<br /> <strong>path = home/luk/uzytkownik_windows</strong></p>
<p style="margin-left: 30px;">2 - <strong>valid users = luk</strong> - definicja sprawdzenia poświadczeń użytkownika mającego prawo skorzystania z zasobu. Jeśli lista użytkowników nie została zdefiniowana (domyślnie), oznacza to, że każdy użytkownik może z zasobu korzystać. Aby zabronić dostępu do udostępnionego zasobu określonym użytkownikom użyj opcji: <strong>invalid users = <użytkownicy> </strong>np. <strong>invalid users = root beata</strong></p>
<p style="margin-left: 30px;">3 - <strong>available = yes</strong> - czy udostępniany zasób ma być dostępny,</p>
<p style="margin-left: 30px;">4 - <strong>browsable = yes</strong> - czy zasób można przeglądać,</p>
<p style="margin-left: 30px;">5 - <strong>read only = no</strong> - czy zasób tylko do odczytu,</p>
<p style="margin-left: 30px;">6 - <strong>writable = yes</strong> - czy można przeprowadzić operację zapisu,</p>
<p style="margin-left: 30px;">7 - <strong>public = yes</strong> - czy dostępny publicznie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image41.png" alt="image41" width="700" height="392" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Konfiguracja udostępniania zasobu jest zakończona. Aby móc skorzystać z zasobu restartujemy usługę serwera Samba wraz z restartem usługi <span class="st">serwera nazw NetBIOS.</span></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią czynnością jest sprawdzenie efektów przeprowadzonej konfiguracji. Sprawdźmy zatem czy uzyskamy dostęp do zasobu z poziomu systemu Windows. Jeszcze raz sprawdzamy otoczenie sieciowe i jak można zauważyć poniżej zasób został umieszczony na liście. Aby móc skorzystać z zasobu należy podać poświadczenia użytkownika: <strong>luk</strong>. Po podaniu poprawnych danych zasób jest dla Nas dostępny.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image43.png" alt="image43" width="700" height="486" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Udało się uzyskać dostęp do zasobu znajdującego się na hoście kontrolowanym przez system Linux. Sprawdźmy zatem czy możliwy będzie zapis oraz odczyt. Tak jak w przypadku poprzednim rozpoczynamy od utworzenia pliku tekstowego: <strong>test.txt</strong> i jego edycji. W pliku umieszczono tekst: <strong>informacja od użytkownika windows</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image44.png" alt="image44" width="700" height="514" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przejściu do systemu Linux odczyt i zapis pliku <strong>test.txt</strong> jest możliwy. Do pliku przez użytkownika systemu Linux zostaje dodany tekst: <strong>informacja od użytkownika linux</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image45.png" alt="image45" width="700" height="388" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Informacja pozostawiona przez użytkownika systemu Linux bez problemu zostaje odczytana w systemie Windows.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image46.png" alt="image46" width="700" height="514" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wszystko działa, obustronna komunikacja pomiędzy systemami jest możliwa.</p>
<p> </p>
<p>Czasem jednak pomimo poprawnie przeprowadzonej konfiguracji możemy natrafić na problemy, które uniemożliwią Nam swobodny zapis informacji pomiędzy systemami. Najczęściej spotykam dwa problemy, które objawiają się tym, że uzyskuje dostęp do zasobu lecz brak jest możliwości wykonania kopiowania/zapisu plików. Więc poniżej krótki opis i szybkie rozwiązanie.</p>
<p> </p>
<p>Problem pierwszy związany jest z brakiem przeprowadzonego uwierzytelnienia. W momencie próby otwarcia udostępnionego zasobu powinno pojawić się okno logowania w którym musimy podać login i hasło użytkownika mającego prawo do korzystania z zasobu. Okno się nie pojawia, udaje się wejść do folderu i na tym Nasze uprawnienia się kończą. Problem ten najczęściej występuje w systemie Windows 7 (w Windows 8 oraz Windows 10 jeszcze mi się nie przydarzyło). Na szczęście rozwiązanie jest bardzo proste. Wybieramy ikonę <strong>Komputer</strong> i po kliknięciu PPM wybieramy <strong>Mapuj dysk sieciowy</strong> (opcjonalnie wywołanie narzędzia możemy wykonać poprzez okno <strong>Komputer</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image47.png" alt="image47" width="700" height="431" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wywołaniu okna <strong>Mapowanie dysku sieciowego</strong> wybieramy literę dysku pod jaką będzie figurował zasób sieciowy oraz podajemy ścieżkę do niego (jak nie znamy ścieżki można skorzystać z przycisku <strong>Przeglądaj</strong>) - punkt 1. Drugą czynność jaką musimy wykonać to zaznaczyć opcję <strong>Połącz przy użyciu innych poświadczeń</strong> - punkt 2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image48.png" alt="image48" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Kliknięcie <strong>Zakończ</strong> wymusi wywołanie okna w którym podamy poświadczenia użytkownika.</p>
<p> </p>
<p>Drugi problem powodujący brak możliwości zapisu do folderu to brak uprawnień nadanych katalogowi w systemie Linux. Sprawdź zatem uprawnienia folderu i jeśli brak jest uprawnień nadaj je za pomocą polecenia: <strong>chmod</strong> (np. chmod 777 uzytkownik_windows - dokładny opis komendy znajdziesz w wpisie: <a href="http://slow7.pl/linux/item/101-dogadac-sie-z-linuxem-powloka-systemu-oraz-operacje-na-plikach" title="Dogadać się z Linuxem. Powłoka systemu oraz operacje na plikach."><span style="text-decoration: none;">Dogadać się z Linuxem. Powłoka systemu oraz operacje na plikach</span></a>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<hr />
<p>Zadanie wykonane. Przechodzimy do ostatniego możliwego wariantu dostępu do plików czyli klientem jest host z zainstalowanym systemem Linux oraz komputer udostępniający pliki również zarządzany jest przez system Linux.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Do udostępnienia zasobów innym komputerom wykorzystamy protokół NFS (ang. Network File System).</p>
<p> </p>
<p>Rozpoczynamy od komputera udostępniającego swoje pliki czyli serwera. Aby móc rozpocząć udostępnianie zasobów w sieci wydajemy polecenie: <strong>apt-get install nfs-kernel-server</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Niezbędne pakiety zostały zainstalowane. Weryfikację działania serwera NFS możemy przeprowadzić m. in. za pomocą polecenia: <strong>rpcinfo -p | grep nfs</strong></p>
<p> </p>
<p>Serwer działa i oczekuje na połączenia. Protokół NFS do działania wykorzystuje protokół UDP oraz TCP w połączeniu z portem 2049 a jak widać poniżej port 2049 zarówno dla TCP jak i UDP jest otwarty i oczekuje na połączenie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po upewnieniu się, że serwer NFS działa przechodzimy do definicji katalogu, który udostępnimy w sieci. W katalogu <strong>/home</strong> został utworzony folder o nazwie <strong>zasob</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ponieważ katalog został utworzony z poziomu użytkownika root należy zmienić uprawnienia katalogu gdyż tylko ten użytkownik będzie mógł prowadzić zapis. Uprawnienia folderu za pomocą polecenia: <strong>chmod</strong> zostają ustawione w ten sposób aby wszyscy mogli prowadzić swobodny odczyt i zapis plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby zasób był widoczny w otoczeniu sieciowym należy go zdefiniować w pliku konfiguracyjnym serwera. Definicję zasobu wykonamy wydając polecenie: <strong>mcedit /etc/exports</strong></p>
<p> </p>
<p>Do pliku konfiguracyjnego zostaje dopisana linia: <strong>/home/zasob 192.168.1.0/24(rw)</strong></p>
<p style="margin-left: 30px;"><strong>/home/zasob</strong> - ścieżka dostępu do udostępnianego katalogu,</p>
<p style="margin-left: 30px;"><strong>192.168.1.0/24</strong> - definicja komputerów (ich adresów IP), które z zasobu mogą skorzystać,</p>
<p style="margin-left: 30px;"><strong>(rw)</strong> - określenie praw, hosty będą miały możliwość odczytu (r - read) oraz zapisu (w - write). Opcjonalnie możemy dodać parametr: <strong>sync</strong> zwiększający pewność prowadzonej transmisji danych - parametr podajemy po przecinku (rw,sync)</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image55.png" alt="image55" width="700" height="207" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przy definicji wpisów należy pamiętać o jednej ważnej rzeczy a mianowicie nie wolno stawiać spacji pomiędzy ip/nazwą hosta a nawiasem.</p>
<p> </p>
<p>Poniżej przykład dwóch wpisów obrazujących tą regułę:</p>
<p style="margin-left: 30px;"><strong>/home/user_1/ 10.0.0.1(rw) (ro) </strong>- dostęp do zasobu /home/user_1 z maszyny 10.0.0.1 z uprawnieniami odczyt/zapis oraz dostęp dla wszystkich ale tylko z prawem odczytu,</p>
<p style="margin-left: 30px;"><strong>/home/user_2/ 10.0.0.1 (rw)</strong> - dostęp do zasobu /home/suer_2 dla wszystkich z uprawnieniami odczyt/zapis.</p>
<p> </p>
<p>Sprawdzenie wszystkich udostępnionych przydziałów możemy dokonać za pomocą komendy: <strong>exportfs -v</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image56.png" alt="image56" width="700" height="60" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Folder został udostępniony tak więc umieśćmy w nim plik. W katalogu<strong> /home/zasob</strong> został zapisany plik tekstowy: <strong>plik.txt</strong> w który został zawarty tekst: <strong>zasob udostepniony</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image57.png" alt="image57" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po stronie serwer konfigurację mamy przeprowadzoną nie pozostaje nic innego jak zastosowanie ustawień. Serwer restartujemy za pomocą polecenia: <strong>service nfs-kernel-server restart</strong> (opcjonalnie możemy skorzystać z polecenia: <strong>exportfs -a</strong>)</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image58.png" alt="image58" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby można było przeprowadzić operację uzyskania dostępu do zasobu na hoście klienta instalujemy pakiet: <strong>nfs-common</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image59.png" alt="image59" width="700" height="258" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po instalacji pakietu zakładamy katalog w którym będzie montowany zasób sieciowy. W naszym przypadku został utworzony folder: <strong>serwer</strong> w katalogu domowym użytkownika <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image60.png" alt="image60" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Montowanie udostępnionego katalogu realizujemy za pomocą polecenia: <strong>mount -t nfs <adres_IP_serwera>:<ścieżka_zasobu_zdalnego> <ścieżka_katalog_lokalny> </strong>Wpis przyjmie postać jak na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image61.png" alt="image61" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wydaniu polecenia udostępniony zasób (katalog <strong>/home/zasob</strong> na hoście <strong>192.168.1.100</strong>) będzie dostępny za pośrednictwem folderu lokalnego <strong>serwer</strong> zlokalizowanego w katalogu domowym użytkownika <strong>root</strong>.</p>
<p> </p>
<p>Sprawdzenie udostępnienia możemy wykonać za pomocą polecenia: <strong>df -h</strong> Jak widać poniżej wszystko je OK.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image62.png" alt="image62" width="700" height="208" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wszystkie czynności zostały wykonane, sprawdźmy zatem efekt przeprowadzonej konfiguracji.</p>
<p style="margin-left: 30px;">1 - wylistowanie katalogu domowego użytkownika <strong>root</strong>,</p>
<p style="margin-left: 30px;">2 - przejście do katalogu <strong>serwer</strong>,</p>
<p style="margin-left: 30px;">3 - wylistowanie katalogu <strong>serwer</strong>, jak można zauważyć w folderze znajduje się udostępniony plik tekstowy,</p>
<p style="margin-left: 30px;">4 - sprawdzenie zawartości pliku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dostęp do zasobu i jego odczyt działa, sprawdźmy czy uda się wykonać operację zapisu do udostępnionego pliku. Do tego celu został wykorzystany edytor <strong>nano</strong> (tak dla urozmaicenia) i za jego pośrednictwem do pliku został dopisany wiersz: <strong>dopisane przez klienta</strong> Plik został zapisany.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image64.png" alt="image64" width="700" height="421" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Proces zapisu pliku przebiegł bez żadnych problemów i dopisany tekst możemy przeglądnąć po stronie serwera. Udostępnianie zasobów z wykorzystaniem protokołu NFS działa.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zanim przejdziemy do dalszej części wpisu jeszcze krótki opis automatycznego montowania zasobu wraz ze startem systemu.</p>
<p> </p>
<p>Rozpoczynamy od edycji pliku: <strong>/etc/fstb</strong> Do pliku należy dodać wpis: <strong><adres_IP_serwera>:<ścieżka_do_zasobu> <punkt_montowania> nfs defaults 0 0</strong> Wpis przyjmie postać jak na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image66.png" alt="image66" width="700" height="333" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wykonaniu wpisu sprawdźmy czy przeprowadzona konfiguracja zadziała.</p>
<p style="margin-left: 30px;">1 - za pomocą polecenia: <strong>umount <zasób_sieciowy></strong> wykonujemy operację odmontowania zasobu sieciowego,</p>
<p style="margin-left: 30px;">2 - sprawdzamy czy odmontowanie się powiodło (zasób został zwolniony),</p>
<p style="margin-left: 30px;">3 - za pomocą komendy: <strong>mount -a</strong> wymuszamy ponowne zamontowanie sytemu plików,</p>
<p style="margin-left: 30px;">4 - sprawdzenie czy został zamontowany skonfigurowany zasób sieciowy (montowanie udziału powiodło się).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image67.png" alt="image67" width="700" height="416" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I ostatnia kwestia jaka pozostała Nam do omówienia to ustalenie przydziału dyskowego w systemie Linux.</p>
<p> </p>
<p>Tradycyjnie już rozpoczynamy od instalacji niezbędnych pakietów tym razem będzie to pakiet <strong>quota</strong> oraz <strong>quotatool</strong>. Całość operacji oczywiście przeprowadzamy na komputerze udostępniającym pliki. Aby pobrać narzędzia wydajemy polecenie: <strong>apt-get install quota quotatool</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image68.png" alt="image68" width="700" height="531" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Narzędzia zostały poprawnie zainstalowane. Aby mechanizm przydziałów mógł zacząć funkcjonować edytujemy plik <strong>/etc/fstab</strong> i w linii reprezentującej dysk na którym przydziały mają zostać włączone dopisujemy: <strong>usrquota,grpquota</strong> - bez znaków spacji. Dopisanie opcji należy wykonać bardzo dokładnie gdyż pomyłka może spowodować problemy z uruchomieniem systemu. Oba wpisy włączają przydział oparty o użytkownika i grupę.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image69.png" alt="image69" width="700" height="152" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby wszystko zaczęło poprawnie działać wykonujemy restart maszyny bądź za pomocą polecenia: <strong>mount -o remount,rw /</strong> wykonujemy ponowne zamontowanie systemu plików.</p>
<p> </p>
<p>Po wykonaniu restartu maszyny za pomocą polecenia: <strong>repquota -ast</strong> możemy wygenerować raport zużycia zasobów dyskowych wszystkich użytkowników (flaga: <strong>-t</strong> odpowiedzialna za skrócenie nazwy udziału do 9 znaków, flaga: <strong>-s</strong> jednostki są pokazywane w kB oraz MB a nie w bajtach, flaga: <strong>-a</strong> oznacza wszystko).</p>
<p> </p>
<p>Po wydaniu polecenia ukaże się Nam tabela w której zostaną zebrani wszyscy użytkownicy wraz z informacją o ilości wykorzystywanych zasobów dyskowych.</p>
<p> </p>
<p>Tabela dodatkowo podzielona jest na dwa obszary: limity miejsca i limity plików w których wyświetlane są informacje o aktualnym wykorzystaniu ustalonych limitów.</p>
<p> </p>
<p>Limity jakie możesz ustawić dotyczą ilości wykorzystywanego miejsca na dysku bądź ilości tworzonych plików.</p>
<p> </p>
<p>Dodatkowo każda z sekcji została podzielona na kolumny w których znajdziemy informację o:</p>
<ul>
<li style="padding-left: 60px;">aktualne wykorzystanie przestrzeni dyskowej/ilości utworzonych plików,</li>
<li style="padding-left: 60px;">wartościach zdefiniowanych limitów miękkich oraz twardych,</li>
<li style="padding-left: 60px;">okresie pobłażania (domyślnie 7 dni).</li>
</ul>
<p> </p>
<p>Limit miękki (ang. soft limit) definiuje przydział, który dany użytkownik może przekraczać dowolną ilość razy lecz limit ten ograniczony jest tzw. okresem pobłażania, czyli czasem po którym dalszy zapis nie będzie możliwy.</p>
<p> </p>
<p>Limit twardy (ang. hard limit) określa wartość maksymalnego rozmiaru przydzielonych zasobów dyskowych dla konkretnego użytkownika. Limit twardy nie może być przekroczony.</p>
<p> </p>
<p>Zarówno limit miękki jak i twardy możemy ustawić w kontekście ilości miejsca oraz ilości możliwych do utworzenia plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image70.png" alt="image70" width="700" height="318" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Włączenie/wyłączenie mechanizmu quota dokonujemy za pomocą poleceń: <strong>quotaon -avug</strong> oraz <strong>quotaoff -avug</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image71.png" alt="image71" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy zatem działanie mechanizmu przydziału dyskowego w praktyce. Sprawdzenia dokonujemy od utworzenia nowego użytkownika: <strong>user_1</strong>, któremu ustalimy limit wykorzystania dysku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image72.png" alt="image72" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ustalenie limitów obejmujące użytkownika odbywa się po wydaniu polecenia: <strong>edquota -u <nazwa_użytkownika></strong> czyli w naszym przypadku należy wydać polecenie: <strong>edquota -u user_1 </strong>Jeśli chcesz ustalić limit, który będzie obejmował daną grupę wydaj komendę: <strong>edquota -g <nazwa_grupy></strong> Po wydaniu polecenia ustalamy wartości limitów. W ćwiczeniu dla użytkownika: <strong>user_1</strong> limit miękki został ustalony na 50000kB (50 MB) zaś twardy na 100000kB (100 MB).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image73.png" alt="image73" width="700" height="404" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zdefiniowaniu wartości limitów sprawdźmy czy mają one zastosowanie. Wygenerowanie raportu uwidacznia stan obowiązujących przydziałów. Raport zgadza się z przeprowadzoną przez Nas konfiguracją.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image74.png" alt="image74" width="700" height="397" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Limity zostały ustalone sprawdźmy zatem czy działają. Po zalogowaniu się na konto użytkownika: <strong>user_1 </strong>przechodzimy do poprania programu Acrobat Reader, który zajmuje około 37 MB. Plik programu pobiera się bez żadnych problemów.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image75.png" alt="image75" width="700" height="478" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zapisie pliku ponownie przeprowadzamy sprawdzenie wykorzystania zasobów. Jak można zauważyć limit miękki został przekroczony lecz nie skutkuje to jeszcze żadnymi konsekwencjami gdyż okres pobłażania przyjął domyślną wartość 7 dni.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image76.png" alt="image76" width="700" height="419" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy jak zachowa się system w przypadku osiągnięcia wartości określonej przez limit twardy. Następuje próba skopiowania uprzednio ściągniętego programu. Dotychczasowe użycie dysku jest na poziomie około 83 MB więc dodanie kolejnych 37 MB spowoduje przekroczenie limitu ustalonego przez przydział twardy. Jak się można domyślać skopiowanie pliku kończy się niepowodzeniem. Operacja zostaje przerwana z powodu przekroczenia ustalonego limitu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image77.png" alt="image77" width="700" height="449" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W ten o to prosty sposób możemy prowadzić kontrolę wykorzystanie miejsca na dysku.</p>
<p> </p>
<p>Każdy użytkownik za pomocą polecenia: <strong>quota</strong> sam może sprawdzić stopień wykorzystania przydzielonego mu limitu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image78.png" alt="image78" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeśli zależy Nam na zmianie okresu pobłażania to definicję interwału czasu wykonamy za pomocą komendy: <strong>edquota -t</strong> Poniżej domyślny okres pobłażania trwający 7 dni został zmieniony na okres 4 dni.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image79.png" alt="image79" width="700" height="429" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zapisie pliku nowy okres pobłażliwości zaczyna obowiązywać.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image80.png" alt="image80" width="700" height="335" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I na tym etapie wpis swój chciałbym zakończyć. Mam nadzieję, że po lekturze artykułu nie będziesz miał Czytelniku żadnego problemu by udostępniać swoje zasoby sieciowe z wykorzystaniem hostów pracujących pod kontrolą systemu Windows oraz Linux.</p>
<hr />
<p>BIBLIOGRAFIA</p>
<p> </p>
<p><a href="http://www.tecmint.com/how-to-setup-nfs-server-in-linux/">http://www.tecmint.com/how-to-setup-nfs-server-in-linux/</a></p>
<p><a href="https://linuxconfig.org/how-to-configure-nfs-on-linux">https://linuxconfig.org/how-to-configure-nfs-on-linux</a></p>
<p><a href="https://www.samba.org/samba/docs/pl/smb.conf.5.pl.html">https://www.samba.org/samba/docs/pl/smb.conf.5.pl.html</a></p>
<p><a href="http://www.linuxnix.com/how-to-linux-group-disk-quota-implementation/">http://www.linuxnix.com/how-to-linux-group-disk-quota-implementation/</a></p></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/62fb5f1024529266c6e71c0c0c9ddb3c_S.jpg" alt="Windows i Linux w jednej stali sieci." /></div><div class="K2FeedIntroText"><p>Administrując dana siecią komputerową prędzej czy później zmierzysz się z scenariuszem w którym będziesz musiał skonfigurować udostępnianie zasobów pomiędzy systemami Linux oraz Windows. Aby sprostać zadaniu w artykule opis sytuacji obejmujący udostępnianie plików pomiędzy systemem Windows-Linux, Linux-Windows oraz Linux-Linux.</p>
</div><div class="K2FeedFullText">
<p>Przechodzimy do scenariusza pierwszego w którym systemem udostępniającym pliki jest Windows natomiast klientem host pracujący pod kontrolą systemu Linux.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Komunikacja pomiędzy komputerami jest oczywiście zapewniona (ping z hosta Linux w kierunku hosta Windows).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Rozpoczynamy od utworzenia w systemie Windows folderu do którego będą mieli dostęp użytkownicy systemu Linux. Nazwa zasobu została ustalona na: <strong>linux_udostepniony</strong>.</p>
<p> </p>
<p>Zasób został udostępniony dla Wszystkich z możliwością <strong>odczytu</strong> i <strong>zapisu</strong>. Udostępnienie realizujemy po zaznaczeniu danego folderu i po wybraniu z menu kontekstowego <strong>Udostępnij</strong> a następnie <strong>Określone osoby</strong> bądź po wybraniu <strong>Właściwości</strong> i przejściu na kartę <strong>Udostępnianie</strong> (przycisk: <strong>Udostępnij</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image3.png" alt="image3" width="700" height="487" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po określeniu kont mających prawo do korzystania z zasobu, zasób staje się widoczny w otoczeniu sieciowym. Folder jest osiągalny za pomocą adresu: <strong>\\XXX\linux_udostepniony</strong> (wykorzystanie nazwy komputera) bądź <strong>\\192.168.1.50\linux_udostepniony</strong> (wykorzystanie adresu IP komputera).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Konfiguracja na systemie Windows została wykonana. Przechodzimy do systemu Linux a mówiąc bardziej szczegółowo do Ubuntu 16.04</p>
<p> </p>
<p>W systemie tym zostaną przedstawione dwa przykłady: pierwszy będzie obejmował uzyskanie dostępu do udostępnionego zasobu z wykorzystaniem wiersza poleceń drugi zaś z wykorzystaniem GUI (dla każdego coś się znajdzie).</p>
<p> </p>
<p>Rozpoczynamy od wiersza poleceń. Pierwszą czynnością jest zainstalowanie dodatkowych pakietów. W tym celu uruchamiamy terminal i wydajemy polecenie: <strong>apt-get install cifs-utils</strong></p>
<p> </p>
<p>Dzięki instalacji pakietu otrzymamy możliwość wykorzystania protokołu SMB/CIFS (ang. Server Message Block protokół służący udostępnianiu zasobów komputerowych, m.in. drukarek czy plików, znany jest również pod nazwą CIFS ang. Common Internet File System). Dodatkowo pakiet dostarcza narzędzia do zarządzania punktami montowań sieciowych systemów plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po prawidłowym zainstalowaniu pakietu <strong>cifs-utils </strong>tworzymy katalog do którego zamontujemy udostępniony folder w systemie Windows (punkt 1). Jak widać poniżej katalog został utworzony poprawnie (punkt 2). Nazwa katalogu została ustalona na: <strong>na_windows</strong> a został on utworzony w katalogu domowym użytkownika <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image6.png" alt="image6" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Powracamy jeszcze na chwilę do systemu Windows i w udostępnionym zasobie tworzymy plik tekstowy o nazwie: <strong>tekst.txt</strong>, do zawartości pliku został dopisany tekst: <strong>plik_udostepniony</strong> Dodatkowo został sprawdzony adres IP hosta Windows - <strong>192.168.1.50</strong> oraz nazwa użytkownika - <strong>luk</strong> (informacje będą potrzebne za chwilę).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image7.png" alt="image7" width="700" height="487" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Powracamy do systemu Ubuntu w którym wykonamy czynność zamontowania zasobu sieciowego do utworzonego przed chwilą katalogu.</p>
<p> </p>
<p>Montowanie zasobu przeprowadzamy za pomocą polecenia: <strong>mount.cifs <udostępniony_zasób_sieciowy> <katalog_montowania> -o user=<nazwa_użytkownika></strong></p>
<p> </p>
<p>W scenariuszu zmienne przyjęły następujące wartości:</p>
<p style="margin-left: 30px;"><strong>udostępniony_zasób_sieciowy </strong>- ścieżka sieciowa do zasobu sieciowego - <strong>//192.168.1.50/linux_udostepniony</strong> - do określenia ścieżki sieciowej został użyty adres IP hosta Windows,</p>
<p style="margin-left: 30px;"><strong>katalog_montowania</strong> - katalog na komputerze lokalnym do którego montujemy udostępniony zasób sieciowy - <strong>~/na_windows</strong> - ścieżka określa katalog domowy użytkownika <strong>root</strong> (użyta tylda) i katalog: <strong>na_windows</strong></p>
<p style="margin-left: 30px;"><strong>user=<nazwa_użytkownika> </strong>- nazwa użytkownika w systemie Windows, który ma prawo skorzystać z udostępnionego zasobu - <strong>user=luk</strong></p>
<p> </p>
<p>Po wydaniu polecenia aby zakończyć proces montowania zasobu należy podać hasło użytkownika <strong>luk</strong> (oczywiście podajemy hasło używane w systemie Windows).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image8.png" alt="image8" width="700" height="52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Czas sprawdzić efekt przeprowadzonej konfiguracji. Po przejściu do katalogu <strong>na_windows</strong> (punkt 1) sprawdzamy jego zawartość (punkt 2). Jak widać zamieszczony przez Nas plik<strong> tekst.txt</strong> znajduje się w zamontowanym katalogu (punkt 3).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby upewnić się że wszystko jest po Naszej myśli, plik <strong>tekst.txt</strong> zostaje wyedytowany i do pliku zostaje dodane: <strong>dopisane z systemu linux</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image10.png" alt="image10" width="700" height="441" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przejściu do systemu Windows widać efekt zmian. Tekst dodany w systemie Linux jest widoczny w systemie Windows.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image11.png" alt="image11" width="700" height="579" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dzięki zamontowaniu udostępnionego zasobu sieciowego w systemie Windows do utworzonego katalogu w systemie Linux uzyskaliśmy możliwość przenoszenia plików pomiędzy oboma systemami.</p>
<p> </p>
<p>Dzięki przeprowadzonej konfiguracji oraz w połączeniu z narzędziem <strong>mc</strong> w bardzo prosty sposób możemy realizować operację kopiowania plików pomiędzy systemami.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image12.png" alt="image12" width="700" height="499" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Do odmontowania zasobu wykorzystaj polecenie: <strong>umount <nazwa_zasobu></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeżeli chcemy uzyskać dostęp do zasobu z wykorzystaniem interfejsu graficznego należy rozpocząć od uruchomienia menedżera plików. Po uruchomieniu narzędzia z prawej strony odszukujemy gałąź <strong>Sieć</strong>. Po jej wybraniu powinny ukazać się Nam wszystkie komputery do których mamy dostęp z poziomu naszej sieci. Nasz testowy zasób sieciowy jest udostępniany na komputerze o nazwie <strong>XXX</strong> tak więc aby uzyskać do niego dostęp klikamy na ikonę z nazwą komputera. Po wybraniu ikony reprezentującej dany komputer zostaniemy poproszeni o podanie poświadczeń użytkownika mającego prawo skorzystania z zasobu. Podobnie jak w przypadku wiersza poleceń podajemy dane uwierzytelniające użytkownika, którego konto znajduje się w systemie Windows.</p>
<p> </p>
<p>Dodatkowo możemy określić jedną z trzech opcji dotyczącą zachowania wprowadzonego hasła.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image14.png" alt="image14" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po dokonaniu poprawnego uwierzytelnienia uzyskamy dostęp do udostępnionego zasobu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image15.png" alt="image15" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I podobnie jak w przypadku użycia wiersza poleceń tak i tu dokonujemy edycji pliku poprzez dopisanie komentarza: <strong>dopisane z GUI</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image16.png" alt="image16" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak się można domyślać zmiany zostaną odzwierciedlone w systemie Windows.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image17.png" alt="image17" width="700" height="579" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Życie administratora jest znacznie bardziej skomplikowane i czasem te najprostsze rozwiązania musimy nieco zmodyfikować tak by odpowiadały one Naszym potrzebom. Tak więc powyższy przykład zmodyfikujmy i prześledźmy scenariusz w którym użytkownikom systemu Linux nałożymy pewne ograniczenie polegające na zdefiniowaniu ilości przestrzeni dyskowej, która może być przez Nich wykorzystywana. Czyli jak w praktyce w systemie Windows skonfigurować mechanizm <strong>quota</strong>.</p>
<p> </p>
<p>Scenariusz zakłada, że użytkownik systemu Linux ma do swojej dyspozycji 100 MB wolnego miejsca, przestrzeń tę może wykorzystać w sposób dowolny lecz niemożliwy będzie zapis nowych plików powyżej ustalonego limitu.</p>
<p> </p>
<p>Rozpoczynamy od uruchomienia konsoli MMC (w oknie <strong>Uruchom</strong> - skrót:Win+R wpisujemy mmc) i dodaniu przystawki <strong>Użytkownicy i grupy lokalne</strong> (czynności tej nie da się wykonać w wersjach Home systemu Windows). Przystawka oczywiście musi uwzględniać użytkowników i grupy komputera lokalnego.</p>
<p> </p>
<p>Dodanie przystawki zrealizujemy po wybraniu z menu konsoli MMC opcji <strong>Plik</strong> a następnie <strong>Dodaj/Usuń przystawkę</strong>. W nowo otwartym oknie z listy dostępnych przystawek odszukujemy przystawkę <strong>Użytkownicy i grupy lokalne </strong>i za pomocą przycisku <strong>Dodaj</strong> umieszczamy ją w sekcji <strong>Wybrane przystawki</strong>. Zatwierdzamy wybór klawiszem <strong>OK</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image18.png" alt="image18" width="700" height="508" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po rozwinięciu przystawki odszukujemy gałąź <strong>Użytkownicy</strong> i po kliknięciu na nią PPM z menu kontekstowego wybieramy opcję <strong>Nowy użytkownik</strong>. W oknie <strong>Nowy użytkownik</strong> definiujemy dane niezbędne do utworzenia nowego konta. Niezbędne dane, które należy podać to <strong>nazwa użytkownika</strong> oraz <strong>hasło</strong>, pozostałe opcje są ustawieniami opcjonalnymi. Całość konfiguracji zatwierdzamy przyciskiem <strong>Utwórz</strong>. Konto nowego użytkownika zostało utworzone. W dalszej części opisu posłużono się kontem o nazwie: <strong>jankow</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image19.png" alt="image19" width="700" height="403" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Kolejną czynnością jest utworzenie grupy, której zadaniem będzie zebrać wszystkie konta użytkowników łączących się z hostem Windows przy wykorzystaniu systemu Linux.</p>
<p> </p>
<p>Nie zamykamy przystawki lecz z dostępnych gałęzi wybieramy <strong>Grupy</strong> a następnie z menu kontekstowego wskazujemy opcję <strong>Nowa grupa</strong>. W nowo otwartym oknie <strong>Nowa grupa</strong> definiujemy nazwę tworzonej grupy (grupę nazwano: <strong>linux_users</strong>) oraz opcjonalnie możemy określić jej krótki opis.</p>
<p> </p>
<p>Po definicji nazwy grupy za pomocą przycisku <strong>Dodaj</strong> określamy jej członków. Użytkownik <strong>jankow</strong> został dodany do grupy <strong>linux_users</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image20.png" alt="image20" width="700" height="403" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W systemie Windows konfigurację przydziałów przeprowadzamy za pomocą karty <strong>Przydział</strong> dostępnej w <strong>Właściwościach</strong> danego dysku/partycji. Po przejściu do karty wybieramy przycisk <strong>Pokaż ustawienia przydziałów</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image21.png" alt="image21" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po uaktywnieniu funkcji <strong>Przydziałów</strong> przechodzimy do ich konfiguracji:</p>
<p style="margin-left: 30px;">1 - celem włączenia funkcji zaznaczamy <strong>Włącz zarządzanie przydziałami</strong>,</p>
<p style="margin-left: 30px;">2 - zaznaczamy opcję <strong>Odmów miejsca na dysku użytkownikom przekraczającym limit przydziałów</strong>,</p>
<p style="margin-left: 30px;">3 - opcjonalnie możemy włączyć rejestrowanie zdarzeń związanych z przekroczeniem zdefiniowanego limitu (tzw. quota twarda) oraz osiągnięciem progu ostrzeżenia (tzw. quota miękka).</p>
<p style="margin-left: 30px;">4 - wybieramy przycisk <strong>Wpisy przydziałów</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image22.png" alt="image22" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W nowo otwartym oknie <strong>Wpisy przydziału dla …</strong> z górnego menu wybieramy <strong>Przydział</strong> a następnie <strong>Nowy wpis przydziału </strong>W kolejnym oknie definiujemy użytkowników co do których konfigurowany przydział będzie miał zastosowanie (dodajemy użytkownika <strong>jankow</strong>, niestety nie da się zdefiniować grupy). Po wybraniu <strong>OK</strong> ustalamy limit przydziału oraz próg po którym będzie generowane ostrzeżenie o wysokim wykorzystaniu przydzielonego miejsca.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image23.png" alt="image23" width="700" height="375" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zatwierdzeniu wszystkich ustawień przydział został skonfigurowany.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image24.png" alt="image24" width="700" height="298" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na pytanie dotyczące włączenia przydziału i aktualizacji statystyk wykorzystania dysku odpowiadamy twierdząco wybierając przycisk <strong>OK</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią rzeczą jaką musimy wykonać to nadanie uprawnień grupie <strong>linux_users</strong> do udostępnionego zasobu <strong>linux_udostepniony</strong>. Otwieramy okno <strong>Udostępnienia plików</strong> dla zasobu i za pomocą przycisku <strong>Dodaj</strong>, dopisujemy grupę, pozwalając jej tym samym na korzystanie z zasobu. Prawa dla grupy <strong>linux_users </strong>zostały ustalone na <strong>odczyt/zapis</strong>. Całość zatwierdzamy przyciskiem <strong>Udostępnij</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image26.png" alt="image26" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby grupa mogła prowadzić swobodny zapis należy dodatkowo zdefiniować prawa systemu plików. W tym celu na zakładce <strong>Udostępnianie</strong> wybieramy przycisk <strong>Udostępnienie zaawansowane</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W oknie <strong>Udostępnienie zaawansowane</strong> wybieramy przycisk <strong>Uprawnienia</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po otwarciu nowego okna do sekcji <strong>Nazwy grup lub użytkowników</strong> za pomocą przycisku <strong>Dodaj</strong> należy dopisać grupę <strong>linux_users</strong> oraz określić jej uprawnienia. Uprawnienia grupy zostały określone na: <strong>Pełna kontrola </strong>Całość konfiguracji oczywiście należy zatwierdzić.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Konfiguracja w systemie Windows została zakończona. Przechodzimy z powrotem do systemu Linux. Za pomocą znanego Nam polecenia montujemy udostępniony zasób do katalogu lokalnego. Aby móc skorzystać z zasobu należy podać poświadczenia użytkownika: <strong>jankow</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image30.png" alt="image30" width="700" height="75" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zasób został zamontowany. Sprawdźmy zatem czy przydział działa. Limit plików został ustalony na 100 MB tak więc po wykorzystaniu go dalszy zapis będzie niemożliwy. Zostały przygotowane dwa pliki o rozmiarze 61 MB każdy, co jak łatwo obliczyć łączny rozmiar plików wynosi 122 MB czyli więcej niż ustalony przydział. Jak widać poniżej udało się z hosta Linux (panel lewy) przekopiować plik: <strong>film_1.avi</strong> do lokalizacji sieciowej (panel prawy).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image31.png" alt="image31" width="700" height="503" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wykonajmy kopiowanie drugiego pliku. Operacja ta (co jak można było się spodziewać) kończy się niepowodzeniem - całe dostępne miejsce w ramach przydzielonego limitu zostało wykorzystane. Otrzymujemy komunikat błędu o niemożności wykonania operacji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image32.png" alt="image32" width="700" height="503" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ponieważ podczas definicji quoty została zaznaczona opcja rejestracji tego typu zdarzeń, tak więc wpis o zajściu zostanie zapisany w dzienniku. Po otwarciu okna <strong>Podglądu zdarzeń</strong> w sekcji <strong>System</strong> odnajdujemy wpis o przekroczeniu limitu ustalonego przydziału.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image33.png" alt="image33" width="700" height="504" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby zasób sieciowy był automatycznie montowany wraz ze startem systemu do pliku konfiguracyjnego <strong>/etc/fstab </strong>należy dodać wpis jak na zrzucie poniżej:</p>
<p style="margin-left: 30px;">1 - ścieżka do zasobu sieciowego,</p>
<p style="margin-left: 30px;">2 - ścieżka do katalogu w którym zasób ma zostać zamontowany,</p>
<p style="margin-left: 30px;">3 - system plików,</p>
<p style="margin-left: 30px;">4 - opcje dodatkowe takie jak nazwa użytkownika czy hasło.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image34.png" alt="image34" width="700" height="300" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<hr />
<p>Udostępnianie plików z wykorzystaniem systemu Windows wraz z dostępem do nich z poziomu Linux mamy omówione. Odwracamy sytuację czyli zadanie polega na utworzeniu zasobu w systemie Linux, tak by był on dostępny dla hostów pracujących pod kontrolą systemu Windows.</p>
<p> </p>
<p>Topologia sieciowa zostaje zachowana.</p>
<p> </p>
<p>Konfigurację rozpoczynamy od systemu Linux a mówiąc bardziej szczegółowo od instalacji serwera Samba. Aby zainstalować niezbędne pakiety wydajemy polecenie: <strong>apt-get install samba</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image35.png" alt="image35" width="700" height="260" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Serwer Samba został zainstalowany kolejny krok to definicja użytkowników, którzy za pośrednictwem serwera będą mogli skorzystać z udostępnionego zasobu. Przypisanie użytkowników realizujemy za pomocą komendy: <strong>smbpasswd -a <nazwa_użytkownika></strong> Poniżej została przeprowadzona operacja dodania konta: <strong>luk</strong> do usługi serwera Samba.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Mała uwaga (a nawet dwie) odnośnie czynności związanych z ustaleniem konta serwisu Samba. (Uwaga nr 1) Dodawane konto musi istnieć w systemie Linux czyli nie zdefiniujemy konta serwera Samba użytkownikowi, który nie posiada konta w systemie Linux. (Uwaga nr 2) Definicja hasła następuje w sposób całkowicie niezależny od tego już istniejącego. Oznacza to, że hasło wykorzystywane do realizacji zadań wynikających z uruchomienia serwera Samba może różnić się od tego wykorzystywanego do procesu logowania do systemu Linux.</p>
<p> </p>
<p>Po dodaniu konta do serwera Samba, celem zarządzania nim, można użyć następujących przełączników:</p>
<ul>
<li style="padding-left: 60px;"><strong>-x</strong> - skasowanie użytkownika,</li>
<li style="padding-left: 60px;"><strong>-d</strong> - wyłączenie konta użytkownika,</li>
<li style="padding-left: 60px;"><strong>-e</strong> - włączenie konta użytkownika.</li>
</ul>
<p> </p>
<p>Aby zmienić hasło danemu użytkownikowi użyj ponownie polecenia: <strong>smbpasswd -a <nazwa_użytkownika></strong></p>
<p> </p>
<p>Następnym krokiem jaki musimy wykonać jest określenie katalogu, który będzie dostępny dla użytkowników Windows a tym samym zasobu w którym będą mogli oni prowadzić proces zapisu i odczytu plików.</p>
<p> </p>
<p>W scenariuszu został użyty katalog <strong>użytkownik_windows</strong> znajdujący się w katalogu domowym użytkownika <strong>luk</strong>. Katalog został założony.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po założeniu katalogu należy go udostępnić tak by był on osiągalny z poziomu <strong>Otoczenia sieciowego</strong> systemu Windows. Udostępnienie realizujemy poprzez edycję pliku konfiguracyjnego serwera Samba: <strong>/etc/samba/smb.conf</strong> Aby móc edytować plik wydajemy polecenie: <strong>mcedit /etc/samba/smb.conf </strong>(edycję przeprowadzamy z uprawnieniami root-a oraz z wykorzystaniem edytora mcedit).</p>
<p> </p>
<p>Plik <strong>smb.conf</strong> zawiera szereg ustawień wpływających na pracę serwera omówienie ich wszystkich wykracza poza ramy artykułu (serwerem Samba zajmiemy się jeszcze w odrębnych artykułach, jego użycie zostało również opisane w wpisie: <a href="http://slow7.pl/item/74-active-directory-w-wydaniu-linux" title="Active Directory w wydaniu Linux">Active Directory w wydaniu Linux</a>).</p>
<p> </p>
<p>W sekcji konfiguracji globalnej za pomocą parametru: <strong>workgroup</strong> definiujemy nazwę grupy roboczej (została pozostawiona domyślna nazwa WORKGROUP) - punkt 1. Opcjonalnie za pomocą parametru <strong>netbios name</strong> ustalamy nazwę komputera (punkt 2) zaś parametru <strong>server string</strong> opis (punkt 3).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image38.png" alt="image38" width="700" height="409" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzonych ustawieniach restartujemy serwer Samba poleceniem: <strong>service smbd restart</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Host w <strong>Otoczeniu sieciowym</strong> systemu Windows powinien być widoczny i jak widać poniżej tak rzeczywiście jest. Do zasobu nie mamy jeszcze dostępu gdyż żadnego katalogu znajdującego się w systemie Linux nie udostępniliśmy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image40.png" alt="image40" width="700" height="594" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Podczas instalacji systemu Linux można było określić nazwę komputera, nazwa ta będzie się wyświetlać na liście komputerów obecnych w sieci. Jeśli istniejąca nazwa komputera nam nie odpowiada, oczywiście możemy ją zmienić. Zmianę wykonujemy poprzez edycję dwóch plików: <strong>/etc/hostname </strong>oraz <strong>/etc/hosts</strong>.</p>
<p> </p>
<p>W pierwszym pliku, obecną nazwę zastępujemy nową i tak samo postępujemy z drugim plikiem (nazwa komputera będzie znajdowała się obok adresu IP należącego do sieci 127.0.0.0/8 - tzw. <strong>adresu localhost</strong> - wysyłając ping na podany adres „pingujesz” sam siebie).</p>
<p> </p>
<p>Przechodzimy do określenia zasobu, którego definicję rozpoczynamy od nadania mu nazwy. Nazwę zapisujemy w nawiasach kwadratowych - <strong>[uzytkownik_windows]</strong> Po określeniu nazwy definiujemy opcje dodatkowe:</p>
<p style="margin-left: 30px;">1 - <strong>path = <ścieżka_do udostępnianego_zasobu></strong> Ponieważ zapis realizowany przez użytkowników systemu Windows będzie realizowany w katalogu: <strong>uzytkownik_windows</strong> znajdujący się w folderze domowym użytkownika <strong>luk</strong> tak więc wpis przyjmie postać:<br /> <strong>path = home/luk/uzytkownik_windows</strong></p>
<p style="margin-left: 30px;">2 - <strong>valid users = luk</strong> - definicja sprawdzenia poświadczeń użytkownika mającego prawo skorzystania z zasobu. Jeśli lista użytkowników nie została zdefiniowana (domyślnie), oznacza to, że każdy użytkownik może z zasobu korzystać. Aby zabronić dostępu do udostępnionego zasobu określonym użytkownikom użyj opcji: <strong>invalid users = <użytkownicy> </strong>np. <strong>invalid users = root beata</strong></p>
<p style="margin-left: 30px;">3 - <strong>available = yes</strong> - czy udostępniany zasób ma być dostępny,</p>
<p style="margin-left: 30px;">4 - <strong>browsable = yes</strong> - czy zasób można przeglądać,</p>
<p style="margin-left: 30px;">5 - <strong>read only = no</strong> - czy zasób tylko do odczytu,</p>
<p style="margin-left: 30px;">6 - <strong>writable = yes</strong> - czy można przeprowadzić operację zapisu,</p>
<p style="margin-left: 30px;">7 - <strong>public = yes</strong> - czy dostępny publicznie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image41.png" alt="image41" width="700" height="392" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Konfiguracja udostępniania zasobu jest zakończona. Aby móc skorzystać z zasobu restartujemy usługę serwera Samba wraz z restartem usługi <span class="st">serwera nazw NetBIOS.</span></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią czynnością jest sprawdzenie efektów przeprowadzonej konfiguracji. Sprawdźmy zatem czy uzyskamy dostęp do zasobu z poziomu systemu Windows. Jeszcze raz sprawdzamy otoczenie sieciowe i jak można zauważyć poniżej zasób został umieszczony na liście. Aby móc skorzystać z zasobu należy podać poświadczenia użytkownika: <strong>luk</strong>. Po podaniu poprawnych danych zasób jest dla Nas dostępny.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image43.png" alt="image43" width="700" height="486" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Udało się uzyskać dostęp do zasobu znajdującego się na hoście kontrolowanym przez system Linux. Sprawdźmy zatem czy możliwy będzie zapis oraz odczyt. Tak jak w przypadku poprzednim rozpoczynamy od utworzenia pliku tekstowego: <strong>test.txt</strong> i jego edycji. W pliku umieszczono tekst: <strong>informacja od użytkownika windows</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image44.png" alt="image44" width="700" height="514" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przejściu do systemu Linux odczyt i zapis pliku <strong>test.txt</strong> jest możliwy. Do pliku przez użytkownika systemu Linux zostaje dodany tekst: <strong>informacja od użytkownika linux</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image45.png" alt="image45" width="700" height="388" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Informacja pozostawiona przez użytkownika systemu Linux bez problemu zostaje odczytana w systemie Windows.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image46.png" alt="image46" width="700" height="514" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wszystko działa, obustronna komunikacja pomiędzy systemami jest możliwa.</p>
<p> </p>
<p>Czasem jednak pomimo poprawnie przeprowadzonej konfiguracji możemy natrafić na problemy, które uniemożliwią Nam swobodny zapis informacji pomiędzy systemami. Najczęściej spotykam dwa problemy, które objawiają się tym, że uzyskuje dostęp do zasobu lecz brak jest możliwości wykonania kopiowania/zapisu plików. Więc poniżej krótki opis i szybkie rozwiązanie.</p>
<p> </p>
<p>Problem pierwszy związany jest z brakiem przeprowadzonego uwierzytelnienia. W momencie próby otwarcia udostępnionego zasobu powinno pojawić się okno logowania w którym musimy podać login i hasło użytkownika mającego prawo do korzystania z zasobu. Okno się nie pojawia, udaje się wejść do folderu i na tym Nasze uprawnienia się kończą. Problem ten najczęściej występuje w systemie Windows 7 (w Windows 8 oraz Windows 10 jeszcze mi się nie przydarzyło). Na szczęście rozwiązanie jest bardzo proste. Wybieramy ikonę <strong>Komputer</strong> i po kliknięciu PPM wybieramy <strong>Mapuj dysk sieciowy</strong> (opcjonalnie wywołanie narzędzia możemy wykonać poprzez okno <strong>Komputer</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image47.png" alt="image47" width="700" height="431" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wywołaniu okna <strong>Mapowanie dysku sieciowego</strong> wybieramy literę dysku pod jaką będzie figurował zasób sieciowy oraz podajemy ścieżkę do niego (jak nie znamy ścieżki można skorzystać z przycisku <strong>Przeglądaj</strong>) - punkt 1. Drugą czynność jaką musimy wykonać to zaznaczyć opcję <strong>Połącz przy użyciu innych poświadczeń</strong> - punkt 2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image48.png" alt="image48" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Kliknięcie <strong>Zakończ</strong> wymusi wywołanie okna w którym podamy poświadczenia użytkownika.</p>
<p> </p>
<p>Drugi problem powodujący brak możliwości zapisu do folderu to brak uprawnień nadanych katalogowi w systemie Linux. Sprawdź zatem uprawnienia folderu i jeśli brak jest uprawnień nadaj je za pomocą polecenia: <strong>chmod</strong> (np. chmod 777 uzytkownik_windows - dokładny opis komendy znajdziesz w wpisie: <a href="http://slow7.pl/linux/item/101-dogadac-sie-z-linuxem-powloka-systemu-oraz-operacje-na-plikach" title="Dogadać się z Linuxem. Powłoka systemu oraz operacje na plikach."><span style="text-decoration: none;">Dogadać się z Linuxem. Powłoka systemu oraz operacje na plikach</span></a>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<hr />
<p>Zadanie wykonane. Przechodzimy do ostatniego możliwego wariantu dostępu do plików czyli klientem jest host z zainstalowanym systemem Linux oraz komputer udostępniający pliki również zarządzany jest przez system Linux.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Do udostępnienia zasobów innym komputerom wykorzystamy protokół NFS (ang. Network File System).</p>
<p> </p>
<p>Rozpoczynamy od komputera udostępniającego swoje pliki czyli serwera. Aby móc rozpocząć udostępnianie zasobów w sieci wydajemy polecenie: <strong>apt-get install nfs-kernel-server</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Niezbędne pakiety zostały zainstalowane. Weryfikację działania serwera NFS możemy przeprowadzić m. in. za pomocą polecenia: <strong>rpcinfo -p | grep nfs</strong></p>
<p> </p>
<p>Serwer działa i oczekuje na połączenia. Protokół NFS do działania wykorzystuje protokół UDP oraz TCP w połączeniu z portem 2049 a jak widać poniżej port 2049 zarówno dla TCP jak i UDP jest otwarty i oczekuje na połączenie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po upewnieniu się, że serwer NFS działa przechodzimy do definicji katalogu, który udostępnimy w sieci. W katalogu <strong>/home</strong> został utworzony folder o nazwie <strong>zasob</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ponieważ katalog został utworzony z poziomu użytkownika root należy zmienić uprawnienia katalogu gdyż tylko ten użytkownik będzie mógł prowadzić zapis. Uprawnienia folderu za pomocą polecenia: <strong>chmod</strong> zostają ustawione w ten sposób aby wszyscy mogli prowadzić swobodny odczyt i zapis plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby zasób był widoczny w otoczeniu sieciowym należy go zdefiniować w pliku konfiguracyjnym serwera. Definicję zasobu wykonamy wydając polecenie: <strong>mcedit /etc/exports</strong></p>
<p> </p>
<p>Do pliku konfiguracyjnego zostaje dopisana linia: <strong>/home/zasob 192.168.1.0/24(rw)</strong></p>
<p style="margin-left: 30px;"><strong>/home/zasob</strong> - ścieżka dostępu do udostępnianego katalogu,</p>
<p style="margin-left: 30px;"><strong>192.168.1.0/24</strong> - definicja komputerów (ich adresów IP), które z zasobu mogą skorzystać,</p>
<p style="margin-left: 30px;"><strong>(rw)</strong> - określenie praw, hosty będą miały możliwość odczytu (r - read) oraz zapisu (w - write). Opcjonalnie możemy dodać parametr: <strong>sync</strong> zwiększający pewność prowadzonej transmisji danych - parametr podajemy po przecinku (rw,sync)</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image55.png" alt="image55" width="700" height="207" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przy definicji wpisów należy pamiętać o jednej ważnej rzeczy a mianowicie nie wolno stawiać spacji pomiędzy ip/nazwą hosta a nawiasem.</p>
<p> </p>
<p>Poniżej przykład dwóch wpisów obrazujących tą regułę:</p>
<p style="margin-left: 30px;"><strong>/home/user_1/ 10.0.0.1(rw) (ro) </strong>- dostęp do zasobu /home/user_1 z maszyny 10.0.0.1 z uprawnieniami odczyt/zapis oraz dostęp dla wszystkich ale tylko z prawem odczytu,</p>
<p style="margin-left: 30px;"><strong>/home/user_2/ 10.0.0.1 (rw)</strong> - dostęp do zasobu /home/suer_2 dla wszystkich z uprawnieniami odczyt/zapis.</p>
<p> </p>
<p>Sprawdzenie wszystkich udostępnionych przydziałów możemy dokonać za pomocą komendy: <strong>exportfs -v</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image56.png" alt="image56" width="700" height="60" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Folder został udostępniony tak więc umieśćmy w nim plik. W katalogu<strong> /home/zasob</strong> został zapisany plik tekstowy: <strong>plik.txt</strong> w który został zawarty tekst: <strong>zasob udostepniony</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image57.png" alt="image57" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po stronie serwer konfigurację mamy przeprowadzoną nie pozostaje nic innego jak zastosowanie ustawień. Serwer restartujemy za pomocą polecenia: <strong>service nfs-kernel-server restart</strong> (opcjonalnie możemy skorzystać z polecenia: <strong>exportfs -a</strong>)</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image58.png" alt="image58" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby można było przeprowadzić operację uzyskania dostępu do zasobu na hoście klienta instalujemy pakiet: <strong>nfs-common</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image59.png" alt="image59" width="700" height="258" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po instalacji pakietu zakładamy katalog w którym będzie montowany zasób sieciowy. W naszym przypadku został utworzony folder: <strong>serwer</strong> w katalogu domowym użytkownika <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image60.png" alt="image60" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Montowanie udostępnionego katalogu realizujemy za pomocą polecenia: <strong>mount -t nfs <adres_IP_serwera>:<ścieżka_zasobu_zdalnego> <ścieżka_katalog_lokalny> </strong>Wpis przyjmie postać jak na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image61.png" alt="image61" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wydaniu polecenia udostępniony zasób (katalog <strong>/home/zasob</strong> na hoście <strong>192.168.1.100</strong>) będzie dostępny za pośrednictwem folderu lokalnego <strong>serwer</strong> zlokalizowanego w katalogu domowym użytkownika <strong>root</strong>.</p>
<p> </p>
<p>Sprawdzenie udostępnienia możemy wykonać za pomocą polecenia: <strong>df -h</strong> Jak widać poniżej wszystko je OK.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image62.png" alt="image62" width="700" height="208" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wszystkie czynności zostały wykonane, sprawdźmy zatem efekt przeprowadzonej konfiguracji.</p>
<p style="margin-left: 30px;">1 - wylistowanie katalogu domowego użytkownika <strong>root</strong>,</p>
<p style="margin-left: 30px;">2 - przejście do katalogu <strong>serwer</strong>,</p>
<p style="margin-left: 30px;">3 - wylistowanie katalogu <strong>serwer</strong>, jak można zauważyć w folderze znajduje się udostępniony plik tekstowy,</p>
<p style="margin-left: 30px;">4 - sprawdzenie zawartości pliku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dostęp do zasobu i jego odczyt działa, sprawdźmy czy uda się wykonać operację zapisu do udostępnionego pliku. Do tego celu został wykorzystany edytor <strong>nano</strong> (tak dla urozmaicenia) i za jego pośrednictwem do pliku został dopisany wiersz: <strong>dopisane przez klienta</strong> Plik został zapisany.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image64.png" alt="image64" width="700" height="421" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Proces zapisu pliku przebiegł bez żadnych problemów i dopisany tekst możemy przeglądnąć po stronie serwera. Udostępnianie zasobów z wykorzystaniem protokołu NFS działa.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zanim przejdziemy do dalszej części wpisu jeszcze krótki opis automatycznego montowania zasobu wraz ze startem systemu.</p>
<p> </p>
<p>Rozpoczynamy od edycji pliku: <strong>/etc/fstb</strong> Do pliku należy dodać wpis: <strong><adres_IP_serwera>:<ścieżka_do_zasobu> <punkt_montowania> nfs defaults 0 0</strong> Wpis przyjmie postać jak na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image66.png" alt="image66" width="700" height="333" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wykonaniu wpisu sprawdźmy czy przeprowadzona konfiguracja zadziała.</p>
<p style="margin-left: 30px;">1 - za pomocą polecenia: <strong>umount <zasób_sieciowy></strong> wykonujemy operację odmontowania zasobu sieciowego,</p>
<p style="margin-left: 30px;">2 - sprawdzamy czy odmontowanie się powiodło (zasób został zwolniony),</p>
<p style="margin-left: 30px;">3 - za pomocą komendy: <strong>mount -a</strong> wymuszamy ponowne zamontowanie sytemu plików,</p>
<p style="margin-left: 30px;">4 - sprawdzenie czy został zamontowany skonfigurowany zasób sieciowy (montowanie udziału powiodło się).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image67.png" alt="image67" width="700" height="416" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I ostatnia kwestia jaka pozostała Nam do omówienia to ustalenie przydziału dyskowego w systemie Linux.</p>
<p> </p>
<p>Tradycyjnie już rozpoczynamy od instalacji niezbędnych pakietów tym razem będzie to pakiet <strong>quota</strong> oraz <strong>quotatool</strong>. Całość operacji oczywiście przeprowadzamy na komputerze udostępniającym pliki. Aby pobrać narzędzia wydajemy polecenie: <strong>apt-get install quota quotatool</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image68.png" alt="image68" width="700" height="531" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Narzędzia zostały poprawnie zainstalowane. Aby mechanizm przydziałów mógł zacząć funkcjonować edytujemy plik <strong>/etc/fstab</strong> i w linii reprezentującej dysk na którym przydziały mają zostać włączone dopisujemy: <strong>usrquota,grpquota</strong> - bez znaków spacji. Dopisanie opcji należy wykonać bardzo dokładnie gdyż pomyłka może spowodować problemy z uruchomieniem systemu. Oba wpisy włączają przydział oparty o użytkownika i grupę.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image69.png" alt="image69" width="700" height="152" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby wszystko zaczęło poprawnie działać wykonujemy restart maszyny bądź za pomocą polecenia: <strong>mount -o remount,rw /</strong> wykonujemy ponowne zamontowanie systemu plików.</p>
<p> </p>
<p>Po wykonaniu restartu maszyny za pomocą polecenia: <strong>repquota -ast</strong> możemy wygenerować raport zużycia zasobów dyskowych wszystkich użytkowników (flaga: <strong>-t</strong> odpowiedzialna za skrócenie nazwy udziału do 9 znaków, flaga: <strong>-s</strong> jednostki są pokazywane w kB oraz MB a nie w bajtach, flaga: <strong>-a</strong> oznacza wszystko).</p>
<p> </p>
<p>Po wydaniu polecenia ukaże się Nam tabela w której zostaną zebrani wszyscy użytkownicy wraz z informacją o ilości wykorzystywanych zasobów dyskowych.</p>
<p> </p>
<p>Tabela dodatkowo podzielona jest na dwa obszary: limity miejsca i limity plików w których wyświetlane są informacje o aktualnym wykorzystaniu ustalonych limitów.</p>
<p> </p>
<p>Limity jakie możesz ustawić dotyczą ilości wykorzystywanego miejsca na dysku bądź ilości tworzonych plików.</p>
<p> </p>
<p>Dodatkowo każda z sekcji została podzielona na kolumny w których znajdziemy informację o:</p>
<ul>
<li style="padding-left: 60px;">aktualne wykorzystanie przestrzeni dyskowej/ilości utworzonych plików,</li>
<li style="padding-left: 60px;">wartościach zdefiniowanych limitów miękkich oraz twardych,</li>
<li style="padding-left: 60px;">okresie pobłażania (domyślnie 7 dni).</li>
</ul>
<p> </p>
<p>Limit miękki (ang. soft limit) definiuje przydział, który dany użytkownik może przekraczać dowolną ilość razy lecz limit ten ograniczony jest tzw. okresem pobłażania, czyli czasem po którym dalszy zapis nie będzie możliwy.</p>
<p> </p>
<p>Limit twardy (ang. hard limit) określa wartość maksymalnego rozmiaru przydzielonych zasobów dyskowych dla konkretnego użytkownika. Limit twardy nie może być przekroczony.</p>
<p> </p>
<p>Zarówno limit miękki jak i twardy możemy ustawić w kontekście ilości miejsca oraz ilości możliwych do utworzenia plików.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image70.png" alt="image70" width="700" height="318" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Włączenie/wyłączenie mechanizmu quota dokonujemy za pomocą poleceń: <strong>quotaon -avug</strong> oraz <strong>quotaoff -avug</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image71.png" alt="image71" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy zatem działanie mechanizmu przydziału dyskowego w praktyce. Sprawdzenia dokonujemy od utworzenia nowego użytkownika: <strong>user_1</strong>, któremu ustalimy limit wykorzystania dysku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image72.png" alt="image72" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ustalenie limitów obejmujące użytkownika odbywa się po wydaniu polecenia: <strong>edquota -u <nazwa_użytkownika></strong> czyli w naszym przypadku należy wydać polecenie: <strong>edquota -u user_1 </strong>Jeśli chcesz ustalić limit, który będzie obejmował daną grupę wydaj komendę: <strong>edquota -g <nazwa_grupy></strong> Po wydaniu polecenia ustalamy wartości limitów. W ćwiczeniu dla użytkownika: <strong>user_1</strong> limit miękki został ustalony na 50000kB (50 MB) zaś twardy na 100000kB (100 MB).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image73.png" alt="image73" width="700" height="404" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zdefiniowaniu wartości limitów sprawdźmy czy mają one zastosowanie. Wygenerowanie raportu uwidacznia stan obowiązujących przydziałów. Raport zgadza się z przeprowadzoną przez Nas konfiguracją.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image74.png" alt="image74" width="700" height="397" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Limity zostały ustalone sprawdźmy zatem czy działają. Po zalogowaniu się na konto użytkownika: <strong>user_1 </strong>przechodzimy do poprania programu Acrobat Reader, który zajmuje około 37 MB. Plik programu pobiera się bez żadnych problemów.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image75.png" alt="image75" width="700" height="478" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zapisie pliku ponownie przeprowadzamy sprawdzenie wykorzystania zasobów. Jak można zauważyć limit miękki został przekroczony lecz nie skutkuje to jeszcze żadnymi konsekwencjami gdyż okres pobłażania przyjął domyślną wartość 7 dni.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image76.png" alt="image76" width="700" height="419" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy jak zachowa się system w przypadku osiągnięcia wartości określonej przez limit twardy. Następuje próba skopiowania uprzednio ściągniętego programu. Dotychczasowe użycie dysku jest na poziomie około 83 MB więc dodanie kolejnych 37 MB spowoduje przekroczenie limitu ustalonego przez przydział twardy. Jak się można domyślać skopiowanie pliku kończy się niepowodzeniem. Operacja zostaje przerwana z powodu przekroczenia ustalonego limitu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image77.png" alt="image77" width="700" height="449" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W ten o to prosty sposób możemy prowadzić kontrolę wykorzystanie miejsca na dysku.</p>
<p> </p>
<p>Każdy użytkownik za pomocą polecenia: <strong>quota</strong> sam może sprawdzić stopień wykorzystania przydzielonego mu limitu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image78.png" alt="image78" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeśli zależy Nam na zmianie okresu pobłażania to definicję interwału czasu wykonamy za pomocą komendy: <strong>edquota -t</strong> Poniżej domyślny okres pobłażania trwający 7 dni został zmieniony na okres 4 dni.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image79.png" alt="image79" width="700" height="429" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zapisie pliku nowy okres pobłażliwości zaczyna obowiązywać.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_4/image80.png" alt="image80" width="700" height="335" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I na tym etapie wpis swój chciałbym zakończyć. Mam nadzieję, że po lekturze artykułu nie będziesz miał Czytelniku żadnego problemu by udostępniać swoje zasoby sieciowe z wykorzystaniem hostów pracujących pod kontrolą systemu Windows oraz Linux.</p>
<hr />
<p>BIBLIOGRAFIA</p>
<p> </p>
<p><a href="http://www.tecmint.com/how-to-setup-nfs-server-in-linux/">http://www.tecmint.com/how-to-setup-nfs-server-in-linux/</a></p>
<p><a href="https://linuxconfig.org/how-to-configure-nfs-on-linux">https://linuxconfig.org/how-to-configure-nfs-on-linux</a></p>
<p><a href="https://www.samba.org/samba/docs/pl/smb.conf.5.pl.html">https://www.samba.org/samba/docs/pl/smb.conf.5.pl.html</a></p>
<p><a href="http://www.linuxnix.com/how-to-linux-group-disk-quota-implementation/">http://www.linuxnix.com/how-to-linux-group-disk-quota-implementation/</a></p></div>Serwer Syslog (po raz drugi) z wykorzystaniem systemu Linux.2016-11-28T17:49:11+00:002016-11-28T17:49:11+00:00http://slow7.pl/linux/item/131-serwer-syslog-po-raz-drugi-z-wykorzystaniem-systemu-linuxpikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/675d28c04794e3c683f4419536c4c15f_S.jpg" alt="Serwer Syslog (po raz drugi) z wykorzystaniem systemu Linux." /></div><div class="K2FeedIntroText"><p>Kontynuujemy temat rejestracji zdarzeń z wykorzystaniem serwera Syslog. Wpis ten jest kontynuacją wpisu: <a href="http://slow7.pl/sieci-komputerowe/item/130-rejestracja-zdarzen-z-wykorzystaniem-serwera-syslog"><span style="text-decoration: none;">Rejestracja zdarzeń z wykorzystaniem serwera Syslog </span></a>lecz tym razem skupiamy się na systemie Linux i wykorzystaniu deamona rsyslog.</p>
<p> </p>
<p>Ponieważ jak już zaznaczyłem wpis ten jest kontynuacją tak więc część informacji została celowo pominięta tak by nie powielać ich ponownie. To co nie zostało poruszone w tym wpisie, znajdziesz Czytelniku w artykule, do którego link podałem Ci powyżej.</p>
</div><div class="K2FeedFullText">
<p> </p>
<p>W systemie Linux za gromadzenie informacji o zdarzeniach odpowiedzialny jest mechanizm: <strong>rsyslog</strong> (dawniej – syslog).</p>
<p>Pliki konfiguracyjne odpowiedzialne za działanie tej usługi (i nie tylko tej):</p>
<p style="margin-left: 30px;"><strong>rsyslog</strong> - /etc/rsyslog.conf – plik zawierający konfigurację mechanizmu wraz z definicją logowanych zdarzeń,</p>
<p style="margin-left: 30px;"><strong>logrotate</strong> - /etc/logrotate – plik zawierający konfigurację mechanizmu odpowiedzialnego za porządkowanie utworzonych logów – planowanie czasu przechowywania logów czy definicja rozmiarów plików zawierających przechwycone zdarzenia.</p>
<p> </p>
<p>By móc prowadzić skuteczną rejestrację wystąpienia danych sytuacji w pierwszej kolejności musimy zdecydować jakie kategorie zdarzeń muszą podlegać logowaniu.</p>
<p>Kategorie zdarzeń (selektor), które mogą podlegać logowaniu to:</p>
<p style="margin-left: 30px;"><strong>auth</strong>,<strong>authpriv</strong> - autoryzacja użytkowników,</p>
<p style="margin-left: 30px;"><strong>kern</strong> - jądro systemowe,</p>
<p style="margin-left: 30px;"><strong>security</strong> - logi bezpieczeństwa,</p>
<p style="margin-left: 30px;"><strong>user</strong> - aplikacje wykorzystywane przez użytkowników,</p>
<p style="margin-left: 30px;"><strong>mail</strong> - zdarzenia związane z pocztą,</p>
<p style="margin-left: 30px;"><strong>lpr</strong> - komunikaty dotyczące obsługi drukarek i procesu wydruku,</p>
<p style="margin-left: 30px;"><strong>ftp</strong> - logi serwera ftp,</p>
<p style="margin-left: 30px;"><strong>cron</strong> - informacje dotyczące deamona cron.</p>
<p> </p>
<p style="text-align: left;">Po definicji interesującej nas kategorii należy określić ich poziom:</p>
<p style="text-align: center;"> </p>
<table border="1" style="border-collapse: collapse; margin-left: auto; margin-right: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="width: 44.55pt; border: 1pt solid windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>Poziom</strong></td>
<td style="width: 72pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96"><strong>Nazwa poziomu</strong></td>
<td style="width: 82.1pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109"><strong>Definicja syslog</strong></td>
<td style="width: 254.45pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339"><strong>Opis</strong></td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>0</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Emergency</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">EMERG</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Najwyższy priorytet. Tak jak w przypadku routerów/przełączników awaria na tyle poważna, że uniemożliwia uruchomienie systemu.</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>1</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Alert</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">ALERT</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Potrzebna natychmiastowa interwencja</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>2</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Critical</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">CRIT</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Sytuacja krytyczna</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>3</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Error</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">ERR</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Błędy w działaniu usługi</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>4</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Warning</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">WARNING</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Ostrzeżenie</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>5</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Notice</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">NOTICE</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Powiadomienie, ważniejsze zdarzenia</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>6</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Informational</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">INFO</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Komunikaty informacyjne</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; text-align: justify;" valign="top" width="59"><strong>7</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; text-align: justify;" valign="top" width="96">Debug</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; text-align: justify;" valign="top" width="109">DEBUG</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; text-align: justify;" valign="top" width="339">Szczegółowe informacje o działaniu danego procesu</td>
</tr>
</tbody>
</table>
<p style="text-align: center;"> </p>
<p style="text-align: left;">Przykładowe wpisy:</p>
<p style="margin-left: 30px;"><strong>security.* /var/log/security</strong> - logi bezpieczeństwa o <strong>każdym</strong> priorytecie będą zapisywane w pliku: <strong>/var/log/security</strong>,</p>
<p style="margin-left: 30px;"><strong>*.warning;mail.none;ftp.none /var/log/warning</strong> - logi <strong>wszystkich</strong> kategorii o priorytetach od <strong>emergency</strong> do <strong>warning</strong> (włącznie) będą zapisywane w pliku: <strong>/var/log/warning</strong> Rejestracji nie podlegają logi kategorii: <strong>mail</strong> oraz <strong>ftp</strong>,</p>
<p style="margin-left: 30px;"><strong>auth.=crit /var/log/authcrit</strong> - logi dotyczące kategorii <strong>auth</strong> będą zapisywane w pliku: <strong>/var/log/authcrit</strong> Rejestracji podlegają tylko zdarzenia o priorytecie <strong>critical</strong> (brak rejestracji zdarzeń dotyczących poziomów wyższych).</p>
<p> </p>
<p>Sprawdzenie statusu usługi rsyslog następuje po wydaniu polecenia: <strong>/etc/init.d/rsyslog status</strong> Jak widać poniżej usługa działa a jej numer PID to 3637</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkowo sterowanie usługą możemy kontrolować za pomocą parametrów:</p>
<p style="margin-left: 30px;">1 - <strong>stop</strong> - zatrzymanie usługi rsyslog,</p>
<p style="margin-left: 30px;">2 - <strong>start</strong> - uruchomienie usługi,</p>
<p style="margin-left: 30px;">3 - <strong>restart</strong> - zrestartowanie usługi np. celem wprowadzenia nowych ustawień.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tak więc aby móc zacząć rejestrować interesujące nas zdarzenia musimy określić kategorię oraz podać poziom zdarzeń, które rejestracji mają podlegać.</p>
<p> </p>
<p>Rejestrację zdarzeń określamy poprzez definicję roli. Konfiguracja danej roli odbywa się poprzez edycję pliku: <strong>/etc/rsyslog.conf</strong> bądź jak w naszym przypadku poprzez edycję pliku: <strong>/etc/rsyslog.d/50-default.conf</strong> (generalnie definicja roli odbywa się w pliku rsyslog.conf lecz jak to bywa zasada ta nie zawsze jest regułą, w Ubuntu 14.04 oraz 16.04 rolę tą przejął plik: <strong>50-default.conf</strong>)</p>
<p> </p>
<p>Tak więc spróbujmy utworzyć jakąś rolę i sprawdźmy czy rejestrowanie zdarzeń działa.</p>
<p> </p>
<p>Poniżej została utworzona rola rejestracji zdarzeń związanych z autoryzacją użytkowników. Poprzez wpis: <strong>auth,authpriv.*</strong> w pliku: <strong>/var/log/użytkownicy.log </strong>będą zapisywane wszystkie te zdarzenia (użycie gwiazdki spowoduje rejestrację wszystkich możliwych sytuacji - wszystkie możliwe poziomy), które dotyczą zdefiniowanej roli.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image3.png" alt="image3" width="700" height="532" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>By wprowadzona definicja mogła zacząć obowiązywać należy wykonać restart usługi rsyslog.</p>
<p> </p>
<p>Listening plików zawartych w katalogu: <strong>/var/log</strong> nie uwidacznia istnienia pliku: <strong>użytkowicy.log</strong> ponieważ jeszcze żadne zdarzenie podlegające rejestracji nie miało miejsca.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image4.png" alt="image4" width="700" height="271" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zmieńmy zatem ten stan i wymuśmy sytuację w której zaistniałe zdarzenie zostanie odnotowane przez serwer Syslog.</p>
<p> </p>
<p>Zdefiniowana rola dotyczy autoryzacji użytkowników tak więc najprostszą sytuacją wymuszającą zapisanie logów jest użycie konta root - użytkownik luk podwyższa swoje uprawnienia do poziomu root.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wykonanie zmiany poświadczeń użytkownika wymusiło rejestrację tego faktu. Plik: <strong>użytkownicy.log</strong> został utworzony.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image6.png" alt="image6" width="700" height="222" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdzenie zawartości pliku przekonuje nas, że zasymulowana przez Nas sytuacja została zarejestrowana.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image7.png" alt="image7" width="700" height="128" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W ten oto prosty sposób możemy utworzyć dowolny schemat logowania zdarzeń, które muszą podlegać rejestracji.</p>
<p> </p>
<p>Lokalne rejestrowanie zdarzeń mamy omówione. Przejdźmy zatem do skonfigurowania rejestracji zdarzeń pochodzących od urządzeń sieciowych.</p>
<p> </p>
<p>Poniżej dla przypomnienia obowiązująca topologia sieciowa, różnica z wpisem poprzednim polega na zamianie systemu pod kontrolą, którego pracuje serwer Syslog. Z systemu Windows przechodzimy na Linux Ubuntu 16.04</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Pierwsza czynność, którą należy wykonać to włączenie obsługi połączeń sieciowych. Włączenie nasłuchiwania na porcie UDP 514 obsługującym połączenia następuje po wykasowaniu znaku komentarza (#) umieszczonego przed definicjami:</p>
<ul>
<li style="padding-left: 60px;">ModLoad imudp</li>
<li style="padding-left: 60px;">UDPServerRun 514</li>
</ul>
<p> </p>
<p>Zmianę tą należy dokonać w pliku: <strong>/etc/rsyslog.conf</strong> w sekcji <strong>Modules</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image9.png" alt="image9" width="700" height="421" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W przypadku systemu Linux mamy możliwość skorzystania z rejestracji zdarzeń wykorzystując do tego protokół TCP. Aby włączyć tą funkcjonalność należy uaktywnić linie:</p>
<ul>
<li style="padding-left: 60px;">ModLoad imtcp</li>
<li style="padding-left: 60px;">InputTCPServerRun 514</li>
</ul>
<p> </p>
<p>Na uwadze należy jednak mieć fakt iż możliwość zmiany protokołu bądź portu docelowego usługi Sysylog musi mieć zaimplementowane również urządzenie, które logi będzie generować.</p>
<p> </p>
<p>Po wprowadzonej zmianie serwer Syslog restartujemy za pomocą znanego nam już polecenia: <strong>/etc/init.d/rsyslog restart</strong></p>
<p> </p>
<p>Sprawdzenie statusu portu sprawdzimy za pomocą polecenia: <strong>netstat -tul </strong>Jak widać na zrzucie poniżej usługa serwera Syslog została włączona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image10.png" alt="image10" width="700" height="278" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Bardziej szczegółowe informacje uzyskamy wydają komendę: <strong>netstat -ulpn</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image11.png" alt="image11" width="700" height="204" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Mamy pewność, że serwer Syslog oczekuje na nadchodzące połączenia.</p>
<p> </p>
<p>Przechodzimy do kolejnego kroku konfiguracji a mianowicie do określenia kategorii i poziomu rejestrowanych zdarzeń. Opcje te należy zdefiniować w pliku: <strong>/etc/rsyslog.d/50-default</strong>. Aby móc rejestrować zdarzenia pochodzące od urządzeń Cisco należy do pliku dodać wpis: <strong>local7.* <ścieżka_plik_log> </strong>Czemu akurat taki wpis? Ponieważ routery/przełączniki domyślnie wszystkie komunikaty dotyczące zaistniałych zdarzeń klasyfikują do kategorii <strong>local7</strong>. Dodanie znaku gwiazdki spowoduje włączenie rejestrowania zdarzeń na poziomie <strong>Debug</strong> czyli tak naprawdę wszystkie możliwe zdarzenia. Włączenie tak wysokiego poziomu rejestracji tak naprawdę jest bez znaczenia gdyż informacja o typie wysyłanych komunikatów zostanie skonfigurowana na routerze.</p>
<p> </p>
<p>Poniżej na zrzucie zaprezentowano włączenie rejestrowanie zdarzeń pochodzących od routera R1. Serwer przeprowadzi zapis zdarzeń do pliku: <strong>/var/log/routerR1.log</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image12.png" alt="image12" width="700" height="394" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Serwer Syslog został skonfigurowany prawidłowo, przejdźmy zatem do konfiguracji routera R1 i jego współpracy z mechanizmem Syslog. Konfigurację przeprowadzamy analogicznie jak w poprzednim wpisie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p style="margin-left: 30px;">1 - określamy adres IP serwer Syslog z wykorzystaniem polecenia<strong>: logging host <adres_IP_serwera_Syslog></strong>,</p>
<p style="margin-left: 30px;">2- określamy poziom wysyłanych komunikatów - polecenie: <strong>logging trap <poziom></strong>,</p>
<p style="margin-left: 30px;">3 - za pomocą polecenia: <strong>logging source-interface <interfejs></strong> możemy określić interfejs wyjściowy,</p>
<p style="margin-left: 30px;">4 - włączamy proces wysyłania powiadomień - polecenie: <strong>logging on</strong></p>
<p> </p>
<p>Router R1 został skonfigurowany, czas zatem przetestować całą przeprowadzoną konfigurację i sprawdzić czy zdarzenia będą poprawnie wysyłane i logowane. W tym celu zasymulujemy zdarzenie, które będzie polegać na włączeniu i wyłączeniu jednego z interfejsów routera. Poniżej na zrzucie przedstawiono proces włączenia i wyłączenia interfejsu f0/1 routera R1. Jak widać odpowiednie informacje towarzyszące temu zdarzeniu zostały wygenerowane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image14.png" alt="image14" width="700" height="141" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Te same informacje powinny zostać zapisane w logach serwera Syslog. Plik: <strong>routerR1.log </strong>powinien zostać utworzony w katalogu: <strong>/var/log </strong>i jak można zauważyć poniżej tak też się stało - punkt 1.</p>
<p> </p>
<p>Sprawdzenie informacji zawartych w pliku przekonuje Nas iż rejestrowanie zdarzeń działa prawidłowo. Użycie polecenia: <strong>tail</strong> w połączeniu z nazwą pliku oraz z flagą <strong>-f</strong> pozwala na bieżąco śledzić pojawiające się komunikaty - punkt 2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image15.png" alt="image15" width="700" height="360" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Poniżej na rysunku przechwycony ruch sieciowy pomiędzy routerem R1 a serwerem Syslog. Jak można zauważyć użyty protokół to UDP w połączeniu z docelowym portem 514.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image16.png" alt="image16" width="700" height="472" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Podczas konfiguracji zapisu logów pochodzących od routera R1 użyliśmy domyślnej kategorii: <strong>local7 </strong>co nie oznacza, że nie możemy skorzystać z innych kategorii. Do czego użycie innej kategorii logowania zdarzeń może się przydać? - zapytasz Czytelniku. A mianowicie użycie różnych kategorii pozwala nam na separację logów pochodzących z różnych urządzeń. Wykorzystanie różnych kategorii podczas konfiguracji urządzeń spowoduje zapis logów do odrębnych plików. Możliwy jest również scenariusz w którym to np. wszystkie routery mają przypisaną określoną stałą kategorię obowiązującą dla tego typu urządzeń zaś przełączniki inną. Tak przeprowadzona konfiguracja spowoduje zapis zdarzeń pochodzących od routerów do jednego pliku zaś przełączników do drugiego.</p>
<p> </p>
<p>Lista dostępnych i możliwych do wykorzystania kategorii została zamieszczona w tabeli poniżej.</p>
<p> </p>
<div>
<table border="1" style="border-collapse: collapse; margin-right: auto; margin-left: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="width: 113.15pt; border: 1pt solid windowtext; padding: 0cm 5.4pt;" valign="top" width="151"><strong>Kategoria</strong></td>
<td style="width: 262.25pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350"><strong>Opis</strong></td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">auth</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">autoryzacja użytkowników</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">cron</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">mechanizm cron</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">deamon</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">informacje dotyczące procesów deamon</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">kern</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">jądro systemowe</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local0</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local1</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local2</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local3</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local4</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local5</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local6</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local7</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny (domyślna kategoria dla urządzeń CISCO)</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">lpr</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">mechanizm drukowania</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">mail</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">obsługo poczty</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">news</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">grupy dyskusyjne USENET</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys9</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys10</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys11</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys12</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys13</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys14</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">syslog</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">mechanizm Syslog</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">user</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">procesy użytkownika</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">uucp</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">mechanizm Unix to Unix Copy</td>
</tr>
</tbody>
</table>
</div>
<p> </p>
<p>Wykorzystajmy zatem zdobytą wiedzę i skonfigurujmy router R2 do korzystania z mechanizmu Syslog tylko z tą różnicą, że logi routera R2 będą zapisywane w oddzielnym pliku.</p>
<p> </p>
<p>Tak jak poprzednio rozpoczynamy od wprowadzenia stosownych ustawień na serwerze Syslog. Ponownie edytujemy plik:<strong> /etc/rsyslog.d/50-default.conf</strong> Do bieżącej konfiguracji dodajemy wpis nakazujący logowanie zdarzeń wszystkich poziomów przypisanych do kategorii: <strong>local6</strong> do pliku: <strong>/var/log/routerR2.log</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image17.png" alt="image17" width="700" height="369" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Oczywiście aby ustawienia mogły zacząć obowiązywać, restartujemy usługę deamona rsyslog.</p>
<p> </p>
<p>Serwer Syslog został skonfigurowany.</p>
<p> </p>
<p>Ostatnim etapem konfiguracji jest wprowadzenie stosownych ustawień na routerze R2. Konfiguracja routera przebiega analogicznie jak routera R1 z jednym małym wyjątkiem. Aby serwer Syslog, mógł zapisać zdarzenia routera R2 do odrębnego pliku (pominięcie tego kroku spowoduje zapisanie logów z wykorzystaniem domyślnie ustawionej kategorii: local7 czyli do pliku routerR1.log) należy dokonać zmiany kategorii wysyłanych przez router komunikatów. Zmianę kategorii dokonujemy za pomocą polecenia: <strong>logging facility <kategoria></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image18.png" alt="image18" width="700" height="163" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I tak jak poprzednio celem sprawdzenia poprawności wykonanych czynności przeprowadzamy zmianę stanu interfejsu routera R2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image19.png" alt="image19" width="700" height="168" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak widać poniżej wszystkie zdarzenia zostały poprawnie przesłane i zarejesrtowane przez serwer Syslog.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image20.png" alt="image20" width="700" height="311" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Opcjonalnie możemy skonfigurować zapis zaistniałych zdarzeń w osobnych plikach czyli zapis zdarzenia w zależności od jego poziomu będzie realizowany w odrębnym pliku. Poniżej zdefiniowano zapis zajść pochodzących od routera R1 o poziomie <strong>ERROR</strong> (numer poziomu: 3) do pliku: <strong>routerR1_err.log</strong> oraz o poziomie <strong>NOTICE</strong> (numer poziomu: 5) do pliku: <strong>routerR1_notice.log</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image21.png" alt="image21" width="700" height="390" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zrestartowaniu usługi Syslog oraz ponownym wygenerowaniu zdarzenia (zmiana stanu interfejsu) sprawdzamy efekt ich rejestracji na serwerze Sysylog. Jak widać poniżej odpowiednie pliki zostały wygenerowane. Sprawdzenie zawartości plików przekonuje Nas, że w plikach tych zostały zapisane zdarzenia odpowiadające danemu poziomowi.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image22.png" alt="image22" width="700" height="345" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Uważny Czytelnik po analizie rysunku powyżej na pewno zauważy, że w pliku <strong>routerR1_err.log </strong>znajdują się logi odpowiadające zdarzeniom tylko z tego poziomu natomiast w pliku <strong>routerR1_notice.log </strong>oprócz logów przypisanych do poziomu 5 znajduje się jedno, zapisane zdarzenie poziomu 3 - %LINK-3-UPDOWN Dlaczego tak się stało? Odpowiedź jest prosta - Użycie definicji: <strong>local7.notice</strong> spowoduje zapisanie logów należących do wszystkich poziomów od 0 do 5. Aby rejestrować logi należące tylko do poziomu NOTICE definicję zapisu należy skorygować na wpis: <strong>local7.=notice</strong> Użyte polecenie spowoduje zarejestrowanie tylko zdarzeń przypisanych do poziomu 5 czyli NOTICE.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image23.png" alt="image23" width="700" height="390" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy zatem wprowadzoną zmianę i jeszcze raz wygenerujmy zdarzenie. Jak widać poniżej wprowadzona przez Nas zmiana spowodowała zapis logów w pliku: <strong>routerR1_notice.log </strong>- zostały zapisane tylko zdarzenia przynależne poziomowi 5.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image24.png" alt="image24" width="700" height="147" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na początku wpisu zaznaczyłem, że do odbierania informacji o zdarzeniach przez serwer Syslog zamiast domyślnego protokołu UDP może zostać użyty protokół TCP. Spróbujmy zatem skonfigurować serwer Syslog w ten sposób by mógł on prowadzić komunikację z innymi urządzeniami właśnie przy wykorzystaniu TCP.</p>
<p> </p>
<p>W pierwszej kolejności poprzez edycję pliku: <strong>/etc/rsyslog.conf</strong> wyłączamy komunikację opartą o protokół UDP (punkt 1). Do zablokowania protokołu UDP wykorzystujemy: <strong>#</strong></p>
<p> </p>
<p>Po wyłączeniu UDP, włączamy TCP. Aby protokół TCP mógł zacząć działać usuwamy znak: # przed liniami:</p>
<ul>
<li style="padding-left: 60px;">Module(load="imtcp"),</li>
<li style="padding-left: 60px;">Input(type="imtcp" port="700")</li>
</ul>
<p> </p>
<p>W ćwiczeniu dodatkowo zamieniono domyślny port 514 na port 700.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image25.png" alt="image25" width="700" height="529" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu zmian oczywiście restartujemy usługę serwera Syslog.</p>
<p> </p>
<p>Stan włączenia usługi wraz z otwarciem portu 700 możemy zweryfikować za pomocą komendy: <strong>netstat -utlpn</strong> Serwer Syslog działa i oczekuje na nadchodzące informacje na porcie TCP 700.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image26.png" alt="image26" width="700" height="245" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Serwer Syslog został skonfigurowany tak więc czas by skonfigurować router. W ćwiczeniu użyjemy routera R1. Aby router R1 mógł nawiązać poprawne połączenie z serwerem Syslog należy zmodyfikować domyślne ustawienia komunikacji. Definicję tą przeprowadzamy za pomocą już znanego nam polecenia: <strong>logging host <adres_serwera_Syslog></strong>, uzupełniając je o dodatkowe informacje tj. użyty protokół oraz wykorzystywany numer portu. Definicję protokołu przeprowadzamy za pomocą flagi: <strong>transport</strong> natomiast numer portu określamy przy użyciu opcji: <strong>port</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Standardowo aby sprawdzić poprawność przeprowadzonej konfiguracji wymuszamy zdarzenie polegające na zmianie stanu interfejsu.</p>
<p> </p>
<p>Zdarzenia te jak widać zostały poprawnie zarejestrowane przez serwer Syslog.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image28.png" alt="image28" width="700" height="134" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I na koniec - fakt przesłania danych przez router R1 w kierunku serwera Syslog można dodatkowo zweryfikować przeglądając informacje uzyskane dzięki sniffingowi. Jak widać poniżej do przesłania logów został wykorzystany protokół TCP oraz port 700.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image29.png" alt="image29" width="700" height="472" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tak więc wpisem tym temat logowania zdarzeń przy wykorzystaniu serwera Syslog kończymy, co nie oznacza, że do zagadnienia rejestracji zdarzeń nie powrócimy. Został Nam do omówienie protokół SNMP.</p></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/675d28c04794e3c683f4419536c4c15f_S.jpg" alt="Serwer Syslog (po raz drugi) z wykorzystaniem systemu Linux." /></div><div class="K2FeedIntroText"><p>Kontynuujemy temat rejestracji zdarzeń z wykorzystaniem serwera Syslog. Wpis ten jest kontynuacją wpisu: <a href="http://slow7.pl/sieci-komputerowe/item/130-rejestracja-zdarzen-z-wykorzystaniem-serwera-syslog"><span style="text-decoration: none;">Rejestracja zdarzeń z wykorzystaniem serwera Syslog </span></a>lecz tym razem skupiamy się na systemie Linux i wykorzystaniu deamona rsyslog.</p>
<p> </p>
<p>Ponieważ jak już zaznaczyłem wpis ten jest kontynuacją tak więc część informacji została celowo pominięta tak by nie powielać ich ponownie. To co nie zostało poruszone w tym wpisie, znajdziesz Czytelniku w artykule, do którego link podałem Ci powyżej.</p>
</div><div class="K2FeedFullText">
<p> </p>
<p>W systemie Linux za gromadzenie informacji o zdarzeniach odpowiedzialny jest mechanizm: <strong>rsyslog</strong> (dawniej – syslog).</p>
<p>Pliki konfiguracyjne odpowiedzialne za działanie tej usługi (i nie tylko tej):</p>
<p style="margin-left: 30px;"><strong>rsyslog</strong> - /etc/rsyslog.conf – plik zawierający konfigurację mechanizmu wraz z definicją logowanych zdarzeń,</p>
<p style="margin-left: 30px;"><strong>logrotate</strong> - /etc/logrotate – plik zawierający konfigurację mechanizmu odpowiedzialnego za porządkowanie utworzonych logów – planowanie czasu przechowywania logów czy definicja rozmiarów plików zawierających przechwycone zdarzenia.</p>
<p> </p>
<p>By móc prowadzić skuteczną rejestrację wystąpienia danych sytuacji w pierwszej kolejności musimy zdecydować jakie kategorie zdarzeń muszą podlegać logowaniu.</p>
<p>Kategorie zdarzeń (selektor), które mogą podlegać logowaniu to:</p>
<p style="margin-left: 30px;"><strong>auth</strong>,<strong>authpriv</strong> - autoryzacja użytkowników,</p>
<p style="margin-left: 30px;"><strong>kern</strong> - jądro systemowe,</p>
<p style="margin-left: 30px;"><strong>security</strong> - logi bezpieczeństwa,</p>
<p style="margin-left: 30px;"><strong>user</strong> - aplikacje wykorzystywane przez użytkowników,</p>
<p style="margin-left: 30px;"><strong>mail</strong> - zdarzenia związane z pocztą,</p>
<p style="margin-left: 30px;"><strong>lpr</strong> - komunikaty dotyczące obsługi drukarek i procesu wydruku,</p>
<p style="margin-left: 30px;"><strong>ftp</strong> - logi serwera ftp,</p>
<p style="margin-left: 30px;"><strong>cron</strong> - informacje dotyczące deamona cron.</p>
<p> </p>
<p style="text-align: left;">Po definicji interesującej nas kategorii należy określić ich poziom:</p>
<p style="text-align: center;"> </p>
<table border="1" style="border-collapse: collapse; margin-left: auto; margin-right: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="width: 44.55pt; border: 1pt solid windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>Poziom</strong></td>
<td style="width: 72pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96"><strong>Nazwa poziomu</strong></td>
<td style="width: 82.1pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109"><strong>Definicja syslog</strong></td>
<td style="width: 254.45pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339"><strong>Opis</strong></td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>0</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Emergency</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">EMERG</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Najwyższy priorytet. Tak jak w przypadku routerów/przełączników awaria na tyle poważna, że uniemożliwia uruchomienie systemu.</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>1</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Alert</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">ALERT</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Potrzebna natychmiastowa interwencja</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>2</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Critical</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">CRIT</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Sytuacja krytyczna</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>3</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Error</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">ERR</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Błędy w działaniu usługi</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>4</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Warning</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">WARNING</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Ostrzeżenie</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>5</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Notice</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">NOTICE</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Powiadomienie, ważniejsze zdarzenia</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="59"><strong>6</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="96">Informational</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="109">INFO</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="339">Komunikaty informacyjne</td>
</tr>
<tr>
<td style="width: 44.55pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; text-align: justify;" valign="top" width="59"><strong>7</strong></td>
<td style="width: 72pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; text-align: justify;" valign="top" width="96">Debug</td>
<td style="width: 82.1pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; text-align: justify;" valign="top" width="109">DEBUG</td>
<td style="width: 254.45pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; text-align: justify;" valign="top" width="339">Szczegółowe informacje o działaniu danego procesu</td>
</tr>
</tbody>
</table>
<p style="text-align: center;"> </p>
<p style="text-align: left;">Przykładowe wpisy:</p>
<p style="margin-left: 30px;"><strong>security.* /var/log/security</strong> - logi bezpieczeństwa o <strong>każdym</strong> priorytecie będą zapisywane w pliku: <strong>/var/log/security</strong>,</p>
<p style="margin-left: 30px;"><strong>*.warning;mail.none;ftp.none /var/log/warning</strong> - logi <strong>wszystkich</strong> kategorii o priorytetach od <strong>emergency</strong> do <strong>warning</strong> (włącznie) będą zapisywane w pliku: <strong>/var/log/warning</strong> Rejestracji nie podlegają logi kategorii: <strong>mail</strong> oraz <strong>ftp</strong>,</p>
<p style="margin-left: 30px;"><strong>auth.=crit /var/log/authcrit</strong> - logi dotyczące kategorii <strong>auth</strong> będą zapisywane w pliku: <strong>/var/log/authcrit</strong> Rejestracji podlegają tylko zdarzenia o priorytecie <strong>critical</strong> (brak rejestracji zdarzeń dotyczących poziomów wyższych).</p>
<p> </p>
<p>Sprawdzenie statusu usługi rsyslog następuje po wydaniu polecenia: <strong>/etc/init.d/rsyslog status</strong> Jak widać poniżej usługa działa a jej numer PID to 3637</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkowo sterowanie usługą możemy kontrolować za pomocą parametrów:</p>
<p style="margin-left: 30px;">1 - <strong>stop</strong> - zatrzymanie usługi rsyslog,</p>
<p style="margin-left: 30px;">2 - <strong>start</strong> - uruchomienie usługi,</p>
<p style="margin-left: 30px;">3 - <strong>restart</strong> - zrestartowanie usługi np. celem wprowadzenia nowych ustawień.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tak więc aby móc zacząć rejestrować interesujące nas zdarzenia musimy określić kategorię oraz podać poziom zdarzeń, które rejestracji mają podlegać.</p>
<p> </p>
<p>Rejestrację zdarzeń określamy poprzez definicję roli. Konfiguracja danej roli odbywa się poprzez edycję pliku: <strong>/etc/rsyslog.conf</strong> bądź jak w naszym przypadku poprzez edycję pliku: <strong>/etc/rsyslog.d/50-default.conf</strong> (generalnie definicja roli odbywa się w pliku rsyslog.conf lecz jak to bywa zasada ta nie zawsze jest regułą, w Ubuntu 14.04 oraz 16.04 rolę tą przejął plik: <strong>50-default.conf</strong>)</p>
<p> </p>
<p>Tak więc spróbujmy utworzyć jakąś rolę i sprawdźmy czy rejestrowanie zdarzeń działa.</p>
<p> </p>
<p>Poniżej została utworzona rola rejestracji zdarzeń związanych z autoryzacją użytkowników. Poprzez wpis: <strong>auth,authpriv.*</strong> w pliku: <strong>/var/log/użytkownicy.log </strong>będą zapisywane wszystkie te zdarzenia (użycie gwiazdki spowoduje rejestrację wszystkich możliwych sytuacji - wszystkie możliwe poziomy), które dotyczą zdefiniowanej roli.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image3.png" alt="image3" width="700" height="532" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>By wprowadzona definicja mogła zacząć obowiązywać należy wykonać restart usługi rsyslog.</p>
<p> </p>
<p>Listening plików zawartych w katalogu: <strong>/var/log</strong> nie uwidacznia istnienia pliku: <strong>użytkowicy.log</strong> ponieważ jeszcze żadne zdarzenie podlegające rejestracji nie miało miejsca.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image4.png" alt="image4" width="700" height="271" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zmieńmy zatem ten stan i wymuśmy sytuację w której zaistniałe zdarzenie zostanie odnotowane przez serwer Syslog.</p>
<p> </p>
<p>Zdefiniowana rola dotyczy autoryzacji użytkowników tak więc najprostszą sytuacją wymuszającą zapisanie logów jest użycie konta root - użytkownik luk podwyższa swoje uprawnienia do poziomu root.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wykonanie zmiany poświadczeń użytkownika wymusiło rejestrację tego faktu. Plik: <strong>użytkownicy.log</strong> został utworzony.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image6.png" alt="image6" width="700" height="222" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdzenie zawartości pliku przekonuje nas, że zasymulowana przez Nas sytuacja została zarejestrowana.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image7.png" alt="image7" width="700" height="128" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W ten oto prosty sposób możemy utworzyć dowolny schemat logowania zdarzeń, które muszą podlegać rejestracji.</p>
<p> </p>
<p>Lokalne rejestrowanie zdarzeń mamy omówione. Przejdźmy zatem do skonfigurowania rejestracji zdarzeń pochodzących od urządzeń sieciowych.</p>
<p> </p>
<p>Poniżej dla przypomnienia obowiązująca topologia sieciowa, różnica z wpisem poprzednim polega na zamianie systemu pod kontrolą, którego pracuje serwer Syslog. Z systemu Windows przechodzimy na Linux Ubuntu 16.04</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Pierwsza czynność, którą należy wykonać to włączenie obsługi połączeń sieciowych. Włączenie nasłuchiwania na porcie UDP 514 obsługującym połączenia następuje po wykasowaniu znaku komentarza (#) umieszczonego przed definicjami:</p>
<ul>
<li style="padding-left: 60px;">ModLoad imudp</li>
<li style="padding-left: 60px;">UDPServerRun 514</li>
</ul>
<p> </p>
<p>Zmianę tą należy dokonać w pliku: <strong>/etc/rsyslog.conf</strong> w sekcji <strong>Modules</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image9.png" alt="image9" width="700" height="421" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W przypadku systemu Linux mamy możliwość skorzystania z rejestracji zdarzeń wykorzystując do tego protokół TCP. Aby włączyć tą funkcjonalność należy uaktywnić linie:</p>
<ul>
<li style="padding-left: 60px;">ModLoad imtcp</li>
<li style="padding-left: 60px;">InputTCPServerRun 514</li>
</ul>
<p> </p>
<p>Na uwadze należy jednak mieć fakt iż możliwość zmiany protokołu bądź portu docelowego usługi Sysylog musi mieć zaimplementowane również urządzenie, które logi będzie generować.</p>
<p> </p>
<p>Po wprowadzonej zmianie serwer Syslog restartujemy za pomocą znanego nam już polecenia: <strong>/etc/init.d/rsyslog restart</strong></p>
<p> </p>
<p>Sprawdzenie statusu portu sprawdzimy za pomocą polecenia: <strong>netstat -tul </strong>Jak widać na zrzucie poniżej usługa serwera Syslog została włączona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image10.png" alt="image10" width="700" height="278" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Bardziej szczegółowe informacje uzyskamy wydają komendę: <strong>netstat -ulpn</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image11.png" alt="image11" width="700" height="204" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Mamy pewność, że serwer Syslog oczekuje na nadchodzące połączenia.</p>
<p> </p>
<p>Przechodzimy do kolejnego kroku konfiguracji a mianowicie do określenia kategorii i poziomu rejestrowanych zdarzeń. Opcje te należy zdefiniować w pliku: <strong>/etc/rsyslog.d/50-default</strong>. Aby móc rejestrować zdarzenia pochodzące od urządzeń Cisco należy do pliku dodać wpis: <strong>local7.* <ścieżka_plik_log> </strong>Czemu akurat taki wpis? Ponieważ routery/przełączniki domyślnie wszystkie komunikaty dotyczące zaistniałych zdarzeń klasyfikują do kategorii <strong>local7</strong>. Dodanie znaku gwiazdki spowoduje włączenie rejestrowania zdarzeń na poziomie <strong>Debug</strong> czyli tak naprawdę wszystkie możliwe zdarzenia. Włączenie tak wysokiego poziomu rejestracji tak naprawdę jest bez znaczenia gdyż informacja o typie wysyłanych komunikatów zostanie skonfigurowana na routerze.</p>
<p> </p>
<p>Poniżej na zrzucie zaprezentowano włączenie rejestrowanie zdarzeń pochodzących od routera R1. Serwer przeprowadzi zapis zdarzeń do pliku: <strong>/var/log/routerR1.log</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image12.png" alt="image12" width="700" height="394" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Serwer Syslog został skonfigurowany prawidłowo, przejdźmy zatem do konfiguracji routera R1 i jego współpracy z mechanizmem Syslog. Konfigurację przeprowadzamy analogicznie jak w poprzednim wpisie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p style="margin-left: 30px;">1 - określamy adres IP serwer Syslog z wykorzystaniem polecenia<strong>: logging host <adres_IP_serwera_Syslog></strong>,</p>
<p style="margin-left: 30px;">2- określamy poziom wysyłanych komunikatów - polecenie: <strong>logging trap <poziom></strong>,</p>
<p style="margin-left: 30px;">3 - za pomocą polecenia: <strong>logging source-interface <interfejs></strong> możemy określić interfejs wyjściowy,</p>
<p style="margin-left: 30px;">4 - włączamy proces wysyłania powiadomień - polecenie: <strong>logging on</strong></p>
<p> </p>
<p>Router R1 został skonfigurowany, czas zatem przetestować całą przeprowadzoną konfigurację i sprawdzić czy zdarzenia będą poprawnie wysyłane i logowane. W tym celu zasymulujemy zdarzenie, które będzie polegać na włączeniu i wyłączeniu jednego z interfejsów routera. Poniżej na zrzucie przedstawiono proces włączenia i wyłączenia interfejsu f0/1 routera R1. Jak widać odpowiednie informacje towarzyszące temu zdarzeniu zostały wygenerowane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image14.png" alt="image14" width="700" height="141" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Te same informacje powinny zostać zapisane w logach serwera Syslog. Plik: <strong>routerR1.log </strong>powinien zostać utworzony w katalogu: <strong>/var/log </strong>i jak można zauważyć poniżej tak też się stało - punkt 1.</p>
<p> </p>
<p>Sprawdzenie informacji zawartych w pliku przekonuje Nas iż rejestrowanie zdarzeń działa prawidłowo. Użycie polecenia: <strong>tail</strong> w połączeniu z nazwą pliku oraz z flagą <strong>-f</strong> pozwala na bieżąco śledzić pojawiające się komunikaty - punkt 2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image15.png" alt="image15" width="700" height="360" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Poniżej na rysunku przechwycony ruch sieciowy pomiędzy routerem R1 a serwerem Syslog. Jak można zauważyć użyty protokół to UDP w połączeniu z docelowym portem 514.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image16.png" alt="image16" width="700" height="472" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Podczas konfiguracji zapisu logów pochodzących od routera R1 użyliśmy domyślnej kategorii: <strong>local7 </strong>co nie oznacza, że nie możemy skorzystać z innych kategorii. Do czego użycie innej kategorii logowania zdarzeń może się przydać? - zapytasz Czytelniku. A mianowicie użycie różnych kategorii pozwala nam na separację logów pochodzących z różnych urządzeń. Wykorzystanie różnych kategorii podczas konfiguracji urządzeń spowoduje zapis logów do odrębnych plików. Możliwy jest również scenariusz w którym to np. wszystkie routery mają przypisaną określoną stałą kategorię obowiązującą dla tego typu urządzeń zaś przełączniki inną. Tak przeprowadzona konfiguracja spowoduje zapis zdarzeń pochodzących od routerów do jednego pliku zaś przełączników do drugiego.</p>
<p> </p>
<p>Lista dostępnych i możliwych do wykorzystania kategorii została zamieszczona w tabeli poniżej.</p>
<p> </p>
<div>
<table border="1" style="border-collapse: collapse; margin-right: auto; margin-left: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="width: 113.15pt; border: 1pt solid windowtext; padding: 0cm 5.4pt;" valign="top" width="151"><strong>Kategoria</strong></td>
<td style="width: 262.25pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350"><strong>Opis</strong></td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">auth</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">autoryzacja użytkowników</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">cron</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">mechanizm cron</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">deamon</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">informacje dotyczące procesów deamon</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">kern</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">jądro systemowe</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local0</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local1</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local2</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local3</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local4</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local5</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local6</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">local7</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">użytek lokalny (domyślna kategoria dla urządzeń CISCO)</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">lpr</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">mechanizm drukowania</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">mail</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">obsługo poczty</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">news</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">grupy dyskusyjne USENET</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys9</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys10</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys11</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys12</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys13</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">sys14</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">wykorzystywane przez system</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">syslog</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">mechanizm Syslog</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">user</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">procesy użytkownika</td>
</tr>
<tr>
<td style="width: 113.15pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt;" valign="top" width="151">uucp</td>
<td style="width: 262.25pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt;" valign="top" width="350">mechanizm Unix to Unix Copy</td>
</tr>
</tbody>
</table>
</div>
<p> </p>
<p>Wykorzystajmy zatem zdobytą wiedzę i skonfigurujmy router R2 do korzystania z mechanizmu Syslog tylko z tą różnicą, że logi routera R2 będą zapisywane w oddzielnym pliku.</p>
<p> </p>
<p>Tak jak poprzednio rozpoczynamy od wprowadzenia stosownych ustawień na serwerze Syslog. Ponownie edytujemy plik:<strong> /etc/rsyslog.d/50-default.conf</strong> Do bieżącej konfiguracji dodajemy wpis nakazujący logowanie zdarzeń wszystkich poziomów przypisanych do kategorii: <strong>local6</strong> do pliku: <strong>/var/log/routerR2.log</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image17.png" alt="image17" width="700" height="369" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Oczywiście aby ustawienia mogły zacząć obowiązywać, restartujemy usługę deamona rsyslog.</p>
<p> </p>
<p>Serwer Syslog został skonfigurowany.</p>
<p> </p>
<p>Ostatnim etapem konfiguracji jest wprowadzenie stosownych ustawień na routerze R2. Konfiguracja routera przebiega analogicznie jak routera R1 z jednym małym wyjątkiem. Aby serwer Syslog, mógł zapisać zdarzenia routera R2 do odrębnego pliku (pominięcie tego kroku spowoduje zapisanie logów z wykorzystaniem domyślnie ustawionej kategorii: local7 czyli do pliku routerR1.log) należy dokonać zmiany kategorii wysyłanych przez router komunikatów. Zmianę kategorii dokonujemy za pomocą polecenia: <strong>logging facility <kategoria></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image18.png" alt="image18" width="700" height="163" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I tak jak poprzednio celem sprawdzenia poprawności wykonanych czynności przeprowadzamy zmianę stanu interfejsu routera R2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image19.png" alt="image19" width="700" height="168" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak widać poniżej wszystkie zdarzenia zostały poprawnie przesłane i zarejesrtowane przez serwer Syslog.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image20.png" alt="image20" width="700" height="311" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Opcjonalnie możemy skonfigurować zapis zaistniałych zdarzeń w osobnych plikach czyli zapis zdarzenia w zależności od jego poziomu będzie realizowany w odrębnym pliku. Poniżej zdefiniowano zapis zajść pochodzących od routera R1 o poziomie <strong>ERROR</strong> (numer poziomu: 3) do pliku: <strong>routerR1_err.log</strong> oraz o poziomie <strong>NOTICE</strong> (numer poziomu: 5) do pliku: <strong>routerR1_notice.log</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image21.png" alt="image21" width="700" height="390" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zrestartowaniu usługi Syslog oraz ponownym wygenerowaniu zdarzenia (zmiana stanu interfejsu) sprawdzamy efekt ich rejestracji na serwerze Sysylog. Jak widać poniżej odpowiednie pliki zostały wygenerowane. Sprawdzenie zawartości plików przekonuje Nas, że w plikach tych zostały zapisane zdarzenia odpowiadające danemu poziomowi.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image22.png" alt="image22" width="700" height="345" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Uważny Czytelnik po analizie rysunku powyżej na pewno zauważy, że w pliku <strong>routerR1_err.log </strong>znajdują się logi odpowiadające zdarzeniom tylko z tego poziomu natomiast w pliku <strong>routerR1_notice.log </strong>oprócz logów przypisanych do poziomu 5 znajduje się jedno, zapisane zdarzenie poziomu 3 - %LINK-3-UPDOWN Dlaczego tak się stało? Odpowiedź jest prosta - Użycie definicji: <strong>local7.notice</strong> spowoduje zapisanie logów należących do wszystkich poziomów od 0 do 5. Aby rejestrować logi należące tylko do poziomu NOTICE definicję zapisu należy skorygować na wpis: <strong>local7.=notice</strong> Użyte polecenie spowoduje zarejestrowanie tylko zdarzeń przypisanych do poziomu 5 czyli NOTICE.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image23.png" alt="image23" width="700" height="390" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdźmy zatem wprowadzoną zmianę i jeszcze raz wygenerujmy zdarzenie. Jak widać poniżej wprowadzona przez Nas zmiana spowodowała zapis logów w pliku: <strong>routerR1_notice.log </strong>- zostały zapisane tylko zdarzenia przynależne poziomowi 5.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image24.png" alt="image24" width="700" height="147" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na początku wpisu zaznaczyłem, że do odbierania informacji o zdarzeniach przez serwer Syslog zamiast domyślnego protokołu UDP może zostać użyty protokół TCP. Spróbujmy zatem skonfigurować serwer Syslog w ten sposób by mógł on prowadzić komunikację z innymi urządzeniami właśnie przy wykorzystaniu TCP.</p>
<p> </p>
<p>W pierwszej kolejności poprzez edycję pliku: <strong>/etc/rsyslog.conf</strong> wyłączamy komunikację opartą o protokół UDP (punkt 1). Do zablokowania protokołu UDP wykorzystujemy: <strong>#</strong></p>
<p> </p>
<p>Po wyłączeniu UDP, włączamy TCP. Aby protokół TCP mógł zacząć działać usuwamy znak: # przed liniami:</p>
<ul>
<li style="padding-left: 60px;">Module(load="imtcp"),</li>
<li style="padding-left: 60px;">Input(type="imtcp" port="700")</li>
</ul>
<p> </p>
<p>W ćwiczeniu dodatkowo zamieniono domyślny port 514 na port 700.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image25.png" alt="image25" width="700" height="529" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu zmian oczywiście restartujemy usługę serwera Syslog.</p>
<p> </p>
<p>Stan włączenia usługi wraz z otwarciem portu 700 możemy zweryfikować za pomocą komendy: <strong>netstat -utlpn</strong> Serwer Syslog działa i oczekuje na nadchodzące informacje na porcie TCP 700.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image26.png" alt="image26" width="700" height="245" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Serwer Syslog został skonfigurowany tak więc czas by skonfigurować router. W ćwiczeniu użyjemy routera R1. Aby router R1 mógł nawiązać poprawne połączenie z serwerem Syslog należy zmodyfikować domyślne ustawienia komunikacji. Definicję tą przeprowadzamy za pomocą już znanego nam polecenia: <strong>logging host <adres_serwera_Syslog></strong>, uzupełniając je o dodatkowe informacje tj. użyty protokół oraz wykorzystywany numer portu. Definicję protokołu przeprowadzamy za pomocą flagi: <strong>transport</strong> natomiast numer portu określamy przy użyciu opcji: <strong>port</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Standardowo aby sprawdzić poprawność przeprowadzonej konfiguracji wymuszamy zdarzenie polegające na zmianie stanu interfejsu.</p>
<p> </p>
<p>Zdarzenia te jak widać zostały poprawnie zarejestrowane przez serwer Syslog.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image28.png" alt="image28" width="700" height="134" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I na koniec - fakt przesłania danych przez router R1 w kierunku serwera Syslog można dodatkowo zweryfikować przeglądając informacje uzyskane dzięki sniffingowi. Jak widać poniżej do przesłania logów został wykorzystany protokół TCP oraz port 700.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/syslog_linux/image29.png" alt="image29" width="700" height="472" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tak więc wpisem tym temat logowania zdarzeń przy wykorzystaniu serwera Syslog kończymy, co nie oznacza, że do zagadnienia rejestracji zdarzeń nie powrócimy. Został Nam do omówienie protokół SNMP.</p></div>Protokoły dostępu zdalnego w systemie Linux.2016-08-10T15:48:46+00:002016-08-10T15:48:46+00:00http://slow7.pl/linux/item/126-protokoly-dostepu-zdalnego-w-systemie-linuxpikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/8dc425b2acbf9c68064b8a63eae1ffbc_S.jpg" alt="Protokoły dostępu zdalnego w systemie Linux." /></div><div class="K2FeedIntroText"><p>Możliwość nawiązania zdalnego połączenia z systemem celem przeprowadzenia czynności administracyjnych dla wielu jest nieoceniona gdyż zyskujemy możliwość wykonania niezbędnej konfiguracji systemu bez fizycznego obcowania z komputerem. W wcześniejszych artykułach opisałem jak sesję zdalną ustalić z systemami z rodziny Windows, pomijając system Linux. Czas więc tą zaległość nadrobić - w wpisie tym zajmiemy się ustaleniem sesji zdalnej z systemem Linux z wykorzystaniem takich protokołów jak Telnet czy SSH.</p>
</div><div class="K2FeedFullText">
<p>Rozpoczynamy od najstarszego rozwiązania czyli Telnetu. Spróbujemy tak skonfigurować system Linux Ubuntu aby można było nim zarządzać zdalnie z wykorzystaniem tego protokołu.</p>
<p> </p>
<p>Aby móc zestawić połączenie Telnet z systemem należy rozpocząć od instalacji niezbędnych pakietów tak więc wydajemy polecenie: <strong>apt-get install xinetd telnetd</strong> Po wydaniu komendy nastąpi instalacja oprogramowania niezbędnego do zestawienia sesji Telnet.</p>
<p> <img src="http://slow7.pl/images/stories/linux/ssh/image1.png" alt="image1" width="700" height="460" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Automatycznie po instalacji oprogramowania odpowiedni port umożliwiający nawiązanie połączenia powinien zostać otwarty (stan nasłuchiwania). W przypadku Telnetu jest to port TCP 23. Aby sprawdzić stan portów wydaj polecenie: <strong>netstat -tlpn </strong>Jak widać poniżej port TCP 23 jest w stanie nasłuchiwania (gotowy do nawiązania połączenia).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image2.png" alt="image2" width="700" height="230" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zanim przejdziemy dalej chwilkę zatrzymajmy się przy użytej komendzie <strong>netstat</strong>. Polecenie <strong>netstat</strong> służy między innymi do wyświetlania aktywnych połączeń sieciowych a także portów, na których komputer nasłuchuje. Wydana komenda: <strong>netstat -tlpn</strong> spowoduje użycie następujących opcji:</p>
<p style="margin-left: 30px;">-t - pokaż tylko porty TCP/IP,</p>
<p style="margin-left: 30px;">-l - pokaż porty tylko w trybie nasłuchiwania (LISTEN),</p>
<p style="margin-left: 30px;">-p - pokaż PID procesu związanego z otwartym portem,</p>
<p style="margin-left: 30px;">-n - pokaż adresy IP bez ich rozwiązywania.</p>
<p> </p>
<p>W przypadku portów UDP należy użyć flagi: <strong>-u</strong> np. pokaż porty TCP oraz UDP w stanie nasłuchiwania: <strong>netstat -tul</strong></p>
<p> </p>
<p>Jeśli wszystko się zgadza powinno udać nam się nawiązać połączenie zdalne z hostem przy wykorzystaniu protokołu Telnel.</p>
<p> </p>
<p>Ale nie zawsze wszystko może zacząć działać od razu o ile w przypadku Linux Ubuntu 14.04 nie było żadnych problemów to już przy wersji 16.04 takowe nastąpiły. Po instalacji niezbędnych pakietów nawiązanie połączenia nie było możliwe.</p>
<p> </p>
<p>Aby rozwiązać ten problem pierwsze nasze kroki powinniśmy skierować ku katalogowi: <strong>/etc/xinetd.d</strong> i sprawdzić czy istnieje plik: <strong>telnet</strong> W przypadku jego braku należy go utworzyć a jego zawartość powinna być następująca:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">service telnet</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">{</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">disable = no</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">flags = REUSE</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">socket_type = stream</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">wait = no</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">user = root</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">server = /usr/sbin/in.telnetd</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">log_on_failure += USERID</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">}</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image3.png" alt="image3" width="700" height="394" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po ewentualnym utworzeniu pliku należy wydać polecenie: <strong>sudo /etc/init.d/xinetd restart</strong> celem ponownego uruchomienia serwera i wprowadzenia nowych ustawień.</p>
<p> </p>
<p>Po wprowadzeniu zmian powinno udać nam się zestawić połączenie Telnet. Jak widać poniżej tak też się stało.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Status i stan serwera możemy sprawdzić po wydaniu polecenia: <strong>sudo /etc/init.d/xinetd status</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image5.png" alt="image5" width="700" height="392" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Domyślny port 23 usługi Telnet możemy zmienić poprzez edycję pliku: <strong>/etc/services </strong>Po otwarciu pliku odnajdujemy linię odnoszącą się do usługi Telnet i zmieniamy domyślną wartość portu 23 na pożądaną.</p>
<p> </p>
<p>Aby móc zestawić połączenie z systemu Windows przy wykorzystaniu wiersza poleceń w pierwszej kolejności musimy zainstalować klienta Telnet. Klienta zainstalujemy po przejściu do <strong>Panelu sterowania</strong> a następnie wybraniu opcji <strong>Programy i funkcje</strong> Po otwarciu okna (z lewej strony) klikamy na opcję <strong>Włącz lub wyłącz funkcje systemu Windows</strong> i wśród dostępnych funkcji odszukujemy <strong>Klient Telnet</strong>. Funkcję należy zaznaczyć a następnie wybrać OK. Po instalacji polecenie: <strong>telnet</strong> będzie dostępne z linii poleceń.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image6.png" alt="image6" width="700" height="601" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby nawiązać połączenie zdalne w oknie wiersza poleceń wydajemy polecenie: <strong>telnet <adres_hosta></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image7.png" alt="image7" width="700" height="488" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dokładniejszy opis narzędzia: telnet znajdziesz w wpisie: <a href="http://slow7.pl/index.php/item/54-nie-samym-gui-czlowiek-zyje-rzecz-o-cmd" title="Nie samym GUI człowiek żyje. Rzecz o CMD."><span style="text-decoration: none;">Nie samym GUI człowiek żyje. Rzecz o CMD</span></a></p>
<p> </p>
<p>Opis narzędzi graficznych przedstawiono w dalszej części wpisu.</p>
<p> </p>
<p>Jak wiadomo (i co już nie raz podkreślałem) użycie protokołu Telnet nie jest rozwiązaniem z punktu bezpieczeństwa zbyt trafnym gdyż w protokole tym nie przewidziano, żadnych mechanizmów pozwalających na zabezpieczenie całej komunikacji. Oznacza to, że w przypadku przechwycenia ruchu sieciowego nasze <strong>hasło</strong> i <strong>login</strong> będzie można bez problemu odczytać. Poniżej przedstawiam zrzut, który obrazuje fakt zdobycia loginu i hasła.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image8.png" alt="image8" width="700" height="488" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeśli już nie mamy wyjścia to przynajmniej warto zabezpieczyć możliwość nawiązania połączenia z systemem do zaufanych hostów. Aby określić komputery, które mają prawo do zestawienia połączenia należy edytować plik: <strong>/etc/xinetd.d/telnet</strong> i do bieżącej konfiguracji dodać linię: <strong>only_from = <adres_IP/adres_sieci></strong> Możemy określić adres IP hosta bądź zakres hostów poprzez definicję sieci. Definicję hostów możemy również przeprowadzić poprzez podanie nazwy domeny np. <strong>only_from = .slow7.pl</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image9.png" alt="image9" width="700" height="394" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Inne przydatne parametry:</p>
<ul>
<li style="padding-left: 60px;"><strong>no_access = 192.168.120.{101,105}</strong> - zabronienie połączenia, hosty o podanych adresach IP nie będą mogły zestawić sesji Telnet (w ten sam sposób możemy zdefiniować hosty mogące połączenie nawiązać),</li>
<li style="padding-left: 60px;"><strong>access_times = 7:00-10:00 22:00-23:00</strong> - określenie czasu w którym może nastąpić połączenie,</li>
<li style="padding-left: 60px;"><strong>instances = 2</strong> - ustawia maksymalną liczbę równocześnie realizowanych połączeń (parametr zdefiniowany w pliku: <strong>/etc/xinetd.conf</strong>),</li>
<li style="padding-left: 60px;"><strong>log_on_failure += <rejestrowane_parametry></strong> - rejestrowanie zdarzeń związanych z nieudanym logowaniem,</li>
<li style="padding-left: 60px;"><strong>log_on_success += <rejestrowane_parametry></strong> - rejestrowanie zdarzeń związanych z udanym logowaniem,</li>
<li style="padding-left: 60px;"><strong>log_type = FILE <ścieżka_do_pliku> </strong>- określenie pliku dziennika.</li>
</ul>
<p>Parametry, które podlegają zapisowi w pliku dziennika to:</p>
<ul>
<li style="padding-left: 60px;"><strong>ATTEMPT - </strong>rejestruje fakt dokonania nieudanej próby logowania (log_on_failure),</li>
<li style="padding-left: 60px;"><strong>DURATION</strong> - rejestruje czas trwania połączenia (log_on_success),</li>
<li style="padding-left: 60px;"><strong>EXIT</strong> - rejestruje fakt zakończenia usługi (log_on_success),</li>
<li style="padding-left: 60px;"><strong>HOST</strong> - rejestruje adres IP zdalnego hosta (log_on_failure i log_on_success),</li>
<li style="padding-left: 60px;"><strong>PID</strong> - rejestruje identyfikator procesu odbierającego żądanie (log_on_success),</li>
<li style="padding-left: 60px;"><strong>USERID</strong> - rejestruje nazwę zdalnego użytkownika (log_on_failure i log_on_success).</li>
</ul>
<p>Poniżej jeszcze przykład konfiguracji serwera Telnet z uwzględnieniem niektórych powyższych opcji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak widać logi serwera Telnet są zapisywane w zdefiniowanym pliku: <strong>telnet.log</strong>, którego lokalizacja została zdefiniowana na katalog: <strong>/var/log/ </strong>Przykład zawartości pliku dziennika serwera zaprezentowano poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image11.png" alt="image11" width="700" height="152" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p><strong>Protokół SSH</strong> (ang. Secure Shell - bezpieczna powłoka) został stworzony jako rozwiązanie, którego głównym zadaniem jest zabezpieczenie połączeń typu klient-serwer i stanowi alternatywę dla sesji wykorzystującej Telnet. Mając wybór użycia połączenia zawsze jest lepiej wybrać SSH.</p>
<p> </p>
<p>Konfigurację połączenia SSH rozpoczynamy od instalacji niezbędnych pakietów. Aby móc nawiązać połączenie SSH należy zainstalować bibliotekę: <strong>openssh-server</strong> Instalację przeprowadzimy wydając polecenie: <strong>sudo apt-get install openssh-server</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image12.png" alt="image12" width="700" height="281" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Poprawność instalacji możemy zweryfikować wydając polecenie: <strong>/etc/init.d/ssh status</strong> Jak można stwierdzić po analizie poniższego zrzutu serwer jest uruchomiony (punkt 1) oraz, że nasłuchuje na domyślnym porcie usługi czyli porcie TCP 22 (punkt 2).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image13.png" alt="image13" width="700" height="288" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby sprawdzić czy serwer rzeczywiście nasłuchuje na porcie TCP 22 możemy posłużyć się znanym nam już poleceniem: <strong>netstat</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image14.png" alt="image14" width="700" height="175" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkową weryfikację możemy wykonać posługując się poleceniem: <strong>lsof -i:22</strong> Wydanie komendy sprawdzi jaka usług nasłuchuje na zdefiniowanym porcie 22.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image15.png" alt="image15" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wiemy już, że serwer SSH działa spróbujmy więc dokonać połączenia. W pierwszym kroku do nawiązania połączenia użyjemy systemu Linux a w następnym przykładzie systemu z rodziny Windows.</p>
<p> </p>
<p>Połączenie nastąpi z hosta na którym jest zainstalowany system Ubuntu 14.04. A więc przed nawiązaniem połączenia sprawdzamy dostępność hosta (punkt 1) – serwer SSH o adresie IP 192.168.1.132 jest dostępny.</p>
<p> </p>
<p>Aby móc nawiązać połączenie z powłoką hosta należy wydać polecenie: <strong>ssh <adres_IP_systemu_zdalnego></strong> - punkt 2.</p>
<p> </p>
<p>Przy próbie zestawiania pierwszego połączenia jesteśmy proszeni a potwierdzenie tego faktu. – tzw. „odcisk palca” serwera nie został zweryfikowany. Aby móc nawiązać połączenie wprowadzamy: <strong>yes</strong> (samo <strong>y</strong> nie wystarczy) – punkt 3.</p>
<p> </p>
<p>Aby w pełni nawiązać połączenie musimy jeszcze podać hasło przypisane do konta <strong>luk</strong> – punkt 4.</p>
<p> </p>
<p>Po podaniu hasła sesja zdalna z hostem o adresie IP 192.168.1.132 zostaje ustanowiona – punkt 5.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image16.png" alt="image16" width="700" height="454" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W przykładzie powyżej doszło do pewnego uproszczenia. Uważnemu Czytelnikowi na pewno przyjdzie do głowy pytanie – Skąd protokół wiedział by prosić o hasło przypisane do konta <strong>luk</strong>? Odpowiedź – zbieg okoliczności gdyż następuje połączenie z konta w systemie lokalnym o takiej samej nazwie jak ta zdefiniowana w systemie zdalnym. W naszym przypadku użytkownik z konta <strong>luk</strong> (komputer nawiązujący połączenie) chce się połączyć z system zdalnym wykorzystując poświadczenia przypisane również do konta <strong>luk</strong>.</p>
<p> </p>
<p>Co zrobić jeśli chcemy do połączenia użyć poświadczenia innego konta? Należy połączenie wywołać za pomocą innej komendy. Aby móc zestawić połączenie z systemem zdalny z użyciem określonych poświadczeń wydajemy polecenie: <strong>ssh <nazwa_konta>@<adres_IP_systemu_zdalnego> </strong>Poniżej przykład zestawienia połączenia z konta lokalnego <strong>root</strong> z kontem zdalnym <strong>luk</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image17.png" alt="image17" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Połączenie SSH z wykorzystaniem systemu Linux zostało ustanowione.</p>
<p> </p>
<p>Co zrobić w sytuacji w której połączenie będzie realizowane z komputera pracującego pod kontrolą systemu Windows? Do zestawienia zdalnej sesji SSH posłużymy się programem <strong>Putty</strong>. PuTTY jest bardzo popularnym a co najważniejsze bezpłatnym narzędziem za pomocą, którego możemy zestawić połączenie SSH lecz nie tylko gdyż program może również pełnić rolę klienta Telnet, Rlogin czy Serial (połączenie realizowane m.in. za pomocą złącza RS232 celem konfiguracji urządzeń np. przełączniki lub routery Cisco). Program działa zarówno pod kontrolą systemu Windows jak i Unix/Linux a dostępny jest w formie portable jak i instalatora. Program pobierzemy z tej strony: <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html</a></p>
<p> </p>
<p>Po pobraniu aplikacji spróbujmy ją wykorzystać do ustanowienia połączenia SSH. Uruchamiamy narzędzie i przechodzimy do gałęzi <strong>Session</strong> (domyślnie uruchomiona karta).</p>
<p> </p>
<p>W polu <strong>Host Name</strong> określamy adres IP zdalnego systemu (można skorzystać również z nazwy DNS) - punkt 1 a następnie w polu <strong>Port</strong> określamy docelowy port usługi (przydatne gdy usługa została skonfigurowana do działania na innym niż domyślnym porcie) - punkt 2. Kolejnym krokiem jest określenie sposobu prowadzenia dialogu z hostem docelowym - wybieramy SSH - punkt 3.</p>
<p> </p>
<p>Sekcja <strong>Load, save or delete a stored session</strong> służy do zapisu sesji połączeń tak by można było się do nich odwoływać bez podawania danych niezbędnych do zestawienia sesji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image18.png" alt="image18" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wpisaniu danych hosta zdalnego wybieramy przycisk <strong>Open</strong>. Podczas pierwszego połączenia będziemy poproszeni o zaakceptowanie alertu bezpieczeństwa związanego z brakiem w bazie tzw. „odcisku palca”. Wybieramy <strong>Tak</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image19.png" alt="image19" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby nasze połączenie doszło do skutku będziemy musieli podać login oraz hasło użytkownika. Jak widać poniżej po podaniu danych uwierzytelniających udało nam się zestawić połączenie z hosta o adresie IP 192.168.1.10 z hostem zdalnym 192.168.1.132</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image20.png" alt="image20" width="700" height="615" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tak jak wspomniałem z narzędzia PuTTY można również korzystać w systemie Linux.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image21.png" alt="image21" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ci którzy preferują wiersz poleceń zainteresują się programem OpenSSH. System Windows domyślnie nie ma zaimplementowanych narzędzi za pomocą, których można by było zestawić połączenie SSH. Aby uzupełnić tę lukę wystarczy ze strony: <a href="https://sourceforge.net/projects/opensshwindows/">https://sourceforge.net/projects/opensshwindows/</a> pobrać wyżej wspomnianą aplikację. Instalacja programu przebiega w sposób standardowy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image22.png" alt="image22" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby przy pomocy pobranego i zainstalowanego narzędzia nawiązać połączenie SSH w pierwszym kroku należy przejść do katalogu instalacyjnego, domyślna ścieżka instalacji to: <strong>c:\program files\OpenSSh for Windows\bin</strong> (w przypadku systemu 64-bitowego ścieżka instalacji będzie miała postać: <strong>c:\program files (x86)\OpenSSh for Windows\bin</strong>)</p>
<p> </p>
<p>Proces nawiązywania sesji rozpoczniemy po wydaniu polecenia: <strong>ssh <nazwa_użytkownika>@<adres_IP_hosta_zdalnego> </strong>Po zaakceptowaniu połączenia oraz podaniu danych uwierzytelniających połączenie z hostem zdalnym zostaje nawiązane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image23.png" alt="image23" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sesja z hostem zdalnym przy wykorzystaniu protokołu SSH została poprawnie skonfigurowana. Aby pokazać wyższość tego rozwiązania nad protokołem Telnet (szczególnie w kwestii bezpieczeństwa) spójrz na zrzut poniżej w którym został przedstawiony fragment sesji SSH. Jak można zauważyć przesyłanych informacji nie da się już odczytać w tak prosty sposób jak to było w przypadku sesji Telnet.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image24.png" alt="image24" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Naszą transmisję z hostem zdalnym możemy dodatkowo zabezpieczyć poprzez wybranie rozwiązania opartego na zastosowaniu kluczy - <strong>klucza prywatnego</strong> oraz <strong>klucza publicznego</strong>.</p>
<p> </p>
<p>Zastosowany mechanizm bazujący na parze kluczy (prywatnym i publicznym) jest określane jako <strong>szyfrowanie asymetryczne</strong> gdyż za pomocą jednego klucza następuje szyfrowanie wiadomości zaś za jej odszyfrowanie odpowiada klucz drugi.</p>
<p> </p>
<p>Aby sesja w wykorzystaniem kluczy mogła zostać nawiązana musimy wykonać następujące czynności:</p>
<p style="margin-left: 30px;">1 - Rozpoczynamy od wygenerowania pary kluczy poprzez wydanie polecenia: <strong>ssh-keygen -t rsa</strong> Klucze są generowane dla użytkownika <strong>luk</strong> na hoście z którym będziemy chcieli ustanowić połączenie.</p>
<p style="margin-left: 30px;">2 - Po wydaniu polecenia w pierwszej kolejności jest generowany klucz prywatny (domyślna nazwa klucza: <strong>id_rsa</strong>), klucze domyślnie zapisywane są w katalogu domowym użytkownika w ukrytym folderze <strong>.ssh</strong> Domyślną nazwę klucza i lokalizację możemy zmienić.</p>
<p style="margin-left: 30px;">3 - Klucz dodatkowo zabezpieczamy hasłem.</p>
<p style="margin-left: 30px;">4 - Po wygenerowaniu klucza prywatnego tworzony jest klucz publiczny - domyślna nazwa klucza to: <strong>id_rsa.pub</strong>, klucz zapisywany jest w tym samym katalogu co klucz prywatny.</p>
<p style="margin-left: 30px;">5 - Graficzna mapa klucza.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wygenerowaniu pary kluczy należy je umieścić w odpowiedniej lokalizacji. I tu rodzi się pytanie - Gdzie i jaki klucz użyć? Klucz prywatny jest najważniejszy i to jego chronimy a jego użycie zostanie przedstawione za chwilę. Przechodzimy do klucz publicznego.</p>
<p> </p>
<p>Domyślna lokalizacja klucza publicznego to serwer (host z którym będziemy chcieli nawiązać połączenie), katalog umiejscowienia klucza to folder <strong>.ssh</strong>, folder jest umiejscowiony w domowym katalogu użytkownika, którego poświadczenia użyjemy do wykonania stosownych operacji na serwerze (w naszym przypadku jest to użytkownik luk). Miejsce zapisu klucza publicznego zostało zdefiniowane w pliku: <strong>/etc/sshd_config</strong> w sekcji: <strong>AuthorizedKeysFile</strong> Edycja danych zawartych w tym pliku pozwoli nam na określenie dowolnej lokalizacji składowania kluczy publicznych użytkowników (w pliku mogą być zawarte klucze publiczne wielu użytkowników).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image26.png" alt="image26" width="700" height="426" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W naszym przypadku para kluczy została zapisana w folderze <strong>.ssh</strong>, który oczywiście jest umiejscowiony w katalogu domowym użytkownika <strong>luk</strong>. Po przejściu do katalogu <strong>.ssh</strong> (punkt 1) sprawdzamy czy klucze faktycznie zostały wygenerowane (punkt 2). Po stwierdzeniu istnienia kluczy musimy wykonać zapis klucza publicznego użytkownika <strong>luk</strong> do pliku <strong>authorized_keys</strong>. Zapis najlepiej jest wykonać przy wykorzystaniu komendy: <strong>cat</strong> (polecenie wyświetla zawartość pliku) z przekierowaniem (symbol <strong>>></strong>) do pliku <strong>authorized_keys</strong>. Wydanie polecenia przedstawionego na poniższym zrzucie (punkt 3) spowoduje dopisanie zawartości pliku <strong>id_rsa.pub </strong>(klucz publiczny) do pliku <strong>authorized_keys</strong>. Przy wydawaniu polecenia zwróć uwagę na symbol przekierowania gdyż użycie symbolu:<strong> ></strong> spowoduje nadpisanie (zastąpienie) już istniejących danych.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Fakt dokonania zapisu zawartości pliku klucza publicznego do pliku authorized_keys możemy sprawdzić porównując je ze sobą. Jak widać poniżej zawartość plików jest ze sobą zgodna - informacje zawarte w kluczu publicznym zostały prawidłowo przeniesione.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image28.png" alt="image28" width="700" height="229" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Host zdalny został skonfigurowany. Czas więc przejść do konfiguracji komputera, który połączenie będzie nawiązywał.</p>
<p> </p>
<p>Połączenie SSH z wykorzystaniem kluczy zostanie nawiązane z hosta działającego pod kontrolą systemu Linux z konta użytkownika root. Aby operacja zestawiania połączenia zakończyła się sukcesem musimy wykorzystać plik klucza prywatnego. Klucz prywatny musimy umieścić w katalogu <strong>.ssh</strong> użytkownika który będzie realizował połączenie. W pierwszej kolejności sprawdzamy fakt istnienia katalogu<strong> .ssh</strong> w folderze domowym użytkownika <strong>root</strong> - punkt 1. W razie jego braku z pomocą komendy: <strong>mkdir .ssh</strong> należy go utworzyć. Gdy katalog istnieje (bądź po jego utworzeniu) umieszczamy w nim plik klucza prywatnego: <strong>id_rsa</strong> (punkt 2 - zostało użyte polecenie <strong>cp</strong> odpowiedzialne za wykonanie procesu kopiowania) Po wykonaniu procesu kopiowania klucza prywatnego sprawdzamy poprawność wykonanych operacji - punkt 3. Klucz prywatny użytkownika <strong>luk</strong> został zapisany w katalogu <strong>.ssh</strong> użytkownika <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wykonaniu opisanych czynności czas sprawdzić czy uda nam się nawiązać połączenie. Połączenie inicjujemy za pomocą znanej nam już komendy: <strong>ssh <nazwa_użytkownika>@<adres_komputera_zdalnego</strong>> Wydanie polecenia generuje błąd o braku zabezpieczenia pliku klucza prywatnego (WARRNING: UNPROTECTED PRIVATE KEY FILE) i niemożności jego wykorzystania a co za tym idzie użycie pliku klucza prywatnego zostaje pominięte.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Powodem błędu są nałożone prawa na plik <strong>id_rsa</strong>. Aby móc wykorzystać plik klucza prywatnego musimy dokonać takiej modyfikacji praw by tylko użytkownik nawiązujący połączenie mógł z tego pliku skorzystać. Uprawnienia do odczytu i zapisu pliku <strong>id_rsa</strong> przez użytkownika <strong>root</strong> nadamy wydając polecenie: <strong>chmod 600 id_rsa</strong> - punkt 1</p>
<p> </p>
<p>Po zmianie uprawnień pliku wykonujemy kolejną próbę połączenia. Tym razem połączenie z wykorzystaniem pary kluczy udaje się nam nawiązać (oczywiście po podaniu hasła chroniącego plik klucza prywatnego) – punkt 2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image31.png" alt="image31" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Co zrobić jeśli połączenie SSH z wykorzystaniem kluczy chcemy zestawić przy wykorzystaniu systemu Windows? Aby móc uzyskać połączenie z hostem zdalnym należy ponownie użyć narzędzia PuTTY. Lecz zanim będziemy mogli użyć PuTTY musimy dokonać konwersji pliku klucza prywatnego tak aby móc go użyć z programem.</p>
<p> </p>
<p>Do przeprowadzenia konwersi użyjemy dedykowanego programu PuTTY Key Generator (do pobrania ze strony: <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html</a> nazwa pliku: <strong>puttygen</strong>, narzędzie jest standardowo dostępne w systemie gdy pobraliśmy instalator programu PuTTY a nie wersję portable).</p>
<p> </p>
<p>Po uruchomieniu programu z górnego menu wybieramy <strong>Converions</strong> a następnie <strong>Import key</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby móc dokończyć wczytywanie klucza należy wprowadzić hasło klucza prywatnego (oczywiście jeśli takowe hasło zostało zdefiniowane).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu wszystkich danych import klucza prywatnego zakończy się sukcesem. Po wczytaniu klucza by zapisać go w wymaganym formacie należy wybrać przycisk <strong>Save private key</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wybraniu opcji definiujemy nazwę oraz lokalizację zapisu pliku klucza.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image35.png" alt="image35" width="700" height="452" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Plik klucza prywatnego został zapisany w formacie PPK i jest gotowy do użycia z narzędziem PuTTY.</p>
<p> </p>
<p>Aby móc zestawić sesję zdalną z wykorzystaniem plików kluczy uruchamiamy aplikację PuTTY. Standardowo w sekcji <strong>Host Name</strong> określamy adres IP i port systemu zdalnego, dodatkowo musimy określić lokalizację pliku klucza prywatnego. Aby wykonać to zadanie przechodzimy do gałęzi <strong>SSH</strong> a następnie po jej rozwinięciu wybieramy <strong>Auth</strong>. Lokalizację klucza prywatnego określamy po wybraniu przycisku <strong>Browse</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image36.png" alt="image36" width="700" height="335" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu wszystkich danych nie pozostaje nam nic innego jak kliknąć na przycisk <strong>Open</strong>. Następuje próba nawiązania połączenia SSH, która jak widać poniżej po podaniu hasła do klucza prywatnego zostaje ustalona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Udało nam się nawiązać połączenie SSH z wykorzystaniem klucza prywatnego i publicznego, połączenie nastąpiło z systemu Windows przy wykorzystaniu narzędzia PuTTY.</p>
<p> </p>
<p>Wraz z instalacją obsługi funkcji SSH uzyskujemy możliwość bezpiecznego kopiowania plików. Kopiowanie plików może zostać zrealizowane za pomocą protokołu <strong>SCP</strong> lecz także protokołu <strong>SFTP</strong>.</p>
<p> </p>
<p><strong>Protokół SCP</strong> (ang. Secure copy) do wykonania procesu przesyłu plików pomiędzy zdalnymi hostami korzysta z zabezpieczonego połączenia. Oprócz zapewnienie bezpieczeństwa transferu plików (choć w implementacji protokołu brak funkcji uwierzytelniania) przy wykorzystaniu SSH zapewnia on przekazanie wraz z przesyłanym plikiem jego atrybutów.</p>
<p> </p>
<p><strong>SFTP</strong> (ang. SSH File Transfer Protocol) – to protokół komunikacyjny typu klient-serwer, który umożliwia przesyłanie plików poprzez sieć TCP/IP. Wykorzystanie protokołu FTP do zapisu/odczytu plików gwarantuje nam poprawność przeprowadzanej operacji lecz bez zachowania bezpieczeństwa – nasze hasła i dane tak samo jak przy użyciu protokołu Telnet nie są szyfrowane, co potencjalnie naraża nas na ich kradzież. Znaczną poprawę bezpieczeństwa przynosi protokół SFTP, który nie wymaga obecności serwera FTP, a przesyłane dane są szyfrowane z wykorzystaniem klucza szyfrującego. SFTP nie powinien być mylony z protokołem FTPS, który jest rozszerzeniem protokołu FTP.</p>
<p> </p>
<p>Przetestujmy więc przesył plików z wykorzystaniem wyżej wspomnianych protokołów. Rozpoczniemy od protokołu SCP z wykorzystaniem hosta pracującego pod kontrolą systemu Linux.</p>
<p> </p>
<p>Aby przesłać plik na host zdalny musimy użyć polecenia, którego ogólna składnia przedstawia się następująco: <strong>scp <ścieżka_do_pliku_wysyłanego> <użytkownik>@<adres_hosta_zdalnego>:<lokalizacja_zapisu_przesyłanego_pliku> </strong>Poniżej na zrzucie przedstawiono przykład w którym przesłano plik: <strong>do_wyslania</strong>, plik został zapisany w katalogu domowym użytkownika <strong>luk</strong> (znak tyldy oznacza katalog domowy). Do wysłania użyto poświadczeń użytkownika <strong>luk</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image38.png" alt="image38" width="700" height="63" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przejściu na hosta zdalnego i wydaniu polecenia: <strong>ls</strong> widać iż plik został przesłany prawidłowo.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Podczas korzystania z narzędzia <strong>scp</strong> mamy szereg flag za pomocą, których możemy skonfigurować narzędzie. Poniżej kilka z nich:</p>
<p style="margin-left: 30px;"><strong>-1</strong> - wymuszenie użycia pierwszej wersji protokołu,</p>
<p style="margin-left: 30px;"><strong>-2</strong> - wymuszenie użycia drugiej wersji protokołu,</p>
<p style="margin-left: 30px;"><strong>-4</strong> - adresacja oparta o IPv4,</p>
<p style="margin-left: 30px;"><strong>-6</strong> - adresacja oparta o IPv6,</p>
<p style="margin-left: 30px;"><strong>-B</strong> - włączenie trybu wsadowego,</p>
<p style="margin-left: 30px;"><strong>-P <port></strong> - zdalny por na którym została uruchomiona usługa serwera SSH (przydatne w sytuacjach w których SSH działa na niestandardowym porcie),</p>
<p style="margin-left: 30px;"><strong> -i <ścieżka_do_pliku_klucza></strong> - opcja wykorzystywana podczas ustanawiania połączenia opartego o klucze,</p>
<p style="margin-left: 30px;"><strong>-l <limit></strong> - definicja limitu transferu danych (wartość ta wyrażana jest w Kb/s),</p>
<p style="margin-left: 30px;"><strong>-p</strong> - nakaz zachowania atrybutów pliku tj. czas modyfikacji, prawa dostępu,</p>
<p style="margin-left: 30px;"><strong>-r</strong> - włącza kopiowanie rekurencyjne (przydatne w sytuacji kiedy chcemy wykonać kopiowanie wszystkich plików zawartych w katalogu), </p>
<p style="margin-left: 30px;"><strong>-q</strong> - uruchomienie paska postępu,</p>
<p style="margin-left: 30px;"><strong>-v</strong> - włącza tryb debugowania (opcji tej użyj gdy występuje problem z przekazywaniem plików).</p>
<p> </p>
<p>Aby proces kopiowania przeprowadzić z lokalizacji zdalnej na host lokalny należy użyć polecenia: <strong>scp <użytkownik>@<adres_hosta_zdalnego>:<lokalizacja_pliku_kopiowanego> <lokalizacja_zapisu_pliku></strong></p>
<p> </p>
<p>W przypadku systemu Windows możemy skorzystać m.in z narzędzia wiersza poleceń <strong>scp</strong> zawartego po instalacji <strong>OpenSSH </strong>(opis narzędzi wykorzystujących GUI za chwilę). Aby zapisać plik na hoście zdalnym należy skorzystać z bliźniaczego polecenia <strong>scp </strong>dostępnego w systemie Linux. Składnia polecenia jest identyczna. Poniżej przedstawiono przykład zapisu pliku: <strong>do_wyslania_2.txt</strong> i tak jak to opisano w poprzednim kroku plik również zapiszemy w katalogu domowym użytkownika luk z wykorzystaniem tych samych poświadczeń.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image40.png" alt="image40" width="700" height="77" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wysłaniu pliku sprawdzamy fakt zapisu po stronie hosta zdalnego. Ponowne wydanie polecenia: <strong>ls</strong> przekonuje nas o prawidłowości wykonania całej operacji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image41.png" alt="image41" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Do zapisu plików z wykorzystaniem protokołu SCP możemy również użyć narzędzia <strong>pscp</strong> zawartego po instalacji programu PuTTY (aplikacje możemy pobrać oddzielnie). Aby przesłać plik należy skorzystać z komendy: <strong>pscp</strong> <strong><ścieżka_do_pliku_wysyłanego> <użytkownik>@<adres_hosta_zdalnego>:<lokalizacja_zapisu_przesyłanego_pliku></strong> Poniżej przykład zapisu pliku: <strong>do_wyslania_3.txt</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdzenie poprawności z wykorzystaniem polecenia: <strong>ls</strong> potwierdza fakt zapisu pliku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image43.png" alt="image43" width="700" height="74" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Pomimo możliwości skorzystania z narzędzi opartych o protokół SCP znacznie częściej wykorzystuje się te wspierające SFTP (m.in. dlatego iż za pomocą SFTP możemy skorzystać z transmisji opartej o uwierzytelnienie oparte o klucze). Znacznie łatwiej do przesyłu plików używać narzędzi graficznych ponieważ aplikacje te ułatwiają nam wykonanie całości zamierzonych zadań w szczególności gdy trzeba przeglądać złożone struktury katalogów. Jednym z takich narzędzi jest: <strong>mc</strong> (pierwowzorem narzędzia był stary, dobry Norton Commander - Ci trochę starsi na pewno wiedzą o co chodzi). Po pobraniu i zainstalowaniu programu (operację wykonujemy w systemie Linux) wybieramy z <strong>Menu</strong> opcję <strong>Lewy</strong> bądź <strong>Prawy</strong> a następnie <strong>Połączenie SFTP</strong>. Wybranie opcji umożliwi nam nawiązanie połączenia z hostem zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image44.png" alt="image44" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby móc nawiązać połączenie w oknie <strong>Połączenie SFTP z komputerem</strong> podajemy nazwę użytkownika oraz adres IP hosta zdalnego.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image45.png" alt="image45" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby dokończyć zestawianie połączenia niezbędne będzie również hasło użytkownika.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image46.png" alt="image46" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu wszystkich niezbędnych danych połączenie z wykorzystaniem protokołu SFTP zostaje ustanowione. Po ustaleniu połączenia możemy przeprowadzać operacje związane z kopiowaniem plików (oczywiście proces kopiowania odbywa się w obu kierunkach).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image47.png" alt="image47" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Narzędzie <strong>mc</strong> umożliwia nam także zestawienie połączenia po powłoce. Wybranie żądania dostępne jest po wybraniu opcji: <strong>Połączenie po powłoce</strong> Uzyskanie połączenia przebiega w analogiczny sposób jak z wykorzystaniem protokołu SFTP. Po zestawieniu połączenia uzyskujemy możliwość wykonywania poleceń, których działanie będzie przeprowadzane na hoście zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image48.png" alt="image48" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jednym z narzędzi za pomocą, którego będziemy mogli przesłać pliki z wykorzystaniem protokołu SFTP jest aplikacja <strong>psftp</strong> (dostępna po instalacji PuTTY lub do pobrania jako oddzielny plik). Narzędzie wykorzystuje wiersz poleceń.</p>
<p> </p>
<p>Aby móc korzystać z narzędzia należy wywołać polecenie: <strong>psftp</strong> (punkt 1) a następnie za pomocą komendy <strong>open</strong> <strong><nazwa_użytkownika>@<adres_hosta></strong> (punkt 2) określić dane niezbędne do nawiązania połączenia z hostem zdalnym. Po podaniu hasła sesja zostaje ustalona. Wydanie polecenia wylistowania plików na hoście zdalnym kończy się sukcesem (punkt 3) - połączenie zostało zestawione prawidłowo.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Opis dostępnych opcji uzyskamy (jak to jest zazwyczaj przy użyciu narzędzi opartych o wiersz poleceń) po wydaniu polecenia <strong>help</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przydatne komendy:</p>
<p style="margin-left: 30px;"><strong>!</strong> - uruchomienie komendy, polecenie jest wykonywanie lokalnie,</p>
<p style="margin-left: 30px;"><strong>bye</strong> - kończenie sesji SFTP,</p>
<p style="margin-left: 30px;"><strong>cd</strong> - zmiana katalogu, polecenie wykonywane na hoście zdalnym,</p>
<p style="margin-left: 30px;"><strong>chmod</strong> - zmiana uprawnień pliku, polecenie wykonywane na hoście zdalnym,</p>
<p style="margin-left: 30px;"><strong>close</strong> - zamknięcie sesji lecz bez wyjścia z programu psftp,</p>
<p style="margin-left: 30px;"><strong>del</strong> - skasowanie pliku, polecenie wykonywane na hoście zdalnym,</p>
<p style="margin-left: 30px;"><strong>dir</strong> - listening katalogów i plików,</p>
<p style="margin-left: 30px;"><strong>get</strong> - pobranie pojedynczego pliku z serwera</p>
<p style="margin-left: 30px;"><strong>help</strong> - pomoc,</p>
<p style="margin-left: 30px;"><strong>lcd</strong> - ustalenie lokalnej lokalizacji zapisu ściąganych plików,</p>
<p style="margin-left: 30px;"><strong>lpwd</strong> - sprawdzenie lokalnej lokalizacji zapisu,</p>
<p style="margin-left: 30px;"><strong>ls</strong> - wylistowanie zawartości folderu,</p>
<p style="margin-left: 30px;"><strong>mget</strong> - pobranie wielu plików z hosta zdalnego,</p>
<p style="margin-left: 30px;"><strong>mkdir</strong> - utworzenie katalogu na hoście zdalnym,</p>
<p style="margin-left: 30px;"><strong>mput</strong> - wysłanie wielu plików na serwer,</p>
<p style="margin-left: 30px;"><strong>mv</strong> - przeniesienie bądź zmiana nazwy plików,</p>
<p style="margin-left: 30px;"><strong>open</strong> - nawiązanie sesji z hostem zdalnym,</p>
<p style="margin-left: 30px;"><strong>put</strong> - wysłanie pliku na serwer,</p>
<p style="margin-left: 30px;"><strong>pwd</strong> - sprawdzenie lokalizacji zapisu pliku,</p>
<p style="margin-left: 30px;"><strong>reget</strong> - kontynuacja ściągania pliku,</p>
<p style="margin-left: 30px;"><strong>ren</strong> - przeniesienie bądź zmiana nazwy plików,</p>
<p style="margin-left: 30px;"><strong>reput</strong> - kontynuacja przesyłania pliku,</p>
<p style="margin-left: 30px;"><strong>rm</strong> - usunięcie pliku ze zdalnej stacji roboczej,</p>
<p style="margin-left: 30px;"><strong>rmdir</strong> - usunięcie folderu ze zdalnej stacji roboczej.</p>
<p> </p>
<p>Prócz narzędzi działających w wierszu poleceń możemy skorzystać z tych opartych o interfejs graficzny. Jednym z takich programów działających pod kontrolą systemu Windows jest <strong>WinSCP</strong>. Program ten umożliwi nam wykonanie operacji bezpiecznego przesyłania plików z wykorzystaniem SSH (SCP/SFTP). Aplikacja ta jest również klientem FTP.</p>
<p> </p>
<p>Po pobraniu narzędzia z strony: <a href="https://winscp.net/eng/download.php">https://winscp.net/eng/download.php</a> przechodzimy do jego instalacji (aplikacja dostępna jest również w wersji portable). Po uruchomieniu pliku instalatora będziemy mogli dokonać wyboru przebiegu procesu instalacji - wybieramy: <strong>Niestandardowa instalacja</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wybranie opcji pozwoli nam na określenie komponentów (wraz z językiem interfejsu), które zostaną zainstalowane wraz z programem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na kolejnym ekranie możemy zdecydować o opcjach dodatkowych takich jak: aktualizacje automatyczne, lokalizacji skrótów czy dodanie katalogu instalacyjnego do zmiennej PATCH (przydatne podczas korzystania z wiersza poleceń gdyż by wywołać dane narzędzie nie musimy znajdować się w katalogu instalacyjnym programu).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią decyzją jest określenie stylu interfejsu programu. Możemy wybrać pomiędzy stylem znanym z Eksploratora bądź z takiego narzędzia jak Total Commander.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po określeniu wszystkich opcji nastąpi instalacja programu.</p>
<p> </p>
<p>Po uruchomieniu narzędzia w oknie <strong>Zaloguj</strong> możemy określić protokół z którego będziemy korzystać.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image55.png" alt="image55" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Połączenie z hostem następuje po podaniu nazwy hosta, portu oraz danych uwierzytelniających.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image56.png" alt="image56" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wybranie opcji <strong>Logowanie</strong> spowoduje wykonania połączenia z hostem zdalnym. Podczas nawiązywania pierwszego połączenia będziemy musieli zaakceptować odcisk palca serwera.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image57.png" alt="image57" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wybranie <strong>Tak</strong> spowoduje ustanowienie połączenia. Jak widać poniżej sesja z hostem zdalnym została nawiązana.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image58.png" alt="image58" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po ustanowieniu połączenia oprócz kopiowania plików będziemy mieli możliwość skorzystania z konsoli. Konsola umożliwia nam wydawanie poleceń, które będą wykonywane na hoście zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image59.png" alt="image59" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkowo gdy mamy zainstalowane narzędzie PuTTY możemy je bezpośrednio wywołać z okna programu WinSCP. Po uruchomieniu PuTTY zostanie nawiązana osobna sesja z hostem zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image60.png" alt="image60" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>WinSCP umożliwia uzyskanie połączenia również z wykorzystaniem mechanizmu opartego o klucz prywatny i publiczny. Jako podsumowanie całego wpisu przyjmijmy o to taki scenariusz iż do połączenia asymetrycznego wykorzystamy parę kluczy wygenerowanych za pomocą narzędzia PuTTYgen. Logowanie na hoście zdalnym zostanie wykonane na koncie luk.</p>
<p> </p>
<p>Narzędzie PuTTYgen możemy uruchomić bezpośrednio z poziomu WinSCP (o ile zostało zainstalowane) wybierając po uruchomieniu programu przycisk <strong>Narzędzia</strong> a następnie <strong>Uruchom PuTTYgen</strong>. PuTTYgen możemy również pobrać bezpośrednio z sieci.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image61.png" alt="image61" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po uruchomieniu aplikacji PuTTYgen wybieramy opcję <strong>Generate</strong>. Domyślne parametry klucza możemy pozostawić bez zmian tj. RSA i długość klucza 2048.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image62.png" alt="image62" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby zakończyć generowanie kluczy poruszamy kursorem w obrębie okna uruchomionej aplikacji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wygenerowaniu kluczy, klucz prywatny zabezpieczamy hasłem – punkt 1 a następnie za pomocą przycisku <strong>Save public key</strong> zapisujemy klucz publiczny – punkt 2. Ostatnią czynnością jaką musimy wykonać to zapis klucza prywatnego, klucz zapisujemy z wykorzystaniem opcji <strong>Save private key</strong> – punkt 3.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image64.png" alt="image64" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby móc zestawić połączenie asymetryczne należy wygenerowany klucz publiczny zapisać w pliku authorized_keys. Klucz prześlemy z wykorzystaniem protokołu SFTP – na tym etapie wykorzystujemy poświadczenia konta luk, należące do użytkownika, którego konto znajduje się na hoście zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przed ustanowieniem połączenia warto w opcjach aplikacji WinSCP włączyć wyświetlanie ukrytych folderów (ponieważ plik authorized_keys jest zapisany w ukrytym folderze .ssh). Włączenie pokazywania ukrytych plików zrealizujemy po przejściu do <strong>Ustawień</strong> programu WinSCP (aby włączyć ustawienia należy w głównym oknie programu wybrać przycisk <strong>Narzędzia</strong> a następnie <strong>Preferencje</strong>) i wybraniu gałęzi <strong>Panele</strong>. Stosowna opcja znajduje się w sekcji <strong>Ogólne</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image66.png" alt="image66" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po ustanowieniu połączenia plik w którym zapisano wygenerowany klucz publiczny kopiujemy do katalogu .ssh (folder ten powinien znajdować się w katalogu domowym użytkownika luk). W scenariuszu tym kopiowany plik nosi nazwę: <strong>klucz_publiczny</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image67.png" alt="image67" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przekopiowaniu pliku: klucz_publiczny jego zawartość kopiujemy do pliku authorized_keys. Operację tę wykonamy za pomocą znanego już nam polecenia: <strong>cat</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image68.png" alt="image68" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zapisie klucza publicznego czas by podjąć próbę nawiązania połączenia zdalnego. Testową próbę wykonamy za pomocą narzędzia PuTTY. Po skonfigurowaniu narzędzia jak widać poniżej próba kończy się niepowodzeniem, gdyż serwer odrzucił nasz klucz.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image69.png" alt="image69" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Winą odrzucenia klucza jest format jego zapisu. Aby móc wykorzystać klucz publiczny z narzędziem OpenSSH należy dane zawarte w nim odpowiednio sformatować. Musimy wykonać dwie czynności.</p>
<p> </p>
<p>Po otwarciu pliku zawierającego klucz publiczny (dokonujemy tego w dowolnym edytorze tekstu) kasujemy zaznaczone na poniższym zrzucie linie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image70.png" alt="image70" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Druga czynność jaką musimy wykonać to umieszczenie całości wygenerowanych danych w jednym wierszu poprzez usunięcie znaków końca wiersza (całość klucza musi być zapisana w pojedynczym wierszu) a następnie umieszczeniu na początku wiersza zapisu: <strong>ssh-rsa</strong>. Tak zmodyfikowany plik należy zapisać a następnie umieścić jego zawartość w pliku authorized_keys.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image71.png" alt="image71" width="700" height="86" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tu muszę przyznać się że zamierzony efekt (próba połączenia zakończona sukcesem) da się osiągnąć znacznie łatwiej gdyż już na etapie wygenerowania pary kluczy przez narzędzie PuTTYgen można było uzyskać odpowiedni format klucza publicznego. Wystarczyło przekopiować dane z sekcji Key do pliku tekstowego by w następnym kroku umieścić je w pliku authorized_keys.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image72.png" alt="image72" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Lecz specjalnie wybrałem ścieżkę na okrętkę by pokazać na jakie trudności możemy się natknąć przy próbie konfiguracji połączenia SSH z wykorzystaniem kluczy wygenerowanych za pomocą innych narzędzi.</p>
<p> </p>
<p>Po umieszczeniu danych klucza publicznego na serwerze zdalnym możemy przejść do zestawienia sesji SFTP z wykorzystaniem narzędzia WinSCP oraz klucza prywatnego.</p>
<p> </p>
<p>Po uruchomieniu WinSCP w pierwszym kroku określamy adres hosta zdalnego (pola Nazwa użytkownika oraz Hasło specjalnie zostały puste – podczas ustanawiania połączenia program poprosi o te dane) – punkt 1. W kroku drugim określamy lokalizację klucza prywatnego (ścieżkę do klucza prywatnego określimy po wybraniu przycisku <strong>Zaawansowane</strong> a następnie w nowo otwartym oknie w sekcji <strong>Parametry identyfikacyjne</strong> dostępnej w gałęzi <strong>SSH</strong> --> <strong>Uwierzytelnienie</strong>) – punkt 2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image73.png" alt="image73" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po konfiguracji narzędzia WinSCP możemy przeprowadzić próbę połączenia. Jak widać poniżej opuszczone parametry musimy podać w trakcie nawiązywania połączenia. Połączenie odbywa się z wykorzystaniem klucza prywatnego. Aby połączenie mogło zostać sfinalizowane podajemy hasło chroniące klucz prywatny.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image74.png" alt="image74" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wszystko przebiegło po naszej myśli - udało nam się ustanowić sesję SFTP z wykorzystaniem uwierzytelnienia opartego o szyfrowanie asymetryczne.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image75.png" alt="image75" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Konfiguracja systemu Linux odnośnie nawiązywania połączeń zdalnych nie jest trudna a mam nadzieję, że poradnik ten wątpliwości w tej kwestii rozwiewa.</p>
<p> </p>
<hr />
<p>BIBLIOGRAFIA:</p>
<p> </p>
<p><a href="https://support.suso.com/supki/SSH_Tutorial_for_Linux">SSH Tutorial for Linux - Support Documentation</a></p>
<p><a href="http://askubuntu.com/questions/668725/how-can-the-telnet-service-on-ubuntu-server-14-04-lts-be-enabled">How can the Telnet service on Ubuntu Server 14.04 LTS be enabled? - Ask Ubuntu</a></p>
<p><a href="http://ubuntuguide.net/install-and-enable-telnet-server-in-ubuntu-linux">Install and Enable Telnet server in Ubuntu Linux - Ubuntu Sharing</a></p>
<p><a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-tcpwrappers-xinetd-config.html">xinetd Configuration Files</a> <a href="http://www.howtogeek.com/168119/fixing-warning-unprotected-private-key-file-on-linux/">Fixing “WARNING: UNPROTECTED PRIVATE KEY FILE!” on Linux</a></p>
<p><a href="https://www.howtoforge.com/ssh_key_based_logins_putty_p4">Key-Based SSH Logins With PuTTY</a></p>
<p><a href="http://staff.uz.zgora.pl/agramack/files/Linux/ANSI_C_Linux_SSH.pdf">Microsoft Word - ANSI_C_Linux_SSH - ANSI_C_Linux_SSH.pdf</a></p>
<p><a href="http://serverfault.com/questions/582048/scp-copy-windows-local-file-to-linux-remote-folder">SCP copy windows local file to linux remote folder - Server Fault</a></p>
<p><a href="http://www.tecmint.com/scp-commands-examples/">10 SCP Commands to Transfer Files/Folders in Linux</a></p></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/8dc425b2acbf9c68064b8a63eae1ffbc_S.jpg" alt="Protokoły dostępu zdalnego w systemie Linux." /></div><div class="K2FeedIntroText"><p>Możliwość nawiązania zdalnego połączenia z systemem celem przeprowadzenia czynności administracyjnych dla wielu jest nieoceniona gdyż zyskujemy możliwość wykonania niezbędnej konfiguracji systemu bez fizycznego obcowania z komputerem. W wcześniejszych artykułach opisałem jak sesję zdalną ustalić z systemami z rodziny Windows, pomijając system Linux. Czas więc tą zaległość nadrobić - w wpisie tym zajmiemy się ustaleniem sesji zdalnej z systemem Linux z wykorzystaniem takich protokołów jak Telnet czy SSH.</p>
</div><div class="K2FeedFullText">
<p>Rozpoczynamy od najstarszego rozwiązania czyli Telnetu. Spróbujemy tak skonfigurować system Linux Ubuntu aby można było nim zarządzać zdalnie z wykorzystaniem tego protokołu.</p>
<p> </p>
<p>Aby móc zestawić połączenie Telnet z systemem należy rozpocząć od instalacji niezbędnych pakietów tak więc wydajemy polecenie: <strong>apt-get install xinetd telnetd</strong> Po wydaniu komendy nastąpi instalacja oprogramowania niezbędnego do zestawienia sesji Telnet.</p>
<p> <img src="http://slow7.pl/images/stories/linux/ssh/image1.png" alt="image1" width="700" height="460" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Automatycznie po instalacji oprogramowania odpowiedni port umożliwiający nawiązanie połączenia powinien zostać otwarty (stan nasłuchiwania). W przypadku Telnetu jest to port TCP 23. Aby sprawdzić stan portów wydaj polecenie: <strong>netstat -tlpn </strong>Jak widać poniżej port TCP 23 jest w stanie nasłuchiwania (gotowy do nawiązania połączenia).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image2.png" alt="image2" width="700" height="230" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zanim przejdziemy dalej chwilkę zatrzymajmy się przy użytej komendzie <strong>netstat</strong>. Polecenie <strong>netstat</strong> służy między innymi do wyświetlania aktywnych połączeń sieciowych a także portów, na których komputer nasłuchuje. Wydana komenda: <strong>netstat -tlpn</strong> spowoduje użycie następujących opcji:</p>
<p style="margin-left: 30px;">-t - pokaż tylko porty TCP/IP,</p>
<p style="margin-left: 30px;">-l - pokaż porty tylko w trybie nasłuchiwania (LISTEN),</p>
<p style="margin-left: 30px;">-p - pokaż PID procesu związanego z otwartym portem,</p>
<p style="margin-left: 30px;">-n - pokaż adresy IP bez ich rozwiązywania.</p>
<p> </p>
<p>W przypadku portów UDP należy użyć flagi: <strong>-u</strong> np. pokaż porty TCP oraz UDP w stanie nasłuchiwania: <strong>netstat -tul</strong></p>
<p> </p>
<p>Jeśli wszystko się zgadza powinno udać nam się nawiązać połączenie zdalne z hostem przy wykorzystaniu protokołu Telnel.</p>
<p> </p>
<p>Ale nie zawsze wszystko może zacząć działać od razu o ile w przypadku Linux Ubuntu 14.04 nie było żadnych problemów to już przy wersji 16.04 takowe nastąpiły. Po instalacji niezbędnych pakietów nawiązanie połączenia nie było możliwe.</p>
<p> </p>
<p>Aby rozwiązać ten problem pierwsze nasze kroki powinniśmy skierować ku katalogowi: <strong>/etc/xinetd.d</strong> i sprawdzić czy istnieje plik: <strong>telnet</strong> W przypadku jego braku należy go utworzyć a jego zawartość powinna być następująca:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">service telnet</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">{</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">disable = no</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">flags = REUSE</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">socket_type = stream</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">wait = no</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">user = root</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">server = /usr/sbin/in.telnetd</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">log_on_failure += USERID</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">}</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image3.png" alt="image3" width="700" height="394" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po ewentualnym utworzeniu pliku należy wydać polecenie: <strong>sudo /etc/init.d/xinetd restart</strong> celem ponownego uruchomienia serwera i wprowadzenia nowych ustawień.</p>
<p> </p>
<p>Po wprowadzeniu zmian powinno udać nam się zestawić połączenie Telnet. Jak widać poniżej tak też się stało.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Status i stan serwera możemy sprawdzić po wydaniu polecenia: <strong>sudo /etc/init.d/xinetd status</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image5.png" alt="image5" width="700" height="392" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Domyślny port 23 usługi Telnet możemy zmienić poprzez edycję pliku: <strong>/etc/services </strong>Po otwarciu pliku odnajdujemy linię odnoszącą się do usługi Telnet i zmieniamy domyślną wartość portu 23 na pożądaną.</p>
<p> </p>
<p>Aby móc zestawić połączenie z systemu Windows przy wykorzystaniu wiersza poleceń w pierwszej kolejności musimy zainstalować klienta Telnet. Klienta zainstalujemy po przejściu do <strong>Panelu sterowania</strong> a następnie wybraniu opcji <strong>Programy i funkcje</strong> Po otwarciu okna (z lewej strony) klikamy na opcję <strong>Włącz lub wyłącz funkcje systemu Windows</strong> i wśród dostępnych funkcji odszukujemy <strong>Klient Telnet</strong>. Funkcję należy zaznaczyć a następnie wybrać OK. Po instalacji polecenie: <strong>telnet</strong> będzie dostępne z linii poleceń.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image6.png" alt="image6" width="700" height="601" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby nawiązać połączenie zdalne w oknie wiersza poleceń wydajemy polecenie: <strong>telnet <adres_hosta></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image7.png" alt="image7" width="700" height="488" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dokładniejszy opis narzędzia: telnet znajdziesz w wpisie: <a href="http://slow7.pl/index.php/item/54-nie-samym-gui-czlowiek-zyje-rzecz-o-cmd" title="Nie samym GUI człowiek żyje. Rzecz o CMD."><span style="text-decoration: none;">Nie samym GUI człowiek żyje. Rzecz o CMD</span></a></p>
<p> </p>
<p>Opis narzędzi graficznych przedstawiono w dalszej części wpisu.</p>
<p> </p>
<p>Jak wiadomo (i co już nie raz podkreślałem) użycie protokołu Telnet nie jest rozwiązaniem z punktu bezpieczeństwa zbyt trafnym gdyż w protokole tym nie przewidziano, żadnych mechanizmów pozwalających na zabezpieczenie całej komunikacji. Oznacza to, że w przypadku przechwycenia ruchu sieciowego nasze <strong>hasło</strong> i <strong>login</strong> będzie można bez problemu odczytać. Poniżej przedstawiam zrzut, który obrazuje fakt zdobycia loginu i hasła.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image8.png" alt="image8" width="700" height="488" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeśli już nie mamy wyjścia to przynajmniej warto zabezpieczyć możliwość nawiązania połączenia z systemem do zaufanych hostów. Aby określić komputery, które mają prawo do zestawienia połączenia należy edytować plik: <strong>/etc/xinetd.d/telnet</strong> i do bieżącej konfiguracji dodać linię: <strong>only_from = <adres_IP/adres_sieci></strong> Możemy określić adres IP hosta bądź zakres hostów poprzez definicję sieci. Definicję hostów możemy również przeprowadzić poprzez podanie nazwy domeny np. <strong>only_from = .slow7.pl</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image9.png" alt="image9" width="700" height="394" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Inne przydatne parametry:</p>
<ul>
<li style="padding-left: 60px;"><strong>no_access = 192.168.120.{101,105}</strong> - zabronienie połączenia, hosty o podanych adresach IP nie będą mogły zestawić sesji Telnet (w ten sam sposób możemy zdefiniować hosty mogące połączenie nawiązać),</li>
<li style="padding-left: 60px;"><strong>access_times = 7:00-10:00 22:00-23:00</strong> - określenie czasu w którym może nastąpić połączenie,</li>
<li style="padding-left: 60px;"><strong>instances = 2</strong> - ustawia maksymalną liczbę równocześnie realizowanych połączeń (parametr zdefiniowany w pliku: <strong>/etc/xinetd.conf</strong>),</li>
<li style="padding-left: 60px;"><strong>log_on_failure += <rejestrowane_parametry></strong> - rejestrowanie zdarzeń związanych z nieudanym logowaniem,</li>
<li style="padding-left: 60px;"><strong>log_on_success += <rejestrowane_parametry></strong> - rejestrowanie zdarzeń związanych z udanym logowaniem,</li>
<li style="padding-left: 60px;"><strong>log_type = FILE <ścieżka_do_pliku> </strong>- określenie pliku dziennika.</li>
</ul>
<p>Parametry, które podlegają zapisowi w pliku dziennika to:</p>
<ul>
<li style="padding-left: 60px;"><strong>ATTEMPT - </strong>rejestruje fakt dokonania nieudanej próby logowania (log_on_failure),</li>
<li style="padding-left: 60px;"><strong>DURATION</strong> - rejestruje czas trwania połączenia (log_on_success),</li>
<li style="padding-left: 60px;"><strong>EXIT</strong> - rejestruje fakt zakończenia usługi (log_on_success),</li>
<li style="padding-left: 60px;"><strong>HOST</strong> - rejestruje adres IP zdalnego hosta (log_on_failure i log_on_success),</li>
<li style="padding-left: 60px;"><strong>PID</strong> - rejestruje identyfikator procesu odbierającego żądanie (log_on_success),</li>
<li style="padding-left: 60px;"><strong>USERID</strong> - rejestruje nazwę zdalnego użytkownika (log_on_failure i log_on_success).</li>
</ul>
<p>Poniżej jeszcze przykład konfiguracji serwera Telnet z uwzględnieniem niektórych powyższych opcji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak widać logi serwera Telnet są zapisywane w zdefiniowanym pliku: <strong>telnet.log</strong>, którego lokalizacja została zdefiniowana na katalog: <strong>/var/log/ </strong>Przykład zawartości pliku dziennika serwera zaprezentowano poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image11.png" alt="image11" width="700" height="152" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p><strong>Protokół SSH</strong> (ang. Secure Shell - bezpieczna powłoka) został stworzony jako rozwiązanie, którego głównym zadaniem jest zabezpieczenie połączeń typu klient-serwer i stanowi alternatywę dla sesji wykorzystującej Telnet. Mając wybór użycia połączenia zawsze jest lepiej wybrać SSH.</p>
<p> </p>
<p>Konfigurację połączenia SSH rozpoczynamy od instalacji niezbędnych pakietów. Aby móc nawiązać połączenie SSH należy zainstalować bibliotekę: <strong>openssh-server</strong> Instalację przeprowadzimy wydając polecenie: <strong>sudo apt-get install openssh-server</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image12.png" alt="image12" width="700" height="281" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Poprawność instalacji możemy zweryfikować wydając polecenie: <strong>/etc/init.d/ssh status</strong> Jak można stwierdzić po analizie poniższego zrzutu serwer jest uruchomiony (punkt 1) oraz, że nasłuchuje na domyślnym porcie usługi czyli porcie TCP 22 (punkt 2).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image13.png" alt="image13" width="700" height="288" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby sprawdzić czy serwer rzeczywiście nasłuchuje na porcie TCP 22 możemy posłużyć się znanym nam już poleceniem: <strong>netstat</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image14.png" alt="image14" width="700" height="175" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkową weryfikację możemy wykonać posługując się poleceniem: <strong>lsof -i:22</strong> Wydanie komendy sprawdzi jaka usług nasłuchuje na zdefiniowanym porcie 22.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image15.png" alt="image15" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wiemy już, że serwer SSH działa spróbujmy więc dokonać połączenia. W pierwszym kroku do nawiązania połączenia użyjemy systemu Linux a w następnym przykładzie systemu z rodziny Windows.</p>
<p> </p>
<p>Połączenie nastąpi z hosta na którym jest zainstalowany system Ubuntu 14.04. A więc przed nawiązaniem połączenia sprawdzamy dostępność hosta (punkt 1) – serwer SSH o adresie IP 192.168.1.132 jest dostępny.</p>
<p> </p>
<p>Aby móc nawiązać połączenie z powłoką hosta należy wydać polecenie: <strong>ssh <adres_IP_systemu_zdalnego></strong> - punkt 2.</p>
<p> </p>
<p>Przy próbie zestawiania pierwszego połączenia jesteśmy proszeni a potwierdzenie tego faktu. – tzw. „odcisk palca” serwera nie został zweryfikowany. Aby móc nawiązać połączenie wprowadzamy: <strong>yes</strong> (samo <strong>y</strong> nie wystarczy) – punkt 3.</p>
<p> </p>
<p>Aby w pełni nawiązać połączenie musimy jeszcze podać hasło przypisane do konta <strong>luk</strong> – punkt 4.</p>
<p> </p>
<p>Po podaniu hasła sesja zdalna z hostem o adresie IP 192.168.1.132 zostaje ustanowiona – punkt 5.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image16.png" alt="image16" width="700" height="454" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W przykładzie powyżej doszło do pewnego uproszczenia. Uważnemu Czytelnikowi na pewno przyjdzie do głowy pytanie – Skąd protokół wiedział by prosić o hasło przypisane do konta <strong>luk</strong>? Odpowiedź – zbieg okoliczności gdyż następuje połączenie z konta w systemie lokalnym o takiej samej nazwie jak ta zdefiniowana w systemie zdalnym. W naszym przypadku użytkownik z konta <strong>luk</strong> (komputer nawiązujący połączenie) chce się połączyć z system zdalnym wykorzystując poświadczenia przypisane również do konta <strong>luk</strong>.</p>
<p> </p>
<p>Co zrobić jeśli chcemy do połączenia użyć poświadczenia innego konta? Należy połączenie wywołać za pomocą innej komendy. Aby móc zestawić połączenie z systemem zdalny z użyciem określonych poświadczeń wydajemy polecenie: <strong>ssh <nazwa_konta>@<adres_IP_systemu_zdalnego> </strong>Poniżej przykład zestawienia połączenia z konta lokalnego <strong>root</strong> z kontem zdalnym <strong>luk</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image17.png" alt="image17" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Połączenie SSH z wykorzystaniem systemu Linux zostało ustanowione.</p>
<p> </p>
<p>Co zrobić w sytuacji w której połączenie będzie realizowane z komputera pracującego pod kontrolą systemu Windows? Do zestawienia zdalnej sesji SSH posłużymy się programem <strong>Putty</strong>. PuTTY jest bardzo popularnym a co najważniejsze bezpłatnym narzędziem za pomocą, którego możemy zestawić połączenie SSH lecz nie tylko gdyż program może również pełnić rolę klienta Telnet, Rlogin czy Serial (połączenie realizowane m.in. za pomocą złącza RS232 celem konfiguracji urządzeń np. przełączniki lub routery Cisco). Program działa zarówno pod kontrolą systemu Windows jak i Unix/Linux a dostępny jest w formie portable jak i instalatora. Program pobierzemy z tej strony: <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html</a></p>
<p> </p>
<p>Po pobraniu aplikacji spróbujmy ją wykorzystać do ustanowienia połączenia SSH. Uruchamiamy narzędzie i przechodzimy do gałęzi <strong>Session</strong> (domyślnie uruchomiona karta).</p>
<p> </p>
<p>W polu <strong>Host Name</strong> określamy adres IP zdalnego systemu (można skorzystać również z nazwy DNS) - punkt 1 a następnie w polu <strong>Port</strong> określamy docelowy port usługi (przydatne gdy usługa została skonfigurowana do działania na innym niż domyślnym porcie) - punkt 2. Kolejnym krokiem jest określenie sposobu prowadzenia dialogu z hostem docelowym - wybieramy SSH - punkt 3.</p>
<p> </p>
<p>Sekcja <strong>Load, save or delete a stored session</strong> służy do zapisu sesji połączeń tak by można było się do nich odwoływać bez podawania danych niezbędnych do zestawienia sesji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image18.png" alt="image18" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wpisaniu danych hosta zdalnego wybieramy przycisk <strong>Open</strong>. Podczas pierwszego połączenia będziemy poproszeni o zaakceptowanie alertu bezpieczeństwa związanego z brakiem w bazie tzw. „odcisku palca”. Wybieramy <strong>Tak</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image19.png" alt="image19" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby nasze połączenie doszło do skutku będziemy musieli podać login oraz hasło użytkownika. Jak widać poniżej po podaniu danych uwierzytelniających udało nam się zestawić połączenie z hosta o adresie IP 192.168.1.10 z hostem zdalnym 192.168.1.132</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image20.png" alt="image20" width="700" height="615" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tak jak wspomniałem z narzędzia PuTTY można również korzystać w systemie Linux.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image21.png" alt="image21" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ci którzy preferują wiersz poleceń zainteresują się programem OpenSSH. System Windows domyślnie nie ma zaimplementowanych narzędzi za pomocą, których można by było zestawić połączenie SSH. Aby uzupełnić tę lukę wystarczy ze strony: <a href="https://sourceforge.net/projects/opensshwindows/">https://sourceforge.net/projects/opensshwindows/</a> pobrać wyżej wspomnianą aplikację. Instalacja programu przebiega w sposób standardowy.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image22.png" alt="image22" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby przy pomocy pobranego i zainstalowanego narzędzia nawiązać połączenie SSH w pierwszym kroku należy przejść do katalogu instalacyjnego, domyślna ścieżka instalacji to: <strong>c:\program files\OpenSSh for Windows\bin</strong> (w przypadku systemu 64-bitowego ścieżka instalacji będzie miała postać: <strong>c:\program files (x86)\OpenSSh for Windows\bin</strong>)</p>
<p> </p>
<p>Proces nawiązywania sesji rozpoczniemy po wydaniu polecenia: <strong>ssh <nazwa_użytkownika>@<adres_IP_hosta_zdalnego> </strong>Po zaakceptowaniu połączenia oraz podaniu danych uwierzytelniających połączenie z hostem zdalnym zostaje nawiązane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image23.png" alt="image23" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sesja z hostem zdalnym przy wykorzystaniu protokołu SSH została poprawnie skonfigurowana. Aby pokazać wyższość tego rozwiązania nad protokołem Telnet (szczególnie w kwestii bezpieczeństwa) spójrz na zrzut poniżej w którym został przedstawiony fragment sesji SSH. Jak można zauważyć przesyłanych informacji nie da się już odczytać w tak prosty sposób jak to było w przypadku sesji Telnet.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image24.png" alt="image24" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Naszą transmisję z hostem zdalnym możemy dodatkowo zabezpieczyć poprzez wybranie rozwiązania opartego na zastosowaniu kluczy - <strong>klucza prywatnego</strong> oraz <strong>klucza publicznego</strong>.</p>
<p> </p>
<p>Zastosowany mechanizm bazujący na parze kluczy (prywatnym i publicznym) jest określane jako <strong>szyfrowanie asymetryczne</strong> gdyż za pomocą jednego klucza następuje szyfrowanie wiadomości zaś za jej odszyfrowanie odpowiada klucz drugi.</p>
<p> </p>
<p>Aby sesja w wykorzystaniem kluczy mogła zostać nawiązana musimy wykonać następujące czynności:</p>
<p style="margin-left: 30px;">1 - Rozpoczynamy od wygenerowania pary kluczy poprzez wydanie polecenia: <strong>ssh-keygen -t rsa</strong> Klucze są generowane dla użytkownika <strong>luk</strong> na hoście z którym będziemy chcieli ustanowić połączenie.</p>
<p style="margin-left: 30px;">2 - Po wydaniu polecenia w pierwszej kolejności jest generowany klucz prywatny (domyślna nazwa klucza: <strong>id_rsa</strong>), klucze domyślnie zapisywane są w katalogu domowym użytkownika w ukrytym folderze <strong>.ssh</strong> Domyślną nazwę klucza i lokalizację możemy zmienić.</p>
<p style="margin-left: 30px;">3 - Klucz dodatkowo zabezpieczamy hasłem.</p>
<p style="margin-left: 30px;">4 - Po wygenerowaniu klucza prywatnego tworzony jest klucz publiczny - domyślna nazwa klucza to: <strong>id_rsa.pub</strong>, klucz zapisywany jest w tym samym katalogu co klucz prywatny.</p>
<p style="margin-left: 30px;">5 - Graficzna mapa klucza.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wygenerowaniu pary kluczy należy je umieścić w odpowiedniej lokalizacji. I tu rodzi się pytanie - Gdzie i jaki klucz użyć? Klucz prywatny jest najważniejszy i to jego chronimy a jego użycie zostanie przedstawione za chwilę. Przechodzimy do klucz publicznego.</p>
<p> </p>
<p>Domyślna lokalizacja klucza publicznego to serwer (host z którym będziemy chcieli nawiązać połączenie), katalog umiejscowienia klucza to folder <strong>.ssh</strong>, folder jest umiejscowiony w domowym katalogu użytkownika, którego poświadczenia użyjemy do wykonania stosownych operacji na serwerze (w naszym przypadku jest to użytkownik luk). Miejsce zapisu klucza publicznego zostało zdefiniowane w pliku: <strong>/etc/sshd_config</strong> w sekcji: <strong>AuthorizedKeysFile</strong> Edycja danych zawartych w tym pliku pozwoli nam na określenie dowolnej lokalizacji składowania kluczy publicznych użytkowników (w pliku mogą być zawarte klucze publiczne wielu użytkowników).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image26.png" alt="image26" width="700" height="426" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>W naszym przypadku para kluczy została zapisana w folderze <strong>.ssh</strong>, który oczywiście jest umiejscowiony w katalogu domowym użytkownika <strong>luk</strong>. Po przejściu do katalogu <strong>.ssh</strong> (punkt 1) sprawdzamy czy klucze faktycznie zostały wygenerowane (punkt 2). Po stwierdzeniu istnienia kluczy musimy wykonać zapis klucza publicznego użytkownika <strong>luk</strong> do pliku <strong>authorized_keys</strong>. Zapis najlepiej jest wykonać przy wykorzystaniu komendy: <strong>cat</strong> (polecenie wyświetla zawartość pliku) z przekierowaniem (symbol <strong>>></strong>) do pliku <strong>authorized_keys</strong>. Wydanie polecenia przedstawionego na poniższym zrzucie (punkt 3) spowoduje dopisanie zawartości pliku <strong>id_rsa.pub </strong>(klucz publiczny) do pliku <strong>authorized_keys</strong>. Przy wydawaniu polecenia zwróć uwagę na symbol przekierowania gdyż użycie symbolu:<strong> ></strong> spowoduje nadpisanie (zastąpienie) już istniejących danych.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Fakt dokonania zapisu zawartości pliku klucza publicznego do pliku authorized_keys możemy sprawdzić porównując je ze sobą. Jak widać poniżej zawartość plików jest ze sobą zgodna - informacje zawarte w kluczu publicznym zostały prawidłowo przeniesione.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image28.png" alt="image28" width="700" height="229" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Host zdalny został skonfigurowany. Czas więc przejść do konfiguracji komputera, który połączenie będzie nawiązywał.</p>
<p> </p>
<p>Połączenie SSH z wykorzystaniem kluczy zostanie nawiązane z hosta działającego pod kontrolą systemu Linux z konta użytkownika root. Aby operacja zestawiania połączenia zakończyła się sukcesem musimy wykorzystać plik klucza prywatnego. Klucz prywatny musimy umieścić w katalogu <strong>.ssh</strong> użytkownika który będzie realizował połączenie. W pierwszej kolejności sprawdzamy fakt istnienia katalogu<strong> .ssh</strong> w folderze domowym użytkownika <strong>root</strong> - punkt 1. W razie jego braku z pomocą komendy: <strong>mkdir .ssh</strong> należy go utworzyć. Gdy katalog istnieje (bądź po jego utworzeniu) umieszczamy w nim plik klucza prywatnego: <strong>id_rsa</strong> (punkt 2 - zostało użyte polecenie <strong>cp</strong> odpowiedzialne za wykonanie procesu kopiowania) Po wykonaniu procesu kopiowania klucza prywatnego sprawdzamy poprawność wykonanych operacji - punkt 3. Klucz prywatny użytkownika <strong>luk</strong> został zapisany w katalogu <strong>.ssh</strong> użytkownika <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wykonaniu opisanych czynności czas sprawdzić czy uda nam się nawiązać połączenie. Połączenie inicjujemy za pomocą znanej nam już komendy: <strong>ssh <nazwa_użytkownika>@<adres_komputera_zdalnego</strong>> Wydanie polecenia generuje błąd o braku zabezpieczenia pliku klucza prywatnego (WARRNING: UNPROTECTED PRIVATE KEY FILE) i niemożności jego wykorzystania a co za tym idzie użycie pliku klucza prywatnego zostaje pominięte.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Powodem błędu są nałożone prawa na plik <strong>id_rsa</strong>. Aby móc wykorzystać plik klucza prywatnego musimy dokonać takiej modyfikacji praw by tylko użytkownik nawiązujący połączenie mógł z tego pliku skorzystać. Uprawnienia do odczytu i zapisu pliku <strong>id_rsa</strong> przez użytkownika <strong>root</strong> nadamy wydając polecenie: <strong>chmod 600 id_rsa</strong> - punkt 1</p>
<p> </p>
<p>Po zmianie uprawnień pliku wykonujemy kolejną próbę połączenia. Tym razem połączenie z wykorzystaniem pary kluczy udaje się nam nawiązać (oczywiście po podaniu hasła chroniącego plik klucza prywatnego) – punkt 2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image31.png" alt="image31" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Co zrobić jeśli połączenie SSH z wykorzystaniem kluczy chcemy zestawić przy wykorzystaniu systemu Windows? Aby móc uzyskać połączenie z hostem zdalnym należy ponownie użyć narzędzia PuTTY. Lecz zanim będziemy mogli użyć PuTTY musimy dokonać konwersji pliku klucza prywatnego tak aby móc go użyć z programem.</p>
<p> </p>
<p>Do przeprowadzenia konwersi użyjemy dedykowanego programu PuTTY Key Generator (do pobrania ze strony: <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html</a> nazwa pliku: <strong>puttygen</strong>, narzędzie jest standardowo dostępne w systemie gdy pobraliśmy instalator programu PuTTY a nie wersję portable).</p>
<p> </p>
<p>Po uruchomieniu programu z górnego menu wybieramy <strong>Converions</strong> a następnie <strong>Import key</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby móc dokończyć wczytywanie klucza należy wprowadzić hasło klucza prywatnego (oczywiście jeśli takowe hasło zostało zdefiniowane).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu wszystkich danych import klucza prywatnego zakończy się sukcesem. Po wczytaniu klucza by zapisać go w wymaganym formacie należy wybrać przycisk <strong>Save private key</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wybraniu opcji definiujemy nazwę oraz lokalizację zapisu pliku klucza.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image35.png" alt="image35" width="700" height="452" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Plik klucza prywatnego został zapisany w formacie PPK i jest gotowy do użycia z narzędziem PuTTY.</p>
<p> </p>
<p>Aby móc zestawić sesję zdalną z wykorzystaniem plików kluczy uruchamiamy aplikację PuTTY. Standardowo w sekcji <strong>Host Name</strong> określamy adres IP i port systemu zdalnego, dodatkowo musimy określić lokalizację pliku klucza prywatnego. Aby wykonać to zadanie przechodzimy do gałęzi <strong>SSH</strong> a następnie po jej rozwinięciu wybieramy <strong>Auth</strong>. Lokalizację klucza prywatnego określamy po wybraniu przycisku <strong>Browse</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image36.png" alt="image36" width="700" height="335" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu wszystkich danych nie pozostaje nam nic innego jak kliknąć na przycisk <strong>Open</strong>. Następuje próba nawiązania połączenia SSH, która jak widać poniżej po podaniu hasła do klucza prywatnego zostaje ustalona.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Udało nam się nawiązać połączenie SSH z wykorzystaniem klucza prywatnego i publicznego, połączenie nastąpiło z systemu Windows przy wykorzystaniu narzędzia PuTTY.</p>
<p> </p>
<p>Wraz z instalacją obsługi funkcji SSH uzyskujemy możliwość bezpiecznego kopiowania plików. Kopiowanie plików może zostać zrealizowane za pomocą protokołu <strong>SCP</strong> lecz także protokołu <strong>SFTP</strong>.</p>
<p> </p>
<p><strong>Protokół SCP</strong> (ang. Secure copy) do wykonania procesu przesyłu plików pomiędzy zdalnymi hostami korzysta z zabezpieczonego połączenia. Oprócz zapewnienie bezpieczeństwa transferu plików (choć w implementacji protokołu brak funkcji uwierzytelniania) przy wykorzystaniu SSH zapewnia on przekazanie wraz z przesyłanym plikiem jego atrybutów.</p>
<p> </p>
<p><strong>SFTP</strong> (ang. SSH File Transfer Protocol) – to protokół komunikacyjny typu klient-serwer, który umożliwia przesyłanie plików poprzez sieć TCP/IP. Wykorzystanie protokołu FTP do zapisu/odczytu plików gwarantuje nam poprawność przeprowadzanej operacji lecz bez zachowania bezpieczeństwa – nasze hasła i dane tak samo jak przy użyciu protokołu Telnet nie są szyfrowane, co potencjalnie naraża nas na ich kradzież. Znaczną poprawę bezpieczeństwa przynosi protokół SFTP, który nie wymaga obecności serwera FTP, a przesyłane dane są szyfrowane z wykorzystaniem klucza szyfrującego. SFTP nie powinien być mylony z protokołem FTPS, który jest rozszerzeniem protokołu FTP.</p>
<p> </p>
<p>Przetestujmy więc przesył plików z wykorzystaniem wyżej wspomnianych protokołów. Rozpoczniemy od protokołu SCP z wykorzystaniem hosta pracującego pod kontrolą systemu Linux.</p>
<p> </p>
<p>Aby przesłać plik na host zdalny musimy użyć polecenia, którego ogólna składnia przedstawia się następująco: <strong>scp <ścieżka_do_pliku_wysyłanego> <użytkownik>@<adres_hosta_zdalnego>:<lokalizacja_zapisu_przesyłanego_pliku> </strong>Poniżej na zrzucie przedstawiono przykład w którym przesłano plik: <strong>do_wyslania</strong>, plik został zapisany w katalogu domowym użytkownika <strong>luk</strong> (znak tyldy oznacza katalog domowy). Do wysłania użyto poświadczeń użytkownika <strong>luk</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image38.png" alt="image38" width="700" height="63" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przejściu na hosta zdalnego i wydaniu polecenia: <strong>ls</strong> widać iż plik został przesłany prawidłowo.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Podczas korzystania z narzędzia <strong>scp</strong> mamy szereg flag za pomocą, których możemy skonfigurować narzędzie. Poniżej kilka z nich:</p>
<p style="margin-left: 30px;"><strong>-1</strong> - wymuszenie użycia pierwszej wersji protokołu,</p>
<p style="margin-left: 30px;"><strong>-2</strong> - wymuszenie użycia drugiej wersji protokołu,</p>
<p style="margin-left: 30px;"><strong>-4</strong> - adresacja oparta o IPv4,</p>
<p style="margin-left: 30px;"><strong>-6</strong> - adresacja oparta o IPv6,</p>
<p style="margin-left: 30px;"><strong>-B</strong> - włączenie trybu wsadowego,</p>
<p style="margin-left: 30px;"><strong>-P <port></strong> - zdalny por na którym została uruchomiona usługa serwera SSH (przydatne w sytuacjach w których SSH działa na niestandardowym porcie),</p>
<p style="margin-left: 30px;"><strong> -i <ścieżka_do_pliku_klucza></strong> - opcja wykorzystywana podczas ustanawiania połączenia opartego o klucze,</p>
<p style="margin-left: 30px;"><strong>-l <limit></strong> - definicja limitu transferu danych (wartość ta wyrażana jest w Kb/s),</p>
<p style="margin-left: 30px;"><strong>-p</strong> - nakaz zachowania atrybutów pliku tj. czas modyfikacji, prawa dostępu,</p>
<p style="margin-left: 30px;"><strong>-r</strong> - włącza kopiowanie rekurencyjne (przydatne w sytuacji kiedy chcemy wykonać kopiowanie wszystkich plików zawartych w katalogu), </p>
<p style="margin-left: 30px;"><strong>-q</strong> - uruchomienie paska postępu,</p>
<p style="margin-left: 30px;"><strong>-v</strong> - włącza tryb debugowania (opcji tej użyj gdy występuje problem z przekazywaniem plików).</p>
<p> </p>
<p>Aby proces kopiowania przeprowadzić z lokalizacji zdalnej na host lokalny należy użyć polecenia: <strong>scp <użytkownik>@<adres_hosta_zdalnego>:<lokalizacja_pliku_kopiowanego> <lokalizacja_zapisu_pliku></strong></p>
<p> </p>
<p>W przypadku systemu Windows możemy skorzystać m.in z narzędzia wiersza poleceń <strong>scp</strong> zawartego po instalacji <strong>OpenSSH </strong>(opis narzędzi wykorzystujących GUI za chwilę). Aby zapisać plik na hoście zdalnym należy skorzystać z bliźniaczego polecenia <strong>scp </strong>dostępnego w systemie Linux. Składnia polecenia jest identyczna. Poniżej przedstawiono przykład zapisu pliku: <strong>do_wyslania_2.txt</strong> i tak jak to opisano w poprzednim kroku plik również zapiszemy w katalogu domowym użytkownika luk z wykorzystaniem tych samych poświadczeń.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image40.png" alt="image40" width="700" height="77" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wysłaniu pliku sprawdzamy fakt zapisu po stronie hosta zdalnego. Ponowne wydanie polecenia: <strong>ls</strong> przekonuje nas o prawidłowości wykonania całej operacji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image41.png" alt="image41" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Do zapisu plików z wykorzystaniem protokołu SCP możemy również użyć narzędzia <strong>pscp</strong> zawartego po instalacji programu PuTTY (aplikacje możemy pobrać oddzielnie). Aby przesłać plik należy skorzystać z komendy: <strong>pscp</strong> <strong><ścieżka_do_pliku_wysyłanego> <użytkownik>@<adres_hosta_zdalnego>:<lokalizacja_zapisu_przesyłanego_pliku></strong> Poniżej przykład zapisu pliku: <strong>do_wyslania_3.txt</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Sprawdzenie poprawności z wykorzystaniem polecenia: <strong>ls</strong> potwierdza fakt zapisu pliku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image43.png" alt="image43" width="700" height="74" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Pomimo możliwości skorzystania z narzędzi opartych o protokół SCP znacznie częściej wykorzystuje się te wspierające SFTP (m.in. dlatego iż za pomocą SFTP możemy skorzystać z transmisji opartej o uwierzytelnienie oparte o klucze). Znacznie łatwiej do przesyłu plików używać narzędzi graficznych ponieważ aplikacje te ułatwiają nam wykonanie całości zamierzonych zadań w szczególności gdy trzeba przeglądać złożone struktury katalogów. Jednym z takich narzędzi jest: <strong>mc</strong> (pierwowzorem narzędzia był stary, dobry Norton Commander - Ci trochę starsi na pewno wiedzą o co chodzi). Po pobraniu i zainstalowaniu programu (operację wykonujemy w systemie Linux) wybieramy z <strong>Menu</strong> opcję <strong>Lewy</strong> bądź <strong>Prawy</strong> a następnie <strong>Połączenie SFTP</strong>. Wybranie opcji umożliwi nam nawiązanie połączenia z hostem zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image44.png" alt="image44" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby móc nawiązać połączenie w oknie <strong>Połączenie SFTP z komputerem</strong> podajemy nazwę użytkownika oraz adres IP hosta zdalnego.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image45.png" alt="image45" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby dokończyć zestawianie połączenia niezbędne będzie również hasło użytkownika.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image46.png" alt="image46" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wprowadzeniu wszystkich niezbędnych danych połączenie z wykorzystaniem protokołu SFTP zostaje ustanowione. Po ustaleniu połączenia możemy przeprowadzać operacje związane z kopiowaniem plików (oczywiście proces kopiowania odbywa się w obu kierunkach).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image47.png" alt="image47" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Narzędzie <strong>mc</strong> umożliwia nam także zestawienie połączenia po powłoce. Wybranie żądania dostępne jest po wybraniu opcji: <strong>Połączenie po powłoce</strong> Uzyskanie połączenia przebiega w analogiczny sposób jak z wykorzystaniem protokołu SFTP. Po zestawieniu połączenia uzyskujemy możliwość wykonywania poleceń, których działanie będzie przeprowadzane na hoście zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image48.png" alt="image48" width="700" height="494" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jednym z narzędzi za pomocą, którego będziemy mogli przesłać pliki z wykorzystaniem protokołu SFTP jest aplikacja <strong>psftp</strong> (dostępna po instalacji PuTTY lub do pobrania jako oddzielny plik). Narzędzie wykorzystuje wiersz poleceń.</p>
<p> </p>
<p>Aby móc korzystać z narzędzia należy wywołać polecenie: <strong>psftp</strong> (punkt 1) a następnie za pomocą komendy <strong>open</strong> <strong><nazwa_użytkownika>@<adres_hosta></strong> (punkt 2) określić dane niezbędne do nawiązania połączenia z hostem zdalnym. Po podaniu hasła sesja zostaje ustalona. Wydanie polecenia wylistowania plików na hoście zdalnym kończy się sukcesem (punkt 3) - połączenie zostało zestawione prawidłowo.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Opis dostępnych opcji uzyskamy (jak to jest zazwyczaj przy użyciu narzędzi opartych o wiersz poleceń) po wydaniu polecenia <strong>help</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przydatne komendy:</p>
<p style="margin-left: 30px;"><strong>!</strong> - uruchomienie komendy, polecenie jest wykonywanie lokalnie,</p>
<p style="margin-left: 30px;"><strong>bye</strong> - kończenie sesji SFTP,</p>
<p style="margin-left: 30px;"><strong>cd</strong> - zmiana katalogu, polecenie wykonywane na hoście zdalnym,</p>
<p style="margin-left: 30px;"><strong>chmod</strong> - zmiana uprawnień pliku, polecenie wykonywane na hoście zdalnym,</p>
<p style="margin-left: 30px;"><strong>close</strong> - zamknięcie sesji lecz bez wyjścia z programu psftp,</p>
<p style="margin-left: 30px;"><strong>del</strong> - skasowanie pliku, polecenie wykonywane na hoście zdalnym,</p>
<p style="margin-left: 30px;"><strong>dir</strong> - listening katalogów i plików,</p>
<p style="margin-left: 30px;"><strong>get</strong> - pobranie pojedynczego pliku z serwera</p>
<p style="margin-left: 30px;"><strong>help</strong> - pomoc,</p>
<p style="margin-left: 30px;"><strong>lcd</strong> - ustalenie lokalnej lokalizacji zapisu ściąganych plików,</p>
<p style="margin-left: 30px;"><strong>lpwd</strong> - sprawdzenie lokalnej lokalizacji zapisu,</p>
<p style="margin-left: 30px;"><strong>ls</strong> - wylistowanie zawartości folderu,</p>
<p style="margin-left: 30px;"><strong>mget</strong> - pobranie wielu plików z hosta zdalnego,</p>
<p style="margin-left: 30px;"><strong>mkdir</strong> - utworzenie katalogu na hoście zdalnym,</p>
<p style="margin-left: 30px;"><strong>mput</strong> - wysłanie wielu plików na serwer,</p>
<p style="margin-left: 30px;"><strong>mv</strong> - przeniesienie bądź zmiana nazwy plików,</p>
<p style="margin-left: 30px;"><strong>open</strong> - nawiązanie sesji z hostem zdalnym,</p>
<p style="margin-left: 30px;"><strong>put</strong> - wysłanie pliku na serwer,</p>
<p style="margin-left: 30px;"><strong>pwd</strong> - sprawdzenie lokalizacji zapisu pliku,</p>
<p style="margin-left: 30px;"><strong>reget</strong> - kontynuacja ściągania pliku,</p>
<p style="margin-left: 30px;"><strong>ren</strong> - przeniesienie bądź zmiana nazwy plików,</p>
<p style="margin-left: 30px;"><strong>reput</strong> - kontynuacja przesyłania pliku,</p>
<p style="margin-left: 30px;"><strong>rm</strong> - usunięcie pliku ze zdalnej stacji roboczej,</p>
<p style="margin-left: 30px;"><strong>rmdir</strong> - usunięcie folderu ze zdalnej stacji roboczej.</p>
<p> </p>
<p>Prócz narzędzi działających w wierszu poleceń możemy skorzystać z tych opartych o interfejs graficzny. Jednym z takich programów działających pod kontrolą systemu Windows jest <strong>WinSCP</strong>. Program ten umożliwi nam wykonanie operacji bezpiecznego przesyłania plików z wykorzystaniem SSH (SCP/SFTP). Aplikacja ta jest również klientem FTP.</p>
<p> </p>
<p>Po pobraniu narzędzia z strony: <a href="https://winscp.net/eng/download.php">https://winscp.net/eng/download.php</a> przechodzimy do jego instalacji (aplikacja dostępna jest również w wersji portable). Po uruchomieniu pliku instalatora będziemy mogli dokonać wyboru przebiegu procesu instalacji - wybieramy: <strong>Niestandardowa instalacja</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wybranie opcji pozwoli nam na określenie komponentów (wraz z językiem interfejsu), które zostaną zainstalowane wraz z programem.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Na kolejnym ekranie możemy zdecydować o opcjach dodatkowych takich jak: aktualizacje automatyczne, lokalizacji skrótów czy dodanie katalogu instalacyjnego do zmiennej PATCH (przydatne podczas korzystania z wiersza poleceń gdyż by wywołać dane narzędzie nie musimy znajdować się w katalogu instalacyjnym programu).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnią decyzją jest określenie stylu interfejsu programu. Możemy wybrać pomiędzy stylem znanym z Eksploratora bądź z takiego narzędzia jak Total Commander.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po określeniu wszystkich opcji nastąpi instalacja programu.</p>
<p> </p>
<p>Po uruchomieniu narzędzia w oknie <strong>Zaloguj</strong> możemy określić protokół z którego będziemy korzystać.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image55.png" alt="image55" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Połączenie z hostem następuje po podaniu nazwy hosta, portu oraz danych uwierzytelniających.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image56.png" alt="image56" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wybranie opcji <strong>Logowanie</strong> spowoduje wykonania połączenia z hostem zdalnym. Podczas nawiązywania pierwszego połączenia będziemy musieli zaakceptować odcisk palca serwera.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image57.png" alt="image57" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wybranie <strong>Tak</strong> spowoduje ustanowienie połączenia. Jak widać poniżej sesja z hostem zdalnym została nawiązana.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image58.png" alt="image58" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po ustanowieniu połączenia oprócz kopiowania plików będziemy mieli możliwość skorzystania z konsoli. Konsola umożliwia nam wydawanie poleceń, które będą wykonywane na hoście zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image59.png" alt="image59" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkowo gdy mamy zainstalowane narzędzie PuTTY możemy je bezpośrednio wywołać z okna programu WinSCP. Po uruchomieniu PuTTY zostanie nawiązana osobna sesja z hostem zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image60.png" alt="image60" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>WinSCP umożliwia uzyskanie połączenia również z wykorzystaniem mechanizmu opartego o klucz prywatny i publiczny. Jako podsumowanie całego wpisu przyjmijmy o to taki scenariusz iż do połączenia asymetrycznego wykorzystamy parę kluczy wygenerowanych za pomocą narzędzia PuTTYgen. Logowanie na hoście zdalnym zostanie wykonane na koncie luk.</p>
<p> </p>
<p>Narzędzie PuTTYgen możemy uruchomić bezpośrednio z poziomu WinSCP (o ile zostało zainstalowane) wybierając po uruchomieniu programu przycisk <strong>Narzędzia</strong> a następnie <strong>Uruchom PuTTYgen</strong>. PuTTYgen możemy również pobrać bezpośrednio z sieci.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image61.png" alt="image61" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po uruchomieniu aplikacji PuTTYgen wybieramy opcję <strong>Generate</strong>. Domyślne parametry klucza możemy pozostawić bez zmian tj. RSA i długość klucza 2048.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image62.png" alt="image62" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby zakończyć generowanie kluczy poruszamy kursorem w obrębie okna uruchomionej aplikacji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po wygenerowaniu kluczy, klucz prywatny zabezpieczamy hasłem – punkt 1 a następnie za pomocą przycisku <strong>Save public key</strong> zapisujemy klucz publiczny – punkt 2. Ostatnią czynnością jaką musimy wykonać to zapis klucza prywatnego, klucz zapisujemy z wykorzystaniem opcji <strong>Save private key</strong> – punkt 3.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image64.png" alt="image64" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby móc zestawić połączenie asymetryczne należy wygenerowany klucz publiczny zapisać w pliku authorized_keys. Klucz prześlemy z wykorzystaniem protokołu SFTP – na tym etapie wykorzystujemy poświadczenia konta luk, należące do użytkownika, którego konto znajduje się na hoście zdalnym.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przed ustanowieniem połączenia warto w opcjach aplikacji WinSCP włączyć wyświetlanie ukrytych folderów (ponieważ plik authorized_keys jest zapisany w ukrytym folderze .ssh). Włączenie pokazywania ukrytych plików zrealizujemy po przejściu do <strong>Ustawień</strong> programu WinSCP (aby włączyć ustawienia należy w głównym oknie programu wybrać przycisk <strong>Narzędzia</strong> a następnie <strong>Preferencje</strong>) i wybraniu gałęzi <strong>Panele</strong>. Stosowna opcja znajduje się w sekcji <strong>Ogólne</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image66.png" alt="image66" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po ustanowieniu połączenia plik w którym zapisano wygenerowany klucz publiczny kopiujemy do katalogu .ssh (folder ten powinien znajdować się w katalogu domowym użytkownika luk). W scenariuszu tym kopiowany plik nosi nazwę: <strong>klucz_publiczny</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image67.png" alt="image67" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przekopiowaniu pliku: klucz_publiczny jego zawartość kopiujemy do pliku authorized_keys. Operację tę wykonamy za pomocą znanego już nam polecenia: <strong>cat</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image68.png" alt="image68" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po zapisie klucza publicznego czas by podjąć próbę nawiązania połączenia zdalnego. Testową próbę wykonamy za pomocą narzędzia PuTTY. Po skonfigurowaniu narzędzia jak widać poniżej próba kończy się niepowodzeniem, gdyż serwer odrzucił nasz klucz.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image69.png" alt="image69" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Winą odrzucenia klucza jest format jego zapisu. Aby móc wykorzystać klucz publiczny z narzędziem OpenSSH należy dane zawarte w nim odpowiednio sformatować. Musimy wykonać dwie czynności.</p>
<p> </p>
<p>Po otwarciu pliku zawierającego klucz publiczny (dokonujemy tego w dowolnym edytorze tekstu) kasujemy zaznaczone na poniższym zrzucie linie.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image70.png" alt="image70" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Druga czynność jaką musimy wykonać to umieszczenie całości wygenerowanych danych w jednym wierszu poprzez usunięcie znaków końca wiersza (całość klucza musi być zapisana w pojedynczym wierszu) a następnie umieszczeniu na początku wiersza zapisu: <strong>ssh-rsa</strong>. Tak zmodyfikowany plik należy zapisać a następnie umieścić jego zawartość w pliku authorized_keys.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image71.png" alt="image71" width="700" height="86" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Tu muszę przyznać się że zamierzony efekt (próba połączenia zakończona sukcesem) da się osiągnąć znacznie łatwiej gdyż już na etapie wygenerowania pary kluczy przez narzędzie PuTTYgen można było uzyskać odpowiedni format klucza publicznego. Wystarczyło przekopiować dane z sekcji Key do pliku tekstowego by w następnym kroku umieścić je w pliku authorized_keys.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image72.png" alt="image72" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Lecz specjalnie wybrałem ścieżkę na okrętkę by pokazać na jakie trudności możemy się natknąć przy próbie konfiguracji połączenia SSH z wykorzystaniem kluczy wygenerowanych za pomocą innych narzędzi.</p>
<p> </p>
<p>Po umieszczeniu danych klucza publicznego na serwerze zdalnym możemy przejść do zestawienia sesji SFTP z wykorzystaniem narzędzia WinSCP oraz klucza prywatnego.</p>
<p> </p>
<p>Po uruchomieniu WinSCP w pierwszym kroku określamy adres hosta zdalnego (pola Nazwa użytkownika oraz Hasło specjalnie zostały puste – podczas ustanawiania połączenia program poprosi o te dane) – punkt 1. W kroku drugim określamy lokalizację klucza prywatnego (ścieżkę do klucza prywatnego określimy po wybraniu przycisku <strong>Zaawansowane</strong> a następnie w nowo otwartym oknie w sekcji <strong>Parametry identyfikacyjne</strong> dostępnej w gałęzi <strong>SSH</strong> --> <strong>Uwierzytelnienie</strong>) – punkt 2.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image73.png" alt="image73" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po konfiguracji narzędzia WinSCP możemy przeprowadzić próbę połączenia. Jak widać poniżej opuszczone parametry musimy podać w trakcie nawiązywania połączenia. Połączenie odbywa się z wykorzystaniem klucza prywatnego. Aby połączenie mogło zostać sfinalizowane podajemy hasło chroniące klucz prywatny.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image74.png" alt="image74" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wszystko przebiegło po naszej myśli - udało nam się ustanowić sesję SFTP z wykorzystaniem uwierzytelnienia opartego o szyfrowanie asymetryczne.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/ssh/image75.png" alt="image75" width="700" height="450" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Konfiguracja systemu Linux odnośnie nawiązywania połączeń zdalnych nie jest trudna a mam nadzieję, że poradnik ten wątpliwości w tej kwestii rozwiewa.</p>
<p> </p>
<hr />
<p>BIBLIOGRAFIA:</p>
<p> </p>
<p><a href="https://support.suso.com/supki/SSH_Tutorial_for_Linux">SSH Tutorial for Linux - Support Documentation</a></p>
<p><a href="http://askubuntu.com/questions/668725/how-can-the-telnet-service-on-ubuntu-server-14-04-lts-be-enabled">How can the Telnet service on Ubuntu Server 14.04 LTS be enabled? - Ask Ubuntu</a></p>
<p><a href="http://ubuntuguide.net/install-and-enable-telnet-server-in-ubuntu-linux">Install and Enable Telnet server in Ubuntu Linux - Ubuntu Sharing</a></p>
<p><a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-tcpwrappers-xinetd-config.html">xinetd Configuration Files</a> <a href="http://www.howtogeek.com/168119/fixing-warning-unprotected-private-key-file-on-linux/">Fixing “WARNING: UNPROTECTED PRIVATE KEY FILE!” on Linux</a></p>
<p><a href="https://www.howtoforge.com/ssh_key_based_logins_putty_p4">Key-Based SSH Logins With PuTTY</a></p>
<p><a href="http://staff.uz.zgora.pl/agramack/files/Linux/ANSI_C_Linux_SSH.pdf">Microsoft Word - ANSI_C_Linux_SSH - ANSI_C_Linux_SSH.pdf</a></p>
<p><a href="http://serverfault.com/questions/582048/scp-copy-windows-local-file-to-linux-remote-folder">SCP copy windows local file to linux remote folder - Server Fault</a></p>
<p><a href="http://www.tecmint.com/scp-commands-examples/">10 SCP Commands to Transfer Files/Folders in Linux</a></p></div>Dogadać się z Linuksem. Zarządzanie kontem użytkownika.2016-02-04T20:18:37+00:002016-02-04T20:18:37+00:00http://slow7.pl/linux/item/113-dogadac-sie-z-linuksem-zarzadzanie-kontem-uzytkownikapikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/85b62d4a27ea43297eb1ab349b6e06c6_S.jpg" alt="linux" /></div><div class="K2FeedIntroText"><p>To, że z danego komputera może korzystać wiele osób nie jest żadną tajemnicą i stwierdzeniem tym nikogo nie zaskoczę. Oznacza to nie mniej, ni więcej, że dane urządzenie może służyć wielu osobom. Lecz by takie rozwiązanie zdało egzamin należało opracować mechanizm ochrony zapisanych plików różnych użytkowników czy uruchomionych procesów tak by dany użytkownik nie skasował danych nie należących do niego czy nie przerwał zadań uruchomionych przez innego użytkownika. Tak więc w tym wpisie postaram się omówić zagadnienia związane z użytkownikiem tj. kontem użytkownika, hasłami czy przynależnością do danej grupy.</p>
</div><div class="K2FeedFullText">
<p>Na początek zacznijmy od omówienia informacji zawartych w plikach: /etc/shadow oraz /etc/passwd gdyż w tych dwóch plikach są zapisane informacje dotyczące stworzonych kont użytkowników a opisywane narzędzia do tych danych często będą sięgały.</p>
<p>Plik /etc/passwd jest plikiem tekstowym w którym przechowywana jest informacja na temat zdefiniowanej nazwy użytkownika wraz z przydzielonym identyfikatorem. Zawartość tego pliku przedstawia się następująco:</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image1.png" alt="image1" width="700" height="405" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Uważny Czytelnik na pewno zauważy, że każdy wiersz w pliku /etc/passwd reprezentuje jednego użytkownika a ten bardziej dociekliwy, że w wierszu tym znajduje się siedem pól oddzielonych od siebie dwukropkami (:). Każde z pól przechowuje inną informację o użytkowniku. Definicja pól obejmuje:</p>
<p> </p>
<p style="padding-left: 30px;">1 - <strong>nazwę użytkownika</strong>,</p>
<p style="padding-left: 30px;">2 - <strong>hasło użytkownika</strong> - hasło w systemie Linux nie jest zapisywane w sposób jawny a jego lokalizacja to plik /etc/shadow Znak x widoczny w drugim polu pliku /etc/passwd oznacza właśnie, że hasła należy szukać w wspomnianym pliku /etc/shadow Przeglądając plik /etc/passwd możemy natknąć się również na znak * oznaczający niemożność zalogowania się do systemu zaś puste pole (dwa dwukropki obok siebie) oznacza brak zdefiniowanego hasła (logowanie bez hasła).</p>
<p style="padding-left: 30px;">3 - <strong>identyfikator użytkownika</strong> (ang. user ID - czyli UID) - numer opisujący danego użytkownika. Dozwolone jest by numer UID w systemie był powielony lecz może prowadzić to do nieoczekiwanych błędów dlatego przyjmuje się niepowtarzalność identyfikatora UID.</p>
<p style="padding-left: 30px;">4 - <strong>identyfikator grupy podstawowej</strong> (ang. group ID - czyli GID) - identyfikator określa przynależność do grupy o danym identyfikatorze. Powiązanie nazwy grupy z identyfikatorem znajduje się w pliku /etc/group,</p>
<p style="padding-left: 30px;">5 - <strong>pole GECOS</strong> - prawdziwa nazwa użytkownika. W polu tym mogą być również zapisane inne informacje np. numer telefonu. Informacje te od siebie oddzielone są przecinkiem,</p>
<p style="padding-left: 30px;">6 -<strong> lokalizacja katalogu domowego użytkownika</strong>,</p>
<p style="padding-left: 30px;">7 - <strong>powłoka użytkownika</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image2.png" alt="image2" width="700" height="175" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Analizując zrzut na którym przedstawiono przykładowy plik <strong>/etc/passwd </strong>można wyróżnić szereg kont nie będących przypisanych do konkretnych osób, konta te należą do tzw. <strong>użytkowników specjalnych</strong>. Konta te przynależne są usługom a także użytkownikom, którzy wymagają specjalnych uprawnień. Np. <strong>superużytkownik</strong> (root) identyfikator UID oraz GID zawsze ma zdefiniowany na wartość 0 zaś użytkownik <strong>nobody</strong> jest kontem, któremu odebrano prawo do zapisu. W literaturze można spotkać się z określeniem nazywającym takie konta jako <strong>pseudoużytkownicy</strong>. Z reguły za pomocą takich kont nie można zalogować się do systemu lecz sam system konta te może używać do uruchamiania procesów.</p>
<p> </p>
<p>Plik<strong> /etc/shadow</strong> standardowo przechowuje informację na temat uwierzytelniania użytkowników tj. dane na temat hasła i jego ważności. Przykładowy plik <strong>/etc/shadow </strong>pokazano na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image3.png" alt="image3" width="700" height="288" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Poszczególne pola pliku i ich opis:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">1 - <strong>nazwa użytkownika</strong> - nazwa ta jest tożsama z nazwą w pliku <strong>/etc/passwd</strong> Nazwa łączy wpis hasła z polem użytkownika.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">2 - <strong>zaszyfrowane hasło</strong> - skrót funkcji MD5,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">3 - <strong>data ostatniej zmiany hasła</strong> - czas ostatniej modyfikacji hasła, pole to jest wypełniane przez polecenie <strong>passwd</strong>.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">4 - <strong>minimalna liczba dni między zmianami hasła</strong> - określa liczbę dni, które muszą upłynąć między zmianami hasła</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">5 - <strong>maksymalna liczba dni między zmianami hasła</strong> - określa maksymalną liczbę dozwolonych dni między zmianami hasła. Rzeczywista maksymalna liczba dni jest sumą wartości tego pola oraz wartości z pola siódmego (tzw. okres łaski).</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">6 - <strong>liczba dni określającą komunikat o wygaśnięciu hasła</strong>,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">7 - <strong>liczba dni definiowana od czasu wygaśnięcia hasła</strong>, <strong>po upływie których konto zostanie wyłączone,</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">8 - <strong>data ważności konta</strong> - dzień (liczony od 1 stycznia 1970 roku) wygaśnięcia konta użytkownika. Po przekroczeniu tej daty użytkownik traci możliwość logowania.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">9 - <strong>pole zarezerwowane</strong> - do wykorzystania w przyszłości</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image4.png" alt="image4" width="700" height="167" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby założyć konto nowemu użytkownikowi możemy wykorzystać polecenie: <strong>useradd</strong> Ogólna składnia polecenia wygląda następująco: <strong>useradd <opcje> nazwa_użytkownika</strong> Poniżej na listeningu przykład utworzenia konta dla użytkownika: <strong>jankow</strong></p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">1 - za pomocą polecenia: <strong>useradd jankow</strong> zostaje utworzone nowe konto,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">2 - zmiana użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">3 - sprawdzenie za pomocą komendy: <strong>whoami</strong> nazwy aktualnego użytkownika.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po utworzeniu nowego konta warto zadbać o przypisanie do niego hasła. Administrator systemu zmianę hasła pozostawił użytkownikowi <strong>jankow</strong>. Tak więc użytkownik za pomocą polecenia: <strong>passwd</strong> próbuje takową operację wykonać. Niestety po wydaniu polecenia napotykamy na nieoczekiwany problem a mianowicie system prosi nas o podanie aktualnego hasła. O jakie hasło chodzi? Przecież jedynie zostało utworzone tylko konto, hasło zaś nie było definiowane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image6.png" alt="image6" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Utworzenie użytkownika w ten sposób powoduje wyłączenie konta poprzez wstawienie znaku <strong>x</strong> w polu przeznaczonym na hasło (plik <strong>/etc/passwd</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image7.png" alt="image7" width="700" height="482" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak już wiesz znak <strong>x</strong> celem identyfikacji hasła odsyła do pliku <strong>/etc/shadow</strong> lecz pole hasła zawiera znak<strong> !</strong> którego obecność skutecznie blokuje zmianę hasła.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby użytkownik <strong>jankow</strong> mógł samemu zdefiniować hasło należy w pliku <strong>/etc/passwd </strong>w linii odpowiadającej danemu użytkownikowi w polu hasła wykasować znak <strong>x</strong>. Oczywiście zmianę tą musi wykonać użytkownik <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image9.png" alt="image9" width="700" height="482" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przeprowadzonej modyfikacji i po ponownym wydaniu polecenia: <strong>passwd</strong> nie będziemy już proszeni o podanie aktualnego hasła lecz będziemy mogli od razu przypisać nowe hasło.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Znacznie lepszym rozwiązaniem jest utworzenie konta i przypisanie nowo utworzonemu kontu hasła. Poniżej na przykładzie utworzenie konta dla użytkownika <strong>tadnow</strong> (punkt 1) oraz przypisanie hasła (punkt 2). Wszystkie operację wykonał użytkownik <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image11.png" alt="image11" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Oczywiście polecenie <strong>useradd</strong> pozwala na skonfigurowanie szerszej gamy opcji związanych z tworzonym kontem. W zależności od potrzeb możemy zdefiniować np. czas po którym konto zostanie wyłączone, do jakiej grupy podstawowej użytkownik ma należeć, czy określić lokalizację katalogu domowego.</p>
<p> </p>
<p>Poniżej przedstawiono przykład utworzenia konta użytkownika <strong>sonkie</strong> przy czym dodatkowo za pomocą parametru <strong>-e</strong> zdefiniowano ważność konta tj. datę do kiedy konto jest aktywne.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image12.png" alt="image12" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Uruchomienie polecenia <strong>useradd</strong> z opcją <strong>-D</strong>, spowoduje wyświetlenie informacji o domyślnych ustawieniach. Ustawienia te są definiowane w pliku: <strong>/etc/default/useradd</strong> Modyfikacja i definicja tych parametrów pozwala nam na tworzenie kont z góry określonymi opcjami.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<ul>
<li style="padding-left: 30px;"><strong>GROUP</strong> - nazwa lub ID grupy domyślnej,</li>
<li style="padding-left: 30px;"><strong>HOME</strong> - katalog określający folder przechowywania katalogów domowych użytkowników,</li>
<li style="padding-left: 30px;"><strong>INACTIVE</strong> – parametr określa liczbę dni od daty wygaśnięcia hasła po której następuje blokada konta. Wartość: <strong>-1 </strong>- opcja jest wyłączona, wartość: <strong>0</strong> – wygaśnięcie ważności hasła powoduje automatyczną blokadę konta, wartość: dodatnia (liczba) – ilość dni.</li>
<li style="padding-left: 30px;"><strong>EXPIRE</strong> - data wyłączenia konta,</li>
<li style="padding-left: 30px;"><strong>SHELL</strong> - nazwa powłoki systemowej użytkownika,</li>
<li style="padding-left: 30px;"><strong>SKEL</strong> – lokalizacja katalogu z którego zostaną skopiowane pliki i foldery do katalogu domowego nowo utworzonego użytkownika.</li>
</ul>
<p> </p>
<p>Aby dokonać zmiany opcji domyślnych wykorzystujemy polecenie, którego ogólna składnia przedstawia się następująco: <strong>useradd -D <opcje></strong> Tak więc np. chcąc ustalić datę wygaśnięcia konta na 2016-01-25 (patrz rysunek powyżej) należy użyć polecenia z opcją: <strong>-e</strong> po której określamy datę w formacie YYYY-MM-DD – <strong>useradd -D -e 2016-01-25</strong></p>
<p> </p>
<p>Opcje domyślne narzędzia <strong>useradd</strong> możemy również określić poprzez bezpośrednie edytowanie pliku - <strong>/etc/default/useradd</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image14.png" alt="image14" width="700" height="447" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Inne przydatne opcje związane z poleceniem: <strong>useradd</strong> przedstawiono poniżej:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s <powłoka></strong> - określenie powłoki użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-d <katalog_domowy></strong> - określenie lokalizacji katalogu domowego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-u <wartość></strong> - określenie identyfikatora UID,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-g <nazwa_grupy></strong> - definicja grupy podstawowej użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-G <nazwa_grupy>,<nazwa_grupy></strong> - definicja grup, których członkiem stanie się użytkownik,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-m</strong> - zdefiniowanie ustawień konta poprzez skopiowanie plików z szablonu (katalog: /etc/skel>, gdy pliki konfiguracyjne znajdują się w innym katalogu należy użyć przełącznik <strong>-k</strong>.</p>
<p> </p>
<p>Innym narzędziem, którym możemy posłużyć się aby utworzyć konto użytkownika jest <strong>adduser</strong>. Wykonanie operacji utworzenia konta sprowadza się do wydania polecenia: <strong>adduser <nazwa_konta></strong> i po udzieleniu odpowiedzi na postawione pytania konto użytkownika zostaje założone. Poniżej na rysunku przykład wykorzystania narzędzia <strong>adduser</strong> do utworzenia konta użytkownika <strong>tomwal</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image15.png" alt="image15" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby danemu użytkownikowi zdefiniować hasło to jak już wiesz Czytelniku należy posłużyć się poleceniem <strong>passwd</strong>. Ale narzędzie oprócz zmiany/ustalenia hasła pozwala nam na wykonie jeszcze kilku czynności. Ogólna składnia polecenia jest następująca: <strong>passwd <opcje> <konto_użytkownika></strong> Bez zdefiniowania parametrów, poprzez wydanie samej komendy: <strong>passwd</strong> następuje zmiana hasła użytkownika w kontekście, którego polecenie zostało wydane.</p>
<p> </p>
<p>Aby poznać zdefiniowane opcje powiązane z naszym hasłem możemy posłużyć się poleceniem <strong>passwd</strong> z ustawioną flagą <strong>-S </strong>– <strong>passwd -S</strong> Po wydaniu polecenia uzyskamy informację o:</p>
<p> </p>
<ul>
<li style="padding-left: 30px;">login,</li>
<li style="padding-left: 30px;">status hasła –<strong> L</strong> - hasło jest zablokowane, <strong>NP</strong> - brak ustalonego hasła, <strong>P </strong>– hasło jest ustawione,</li>
<li style="padding-left: 30px;">data ostatniej zmiany hasła,</li>
<li style="padding-left: 30px;">minimalny czas życia hasła,</li>
<li style="padding-left: 30px;">maksymalny czas życia hasła</li>
<li style="padding-left: 30px;">czas ostrzeżenia o zmianie hasła, oraz nieaktywny okres czasu hasła. Czas ten wyrażony jest w dniach.</li>
<li style="padding-left: 30px;">liczba dni po której następuje blokada konta.</li>
</ul>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image16.png" alt="image16" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zastosowanie flagi <strong>-e</strong> wraz w połączeniu z <strong>nazwą konta</strong> spowoduje wymuszenie zmiany hasła.</p>
<p> </p>
<p>Poniżej przedstawiono przykład wymuszenia zmiany hasła na koncie <strong>beatry</strong> (punkt 1). Po zmianie konta jesteśmy poinformowani o potrzebie natychmiastowej zmiany hasła (punkt 2). Użytkownik za pomocą narzędzia <strong>passwd</strong> dokonuje próby jego zmiany (punkt 3). W pierwszym podejściu hasła nie udaje się zmienić z powodu zdefiniowania zbyt prostego hasła – hasło: qwerty (punkt 4). Drugie podejście również kończy się niepowodzeniem - powód - zdefiniowane hasło jest identyczne z poprzednim (punkt 5). Dopiero trzecia próba kończy się sukcesem (do trzech razy sztuka - punkt 6).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image17.png" alt="image17" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ustalenie minimalnego czasu życia hasła dokonujemy za pomocą przełącznika <strong>-n</strong> zaś wartość maksymalną możemy określić poprzez zastosowanie flagi <strong>-x</strong>. Użycie któregokolwiek z przełączników wymusza na nas określenie wartości dni konfigurowanej opcji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image18.png" alt="image18" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Czas ostrzeżenia o potrzebie dokonania zmiany hasła określimy z wykorzystaniem przełącznika <strong>-w</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image19.png" alt="image19" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zaś hasło skasujemy z wykorzystaniem flagi <strong>-d</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image20.png" alt="image20" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Poleceniem, które pozwoli nam na zmodyfikowanie parametrów utworzonych kont jest <strong>usermod</strong>.</p>
<p> </p>
<p>Poniżej przykład wykorzystania komendy <strong>usermod</strong> do odblokowania konta, które wygasło.</p>
<p> </p>
<p>Po zmianie konta użytkownika na <strong>beatry</strong> uzyskujemy komunikat o wygaśnięciu konta (punkt 1). Aby konto znów stało się aktywne należy ustalić nową datę wygaśnięcia konta. Nowa data zostaje ustalona z wykorzystaniem komendy <strong>usermod</strong> oraz flagi <strong>-e</strong> (punkt 2 - data wygaśnięcie konta zostaje ustalona na 3 marca 2016). Po ponownej zmianie konta na <strong>beatry</strong> (punkt 3) jesteśmy poinformowani o zbliżającym się terminie wygaśnięcia hasła tak więc za pomocą już omówionego polecenia: <strong>passwd</strong> ustalamy nowe hasło.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image21.png" alt="image21" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Polecenie: <strong>usermod</strong> posiada przełącznik, który możemy wykorzystać do zablokowania dostępu do konta (brak możliwości zalogowania). Aby dane konto stało się nie aktywne wykorzystujemy do tego flagę: <strong>-L</strong> (po uaktywnieniu próba zalogowania się kończy się komunikatem o nieprawidłowym haśle).Poniżej na przykładzie wyłączenie konta <strong>alebin</strong>. Aby konto, znów działało należy wykorzystać opcję: <strong>-U</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image22.png" alt="image22" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Kasowanie konta odbywa się za pomocą polecenia: <strong>userdel</strong>. Na zrzucie poniżej przykład usunięcia konta użytkownika <strong>tomwal</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image23.png" alt="image23" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wydanie polecenia kasowania konta usunie konto z systemu lecz zostaną pozostawione pliki użytkownika w jego katalogu domowym. Aby usunąć również pliki do polecenia <strong>userdel</strong> należy dodać parametr <strong>-r</strong>.</p>
<p> </p>
<p>Z zasady użytkownicy swoje pliki powinni trzymać w swoim katalogu domowym lecz często zdarza się, że pliki są zapisywane w różnych lokalizacjach. Aby system po użytkowniku dokładnie posprzątać warto wyszukać i usunąć wszystkie pliki przynależne kasowanemu użytkownikowi. Aby odszukać takowe pliki należy skorzystać z polecenia: <strong>find / -user <nazwa_użytkownika></strong></p>
<p> </p>
<p>Skryptem, który pozwoli nam na sprawdzenie integralność plików <strong>/etc/passwd</strong> oraz <strong>/etc/shadow</strong> jest: <strong>pwck</strong> Wydanie polecenia sprawi, że pliki zostaną sprawdzone pod kątem składni oraz zawartych odwołań. Aby wyświetlić same informacje (tryb tylko do odczytu) należy posłużyć się flagą <strong>-r </strong>Wydanie samego polecenia <strong>pwck</strong> w razie wykrycie problemu wyświetli komunikat z zapytaniem o potwierdzenie wykonania danej operacji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image24.png" alt="image24" width="700" height="402" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Polecenie: <strong>logname</strong> odpowiedzialne jest za wyświetlenie nazwy logowania danego użytkownika.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Polecenie, które możemy wykorzystać aby poznać poświadczenia aktualnie aktywnego użytkownika jest komenda: <strong>whoami</strong></p>
<p> </p>
<p>Uzyskane wyniki mogą być różne od tych uzyskanych dzięki poleceniu: <strong>logname</strong> gdyż za pomocą komendy: <strong>su</strong> można zmienić kontekst wywoływanych poleceń (czytaj - wykonać polecenie z poświadczeniami innego użytkownika). Poniżej zaprezentowano różnicę pomiędzy tymi poleceniami.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image26.png" alt="image26" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ktoś mógłby zapytać - Do czego użyć obie komendy? Przecież dane użytkownika widać w prompt-cie linii poleceń. Tak, zgadza się domyślnie skonfigurowany prompt zawiera informację o użytkowniku - ale przecież nie zawsze tak musi być.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkowo oba polecenia przydatne są podczas tworzenia skryptów.</p>
<p> </p>
<p>Polecenie: <strong>who</strong> pozwala nam na poznanie użytkowników, którzy są aktualnie zalogowani.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Standardowo polecenie dane o użytkownikach pobiera z pliku <strong>/var/run/utmp</strong> W definicji wywołania polecenia można zmienić domyślną lokalizację pliku z danymi. I tak określając: <strong>/var/log/wtmp</strong> otrzymamy informację o poprzednich logowaniach, zaś gdy zdefiniujemy <strong>/var/log/btmp</strong> powinnyśmy uzyskać dane o nieudanych logowaniach (pod warunkiem, że system jest skonfigurowany do gromadzenia takich informacji). Poniżej przykład obrazujący informację o poprzednich logowaniach.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Z poleceniem: <strong>who</strong> możemy użyć dodatkowe przełączniki:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-a</strong> - wszystkie informacje,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-H</strong> - wypisanie nagłówka,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-q</strong> - wyświetlenie jedynie nazw i liczby użytkowników,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>--lookup</strong> - rozwiązanie nazwy komputera (DNS) z którego nastąpiło logowanie, flaga dotyczy użytkowników zalogowanych zdalnie,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-T</strong> - sprawdza czy jest możliwość wysłania komunikatu (np. gdy użytkownik korzysta z terminalu). Znak: <strong>+</strong> oznacza możliwość komunikacji, znak: <strong>-</strong> brak możliwości wysłania komunikatu natomiast znak: <strong>?</strong> oznacza brak możliwości określenia.</p>
<p> </p>
<p style="margin-bottom: 0.0001pt;">Poniżej przykład użycia flagi <strong>-T </strong>Po analizie uzyskanych wyników można stwierdzić, że istnieje możliwość wysłania komunikatu do użytkownika: <strong>alebin</strong> Tak więc spróbujmy tą informację wykorzystać. Lecz jeszcze jedna mała uwaga aby komunikacja zakończyła się sukcesem należy wydać polecenie: <strong>mesg y</strong> Wydanie polecenia zezwala na prowadzenie takiego typu komunikacji (polecenie: <strong>mesg n</strong> - zabrania, status poznamy po wydaniu komendy: <strong>mesg</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby móc wysłać informacje do użytkownika <strong>alebin</strong> należy skorzystać z polecenia: <strong>write</strong> Poniżej przykład użycia takiej formy komunikacji (po stronie użytkownika <strong>luk</strong>, kończenie komunikatu następuje po wciśnięciu kombinacji klawiszy ^D)</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image31.png" alt="image31" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I ta sama wiadomość od strony użytkownika <strong>alebin</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby za jednym zamachem wysłać komunikat do wszystkich zalogowanych użytkowników należy skorzystać z polecenia: <strong>wall</strong> Po wydaniu polecenia, definiujemy komunikat, wysłanie informacji następuje po wybraniu ^D.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Komunikat został wysłany do wszystkich użytkowników mogących go otrzymać (czytaj korzystających z terminala) W przykładzie informacje otrzymuje dwóch użytkowników: <strong>alebin</strong> oraz <strong>tomwal</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby uzyskać listę aktualnie zalogowanych użytkowników możemy również posłużyć się poleceniem: <strong>users</strong> Po wydaniu komendy zostanie wypisana lista zawierająca aktywne konta.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image35.png" alt="image35" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p><strong>Finger</strong> jest jeszcze jednym poleceniem, po wydaniu, którego uzyskamy listę użytkowników korzystających z systemu. Wydanie samego polecenia bez żadnych opcji spowoduje uzyskanie listy zalogowanych użytkowników. Natomiast, gdy do polecenia <strong>finger</strong> zostanie dodana nazwa użytkownika dane zostaną poszerzone o dodatkowe informacje.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Z poleceniem <strong>finger</strong> dostępne są następujące opcje:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> - wypisanie danych w formie skróconej,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-l</strong> - wypisanie danych w formie rozszerzonej.</p>
<p> </p>
<p>Poleceniem, które jest powiązane z komendą <strong>finger</strong> jest <strong>chfn</strong>. Komenda ta pozwala nam na zmianę niektórych informacji, które są związane z użytkownikiem - prawdziwe imię i nazwisko, numery telefonów czy miejsce pracy. Zmianę informacji dokonujemy za pomocą polecenia: <strong>chfn <nazwa_użytkownika></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnim poleceniem, które chciałbym przedstawić a dotyczącym poznania użytkowników aktualnie zalogowanych jest komenda: <strong>w</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image38.png" alt="image38" width="700" height="190" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Z wykorzystaniem polecenia: <strong>who</strong> mogliśmy poznać historię poprzednich logowań. Informację taką również uzyskamy dzięki poleceniu: <strong>last</strong> Dane są ułożone w kolejności chronologicznej od logowania bieżącego po logowania starsze.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Komenda <strong>last</strong> ma trochę więcej możliwości niż zaprezentowane wcześniej polecenie <strong>who</strong>. Dostępne są następujące przełączniki:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-f <nazwa_pliku></strong> - określenie innego źródła informacji niż standardowy plik <strong>var/run/utemp</strong>,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-i</strong> - nazwy komputerów z których nastąpiło logowanie zostają zastąpione adresami IP,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-R</strong> - bez nazw komputerów,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-n <wartość></strong> - wypisanie danych o logowaniach obejmujących ostatnie n wierszy (można użyć składni np. <strong>last -3</strong>),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong><użytkownik></strong> - wyświetlenie historii logowań dotyczących konkretnego użytkownika,</p>
<p> </p>
<p>Aby poznać historię logowań dotyczących danego okresu można wykorzystać przełącznik <strong>-t</strong> Po zdefiniowaniu flagi określamy interesujący nas okres. Data jest definiowana za pomocą formatu: YYYYMMDDHHMMSS (w przypadku pominięcia, którejś z informacji uzupełniamy zerami).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Natomiast by poznać datę ostatniego restartu systemu należy skorzystać z przełącznika <strong>reboot</strong> - wydanie polecenia ukazuje datę i godzinę ostatniego restartu systemu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image41.png" alt="image41" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeszcze kolejnym programem pozwalającym przejrzeć historię logowań ale w kontekście tych nieudanych jest: <strong>faillog</strong> Aby wyszukać błędne logowania konkretnego użytkownika należy w składni polecenia użyć przełącznik <strong>-u</strong> po którym definiujemy nazwę konta.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby odszukać nieudane logowanie w konkretnym okresie należy posłużyć się przełącznikiem <strong>-t</strong> Użycie flagi <strong>-a </strong>spowoduje wyświetlenie wszystkich informacji.</p>
<p> </p>
<p>Jak już jesteśmy przy logowaniu to krótka porada pozwalająca nam podnieść poziom bezpieczeństwa naszego systemu na trochę wyższy pułap. Często przydaje się włączenie blokowania konta po wprowadzeniu określonej liczby błędnych haseł. Porada ta zabezpieczy nas przed sytuacją w której dany użytkownik poprzez zgadywanie próbuje uzyskać dostęp do konta.</p>
<p> </p>
<p>Aby włączyć blokowanie konta po n razy błędnie wprowadzonym haśle należy edytować plik: <strong>/etc/pam.d/common-auth</strong> (w innych systemach Linux plik może przyjmować nazwę: <strong>/etc/pam.d/system-auth</strong>).</p>
<p> </p>
<p>Po otwarciu pliku należy dodać linijkę:</p>
<p><strong>auth required pam_tally.so onerr=fail deny=<ilość_dozwolonych_prób> unlock_time=<czas_odblokowania></strong></p>
<p> </p>
<p>gdzie:</p>
<p> </p>
<ul>
<li style="padding-left: 30px;"><strong>deny=<ilość_dozwolonych_prób> </strong>- ilość prób po których następuje blokada,</li>
<li style="padding-left: 30px;"><strong>unlock_time=<czas_odblokowania> </strong>- czas automatycznego odblokowania konta, po tym czasie możliwe jest podjęcie zalogowania.</li>
</ul>
<p> </p>
<p style="margin-bottom: 0.0001pt;">Informacja o podjętych próbach logowania jest przetrzymywana w pliku: <strong>/var/log/faillog</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image43.png" alt="image43" width="700" height="477" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po definicji wszystkich ustawień możemy przeprowadzić próbę logowania. W naszym teście użytkownik <strong>jankow</strong> trzy razy wpisuje błędne hasło.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image44.png" alt="image44" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak widać powyżej konto użytkownika: <strong>jankow</strong> zostało zablokowane. Aby ponowić próbę logowania musimy odczekać zdefiniowaną wartość czasu. Możliwe jest przez administratora ręczne wymuszenie zresetowania progu logowań.</p>
<p> </p>
<p>Aby sprawdzić ilość błędnych prób logowań wydajemy polecenie: <strong>pam_tally --user <nazwa_użytkownika></strong> aby zaś zresetować próg należy wprowadzić komendę: <strong>pam_tally --user <nazwa_użytkownika> --reset</strong></p>
<p> </p>
<p>Innym poleceniem, które pozwala nam na poznanie trochę więcej informacji o użytkowniku jest komenda: <strong>id </strong>Przyglądnijmy się więc wynikom uzyskanym po wydaniu polecenia. Wydanie komendy pozwala nam poznać numer UID (ang. user ID) oraz GID (ang. primary group ID). Numery te nadawane są kontu użytkownika w trakcie procesu tworzenia. Na zrzucie poniżej identyfikatory konta <strong>root</strong> oraz <strong>luk</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image45.png" alt="image45" width="700" height="125" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przeglądając wyniki stwierdzamy, że użytkownik <strong>root</strong> ma przypisaną wartość <strong>0</strong> dla identyfikatora UID oraz GID natomiast użytkownik <strong>luk</strong> wartość <strong>1000</strong> (w systemie Ubuntu numerowanie kont użytkowników rozpoczyna się od 1000 w innych dystrybucjach wartość ta może być inna np. w Fedora numeracja rozpoczyna się od 500). Dodanie kolejnego użytkownika z reguły prowadzi do zwiększenia wartości identyfikatorów UID oraz GID o jeden. Poniżej przykład zdefiniowania nowego konta <strong>tadnow</strong> Jak widzimy wartości UID oraz GID wynoszą 1001 (wartości te poznajemy podczas procesu tworzenia konta oraz dzięki poleceniu <strong>id</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image46.png" alt="image46" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dla naszej wygody, szczególnie ma to znaczenie w przypadku gdy zarządzamy dużą grupą użytkowników (ciężko by było te numery pamiętać) wartości UID i GID są mapowane na nazwę użytkownika bądź nazwę grupy. Informacje o mapowaniu dotyczące użytkownika pobierane są z opisanego już pliku <strong>/etc/passwd</strong> natomiast grupy - z pliku <strong>/etc/group</strong>. Poniżej na zrzucie zawartość pliku <strong>/etc/group</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image47.png" alt="image47" width="700" height="447" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dla małego przypomnienia celowość tworzenia grup i przypisywania do nich użytkowników jest związana z nadawaniem uprawnień. Ze względu na to, że grupa jest traktowana jako jednostka przypisane uprawnienia do grupy np. dostęp do określonego zasobu spowoduje nadanie uprawnienia wszystkim użytkownikom grupy.</p>
<p> </p>
<p>W systemie Linux do zarządzania grupami można wykorzystać jedno z kilku poleceń a do najczęściej wykorzystywanych należy komenda: <strong>groupadd</strong> (analogicznie jak <strong>useradd</strong>) odpowiedzialna za utworzenie grupy. Składnia polecenia: <strong>groupadd <nazwa_grupy></strong></p>
<p> </p>
<p>Poniżej przykład utworzenia dwóch grup: <strong>marketing</strong> oraz <strong>finanse</strong> Jak można zauważyć fakt utworzenia grup ma swoje odzwierciedlenie w pliku: <strong>/etc/group</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image48.png" alt="image48" width="700" height="500" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby samemu określić identyfikator grupy GID należy do tego celu wykorzystać przełącznik <strong>-g</strong>.</p>
<p> </p>
<p>Stan przynależności do grupy poszczególnego użytkownika można sprawdzić z wykorzystaniem polecenia: <strong>groups</strong>. Wydanie samego polecenia spowoduje wyświetlenie członkostwa w grupach użytkownika w kontekście, którego zostało wydane polecenie. Dołączenie nazwy użytkownika spowoduje wyświetlenie członkostwa zdefiniowanego użytkownika.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zmianę członkostwa w grupie dokonamy za pomocą polecenia: <strong>usermod</strong> z parametrem <strong>-g</strong> bądź <strong>-G</strong> Dołączenie parametru <strong>-g</strong> i zdefiniowanie po nim nazwy grupy spowoduje zastąpienie początkowej grupy (taka sytuacja ma miejsce w Ubuntu w innych dystrybucjach nastąpi dopisanie użytkownika do zdefiniowanej w poleceniu grupy). Poniżej użytkownik <strong>tadnow</strong> zmienia członkostwo z grupy domyślnej <strong>tadnow</strong> na grupę <strong>finanse</strong>. Definicja grupy może nastąpić z wykorzystaniem identyfikatora GID (użycie w definicji identyfikatora powoduje dodanie użytkownika do danej grupy, bez zastąpienia) oraz co ważne definiowane grupy muszą istnieć.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Natomiast wybranie flagi <strong>-G </strong>spowoduje dodanie użytkownika do określnych grup. Poniżej przykład dodania użytkownika <strong>tadnow</strong> do grupy <strong>finanse</strong> oraz <strong>marketing</strong>. Po wydaniu polecenia użytkownik <strong>tadnow</strong> nadal jest członkiem domyślnej grupy <strong>tadnow</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Do modyfikacji parametrów grupy służy polecenie: <strong>groupmod</strong> Za pomocą komendy można dokonać modyfikacji nazwy grupy bądź jej identyfikatora GID. Niżej przykład zmiany nazwy grupy <strong>finanse</strong> na <strong>biznes</strong>. Jak widać po dokonanej zmianie automatycznie zmienia się członkostwo użytkownika <strong>tadnow</strong>. Aby dokonać zmiany nazwy należy w poleceniu <strong>groupmod</strong> użyć przełącznik <strong>-n</strong> natomiast gdy dokonujemy modyfikacji identyfikatora GID używamy flagi <strong>-g</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby usunąć grupę należy skorzystać z polecenia: <strong>groupdel</strong> Składnia polecenia jest następująca: <strong>groupdel <nazwa_grupy></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przed skasowaniem grupy tak jak to miało miejsce w przypadku konta użytkownika warto zapoznać się z plikami, które do danej grupy należą, wyświetlenie plików przynależnych danej grupie uzyskamy za pomocą polecenia: <strong>find / -group <nazwa_grupy> -print</strong> Poniżej przykład z wykorzystaniem polecenia celem odnalezienia plików należących do grupy <strong>luk</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Podobnie działającym skryptem do przedstawionego już <strong>pwck</strong>, lecz tym razem sprawdzającym integralność pliku <strong>/etc/group</strong> jest <strong>grpck</strong>. Wywołanie skryptu spowoduje wykonanie sprawdzenia składni informacji zawartych w pliku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image55.png" alt="image55" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I na tym chciałbym zakończyć w kolejnej odsłonie zajmiemy się poleceniami związanymi z urządzeniami.</p>
<p> </p>
<hr />
<p>BIBLIOGRAFIA:</p>
<p> </p>
<p><a href="http://www.tecmint.com/add-users-in-linux/">http://www.tecmint.com/add-users-in-linux/</a></p>
<p><a href="http://www.computerhope.com/unix/useradd.htm">http://www.computerhope.com/unix/useradd.htm</a></p>
<p><a href="http://www.cyberciti.biz/tips/lock-unlock-set-number-of-login-attempts.html">http://www.cyberciti.biz/tips/lock-unlock-set-number-of-login-attempts.html</a></p>
<p><a href="http://www.serverschool.com/server-configuration/how-to-lock-user-accounts-after-login-failure/">http://www.serverschool.com/server-configuration/how-to-lock-user-accounts-after-login-failure/</a></p>
<p><a href="http://ubuntuforums.org/showthread.php?t=1024263">http://ubuntuforums.org/showthread.php?t=1024263</a></p></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/85b62d4a27ea43297eb1ab349b6e06c6_S.jpg" alt="linux" /></div><div class="K2FeedIntroText"><p>To, że z danego komputera może korzystać wiele osób nie jest żadną tajemnicą i stwierdzeniem tym nikogo nie zaskoczę. Oznacza to nie mniej, ni więcej, że dane urządzenie może służyć wielu osobom. Lecz by takie rozwiązanie zdało egzamin należało opracować mechanizm ochrony zapisanych plików różnych użytkowników czy uruchomionych procesów tak by dany użytkownik nie skasował danych nie należących do niego czy nie przerwał zadań uruchomionych przez innego użytkownika. Tak więc w tym wpisie postaram się omówić zagadnienia związane z użytkownikiem tj. kontem użytkownika, hasłami czy przynależnością do danej grupy.</p>
</div><div class="K2FeedFullText">
<p>Na początek zacznijmy od omówienia informacji zawartych w plikach: /etc/shadow oraz /etc/passwd gdyż w tych dwóch plikach są zapisane informacje dotyczące stworzonych kont użytkowników a opisywane narzędzia do tych danych często będą sięgały.</p>
<p>Plik /etc/passwd jest plikiem tekstowym w którym przechowywana jest informacja na temat zdefiniowanej nazwy użytkownika wraz z przydzielonym identyfikatorem. Zawartość tego pliku przedstawia się następująco:</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image1.png" alt="image1" width="700" height="405" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Uważny Czytelnik na pewno zauważy, że każdy wiersz w pliku /etc/passwd reprezentuje jednego użytkownika a ten bardziej dociekliwy, że w wierszu tym znajduje się siedem pól oddzielonych od siebie dwukropkami (:). Każde z pól przechowuje inną informację o użytkowniku. Definicja pól obejmuje:</p>
<p> </p>
<p style="padding-left: 30px;">1 - <strong>nazwę użytkownika</strong>,</p>
<p style="padding-left: 30px;">2 - <strong>hasło użytkownika</strong> - hasło w systemie Linux nie jest zapisywane w sposób jawny a jego lokalizacja to plik /etc/shadow Znak x widoczny w drugim polu pliku /etc/passwd oznacza właśnie, że hasła należy szukać w wspomnianym pliku /etc/shadow Przeglądając plik /etc/passwd możemy natknąć się również na znak * oznaczający niemożność zalogowania się do systemu zaś puste pole (dwa dwukropki obok siebie) oznacza brak zdefiniowanego hasła (logowanie bez hasła).</p>
<p style="padding-left: 30px;">3 - <strong>identyfikator użytkownika</strong> (ang. user ID - czyli UID) - numer opisujący danego użytkownika. Dozwolone jest by numer UID w systemie był powielony lecz może prowadzić to do nieoczekiwanych błędów dlatego przyjmuje się niepowtarzalność identyfikatora UID.</p>
<p style="padding-left: 30px;">4 - <strong>identyfikator grupy podstawowej</strong> (ang. group ID - czyli GID) - identyfikator określa przynależność do grupy o danym identyfikatorze. Powiązanie nazwy grupy z identyfikatorem znajduje się w pliku /etc/group,</p>
<p style="padding-left: 30px;">5 - <strong>pole GECOS</strong> - prawdziwa nazwa użytkownika. W polu tym mogą być również zapisane inne informacje np. numer telefonu. Informacje te od siebie oddzielone są przecinkiem,</p>
<p style="padding-left: 30px;">6 -<strong> lokalizacja katalogu domowego użytkownika</strong>,</p>
<p style="padding-left: 30px;">7 - <strong>powłoka użytkownika</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image2.png" alt="image2" width="700" height="175" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Analizując zrzut na którym przedstawiono przykładowy plik <strong>/etc/passwd </strong>można wyróżnić szereg kont nie będących przypisanych do konkretnych osób, konta te należą do tzw. <strong>użytkowników specjalnych</strong>. Konta te przynależne są usługom a także użytkownikom, którzy wymagają specjalnych uprawnień. Np. <strong>superużytkownik</strong> (root) identyfikator UID oraz GID zawsze ma zdefiniowany na wartość 0 zaś użytkownik <strong>nobody</strong> jest kontem, któremu odebrano prawo do zapisu. W literaturze można spotkać się z określeniem nazywającym takie konta jako <strong>pseudoużytkownicy</strong>. Z reguły za pomocą takich kont nie można zalogować się do systemu lecz sam system konta te może używać do uruchamiania procesów.</p>
<p> </p>
<p>Plik<strong> /etc/shadow</strong> standardowo przechowuje informację na temat uwierzytelniania użytkowników tj. dane na temat hasła i jego ważności. Przykładowy plik <strong>/etc/shadow </strong>pokazano na rysunku poniżej.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image3.png" alt="image3" width="700" height="288" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Poszczególne pola pliku i ich opis:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">1 - <strong>nazwa użytkownika</strong> - nazwa ta jest tożsama z nazwą w pliku <strong>/etc/passwd</strong> Nazwa łączy wpis hasła z polem użytkownika.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">2 - <strong>zaszyfrowane hasło</strong> - skrót funkcji MD5,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">3 - <strong>data ostatniej zmiany hasła</strong> - czas ostatniej modyfikacji hasła, pole to jest wypełniane przez polecenie <strong>passwd</strong>.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">4 - <strong>minimalna liczba dni między zmianami hasła</strong> - określa liczbę dni, które muszą upłynąć między zmianami hasła</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">5 - <strong>maksymalna liczba dni między zmianami hasła</strong> - określa maksymalną liczbę dozwolonych dni między zmianami hasła. Rzeczywista maksymalna liczba dni jest sumą wartości tego pola oraz wartości z pola siódmego (tzw. okres łaski).</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">6 - <strong>liczba dni określającą komunikat o wygaśnięciu hasła</strong>,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">7 - <strong>liczba dni definiowana od czasu wygaśnięcia hasła</strong>, <strong>po upływie których konto zostanie wyłączone,</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">8 - <strong>data ważności konta</strong> - dzień (liczony od 1 stycznia 1970 roku) wygaśnięcia konta użytkownika. Po przekroczeniu tej daty użytkownik traci możliwość logowania.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">9 - <strong>pole zarezerwowane</strong> - do wykorzystania w przyszłości</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image4.png" alt="image4" width="700" height="167" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby założyć konto nowemu użytkownikowi możemy wykorzystać polecenie: <strong>useradd</strong> Ogólna składnia polecenia wygląda następująco: <strong>useradd <opcje> nazwa_użytkownika</strong> Poniżej na listeningu przykład utworzenia konta dla użytkownika: <strong>jankow</strong></p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">1 - za pomocą polecenia: <strong>useradd jankow</strong> zostaje utworzone nowe konto,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">2 - zmiana użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">3 - sprawdzenie za pomocą komendy: <strong>whoami</strong> nazwy aktualnego użytkownika.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po utworzeniu nowego konta warto zadbać o przypisanie do niego hasła. Administrator systemu zmianę hasła pozostawił użytkownikowi <strong>jankow</strong>. Tak więc użytkownik za pomocą polecenia: <strong>passwd</strong> próbuje takową operację wykonać. Niestety po wydaniu polecenia napotykamy na nieoczekiwany problem a mianowicie system prosi nas o podanie aktualnego hasła. O jakie hasło chodzi? Przecież jedynie zostało utworzone tylko konto, hasło zaś nie było definiowane.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image6.png" alt="image6" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Utworzenie użytkownika w ten sposób powoduje wyłączenie konta poprzez wstawienie znaku <strong>x</strong> w polu przeznaczonym na hasło (plik <strong>/etc/passwd</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image7.png" alt="image7" width="700" height="482" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak już wiesz znak <strong>x</strong> celem identyfikacji hasła odsyła do pliku <strong>/etc/shadow</strong> lecz pole hasła zawiera znak<strong> !</strong> którego obecność skutecznie blokuje zmianę hasła.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby użytkownik <strong>jankow</strong> mógł samemu zdefiniować hasło należy w pliku <strong>/etc/passwd </strong>w linii odpowiadającej danemu użytkownikowi w polu hasła wykasować znak <strong>x</strong>. Oczywiście zmianę tą musi wykonać użytkownik <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image9.png" alt="image9" width="700" height="482" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po przeprowadzonej modyfikacji i po ponownym wydaniu polecenia: <strong>passwd</strong> nie będziemy już proszeni o podanie aktualnego hasła lecz będziemy mogli od razu przypisać nowe hasło.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Znacznie lepszym rozwiązaniem jest utworzenie konta i przypisanie nowo utworzonemu kontu hasła. Poniżej na przykładzie utworzenie konta dla użytkownika <strong>tadnow</strong> (punkt 1) oraz przypisanie hasła (punkt 2). Wszystkie operację wykonał użytkownik <strong>root</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image11.png" alt="image11" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Oczywiście polecenie <strong>useradd</strong> pozwala na skonfigurowanie szerszej gamy opcji związanych z tworzonym kontem. W zależności od potrzeb możemy zdefiniować np. czas po którym konto zostanie wyłączone, do jakiej grupy podstawowej użytkownik ma należeć, czy określić lokalizację katalogu domowego.</p>
<p> </p>
<p>Poniżej przedstawiono przykład utworzenia konta użytkownika <strong>sonkie</strong> przy czym dodatkowo za pomocą parametru <strong>-e</strong> zdefiniowano ważność konta tj. datę do kiedy konto jest aktywne.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image12.png" alt="image12" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Uruchomienie polecenia <strong>useradd</strong> z opcją <strong>-D</strong>, spowoduje wyświetlenie informacji o domyślnych ustawieniach. Ustawienia te są definiowane w pliku: <strong>/etc/default/useradd</strong> Modyfikacja i definicja tych parametrów pozwala nam na tworzenie kont z góry określonymi opcjami.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<ul>
<li style="padding-left: 30px;"><strong>GROUP</strong> - nazwa lub ID grupy domyślnej,</li>
<li style="padding-left: 30px;"><strong>HOME</strong> - katalog określający folder przechowywania katalogów domowych użytkowników,</li>
<li style="padding-left: 30px;"><strong>INACTIVE</strong> – parametr określa liczbę dni od daty wygaśnięcia hasła po której następuje blokada konta. Wartość: <strong>-1 </strong>- opcja jest wyłączona, wartość: <strong>0</strong> – wygaśnięcie ważności hasła powoduje automatyczną blokadę konta, wartość: dodatnia (liczba) – ilość dni.</li>
<li style="padding-left: 30px;"><strong>EXPIRE</strong> - data wyłączenia konta,</li>
<li style="padding-left: 30px;"><strong>SHELL</strong> - nazwa powłoki systemowej użytkownika,</li>
<li style="padding-left: 30px;"><strong>SKEL</strong> – lokalizacja katalogu z którego zostaną skopiowane pliki i foldery do katalogu domowego nowo utworzonego użytkownika.</li>
</ul>
<p> </p>
<p>Aby dokonać zmiany opcji domyślnych wykorzystujemy polecenie, którego ogólna składnia przedstawia się następująco: <strong>useradd -D <opcje></strong> Tak więc np. chcąc ustalić datę wygaśnięcia konta na 2016-01-25 (patrz rysunek powyżej) należy użyć polecenia z opcją: <strong>-e</strong> po której określamy datę w formacie YYYY-MM-DD – <strong>useradd -D -e 2016-01-25</strong></p>
<p> </p>
<p>Opcje domyślne narzędzia <strong>useradd</strong> możemy również określić poprzez bezpośrednie edytowanie pliku - <strong>/etc/default/useradd</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image14.png" alt="image14" width="700" height="447" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Inne przydatne opcje związane z poleceniem: <strong>useradd</strong> przedstawiono poniżej:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s <powłoka></strong> - określenie powłoki użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-d <katalog_domowy></strong> - określenie lokalizacji katalogu domowego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-u <wartość></strong> - określenie identyfikatora UID,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-g <nazwa_grupy></strong> - definicja grupy podstawowej użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-G <nazwa_grupy>,<nazwa_grupy></strong> - definicja grup, których członkiem stanie się użytkownik,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-m</strong> - zdefiniowanie ustawień konta poprzez skopiowanie plików z szablonu (katalog: /etc/skel>, gdy pliki konfiguracyjne znajdują się w innym katalogu należy użyć przełącznik <strong>-k</strong>.</p>
<p> </p>
<p>Innym narzędziem, którym możemy posłużyć się aby utworzyć konto użytkownika jest <strong>adduser</strong>. Wykonanie operacji utworzenia konta sprowadza się do wydania polecenia: <strong>adduser <nazwa_konta></strong> i po udzieleniu odpowiedzi na postawione pytania konto użytkownika zostaje założone. Poniżej na rysunku przykład wykorzystania narzędzia <strong>adduser</strong> do utworzenia konta użytkownika <strong>tomwal</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image15.png" alt="image15" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby danemu użytkownikowi zdefiniować hasło to jak już wiesz Czytelniku należy posłużyć się poleceniem <strong>passwd</strong>. Ale narzędzie oprócz zmiany/ustalenia hasła pozwala nam na wykonie jeszcze kilku czynności. Ogólna składnia polecenia jest następująca: <strong>passwd <opcje> <konto_użytkownika></strong> Bez zdefiniowania parametrów, poprzez wydanie samej komendy: <strong>passwd</strong> następuje zmiana hasła użytkownika w kontekście, którego polecenie zostało wydane.</p>
<p> </p>
<p>Aby poznać zdefiniowane opcje powiązane z naszym hasłem możemy posłużyć się poleceniem <strong>passwd</strong> z ustawioną flagą <strong>-S </strong>– <strong>passwd -S</strong> Po wydaniu polecenia uzyskamy informację o:</p>
<p> </p>
<ul>
<li style="padding-left: 30px;">login,</li>
<li style="padding-left: 30px;">status hasła –<strong> L</strong> - hasło jest zablokowane, <strong>NP</strong> - brak ustalonego hasła, <strong>P </strong>– hasło jest ustawione,</li>
<li style="padding-left: 30px;">data ostatniej zmiany hasła,</li>
<li style="padding-left: 30px;">minimalny czas życia hasła,</li>
<li style="padding-left: 30px;">maksymalny czas życia hasła</li>
<li style="padding-left: 30px;">czas ostrzeżenia o zmianie hasła, oraz nieaktywny okres czasu hasła. Czas ten wyrażony jest w dniach.</li>
<li style="padding-left: 30px;">liczba dni po której następuje blokada konta.</li>
</ul>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image16.png" alt="image16" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zastosowanie flagi <strong>-e</strong> wraz w połączeniu z <strong>nazwą konta</strong> spowoduje wymuszenie zmiany hasła.</p>
<p> </p>
<p>Poniżej przedstawiono przykład wymuszenia zmiany hasła na koncie <strong>beatry</strong> (punkt 1). Po zmianie konta jesteśmy poinformowani o potrzebie natychmiastowej zmiany hasła (punkt 2). Użytkownik za pomocą narzędzia <strong>passwd</strong> dokonuje próby jego zmiany (punkt 3). W pierwszym podejściu hasła nie udaje się zmienić z powodu zdefiniowania zbyt prostego hasła – hasło: qwerty (punkt 4). Drugie podejście również kończy się niepowodzeniem - powód - zdefiniowane hasło jest identyczne z poprzednim (punkt 5). Dopiero trzecia próba kończy się sukcesem (do trzech razy sztuka - punkt 6).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image17.png" alt="image17" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ustalenie minimalnego czasu życia hasła dokonujemy za pomocą przełącznika <strong>-n</strong> zaś wartość maksymalną możemy określić poprzez zastosowanie flagi <strong>-x</strong>. Użycie któregokolwiek z przełączników wymusza na nas określenie wartości dni konfigurowanej opcji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image18.png" alt="image18" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Czas ostrzeżenia o potrzebie dokonania zmiany hasła określimy z wykorzystaniem przełącznika <strong>-w</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image19.png" alt="image19" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zaś hasło skasujemy z wykorzystaniem flagi <strong>-d</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image20.png" alt="image20" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Poleceniem, które pozwoli nam na zmodyfikowanie parametrów utworzonych kont jest <strong>usermod</strong>.</p>
<p> </p>
<p>Poniżej przykład wykorzystania komendy <strong>usermod</strong> do odblokowania konta, które wygasło.</p>
<p> </p>
<p>Po zmianie konta użytkownika na <strong>beatry</strong> uzyskujemy komunikat o wygaśnięciu konta (punkt 1). Aby konto znów stało się aktywne należy ustalić nową datę wygaśnięcia konta. Nowa data zostaje ustalona z wykorzystaniem komendy <strong>usermod</strong> oraz flagi <strong>-e</strong> (punkt 2 - data wygaśnięcie konta zostaje ustalona na 3 marca 2016). Po ponownej zmianie konta na <strong>beatry</strong> (punkt 3) jesteśmy poinformowani o zbliżającym się terminie wygaśnięcia hasła tak więc za pomocą już omówionego polecenia: <strong>passwd</strong> ustalamy nowe hasło.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image21.png" alt="image21" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Polecenie: <strong>usermod</strong> posiada przełącznik, który możemy wykorzystać do zablokowania dostępu do konta (brak możliwości zalogowania). Aby dane konto stało się nie aktywne wykorzystujemy do tego flagę: <strong>-L</strong> (po uaktywnieniu próba zalogowania się kończy się komunikatem o nieprawidłowym haśle).Poniżej na przykładzie wyłączenie konta <strong>alebin</strong>. Aby konto, znów działało należy wykorzystać opcję: <strong>-U</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image22.png" alt="image22" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Kasowanie konta odbywa się za pomocą polecenia: <strong>userdel</strong>. Na zrzucie poniżej przykład usunięcia konta użytkownika <strong>tomwal</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image23.png" alt="image23" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Wydanie polecenia kasowania konta usunie konto z systemu lecz zostaną pozostawione pliki użytkownika w jego katalogu domowym. Aby usunąć również pliki do polecenia <strong>userdel</strong> należy dodać parametr <strong>-r</strong>.</p>
<p> </p>
<p>Z zasady użytkownicy swoje pliki powinni trzymać w swoim katalogu domowym lecz często zdarza się, że pliki są zapisywane w różnych lokalizacjach. Aby system po użytkowniku dokładnie posprzątać warto wyszukać i usunąć wszystkie pliki przynależne kasowanemu użytkownikowi. Aby odszukać takowe pliki należy skorzystać z polecenia: <strong>find / -user <nazwa_użytkownika></strong></p>
<p> </p>
<p>Skryptem, który pozwoli nam na sprawdzenie integralność plików <strong>/etc/passwd</strong> oraz <strong>/etc/shadow</strong> jest: <strong>pwck</strong> Wydanie polecenia sprawi, że pliki zostaną sprawdzone pod kątem składni oraz zawartych odwołań. Aby wyświetlić same informacje (tryb tylko do odczytu) należy posłużyć się flagą <strong>-r </strong>Wydanie samego polecenia <strong>pwck</strong> w razie wykrycie problemu wyświetli komunikat z zapytaniem o potwierdzenie wykonania danej operacji.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image24.png" alt="image24" width="700" height="402" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Polecenie: <strong>logname</strong> odpowiedzialne jest za wyświetlenie nazwy logowania danego użytkownika.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Polecenie, które możemy wykorzystać aby poznać poświadczenia aktualnie aktywnego użytkownika jest komenda: <strong>whoami</strong></p>
<p> </p>
<p>Uzyskane wyniki mogą być różne od tych uzyskanych dzięki poleceniu: <strong>logname</strong> gdyż za pomocą komendy: <strong>su</strong> można zmienić kontekst wywoływanych poleceń (czytaj - wykonać polecenie z poświadczeniami innego użytkownika). Poniżej zaprezentowano różnicę pomiędzy tymi poleceniami.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image26.png" alt="image26" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ktoś mógłby zapytać - Do czego użyć obie komendy? Przecież dane użytkownika widać w prompt-cie linii poleceń. Tak, zgadza się domyślnie skonfigurowany prompt zawiera informację o użytkowniku - ale przecież nie zawsze tak musi być.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dodatkowo oba polecenia przydatne są podczas tworzenia skryptów.</p>
<p> </p>
<p>Polecenie: <strong>who</strong> pozwala nam na poznanie użytkowników, którzy są aktualnie zalogowani.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Standardowo polecenie dane o użytkownikach pobiera z pliku <strong>/var/run/utmp</strong> W definicji wywołania polecenia można zmienić domyślną lokalizację pliku z danymi. I tak określając: <strong>/var/log/wtmp</strong> otrzymamy informację o poprzednich logowaniach, zaś gdy zdefiniujemy <strong>/var/log/btmp</strong> powinnyśmy uzyskać dane o nieudanych logowaniach (pod warunkiem, że system jest skonfigurowany do gromadzenia takich informacji). Poniżej przykład obrazujący informację o poprzednich logowaniach.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Z poleceniem: <strong>who</strong> możemy użyć dodatkowe przełączniki:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-a</strong> - wszystkie informacje,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-H</strong> - wypisanie nagłówka,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-q</strong> - wyświetlenie jedynie nazw i liczby użytkowników,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>--lookup</strong> - rozwiązanie nazwy komputera (DNS) z którego nastąpiło logowanie, flaga dotyczy użytkowników zalogowanych zdalnie,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-T</strong> - sprawdza czy jest możliwość wysłania komunikatu (np. gdy użytkownik korzysta z terminalu). Znak: <strong>+</strong> oznacza możliwość komunikacji, znak: <strong>-</strong> brak możliwości wysłania komunikatu natomiast znak: <strong>?</strong> oznacza brak możliwości określenia.</p>
<p> </p>
<p style="margin-bottom: 0.0001pt;">Poniżej przykład użycia flagi <strong>-T </strong>Po analizie uzyskanych wyników można stwierdzić, że istnieje możliwość wysłania komunikatu do użytkownika: <strong>alebin</strong> Tak więc spróbujmy tą informację wykorzystać. Lecz jeszcze jedna mała uwaga aby komunikacja zakończyła się sukcesem należy wydać polecenie: <strong>mesg y</strong> Wydanie polecenia zezwala na prowadzenie takiego typu komunikacji (polecenie: <strong>mesg n</strong> - zabrania, status poznamy po wydaniu komendy: <strong>mesg</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby móc wysłać informacje do użytkownika <strong>alebin</strong> należy skorzystać z polecenia: <strong>write</strong> Poniżej przykład użycia takiej formy komunikacji (po stronie użytkownika <strong>luk</strong>, kończenie komunikatu następuje po wciśnięciu kombinacji klawiszy ^D)</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image31.png" alt="image31" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I ta sama wiadomość od strony użytkownika <strong>alebin</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby za jednym zamachem wysłać komunikat do wszystkich zalogowanych użytkowników należy skorzystać z polecenia: <strong>wall</strong> Po wydaniu polecenia, definiujemy komunikat, wysłanie informacji następuje po wybraniu ^D.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Komunikat został wysłany do wszystkich użytkowników mogących go otrzymać (czytaj korzystających z terminala) W przykładzie informacje otrzymuje dwóch użytkowników: <strong>alebin</strong> oraz <strong>tomwal</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby uzyskać listę aktualnie zalogowanych użytkowników możemy również posłużyć się poleceniem: <strong>users</strong> Po wydaniu komendy zostanie wypisana lista zawierająca aktywne konta.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image35.png" alt="image35" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p><strong>Finger</strong> jest jeszcze jednym poleceniem, po wydaniu, którego uzyskamy listę użytkowników korzystających z systemu. Wydanie samego polecenia bez żadnych opcji spowoduje uzyskanie listy zalogowanych użytkowników. Natomiast, gdy do polecenia <strong>finger</strong> zostanie dodana nazwa użytkownika dane zostaną poszerzone o dodatkowe informacje.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Z poleceniem <strong>finger</strong> dostępne są następujące opcje:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> - wypisanie danych w formie skróconej,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-l</strong> - wypisanie danych w formie rozszerzonej.</p>
<p> </p>
<p>Poleceniem, które jest powiązane z komendą <strong>finger</strong> jest <strong>chfn</strong>. Komenda ta pozwala nam na zmianę niektórych informacji, które są związane z użytkownikiem - prawdziwe imię i nazwisko, numery telefonów czy miejsce pracy. Zmianę informacji dokonujemy za pomocą polecenia: <strong>chfn <nazwa_użytkownika></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Ostatnim poleceniem, które chciałbym przedstawić a dotyczącym poznania użytkowników aktualnie zalogowanych jest komenda: <strong>w</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image38.png" alt="image38" width="700" height="190" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Z wykorzystaniem polecenia: <strong>who</strong> mogliśmy poznać historię poprzednich logowań. Informację taką również uzyskamy dzięki poleceniu: <strong>last</strong> Dane są ułożone w kolejności chronologicznej od logowania bieżącego po logowania starsze.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Komenda <strong>last</strong> ma trochę więcej możliwości niż zaprezentowane wcześniej polecenie <strong>who</strong>. Dostępne są następujące przełączniki:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-f <nazwa_pliku></strong> - określenie innego źródła informacji niż standardowy plik <strong>var/run/utemp</strong>,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-i</strong> - nazwy komputerów z których nastąpiło logowanie zostają zastąpione adresami IP,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-R</strong> - bez nazw komputerów,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-n <wartość></strong> - wypisanie danych o logowaniach obejmujących ostatnie n wierszy (można użyć składni np. <strong>last -3</strong>),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong><użytkownik></strong> - wyświetlenie historii logowań dotyczących konkretnego użytkownika,</p>
<p> </p>
<p>Aby poznać historię logowań dotyczących danego okresu można wykorzystać przełącznik <strong>-t</strong> Po zdefiniowaniu flagi określamy interesujący nas okres. Data jest definiowana za pomocą formatu: YYYYMMDDHHMMSS (w przypadku pominięcia, którejś z informacji uzupełniamy zerami).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Natomiast by poznać datę ostatniego restartu systemu należy skorzystać z przełącznika <strong>reboot</strong> - wydanie polecenia ukazuje datę i godzinę ostatniego restartu systemu.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image41.png" alt="image41" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jeszcze kolejnym programem pozwalającym przejrzeć historię logowań ale w kontekście tych nieudanych jest: <strong>faillog</strong> Aby wyszukać błędne logowania konkretnego użytkownika należy w składni polecenia użyć przełącznik <strong>-u</strong> po którym definiujemy nazwę konta.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby odszukać nieudane logowanie w konkretnym okresie należy posłużyć się przełącznikiem <strong>-t</strong> Użycie flagi <strong>-a </strong>spowoduje wyświetlenie wszystkich informacji.</p>
<p> </p>
<p>Jak już jesteśmy przy logowaniu to krótka porada pozwalająca nam podnieść poziom bezpieczeństwa naszego systemu na trochę wyższy pułap. Często przydaje się włączenie blokowania konta po wprowadzeniu określonej liczby błędnych haseł. Porada ta zabezpieczy nas przed sytuacją w której dany użytkownik poprzez zgadywanie próbuje uzyskać dostęp do konta.</p>
<p> </p>
<p>Aby włączyć blokowanie konta po n razy błędnie wprowadzonym haśle należy edytować plik: <strong>/etc/pam.d/common-auth</strong> (w innych systemach Linux plik może przyjmować nazwę: <strong>/etc/pam.d/system-auth</strong>).</p>
<p> </p>
<p>Po otwarciu pliku należy dodać linijkę:</p>
<p><strong>auth required pam_tally.so onerr=fail deny=<ilość_dozwolonych_prób> unlock_time=<czas_odblokowania></strong></p>
<p> </p>
<p>gdzie:</p>
<p> </p>
<ul>
<li style="padding-left: 30px;"><strong>deny=<ilość_dozwolonych_prób> </strong>- ilość prób po których następuje blokada,</li>
<li style="padding-left: 30px;"><strong>unlock_time=<czas_odblokowania> </strong>- czas automatycznego odblokowania konta, po tym czasie możliwe jest podjęcie zalogowania.</li>
</ul>
<p> </p>
<p style="margin-bottom: 0.0001pt;">Informacja o podjętych próbach logowania jest przetrzymywana w pliku: <strong>/var/log/faillog</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image43.png" alt="image43" width="700" height="477" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Po definicji wszystkich ustawień możemy przeprowadzić próbę logowania. W naszym teście użytkownik <strong>jankow</strong> trzy razy wpisuje błędne hasło.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image44.png" alt="image44" width="700" height="451" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Jak widać powyżej konto użytkownika: <strong>jankow</strong> zostało zablokowane. Aby ponowić próbę logowania musimy odczekać zdefiniowaną wartość czasu. Możliwe jest przez administratora ręczne wymuszenie zresetowania progu logowań.</p>
<p> </p>
<p>Aby sprawdzić ilość błędnych prób logowań wydajemy polecenie: <strong>pam_tally --user <nazwa_użytkownika></strong> aby zaś zresetować próg należy wprowadzić komendę: <strong>pam_tally --user <nazwa_użytkownika> --reset</strong></p>
<p> </p>
<p>Innym poleceniem, które pozwala nam na poznanie trochę więcej informacji o użytkowniku jest komenda: <strong>id </strong>Przyglądnijmy się więc wynikom uzyskanym po wydaniu polecenia. Wydanie komendy pozwala nam poznać numer UID (ang. user ID) oraz GID (ang. primary group ID). Numery te nadawane są kontu użytkownika w trakcie procesu tworzenia. Na zrzucie poniżej identyfikatory konta <strong>root</strong> oraz <strong>luk</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image45.png" alt="image45" width="700" height="125" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przeglądając wyniki stwierdzamy, że użytkownik <strong>root</strong> ma przypisaną wartość <strong>0</strong> dla identyfikatora UID oraz GID natomiast użytkownik <strong>luk</strong> wartość <strong>1000</strong> (w systemie Ubuntu numerowanie kont użytkowników rozpoczyna się od 1000 w innych dystrybucjach wartość ta może być inna np. w Fedora numeracja rozpoczyna się od 500). Dodanie kolejnego użytkownika z reguły prowadzi do zwiększenia wartości identyfikatorów UID oraz GID o jeden. Poniżej przykład zdefiniowania nowego konta <strong>tadnow</strong> Jak widzimy wartości UID oraz GID wynoszą 1001 (wartości te poznajemy podczas procesu tworzenia konta oraz dzięki poleceniu <strong>id</strong>).</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image46.png" alt="image46" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dla naszej wygody, szczególnie ma to znaczenie w przypadku gdy zarządzamy dużą grupą użytkowników (ciężko by było te numery pamiętać) wartości UID i GID są mapowane na nazwę użytkownika bądź nazwę grupy. Informacje o mapowaniu dotyczące użytkownika pobierane są z opisanego już pliku <strong>/etc/passwd</strong> natomiast grupy - z pliku <strong>/etc/group</strong>. Poniżej na zrzucie zawartość pliku <strong>/etc/group</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image47.png" alt="image47" width="700" height="447" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Dla małego przypomnienia celowość tworzenia grup i przypisywania do nich użytkowników jest związana z nadawaniem uprawnień. Ze względu na to, że grupa jest traktowana jako jednostka przypisane uprawnienia do grupy np. dostęp do określonego zasobu spowoduje nadanie uprawnienia wszystkim użytkownikom grupy.</p>
<p> </p>
<p>W systemie Linux do zarządzania grupami można wykorzystać jedno z kilku poleceń a do najczęściej wykorzystywanych należy komenda: <strong>groupadd</strong> (analogicznie jak <strong>useradd</strong>) odpowiedzialna za utworzenie grupy. Składnia polecenia: <strong>groupadd <nazwa_grupy></strong></p>
<p> </p>
<p>Poniżej przykład utworzenia dwóch grup: <strong>marketing</strong> oraz <strong>finanse</strong> Jak można zauważyć fakt utworzenia grup ma swoje odzwierciedlenie w pliku: <strong>/etc/group</strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image48.png" alt="image48" width="700" height="500" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby samemu określić identyfikator grupy GID należy do tego celu wykorzystać przełącznik <strong>-g</strong>.</p>
<p> </p>
<p>Stan przynależności do grupy poszczególnego użytkownika można sprawdzić z wykorzystaniem polecenia: <strong>groups</strong>. Wydanie samego polecenia spowoduje wyświetlenie członkostwa w grupach użytkownika w kontekście, którego zostało wydane polecenie. Dołączenie nazwy użytkownika spowoduje wyświetlenie członkostwa zdefiniowanego użytkownika.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Zmianę członkostwa w grupie dokonamy za pomocą polecenia: <strong>usermod</strong> z parametrem <strong>-g</strong> bądź <strong>-G</strong> Dołączenie parametru <strong>-g</strong> i zdefiniowanie po nim nazwy grupy spowoduje zastąpienie początkowej grupy (taka sytuacja ma miejsce w Ubuntu w innych dystrybucjach nastąpi dopisanie użytkownika do zdefiniowanej w poleceniu grupy). Poniżej użytkownik <strong>tadnow</strong> zmienia członkostwo z grupy domyślnej <strong>tadnow</strong> na grupę <strong>finanse</strong>. Definicja grupy może nastąpić z wykorzystaniem identyfikatora GID (użycie w definicji identyfikatora powoduje dodanie użytkownika do danej grupy, bez zastąpienia) oraz co ważne definiowane grupy muszą istnieć.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Natomiast wybranie flagi <strong>-G </strong>spowoduje dodanie użytkownika do określnych grup. Poniżej przykład dodania użytkownika <strong>tadnow</strong> do grupy <strong>finanse</strong> oraz <strong>marketing</strong>. Po wydaniu polecenia użytkownik <strong>tadnow</strong> nadal jest członkiem domyślnej grupy <strong>tadnow</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Do modyfikacji parametrów grupy służy polecenie: <strong>groupmod</strong> Za pomocą komendy można dokonać modyfikacji nazwy grupy bądź jej identyfikatora GID. Niżej przykład zmiany nazwy grupy <strong>finanse</strong> na <strong>biznes</strong>. Jak widać po dokonanej zmianie automatycznie zmienia się członkostwo użytkownika <strong>tadnow</strong>. Aby dokonać zmiany nazwy należy w poleceniu <strong>groupmod</strong> użyć przełącznik <strong>-n</strong> natomiast gdy dokonujemy modyfikacji identyfikatora GID używamy flagi <strong>-g</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Aby usunąć grupę należy skorzystać z polecenia: <strong>groupdel</strong> Składnia polecenia jest następująca: <strong>groupdel <nazwa_grupy></strong></p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Przed skasowaniem grupy tak jak to miało miejsce w przypadku konta użytkownika warto zapoznać się z plikami, które do danej grupy należą, wyświetlenie plików przynależnych danej grupie uzyskamy za pomocą polecenia: <strong>find / -group <nazwa_grupy> -print</strong> Poniżej przykład z wykorzystaniem polecenia celem odnalezienia plików należących do grupy <strong>luk</strong>.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>Podobnie działającym skryptem do przedstawionego już <strong>pwck</strong>, lecz tym razem sprawdzającym integralność pliku <strong>/etc/group</strong> jest <strong>grpck</strong>. Wywołanie skryptu spowoduje wykonanie sprawdzenia składni informacji zawartych w pliku.</p>
<p> </p>
<p><img src="http://slow7.pl/images/stories/linux/linux_3/image55.png" alt="image55" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p> </p>
<p>I na tym chciałbym zakończyć w kolejnej odsłonie zajmiemy się poleceniami związanymi z urządzeniami.</p>
<p> </p>
<hr />
<p>BIBLIOGRAFIA:</p>
<p> </p>
<p><a href="http://www.tecmint.com/add-users-in-linux/">http://www.tecmint.com/add-users-in-linux/</a></p>
<p><a href="http://www.computerhope.com/unix/useradd.htm">http://www.computerhope.com/unix/useradd.htm</a></p>
<p><a href="http://www.cyberciti.biz/tips/lock-unlock-set-number-of-login-attempts.html">http://www.cyberciti.biz/tips/lock-unlock-set-number-of-login-attempts.html</a></p>
<p><a href="http://www.serverschool.com/server-configuration/how-to-lock-user-accounts-after-login-failure/">http://www.serverschool.com/server-configuration/how-to-lock-user-accounts-after-login-failure/</a></p>
<p><a href="http://ubuntuforums.org/showthread.php?t=1024263">http://ubuntuforums.org/showthread.php?t=1024263</a></p></div>Dogadać się z Linuxem. Zarządzanie procesami.2015-09-07T12:14:13+00:002015-09-07T12:14:13+00:00http://slow7.pl/linux/item/104-dogadac-sie-z-linuxem-zarzadzanie-procesamipikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/a42a2aa6c7440291c38ba9adc5892a56_S.jpg" alt="Dogadać się z Linuxem. Zarządzanie procesami." /></div><div class="K2FeedIntroText"><p>W tym wpisie zajmiemy się narzędziami, które pozwolą nam na kontrolowaniem uruchamianych procesów w systemie Linux. Większość przedstawionych narzędzi będzie dotyczyć powłoki bash lecz pojawią się również aplikacje, które umożliwią nam zarządzanie zadaniami w trybie graficznym. Tak by nie przedłużać przechodzimy do tematu wpisu.</p>
</div><div class="K2FeedFullText">
<p>Narzędzie <strong>ps</strong> pozwala nam na wyświetlenie listy wszystkich procesów, które są aktualnie wykonywane przez system. Narzędzie te pobiera informacje z systemu plików <strong>/proc</strong> W bazie tej każdy proces ma swoje odzwierciedlenie. Aby wyświetlić wszystkie możliwe parametry narzędzia wydaj polecenie: <strong>ps --help all</strong></p>
<p>Wydanie samego polecenia <strong>ps</strong> bez żadnego parametru uwidoczni nam tylko procesy skojarzone z danym terminalem (TTY - ang. TeleTYpewriter).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image1.png" target="_blank" type="image/png" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Jak widać powyżej nie uzyskaliśmy zbyt wielu informacji (tylko 3 procesy) tak więc by ten stan zmienić poniżej przedstawię kilka przykładów użycia narzędzia, które pozwolą nam na uzyskanie bardziej szczegółowych danych o tym co w danej chwili jest w systemie uruchomione. Lecz przed tym jeszcze krótkie wprowadzenie o tym jak narzędzie <strong>ps</strong> przedstawia nam dane (tak byśmy rozumieli to co nam na ekranie się pojawi).</p>
<p>Podczas korzystania z narzędzia <strong>ps</strong> przedstawiane dane (rodzaj prezentowanych danych zależy od użytych przełączników) będą zgrupowane w tabeli. Poniżej zestawienie nagłówków tabeli oznaczające parametry procesu:</p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li><strong>USER</strong> - właściciel procesu,</li>
<li><strong>PID</strong> – Process ID - identyfikator danego procesu, używany do jego identyfikacji co ważne w tym samym czasie PID nie może być przydzielony dwóm różnym procesom,</li>
<li><strong>%CPU</strong> – procentowe użycie procesora</li>
<li><strong>%MEM</strong> –procentowe użycie pamięci</li>
<li><strong>VSZ</strong> – przydzielona pamięć wirtualna w kB,</li>
<li><strong>RSS</strong> – przydzielona pamięć fizyczna w kB,</li>
<li><strong>TTY</strong> - identyfikator terminala procesu. Zapis <strong>?</strong> oznacza brak skojarzenia z terminalem.</li>
<li><strong>STAT</strong> – status procesu. Oznaczenia statusu procesu:
<ul>
<li><strong>R</strong> – proces jest aktualnie wykonywany (running),</li>
<li><strong>S</strong> – proces uśpiony, oczekiwanie na jego uruchomienie (sleep),</li>
<li><strong>T</strong> – proces zatrzymany (stopped, np. CTRL-Z)</li>
<li><strong>Z</strong> – zombie process - proces niewłaściwie zamknięty przez proces nadrzędny (proces rodzica bądź proces macieżysty)</li>
</ul>
</li>
<li><strong>START</strong> – czas uruchomienia procesu,</li>
<li><strong>TIME</strong> – użycie procesora wyrażona w czasie,</li>
<li><strong>COMMAND</strong> – nazwa komendy/procesu oraz jego parametry,</li>
<li><strong>NI</strong> – wartość priorytetu nice (o tym później).</li>
</ul>
</li>
</ul>
</li>
</ul>
<p> </p>
<p>Uzbrojeni w tą wiedzę możemy przejść do kilku przykładów.</p>
<p>Aby wyświetlić wszystkie procesy, które są powiązane z terminalami użyj komendy: <strong>ps a</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image2.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image2.png" alt="image2" width="700" height="290" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Oczywiście w systemie istnieją procesy, które w żaden sposób z TTY nie są powiązane tak więc aby również uzyskać informację o tych procesach użyj polecenia: <strong>ps ax</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image3.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image3.png" alt="image3" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby powyższe dane nieco wzbogacić użyj polecenia: <strong>ps auxw</strong> Dodanie przełącznika <strong>u</strong> spowoduje dodanie informacji na temat użytkownika z którym dany proces jest skojarzony natomiast przełącznik <strong>w</strong> jest odpowiedzialny za wyświetlenie parametrów linii poleceń procesu (do polowy linii). Aby wyświetlić pełne dane niezależnie od długości skorzystaj z flagi <strong>ww</strong> (polecenie przyjmie postać: <strong>ps auxww</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image4.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image4.png" alt="image4" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś uzyskane wyniki procesów zawęzić do konkretnego użytkownika (w przykładzie użytkownik luk) skorzystaj z polecenia: <strong>ps u -U <nazwa_użytkownika></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image5.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image5.png" alt="image5" width="700" height="279" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby uzyskane wyniki posortować np. według użycia procesora można skorzystać z polecenia: <strong>axuk -pcpu</strong> dozwolona jest również komenda: <strong>ps aux --sort -pcpu</strong> Sortowanie jest wykonane malejąco aby uzyskać efekt odwrotny przed flagą <strong>pcpu</strong> zamiast znaku <strong>-</strong> (minus) użyj znak <strong>+</strong> (plus).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image6.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image6.png" alt="image6" width="700" height="290" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Oczywiście opcji sortowania jest bardzo wiele, wszystko zależy od informacji jakie chcemy uzyskać wszystkie dostępne opcje sortowania zostały umieszczone w linku poniżej (wersja angielska): <a href="http://www.freebsd.org/cgi/man.cgi?query=ps&manpath=SuSE+Linux/i386+11.3">http://www.freebsd.org/cgi/man.cgi?query=ps&manpath=SuSE+Linux/i386+11.3</a></p>
<p>Przeglądając wyniki uzyskane dzięki narzędziu <strong>ps</strong> dojdziemy do wniosku, że uruchomionych i działających procesów w systemie jest bardzo wiele aby odszukać tylko te, które w danej chwili nas interesują można skorzystać z poleceń przedstawionych na poniższym zrzucie. Przykład odnalezienia procesu przeglądarki Mozilla Firefox oraz edytora tekstu Libre Writer. Na zrzucie poniżej zostały ukazane również numer PID szukanych procesów - odpowiednio dla przeglądarki Mozilla Firefox - <strong>2404</strong> oraz Libre Writer - <strong>2514</strong> Numery tych procesów wykorzystamy za chwilkę przy opisie następnego narzędzia jakim jest program <strong>top</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image7.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image7.png" alt="image7" width="700" height="180" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wiele z procesów w systemie Linux zresztą jak w każdym innym systemie jest uruchamiana przy starcie systemu inne zaś są uaktywniane już przez samych użytkowników w momencie pracy z systemem i uruchamiania kolejnych zadań czy programów. Uruchomiony proces może być odpowiedzialny za uruchamianie innych zadań, taki proces staje się wówczas procesem nadrzędnym bądź macierzystym dla procesów, które zostały uruchomione w wyniku jego działania. O procesach, które leżą niżej w hierarchii od procesu macierzystego mówimy, że są to procesy potomne. W systemie Linux takim najważniejszym procesem jest proces <strong>init</strong>, będący rodzicem wszystkich innych procesów. Proces ten ma zawsze przypisaną wartość PID równą 1. Aby przejrzeć całą hierarchię uruchomionych procesów i dodatkowo poznać, który proces jest nadrzędny a który potomny należy skorzystać z polecenia: <strong>pstree</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image8.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Narzędzie to dysponuje dodatkowymi przełącznikami, które pozwalają nam na definicję uzyskiwanych danych do najczęściej wykorzystywanych poleceń należą:</p>
<p><strong>pstree <użytkownik></strong> - wyświetla drzewo procesów danego użytkownika - przykład wyświetlenia procesów użytkownika luk</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image9.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p><strong>pstree <PID></strong> - rozpoczyna budowanie drzewa od procesu z zdefiniowanym numerem PID - w przykładzie proces NetworkManager,</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image10.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p><strong>pstree -p</strong> - do informacji o nazwie procesów dołączane są informacje o numerach PID tychże procesów - ten sam przykład co powyżej,</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image11.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image11.png" alt="image11" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p><strong>pstree -H <PID></strong> - użycie flagi <strong>H</strong> spowoduje podświetlenie procesu,</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image12.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image12.png" alt="image12" width="700" height="318" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p><strong>pstree -n</strong> - spowoduje włączenie sortowanie według numerów PID.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image13.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dostępnych jest jeszcze parę przełączników działających z narzędziem <strong>pstree</strong> aby je poznać skorzystaj z pomocy programu: <strong>pstree --help</strong>.</p>
<p>Zadaniem aplikacji <strong>top</strong> tak samo jak omówionego narzędzia <strong>ps</strong> oraz <strong>pstree</strong> jest przedstawienie nam aktualnego stanu systemu. Stan ten w przeciwieństwie do programu <strong>ps</strong> jest aktualizowany na bieżąco. Oznacza to, że uruchamiając program <strong>top</strong> na żywo mamy podgląd na stan uruchamianych i działających już procesów. Działanie narzędzia kontrolujemy poprzez zastosowanie odpowiednich przełączników, które dodawane są podczas uruchamiania narzędzia lecz mamy również możliwość definiowania stanu wyświetlanych informacji poprzez dobór odpowiednich skrótów.</p>
<p>Poniżej przykład uruchomienia narzędzia <strong>top</strong> bez żadnych parametrów (opis wyświetlanych informacji za chwilę).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image14.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image14.png" alt="image14" width="700" height="492" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Sposób prezentacji danych uzyskanych dzięki narzędziu <strong>top</strong> możemy kontrolować jak już wspomniałem w dwojaki sposób. Tak więc w pierwszej kolejności przedstawię wykorzystanie narzędzia z parametrami dodawanymi podczas wywołania programu zaś w dalszej części opisu skupię się na skrótach.</p>
<p>Pierwszy przykład będzie dotyczył wykorzystania znanych nam już numerów PID procesów programów Mozilla Firefox oraz Libre Writer. Numery PID procesów poznaliśmy dzięki narzędziu <strong>ps</strong>. Aby mieć stały wgląd na to co dzieje się z uruchomionymi aplikacjami możemy włączyć monitorowanie ich stanu poprzez wykorzystanie polecenia: <strong>top -p <PID_procesu></strong> Po wywołaniu polecenia zostaną wyświetlone tylko informacje odnoszące się do zdefiniowanych numerów PID procesów. W naszym przypadku chcemy monitorować stan dwóch aplikacji tak więc polecenie przyjmie postać: <strong>top -p 2404, 2514</strong> (numery PID oddzielamy przecinkami). Wywołanie komendy spowoduje wyświetlenie stanu procesu przeglądarki Firefox oraz stanu procesu edytora tekstu Writer.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image15.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image15.png" alt="image15" width="700" height="328" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby włączyć monitorowanie procesów konkretnego użytkownika należy skorzystać z flagi <strong>-u</strong> po której to podajemy <strong>nazwę użytkownika</strong>. Wyświetlenie działających procesów użytkownika <strong>luk</strong> wywołamy po wydaniu komendy: <strong>top -u luk </strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image16.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image16.png" alt="image16" width="700" height="493" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś stan procesów zapisać do zewnętrznego pliku by później zająć się ich analizą do polecenia <strong>top</strong> należy dodać parametr <strong>-b</strong>. Poniżej przykład polecenia nakazującego zapis stanu procesów użytkownika <strong>luk</strong> do zewnętrznego pliku <strong>procesy_user_luk.txt</strong> - polecenie: <strong>top -b -n 3 -u luk > procesy_user_luk.txt</strong> Użyty dodatkowy parametr <strong>-n</strong> nakazuje wykonanie zapisu trzech stanów.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image17.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image17.png" alt="image17" width="700" height="600" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dodatkowy przełącznik <strong>-d</strong> pozwala na zdefiniowanie czasu odświeżania i tak aby np. odświeżyć widok co 2 sekundy 10 razy skorzystaj z polecenia: <strong>top -n 10 -d 2 </strong>Parametr<strong> -i </strong> odpowiedzialny jest za wyłączenie pokazywania nieaktywnych procesów zaś flaga <strong>-H</strong> umożliwia włączenia pokazywania wątków procesów.</p>
<p>Podczas pracy narzędzia <strong>top</strong> możliwe jest skorzystanie z skrótów, które pozwolą nam w sposób interakcyjny wpłynąć na wynik uzyskiwanych informacji. Co warto zaznaczyć podczas zabawy z programem <strong>top</strong> możemy spowodować, że system nasz zacznie pracować niestabilnie. Aby wykluczyć opcję takiego zachowania systemu narzędzie <strong>top</strong> możemy uruchomić w trybie bezpiecznym w którym to opcje potencjalnie niebezpieczne zostaną wyłączone. Aby uruchomić <strong>top</strong> w trybie secure wydaj polecenie: <strong>top -s</strong></p>
<p>Podczas działania narzędzia <strong>top</strong> następujące skróty (klawisze) są aktywne:</p>
<p style="margin-left: 60px;"><strong>h</strong> - wyświetla pomoc programu,</p>
<p style="margin-left: 60px;"><strong>d (bądź s)</strong> - zmienia czas odświeżania,</p>
<p style="margin-left: 60px;"><strong>spacja</strong> - natychmiastowe odświeżenie ekranu,</p>
<p style="margin-left: 60px;"><strong>strzałki</strong> - przewijanie ekranu (dostępne są również klawisze: Page Up, Page Down, Home oraz End),</p>
<p style="margin-left: 60px;"><strong>n</strong> - pozwala na zdefiniowanie ilości wyświetlanych procesów (0 - pokazuje wszystkie),</p>
<p style="margin-left: 60px;"><strong>f</strong> - pozwala na zdefiniowanie wyświetlanych informacji oraz na sposobie ich reprezentacji. Po wciśnięciu <strong>f</strong> na nowo otwartym ekranie za pomocą <strong>spacji</strong> włączamy/wyłączamy określony parametr procesu zaś po wybraniu <strong>prawej strzałki</strong> dany element możemy przemieszczać definiując w ten sposób kolejność prezentowania danych (sortowanie wyłączamy <strong>lewą strzałką</strong>),</p>
<p style="margin-left: 60px;"><strong>M</strong> - sortowanie procesów według zajmowanej pamięci,</p>
<p style="margin-left: 60px;"><strong>N</strong> - sortowanie procesów według PID-u,</p>
<p style="margin-left: 60px;"><strong>P</strong> - sortowanie procesów według użycia CPU (domyślne),</p>
<p style="margin-left: 60px;"><strong>T</strong> - sortowanie procesów według czasu,</p>
<p style="margin-left: 60px;"><strong>k</strong> - zabicie procesu. Po wciśnięciu klawisza zostaniemy poproszeni o podanie numeru PID interesującego nas procesu a w kroku kolejnym będziemy musieli określić sygnał jaki ma zostać wysłany by dany proces zamknąć. Domyślna wartość sygnału to 15 jeżeli użyjesz wartości 9 zabicie procesu będzie bardziej „brutalne”,</p>
<p style="margin-left: 60px;"><strong>r</strong> - zmienia wartość priorytetu (nice) działającego procesu, ustalenie wartości poniżej 0 wymaga uruchomienia narzędzia przez użytkownika root (o priorytetach procesów dowiesz się więcej za chwilę),</p>
<p style="margin-left: 60px;"><strong>W</strong> - zapisanie konfiguracji narzędzia <strong>top</strong>,</p>
<p style="margin-left: 60px;"><strong>A </strong>- przełącza narzędzie <strong>top</strong> do widoku wielu okien (4) w każdym oknie możemy zdefiniować inne zasady wyświetlania informacji (okno wybieramy przy użyciu klawisza <strong>g</strong>).</p>
<p> </p>
<p>Opisałem jak sterować wyświetlaniem informacji lecz nie powiedziałem nic o danych jakie informacje narzędzie <strong>top</strong> potrafi nam dostarczyć. Tak więc nadrabiam zaległości.</p>
<p>Wszystkie informacje pozyskane po uruchomieniu aplikacji są zgrupowane w kolumnach. Nad definicją nagłówków kolumn tabeli mamy ukazane informacje ogólne.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image18.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image18.png" alt="image18" width="700" height="448" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wśród ukazanych danych możemy odszukać informację o:</p>
<p style="margin-left: 60px;">Linia pierwsza: <strong>top</strong> - to informacja o aktualnej dacie i godzinie; czas uruchomienia systemu (up 14 min); liczbę użytkowników (2 users); średnie obciążenie (load average),</p>
<p style="margin-left: 60px;">Linia druga: <strong>Tasks</strong> - to informacja o liczbie wszystkich zadań (160 total); zadań aktualnie uruchomionych (1 running); zadań uśpionych (159 sleeping); zadań zatrzymanych (0 stopped); zadań zombie - nieprawidłowo zamkniętych (0 zombie),</p>
<p style="margin-left: 60px;">Linia trzecia: <strong>%Cpu(s)</strong> - to informacje odnoszące się do procesora: us - czas użytkownika; sy - czas systemu; ni - czas nice; id - czas bezczynności; wa - czas operacji wejścia/wyjścia; hi - czas obsługi przerywań sprzętowych; si - czas obsługi przerywań programowych,</p>
<p style="margin-left: 60px;">Linia czwarta: <strong>Mem</strong> - to informacja o pamięci (jednostka kB): pamięć całkowita (total); pamięć wykorzystana (used); pamięć wolna (free); bufor (buffers),</p>
<p style="margin-left: 60px;">Linia piąta: <strong>Swap</strong> - to informacja o pliku wymiany (jednostka kB): rozmiar całkowity (total); użycie (used); wolne (free); pamięć podręczna (cached Mem).</p>
<p> </p>
<p>Natomiast nagłówki tabeli dostarczają nam następujących danych (informacje te odnoszą się do konkretnego zadania; część informacji domyślnie jest wyłączona aby włączyć ich wyświetlanie skorzystaj z klawisza f):</p>
<p style="margin-left: 60px;"><strong>PID</strong> - identyfikator procesu,</p>
<p style="margin-left: 60px;"><strong>PPID</strong> - identyfikator procesu rodzica,</p>
<p style="margin-left: 60px;"><strong>USER</strong> - właściciel procesu/zadania,</p>
<p style="margin-left: 60px;"><strong>UID</strong> - identyfikator właściciela procesu (0 oznacza użytkownika root),</p>
<p style="margin-left: 60px;"><strong>PR</strong> - priorytet zadania,</p>
<p style="margin-left: 60px;"><strong>NI</strong> - wartość parametru nice,</p>
<p style="margin-left: 60px;"><strong>VIRT</strong> - wykorzystywany rozmiar pamięci wirtualnej,</p>
<p style="margin-left: 60px;"><strong>RES</strong> - wykorzystywany rozmiar pamięci fizycznej,</p>
<p style="margin-left: 60px;"><strong>SHR</strong> - wykorzystywany rozmiar pamięci współdzielonej,</p>
<p style="margin-left: 60px;"><strong>S</strong> - stan procesu - poszczególne oznaczenia literowe (podobnie jak w przypadku narzędzia <strong>ps</strong>) oznaczają: S - proces uśpiony; Z - proces zombie; R - proces uruchomiony; T - proces zatrzymany,</p>
<p style="margin-left: 60px;"><strong>%CPU</strong> - procent czasu procesora,</p>
<p style="margin-left: 60px;"><strong>%MEM</strong> - procent wykorzystywanej przez proces pamięci fizycznej,</p>
<p style="margin-left: 60px;"><strong>TIME+</strong> - całkowity czas procesora poświęcony zadaniu,</p>
<p style="margin-left: 60px;"><strong>COMMAND</strong> - polecenie uruchamiające dane zadanie bądź proces.</p>
<p> </p>
<p>Narzędziem bardzo podobnym do aplikacji <strong>top</strong> jest program <strong>htop</strong>. Program również w czasie rzeczywistym pokazuje nam stan uruchomionych procesów.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image19.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image19.png" alt="image19" width="700" height="578" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Narzędzie to umożliwia nam sterowanie wyświetlanymi danymi za pomocą klawiszy funkcyjnych od F1 do F10. Program daje nam możliwość wyszukania danego procesu, użycia filtrów, ukazania drzewa procesów, sortowania, zmianę parametru nice a także zabicie danego procesu. Dodatkowo nad tabelą przedstawione są dane ogólne – tj.: użycie procesora; wykorzystanie pamięci i pliku wymiany; liczbę uruchomionych zadań; średnie obciążenie systemu po upływie 1, 5 i 15 minut; czas pracy systemu.</p>
<p>Uruchomienie narzędzia poprzez dodanie w wierszu poleceń odpowiednich parametrów umożliwia nam wstępne zdefiniowanie uzyskiwanych informacji:</p>
<p style="margin-left: 60px;"><strong>-d <sekunda></strong> - określenie czasu odświeżania,</p>
<p style="margin-left: 60px;"><strong>-u <użytkownik></strong> - wyświetlenie procesów zdefiniowanego użytkownika,</p>
<p style="margin-left: 60px;"><strong>-p <PID></strong> - wyświetlenie zadania o określonej wartości numeru PID (gdy chcesz wyświetlić więcej zadań PID-y oddziel od siebie przecinkami),</p>
<p style="margin-left: 60px;"><strong>-s <rodzaj_sortowania></strong> - wyświetlenie danych posortowanych według ustalonej kolumny, pełna nazwa kolumn dostępna po wydaniu polecenia: <strong>htop --sort-key=help</strong></p>
<p> </p>
<p>Dużą zaletą narzędzia (niż omówionego programu <strong>top</strong>) jest w pełni interaktywny sposób zarządzania procesami za pomocą klawiszy funkcyjnych.</p>
<p>Innymi programami, którymi możemy posłużyć się celem obserwacji uruchomionych procesów są programy <strong>ksysguard</strong>, który jest dedykowany dla środowiska KDE oraz <strong>gtop</strong> przeznaczony dla środowiska GNOM.</p>
<p>W wpisie tym kilka razy pojawił się termin <strong>nice</strong>, parametr ten określa z jaki priorytetem jest uruchomiony dany proces. Zakres tego priorytetu (ang. niceness level) rozciąga się od -20 do 19 przy czym wartość -20 oznacza priorytet najwyższy zaś wartość 19 priorytet najniższy. Aby zmodyfikować wartość z jakim dane zadanie jest uruchamiane możemy skorzystać z narzędzia <strong>nice</strong>.</p>
<p>Użycie narzędzia jest bardzo proste wystarczy wydać polecenie: <strong>nice <nazwa_zadania></strong> Jako przykład niech posłuży nam takie polecenie: <strong>nice mcedit</strong> Wydanie komendy spowoduje uruchomienie programu mcedit. Sprawdźmy zatem wartość parametru nice z jakim to narzędzie zostało uruchomione.</p>
<p>W pierwszej kolejności za pomocą polecenia: <strong>ps auxw | grep mcedit</strong> zidentyfikujemy numer procesu PID uruchomionego programu mcedit. A następnie za pomocą komendy: <strong>top -p <numer_PID> -n 1 -b</strong> wyświetlimy dane dotyczące procesu o zadanym numerze PID (użyta flaga <strong>-b</strong> w narzędziu <strong>top</strong> spowoduje wyświetlenie informacji narzędzia <strong>top</strong> bez czyszczenia okna). Jak widać po poniższym zrzucie w poleceniu została użyta wartość 2754 ponieważ jest to PID zadania mcedit.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image20.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image20.png" alt="image20" width="700" height="448" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Z zrzutu tego uzyskamy również informację o poszukiwanym parametrze nice. Jak już pewnie Czytelniku zauważyłeś wartość parametru nice zadania mcedit wynosi <strong>10</strong>. Wartość ta jest domyślną wartością z jaką będą uruchamiane programy z wykorzystaniem narzędzia <strong>nice</strong>.</p>
<p>Pytanie brzmi - Czy proces poznania wartości przypisanej do parametru nice musi być wykonany w ten sposób, czy nie można tego wykonać prościej? Odpowiedź na to pytanie brzmi – Można wykonać to łatwiej przy użyciu tylko jednego narzędzia jakim jest <strong>ps</strong> (wybacz Czytelniku, że trochę sprawę skomplikowałem ale zależało mi na tym byś poznał jak najwięcej zastosowań omawianych narzędzi). Tak więc ustalony parametr <strong>nice</strong> poznasz szybciej dołączając do narzędzia <strong>ps</strong> flagę <strong>-l</strong> Po wydaniu polecenia: <strong>ps -l a | grep mcedit </strong>stosowna informacja zostanie zawarta w wyświetlonych danych. Jak można zauważyć wartość parametru <strong>nice</strong> poznana po wydaniu polecenia pokrywa się z tą poznaną dzięki narzędziu <strong>top</strong> i wynosi <strong>10</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image21.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image21.png" alt="image21" width="700" height="89" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użycie przełącznika <strong>-l</strong> w narzędziu <strong>ps</strong> pozwala nam na dołączenie do już wyświetlanych danych informacji dodatkowych (bardziej szczegółowych). Dodatkowe kolumny, które zostaną zawarte po użyciu flagi <strong>-l </strong>to informacje o:</p>
<p style="margin-left: 60px;"><strong>UID</strong> - identyfikator właściciela procesu,</p>
<p style="margin-left: 60px;"><strong>PPID</strong> - identyfikator procesu macierzystego,</p>
<p style="margin-left: 60px;"><strong>PRI</strong> i <strong>NI</strong> - priorytety procesów,</p>
<p style="margin-left: 60px;"><strong>WCHAN</strong> - pozwala sprawdzić jaką funkcję systemowy jądra wywołał proces.</p>
<p> </p>
<p>OK wiemy, że wywołanie narzędzia <strong>nice</strong> bez zdefiniowanie parametru procesu włącza dane zadanie z domyślnie zdefiniowaną wartością parametru nice ustawioną na 10. A co gdybyśmy dane zadanie chcieli uruchomić z wartością niższą bądź wyższą? A by wykonać to zadanie do składni polecenia wywołującego dany program musimy dołączyć parametr <strong>-n</strong> po którym to definiujemy wartość nice. Użycie np. takiej komendy: <strong>nice -n -20 mcedit</strong> spowoduje uruchomienie narzędzia mcedit z możliwie najwyższym do zdefiniowania priorytetem -20. Poniżej na zrzucie przedstawiono efekt wydanej komendy, jak widać sprawdzenie (oba wyżej opisane sposoby) tylko utwierdza nas w przekonaniu, że narzędzie mcedit zostało uruchomione z najwyższą wartością parametru nice.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image22.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image22.png" alt="image22" width="700" height="350" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wiemy już jak uruchomić zadanie z żądanym priorytetem - A co w przypadku w którym chcemy zmienić priorytet już uruchomionego zadania?</p>
<p>Aby wykonać to zadanie musimy skorzystać z polecenia: <strong>renice <wartość_parametru_nice> <PID_procesu></strong> Tak więc aby zmienić wartość parametru nice z -20 na 10 uruchomionego zadania mcedit (kontynuujemy przykład zaprezentowany wyżej) o numerze PID równym 2499 należy wydać polecenie: <strong>renice +10 2499</strong> Po wydaniu komendy sprawdźmy efekt jej wydania.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image23.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image23.png" alt="image23" width="700" height="386" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Jak można zauważyć powyżej wydanie polecenia <strong>renice</strong> zmieniło priorytet zadania mcedit. Nowa wartość parametru nice wynosi 10.</p>
<p>To jeszcze jeden przykład – zmiana parametru nice z 10 na -5 (pamiętaj, że zmiana wartości poniżej 0 wymaga praw użytkownika root).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image24.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image24.png" alt="image24" width="700" height="374" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Uważny czytelnik na pewno zauważył, że nie jest to jedyny sposób dokonania modyfikacji parametru nice. Poznane narzędzia <strong>top</strong> oraz <strong>htop</strong> również oferują nam taką możliwość.</p>
<p>Aby zredukować ilość danych ograniczmy się do wyświetlenia informacji dotyczących tylko zadania mcedit. Aby to wykonać wydajmy polecenie: <strong>top -p 2499</strong> Po wydaniu polecenia będziemy mieli wgląd w parametry tylko tego zadania.</p>
<p>Po uruchomieniu narzędzia <strong>top</strong> aby dokonać modyfikacji parametru nice wciskamy klawisz <strong>r</strong>. Na postawione pytanie – o numer procesu PID klikamy <strong>enter</strong> (numer PID zadania mcedit jest ustawiony domyślnie) gdyby tak się nie stało wprowadzamy go ręcznie.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image25.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image25.png" alt="image25" width="700" height="274" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Po podaniu informacji o numerze PID definiujemy wartość parametru nice. W naszym ćwiczeniu decydujemy się parametr ten ustawić na wartość 7.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image26.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image26.png" alt="image26" width="700" height="227" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Po zatwierdzeniu możemy sprawdzić stan parametru nice za pomocą znanych nam poleceń. Jak widać poniżej wartość nice wynosi 7.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image27.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image27.png" alt="image27" width="700" height="345" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Nieraz zdarza się, że na wskutek nieprawidłowego działania programu musimy zakończyć jego proces. Z reguły uruchamiając jakieś zadanie w terminalu aby je zakończyć należy posłużyć się kombinacją klawiszy Ctrl+C lecz w pewnych sytuacjach zabieg ten może okazać się niewystarczający. Wtedy musimy sięgnąć po bardziej drastyczne środki i proces zakończyć ręcznie. Aby zakończyć zadanie należy skorzystać z polecenia: <strong>kill <nazwa_bądź_numer_sygnału> PID</strong></p>
<p>Z uruchomionymi zadaniami możemy porozumieć się poprzez wysłanie do nich odpowiedniego sygnału. Sygnały te są określone i zdefiniowane (nazwa + numer) a pełną ich listę do użycia z narzędziem <strong>kill</strong> poznamy po wydaniu polecenia: <strong>kill -l</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image28.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image28.png" alt="image28" width="700" height="273" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Najczęściej używane sygnały to:</p>
<p style="margin-left: 60px;">sygnał 2 - SIGINT - przerwanie wykonania procesu wywołane wciśnięciem klawiszy Ctrl + C,</p>
<p style="margin-left: 60px;">Sygnał 3 - SIGQUIT - przerwanie wykonania procesu wywołane wciśnięciem klawiszy Ctrl + \ sygnał ten dodatkowo nakazuje wykonanie obrazu pamięci procesu,</p>
<p style="margin-left: 60px;">sygnał 9 - SIGKILL - zabicie procesu,</p>
<p style="margin-left: 60px;">sygnał 15 - SIGTERM - miękkie zakończenie procesu, sygnał ten jest domyślnie zdefiniowany gdy nie wskażemy w poleceniu innego,</p>
<p style="margin-left: 60px;">sygnał 19 - SIGSTOP - zatrzymanie wykonywania procesu wywołane wciśnięciem klawiszy Ctrl + Z, tak zatrzymany proces możemy następnie wznowić wykorzystując do tego narzędzie <strong>fg</strong> bądź <strong>bg</strong>.</p>
<p> </p>
<p>Tak więc aby zabić dany proces należy wydać polecenie: <strong>kill <PID></strong> Poniżej przykład zabicia procesu przeglądarki Firefox.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image29.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Do zidentyfikowania numeru PID przeglądarki zostało wykorzystane narzędzie <strong>pgrep</strong> (jeszcze jeden dodatkowy sposób by poznać PID procesu). Narzędzie <strong>pgrep</strong> zostało wywołane z parametrem <strong>-l</strong> który jest odpowiedzialny za wyświetlenie pełnej nazwy procesu. Narzędzie to świetnie sprawdza się w sytuacji w której znamy nazwę uruchomionego procesu. Wywołanie polecenie bez flagi <strong>-l</strong> spowoduje wyświetlenie samej wartości numeru procesu.</p>
<p>Aby wysłać określony sygnał do procesu w poleceniu <strong>kill</strong> definiujemy jego wartość. Wartość ta może być podana w sposób numeryczny bądź słowny. Aby nakazać wysłanie sygnału SIGKILL, zabijając w ten sposób proces możemy skorzystać z polecenia przedstawionego na poniższym zrzucie (tradycyjnie już zabijamy proces przeglądarki).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image30.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zakończyć wszystkie procesy o danej nazwie należy skorzystać z polecenia<strong>: killall <nazwa_procesu></strong>. Narzędzie to posiada kilka przydatnych przełączników:</p>
<p style="margin-left: 60px;"><strong>-u <użytkownik> <proces></strong> - zabicie wszystkich procesów danego użytkownika, brak definicji procesu spowoduje zabicie wszystkich procesów zdefiniowanego użytkownika,</p>
<p style="margin-left: 60px;"><strong>-o <czas></strong> - zabicie procesów starszych niż zdefiniowany czas,</p>
<p style="margin-left: 60px;"><strong>-y <czas> -</strong> zabicie procesów młodszych niż zdefiniowany czas. Czas określamy za pomocą następujących zmiennych: <strong>s</strong> dla sekund; <strong>m</strong> dla minut; <strong>h</strong> dla godzin; <strong>d</strong> dla dni; <strong>w</strong> dla tygodni; <strong>M</strong> dla miesięcy; <strong>y</strong> dla lat,</p>
<p style="margin-left: 60px;"><strong>-s</strong> <strong><sygnał></strong> - określenie wysyłanego sygnału zamiast domyślnego SIGTERM,</p>
<p style="margin-left: 60px;"><strong>-I</strong> - brak rozróżniania wielkości liter dla definiowanych procesów.</p>
<p> </p>
<p>Narzędziem pozwalającym nam na zabicie procesu bez znajomości jego PID-u lecz z wykorzystaniem nazwy procesu jest program <strong>pkill</strong>. Zabicie danego programu odbywa się po wydaniu komendy: <strong>pkill <nazwa_procesu></strong></p>
<p>Zabicie danego procesu możemy również wykonać za pomocą omówionych narzędzi <strong>top</strong> oraz <strong>htop</strong>.</p>
<p>W systemie Linux występuje katalog <strong>/proc</strong> W katalogu tym zawarte są informacje o działających procesach. Reprezentacja danego procesu jest realizowana poprzez zapis katalogu. Nazwa katalogu odpowiada numerowi PID procesu. W danym katalogu są umieszczone pliki, które opisują status danego procesu, np.: plik cmdline zawiera polecenie uruchamiające dany proces a plik status informacje o stanie procesu.</p>
<p>Katalog <strong>/proc</strong> możemy przeglądać za pomocą opisanego w poprzednim wpisie dotyczącym powłoki bash polecenia <strong>ls</strong> . Jak widać poniżej proces przeglądarki Firefox o numerze PID 2445 ma swoje odzwierciedlenie w folderze <strong>/proc</strong> w formie katalogu o nazwie 2445.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image31.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image31.png" alt="image31" width="700" height="540" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>System plików <strong>/proc</strong> jest całkowicie wirtualny co oznacza, że nie jest on nigdzie zapisany na dysku a istnieje tylko w pamięci. Za utworzenie i zapis informacji odpowiada jądro systemu a jego głównym zadaniem jest dostarczenie informacji o systemie.</p>
<p>Poniżej przedstawiam listę co ważniejszych pozycji znajdujących się w <strong>/proc</strong>.</p>
<p style="margin-left: 60px;"><strong>/proc/cpuinfo</strong> - wykaz informacji o procesorze: model, wydajność, itp.,</p>
<p style="margin-left: 60px;"><strong>/proc/consoles</strong> - informacja o terminalach,</p>
<p style="margin-left: 60px;"><strong> /proc/crypto</strong> - zabezpieczenia kryptograficzne,</p>
<p style="margin-left: 60px;"><strong>/proc/devices </strong>- lista urządzeń,</p>
<p style="margin-left: 60px;"><strong>/proc/filesystems</strong> - informacja o dostępnych systemach plików,</p>
<p style="margin-left: 60px;"><strong>/proc/interrupts </strong>- lista przerwań wykorzystywanych przez system,</p>
<p style="margin-left: 60px;"><strong>/proc/ioports</strong> - porty wejścia/wyjścia,</p>
<p style="margin-left: 60px;"><strong>/proc/kcore</strong> - obraz pamięci systemu,</p>
<p style="margin-left: 60px;"><strong>/proc/meminfo</strong> - wykaz użycia pamięci fizycznej i swapu.</p>
<p style="margin-left: 60px;"><strong>/proc/modules </strong>- lista modułów wykorzystywana przez system,</p>
<p style="margin-left: 60px;"><strong>/proc/net</strong> - informacje o protokołach sieciowych,</p>
<p style="margin-left: 60px;"><strong>/proc/partitions</strong> - lista partycji,</p>
<p style="margin-left: 60px;"><strong>/proc/stat</strong> -statystyki systemu,</p>
<p style="margin-left: 60px;"><strong>/proc/uptime</strong> - czas pracy systemu,</p>
<p style="margin-left: 60px;"><strong>/proc/version</strong> - wersja jądra,</p>
<p style="margin-left: 60px;"><strong>/proc/vmstat</strong> - statystyki użycia pamięci wirtualnej.</p>
<p> </p>
<p>Informacje zawarte w tych plikach można oczywiście odczytywać np. przy pomocy narzędzia <strong>cat</strong> lecz nie należy ich edytować gdyż może to doprowadzić do niestabilnej pracy systemu.</p>
<p>Poniżej przykład użycia narzędzia <strong>cat</strong> celem uzyskania informacji o wykorzystaniu pamięci.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image32.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Co warto nadmienić szereg narzędzi korzysta z informacji zawartych w <strong>/proc</strong>. Przeglądając poszczególne pliki możemy uzyskać bardzo wiele informacji o naszym systemie choć co trzeba przyznać forma prezentacji tych danych jest czasem mało atrakcyjna.</p>
<p>To tej pory przedstawiłem narzędzia, które działają w konsoli systemu Linux jest również kilka programów, które potrafią zarządzać procesami w trybie graficznym. Ja bym chciał przedstawić dwa. Do takich standardowych programów należy: <strong>gnome-system monitor</strong> (by wywołać program w terminalu należy wpisać jego nazwę).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image33.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image33.png" alt="image33" width="700" height="435" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Monitor systemu pozwala nam na: zatrzymanie i wznowienie danego procesu, zatrzymanie procesu, zmianę jego priorytetu a także na uzyskanie podstawowych informacji o danym zadaniu (dostępne po kliknięciu na <strong>Właściwości</strong>).</p>
<p>Programem graficznym o podobnej funkcjonalności co systemowy Monitor systemu jest: <strong>lxtask</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image34.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image34.png" alt="image34" width="700" height="478" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>I na koniec jeszcze kilka prostych programów, które z procesami są powiązane bezpośrednio lub pośrednio a pozwalają na uzyskanie przydatnych informacji.</p>
<p>Pierwsze narzędzie to <strong>w</strong>, wydanie komendy pozwoli nam przejrzeć procesy każdej powłoki wszystkich zalogowanych użytkowników.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image35.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image35.png" alt="image35" width="700" height="131" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Narzędzie to podaje nam następujące informacje:</p>
<p style="margin-left: 60px;"><strong>górny pierwszy wiersz</strong> (od lewej) - aktualny czas; czas pracy systemu; liczbę zalogowanych użytkowników oraz średnie obciążenie systemu - trzy wartości: ostatnia minuta, ostatnie pięć minut, ostatnie piętnaście minut,</p>
<p style="margin-left: 60px;"><strong>kolumny</strong> to informacja o: użytkowniku; identyfikatorze terminala; komputerze z którego nastąpiło logowanie; czasie w którym nastąpiło logowanie; czasie bezczynności; czasie zużycia procesora (JCPU oraz PCPU) oraz uruchomionym zadaniu.</p>
<p> </p>
<p>Narzędzie <strong>xload</strong> w sposób graficzny przedstawia nam obciążenie procesora (oś Y) w funkcji czasu (oś X). Użyta flaga <strong>-update</strong> ustawia odświeżanie (domyślnie 10 sekund).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image36.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Polecenie <strong>free</strong> poda nam zużycie pamięci (jednostka kB).</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_2/image37.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Opcje:</p>
<p style="margin-left: 60px;"><strong>-s <sekunda></strong> - ciągłe działanie programu, odświeżanie o ustaloną wartość,</p>
<p style="margin-left: 60px;"><strong>-b</strong> - zmiana jednostki na bajty,</p>
<p style="margin-left: 60px;"><strong>-m</strong> - zmiana jednostki na megabajty,</p>
<p style="margin-left: 60px;"><strong>-t</strong> - podsumowanie.</p>
<p> </p>
<p>Zadaniem narzędzia <strong>fuser</strong> jest wyświetlenie nazw procesów, które korzystają z podanych plików bądź katalogów. Po wywołaniu narzędzia z parametrem <strong>-v</strong> nakazującym wyświetlenie bardziej szczegółowych informacji i podaniu lokacji uzyskamy listę procesów korzystających z tejże lokacji. Poniżej w przykładzie ukazano procesy korzystające z katalogu domowego użytkownika luk.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image38.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image38.png" alt="image38" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Uzyskane dane dostarczają nam informacji o użytkowniku, PID-zie procesu, nazwie procesu a także rodzaju uzyskanego dostępu. Rodzaj ustanowionego dostępu jest określany za pomocą symboli literowych:</p>
<p style="margin-left: 60px;"><strong>c</strong> - katalog bieżący,</p>
<p style="margin-left: 60px;"><strong>e</strong> - uruchomiony plik wykonywalny,</p>
<p style="margin-left: 60px;"><strong>f</strong> - otwarty plik, pomijane w domyślnym trybie wyświetlania,</p>
<p style="margin-left: 60px;"><strong>r</strong> - katalog root,</p>
<p style="margin-left: 60px;"><strong>m</strong> - mmap-owany plik lub biblioteka dzielona.</p>
<p> </p>
<p>Wywołanie narzędzia bez flagi <strong>-v</strong> wyświetli tylko numer procesów PID i rodzaj ustanowionego dostępu.</p>
<p>Programu możemy również użyć do monitorowania otwartych połączeń sieciowych. Poniżej przykład sprawdzenia dostępności serwera FTP.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image39.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Programu możemy również użyć do zabicia procesów odnoszących się np. do danego katalogu. Wydanie polecenia: <strong>fuser -v -k -i</strong> <strong>.</strong> spowoduje zabicie wszystkich procesów odnoszących się do katalogu domowego użytkownika przy czym dołączenie flagi <strong>-i</strong> powoduje, że jesteśmy pytani o potwierdzenie wykonania wyłączenia każdego zadania z osobna. Pominięcie parametru <strong>-i</strong> spowoduje automatyczne zabicie wszystkich procesów.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image40.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>I to by było na tyle jeśli chodzi o polecenia i narzędzia pozwalające nam kontrolować uruchomione zadania i procesy w systemie Linux. Jeśli Czytelniku znasz inne narzędzia i chciałbyś się tą wiedzą podzielić zapraszam do komentowania. A w kolejnym wpisie zajmiemy się użytkownikiem.</p>
<p> </p>
<hr />
<p> </p>
<p>Bibliografia:</p>
<p> </p>
<p><a href="http://www.cyberciti.biz/faq/unix-linux-killall-command-examples-usage-syntax/">http://www.cyberciti.biz/faq/unix-linux-killall-command-examples-usage-syntax/</a></p>
<p><a href="http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html">http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html</a></p>
<p><a href="http://www.thegeekstuff.com/2012/02/linux-fuser-command/">http://www.thegeekstuff.com/2012/02/linux-fuser-command/</a></p>
<p><a href="http://www.computerhope.com/unix/ubash.htm">http://www.computerhope.com/unix/ubash.htm</a></p>
<p><a href="http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html">http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html</a></p></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/a42a2aa6c7440291c38ba9adc5892a56_S.jpg" alt="Dogadać się z Linuxem. Zarządzanie procesami." /></div><div class="K2FeedIntroText"><p>W tym wpisie zajmiemy się narzędziami, które pozwolą nam na kontrolowaniem uruchamianych procesów w systemie Linux. Większość przedstawionych narzędzi będzie dotyczyć powłoki bash lecz pojawią się również aplikacje, które umożliwią nam zarządzanie zadaniami w trybie graficznym. Tak by nie przedłużać przechodzimy do tematu wpisu.</p>
</div><div class="K2FeedFullText">
<p>Narzędzie <strong>ps</strong> pozwala nam na wyświetlenie listy wszystkich procesów, które są aktualnie wykonywane przez system. Narzędzie te pobiera informacje z systemu plików <strong>/proc</strong> W bazie tej każdy proces ma swoje odzwierciedlenie. Aby wyświetlić wszystkie możliwe parametry narzędzia wydaj polecenie: <strong>ps --help all</strong></p>
<p>Wydanie samego polecenia <strong>ps</strong> bez żadnego parametru uwidoczni nam tylko procesy skojarzone z danym terminalem (TTY - ang. TeleTYpewriter).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image1.png" target="_blank" type="image/png" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Jak widać powyżej nie uzyskaliśmy zbyt wielu informacji (tylko 3 procesy) tak więc by ten stan zmienić poniżej przedstawię kilka przykładów użycia narzędzia, które pozwolą nam na uzyskanie bardziej szczegółowych danych o tym co w danej chwili jest w systemie uruchomione. Lecz przed tym jeszcze krótkie wprowadzenie o tym jak narzędzie <strong>ps</strong> przedstawia nam dane (tak byśmy rozumieli to co nam na ekranie się pojawi).</p>
<p>Podczas korzystania z narzędzia <strong>ps</strong> przedstawiane dane (rodzaj prezentowanych danych zależy od użytych przełączników) będą zgrupowane w tabeli. Poniżej zestawienie nagłówków tabeli oznaczające parametry procesu:</p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li><strong>USER</strong> - właściciel procesu,</li>
<li><strong>PID</strong> – Process ID - identyfikator danego procesu, używany do jego identyfikacji co ważne w tym samym czasie PID nie może być przydzielony dwóm różnym procesom,</li>
<li><strong>%CPU</strong> – procentowe użycie procesora</li>
<li><strong>%MEM</strong> –procentowe użycie pamięci</li>
<li><strong>VSZ</strong> – przydzielona pamięć wirtualna w kB,</li>
<li><strong>RSS</strong> – przydzielona pamięć fizyczna w kB,</li>
<li><strong>TTY</strong> - identyfikator terminala procesu. Zapis <strong>?</strong> oznacza brak skojarzenia z terminalem.</li>
<li><strong>STAT</strong> – status procesu. Oznaczenia statusu procesu:
<ul>
<li><strong>R</strong> – proces jest aktualnie wykonywany (running),</li>
<li><strong>S</strong> – proces uśpiony, oczekiwanie na jego uruchomienie (sleep),</li>
<li><strong>T</strong> – proces zatrzymany (stopped, np. CTRL-Z)</li>
<li><strong>Z</strong> – zombie process - proces niewłaściwie zamknięty przez proces nadrzędny (proces rodzica bądź proces macieżysty)</li>
</ul>
</li>
<li><strong>START</strong> – czas uruchomienia procesu,</li>
<li><strong>TIME</strong> – użycie procesora wyrażona w czasie,</li>
<li><strong>COMMAND</strong> – nazwa komendy/procesu oraz jego parametry,</li>
<li><strong>NI</strong> – wartość priorytetu nice (o tym później).</li>
</ul>
</li>
</ul>
</li>
</ul>
<p> </p>
<p>Uzbrojeni w tą wiedzę możemy przejść do kilku przykładów.</p>
<p>Aby wyświetlić wszystkie procesy, które są powiązane z terminalami użyj komendy: <strong>ps a</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image2.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image2.png" alt="image2" width="700" height="290" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Oczywiście w systemie istnieją procesy, które w żaden sposób z TTY nie są powiązane tak więc aby również uzyskać informację o tych procesach użyj polecenia: <strong>ps ax</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image3.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image3.png" alt="image3" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby powyższe dane nieco wzbogacić użyj polecenia: <strong>ps auxw</strong> Dodanie przełącznika <strong>u</strong> spowoduje dodanie informacji na temat użytkownika z którym dany proces jest skojarzony natomiast przełącznik <strong>w</strong> jest odpowiedzialny za wyświetlenie parametrów linii poleceń procesu (do polowy linii). Aby wyświetlić pełne dane niezależnie od długości skorzystaj z flagi <strong>ww</strong> (polecenie przyjmie postać: <strong>ps auxww</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image4.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image4.png" alt="image4" width="700" height="455" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś uzyskane wyniki procesów zawęzić do konkretnego użytkownika (w przykładzie użytkownik luk) skorzystaj z polecenia: <strong>ps u -U <nazwa_użytkownika></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image5.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image5.png" alt="image5" width="700" height="279" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby uzyskane wyniki posortować np. według użycia procesora można skorzystać z polecenia: <strong>axuk -pcpu</strong> dozwolona jest również komenda: <strong>ps aux --sort -pcpu</strong> Sortowanie jest wykonane malejąco aby uzyskać efekt odwrotny przed flagą <strong>pcpu</strong> zamiast znaku <strong>-</strong> (minus) użyj znak <strong>+</strong> (plus).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image6.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image6.png" alt="image6" width="700" height="290" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Oczywiście opcji sortowania jest bardzo wiele, wszystko zależy od informacji jakie chcemy uzyskać wszystkie dostępne opcje sortowania zostały umieszczone w linku poniżej (wersja angielska): <a href="http://www.freebsd.org/cgi/man.cgi?query=ps&manpath=SuSE+Linux/i386+11.3">http://www.freebsd.org/cgi/man.cgi?query=ps&manpath=SuSE+Linux/i386+11.3</a></p>
<p>Przeglądając wyniki uzyskane dzięki narzędziu <strong>ps</strong> dojdziemy do wniosku, że uruchomionych i działających procesów w systemie jest bardzo wiele aby odszukać tylko te, które w danej chwili nas interesują można skorzystać z poleceń przedstawionych na poniższym zrzucie. Przykład odnalezienia procesu przeglądarki Mozilla Firefox oraz edytora tekstu Libre Writer. Na zrzucie poniżej zostały ukazane również numer PID szukanych procesów - odpowiednio dla przeglądarki Mozilla Firefox - <strong>2404</strong> oraz Libre Writer - <strong>2514</strong> Numery tych procesów wykorzystamy za chwilkę przy opisie następnego narzędzia jakim jest program <strong>top</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image7.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image7.png" alt="image7" width="700" height="180" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wiele z procesów w systemie Linux zresztą jak w każdym innym systemie jest uruchamiana przy starcie systemu inne zaś są uaktywniane już przez samych użytkowników w momencie pracy z systemem i uruchamiania kolejnych zadań czy programów. Uruchomiony proces może być odpowiedzialny za uruchamianie innych zadań, taki proces staje się wówczas procesem nadrzędnym bądź macierzystym dla procesów, które zostały uruchomione w wyniku jego działania. O procesach, które leżą niżej w hierarchii od procesu macierzystego mówimy, że są to procesy potomne. W systemie Linux takim najważniejszym procesem jest proces <strong>init</strong>, będący rodzicem wszystkich innych procesów. Proces ten ma zawsze przypisaną wartość PID równą 1. Aby przejrzeć całą hierarchię uruchomionych procesów i dodatkowo poznać, który proces jest nadrzędny a który potomny należy skorzystać z polecenia: <strong>pstree</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image8.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Narzędzie to dysponuje dodatkowymi przełącznikami, które pozwalają nam na definicję uzyskiwanych danych do najczęściej wykorzystywanych poleceń należą:</p>
<p><strong>pstree <użytkownik></strong> - wyświetla drzewo procesów danego użytkownika - przykład wyświetlenia procesów użytkownika luk</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image9.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p><strong>pstree <PID></strong> - rozpoczyna budowanie drzewa od procesu z zdefiniowanym numerem PID - w przykładzie proces NetworkManager,</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image10.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p><strong>pstree -p</strong> - do informacji o nazwie procesów dołączane są informacje o numerach PID tychże procesów - ten sam przykład co powyżej,</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image11.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image11.png" alt="image11" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p><strong>pstree -H <PID></strong> - użycie flagi <strong>H</strong> spowoduje podświetlenie procesu,</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image12.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image12.png" alt="image12" width="700" height="318" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p><strong>pstree -n</strong> - spowoduje włączenie sortowanie według numerów PID.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image13.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dostępnych jest jeszcze parę przełączników działających z narzędziem <strong>pstree</strong> aby je poznać skorzystaj z pomocy programu: <strong>pstree --help</strong>.</p>
<p>Zadaniem aplikacji <strong>top</strong> tak samo jak omówionego narzędzia <strong>ps</strong> oraz <strong>pstree</strong> jest przedstawienie nam aktualnego stanu systemu. Stan ten w przeciwieństwie do programu <strong>ps</strong> jest aktualizowany na bieżąco. Oznacza to, że uruchamiając program <strong>top</strong> na żywo mamy podgląd na stan uruchamianych i działających już procesów. Działanie narzędzia kontrolujemy poprzez zastosowanie odpowiednich przełączników, które dodawane są podczas uruchamiania narzędzia lecz mamy również możliwość definiowania stanu wyświetlanych informacji poprzez dobór odpowiednich skrótów.</p>
<p>Poniżej przykład uruchomienia narzędzia <strong>top</strong> bez żadnych parametrów (opis wyświetlanych informacji za chwilę).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image14.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image14.png" alt="image14" width="700" height="492" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Sposób prezentacji danych uzyskanych dzięki narzędziu <strong>top</strong> możemy kontrolować jak już wspomniałem w dwojaki sposób. Tak więc w pierwszej kolejności przedstawię wykorzystanie narzędzia z parametrami dodawanymi podczas wywołania programu zaś w dalszej części opisu skupię się na skrótach.</p>
<p>Pierwszy przykład będzie dotyczył wykorzystania znanych nam już numerów PID procesów programów Mozilla Firefox oraz Libre Writer. Numery PID procesów poznaliśmy dzięki narzędziu <strong>ps</strong>. Aby mieć stały wgląd na to co dzieje się z uruchomionymi aplikacjami możemy włączyć monitorowanie ich stanu poprzez wykorzystanie polecenia: <strong>top -p <PID_procesu></strong> Po wywołaniu polecenia zostaną wyświetlone tylko informacje odnoszące się do zdefiniowanych numerów PID procesów. W naszym przypadku chcemy monitorować stan dwóch aplikacji tak więc polecenie przyjmie postać: <strong>top -p 2404, 2514</strong> (numery PID oddzielamy przecinkami). Wywołanie komendy spowoduje wyświetlenie stanu procesu przeglądarki Firefox oraz stanu procesu edytora tekstu Writer.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image15.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image15.png" alt="image15" width="700" height="328" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby włączyć monitorowanie procesów konkretnego użytkownika należy skorzystać z flagi <strong>-u</strong> po której to podajemy <strong>nazwę użytkownika</strong>. Wyświetlenie działających procesów użytkownika <strong>luk</strong> wywołamy po wydaniu komendy: <strong>top -u luk </strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image16.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image16.png" alt="image16" width="700" height="493" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś stan procesów zapisać do zewnętrznego pliku by później zająć się ich analizą do polecenia <strong>top</strong> należy dodać parametr <strong>-b</strong>. Poniżej przykład polecenia nakazującego zapis stanu procesów użytkownika <strong>luk</strong> do zewnętrznego pliku <strong>procesy_user_luk.txt</strong> - polecenie: <strong>top -b -n 3 -u luk > procesy_user_luk.txt</strong> Użyty dodatkowy parametr <strong>-n</strong> nakazuje wykonanie zapisu trzech stanów.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image17.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image17.png" alt="image17" width="700" height="600" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dodatkowy przełącznik <strong>-d</strong> pozwala na zdefiniowanie czasu odświeżania i tak aby np. odświeżyć widok co 2 sekundy 10 razy skorzystaj z polecenia: <strong>top -n 10 -d 2 </strong>Parametr<strong> -i </strong> odpowiedzialny jest za wyłączenie pokazywania nieaktywnych procesów zaś flaga <strong>-H</strong> umożliwia włączenia pokazywania wątków procesów.</p>
<p>Podczas pracy narzędzia <strong>top</strong> możliwe jest skorzystanie z skrótów, które pozwolą nam w sposób interakcyjny wpłynąć na wynik uzyskiwanych informacji. Co warto zaznaczyć podczas zabawy z programem <strong>top</strong> możemy spowodować, że system nasz zacznie pracować niestabilnie. Aby wykluczyć opcję takiego zachowania systemu narzędzie <strong>top</strong> możemy uruchomić w trybie bezpiecznym w którym to opcje potencjalnie niebezpieczne zostaną wyłączone. Aby uruchomić <strong>top</strong> w trybie secure wydaj polecenie: <strong>top -s</strong></p>
<p>Podczas działania narzędzia <strong>top</strong> następujące skróty (klawisze) są aktywne:</p>
<p style="margin-left: 60px;"><strong>h</strong> - wyświetla pomoc programu,</p>
<p style="margin-left: 60px;"><strong>d (bądź s)</strong> - zmienia czas odświeżania,</p>
<p style="margin-left: 60px;"><strong>spacja</strong> - natychmiastowe odświeżenie ekranu,</p>
<p style="margin-left: 60px;"><strong>strzałki</strong> - przewijanie ekranu (dostępne są również klawisze: Page Up, Page Down, Home oraz End),</p>
<p style="margin-left: 60px;"><strong>n</strong> - pozwala na zdefiniowanie ilości wyświetlanych procesów (0 - pokazuje wszystkie),</p>
<p style="margin-left: 60px;"><strong>f</strong> - pozwala na zdefiniowanie wyświetlanych informacji oraz na sposobie ich reprezentacji. Po wciśnięciu <strong>f</strong> na nowo otwartym ekranie za pomocą <strong>spacji</strong> włączamy/wyłączamy określony parametr procesu zaś po wybraniu <strong>prawej strzałki</strong> dany element możemy przemieszczać definiując w ten sposób kolejność prezentowania danych (sortowanie wyłączamy <strong>lewą strzałką</strong>),</p>
<p style="margin-left: 60px;"><strong>M</strong> - sortowanie procesów według zajmowanej pamięci,</p>
<p style="margin-left: 60px;"><strong>N</strong> - sortowanie procesów według PID-u,</p>
<p style="margin-left: 60px;"><strong>P</strong> - sortowanie procesów według użycia CPU (domyślne),</p>
<p style="margin-left: 60px;"><strong>T</strong> - sortowanie procesów według czasu,</p>
<p style="margin-left: 60px;"><strong>k</strong> - zabicie procesu. Po wciśnięciu klawisza zostaniemy poproszeni o podanie numeru PID interesującego nas procesu a w kroku kolejnym będziemy musieli określić sygnał jaki ma zostać wysłany by dany proces zamknąć. Domyślna wartość sygnału to 15 jeżeli użyjesz wartości 9 zabicie procesu będzie bardziej „brutalne”,</p>
<p style="margin-left: 60px;"><strong>r</strong> - zmienia wartość priorytetu (nice) działającego procesu, ustalenie wartości poniżej 0 wymaga uruchomienia narzędzia przez użytkownika root (o priorytetach procesów dowiesz się więcej za chwilę),</p>
<p style="margin-left: 60px;"><strong>W</strong> - zapisanie konfiguracji narzędzia <strong>top</strong>,</p>
<p style="margin-left: 60px;"><strong>A </strong>- przełącza narzędzie <strong>top</strong> do widoku wielu okien (4) w każdym oknie możemy zdefiniować inne zasady wyświetlania informacji (okno wybieramy przy użyciu klawisza <strong>g</strong>).</p>
<p> </p>
<p>Opisałem jak sterować wyświetlaniem informacji lecz nie powiedziałem nic o danych jakie informacje narzędzie <strong>top</strong> potrafi nam dostarczyć. Tak więc nadrabiam zaległości.</p>
<p>Wszystkie informacje pozyskane po uruchomieniu aplikacji są zgrupowane w kolumnach. Nad definicją nagłówków kolumn tabeli mamy ukazane informacje ogólne.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image18.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image18.png" alt="image18" width="700" height="448" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wśród ukazanych danych możemy odszukać informację o:</p>
<p style="margin-left: 60px;">Linia pierwsza: <strong>top</strong> - to informacja o aktualnej dacie i godzinie; czas uruchomienia systemu (up 14 min); liczbę użytkowników (2 users); średnie obciążenie (load average),</p>
<p style="margin-left: 60px;">Linia druga: <strong>Tasks</strong> - to informacja o liczbie wszystkich zadań (160 total); zadań aktualnie uruchomionych (1 running); zadań uśpionych (159 sleeping); zadań zatrzymanych (0 stopped); zadań zombie - nieprawidłowo zamkniętych (0 zombie),</p>
<p style="margin-left: 60px;">Linia trzecia: <strong>%Cpu(s)</strong> - to informacje odnoszące się do procesora: us - czas użytkownika; sy - czas systemu; ni - czas nice; id - czas bezczynności; wa - czas operacji wejścia/wyjścia; hi - czas obsługi przerywań sprzętowych; si - czas obsługi przerywań programowych,</p>
<p style="margin-left: 60px;">Linia czwarta: <strong>Mem</strong> - to informacja o pamięci (jednostka kB): pamięć całkowita (total); pamięć wykorzystana (used); pamięć wolna (free); bufor (buffers),</p>
<p style="margin-left: 60px;">Linia piąta: <strong>Swap</strong> - to informacja o pliku wymiany (jednostka kB): rozmiar całkowity (total); użycie (used); wolne (free); pamięć podręczna (cached Mem).</p>
<p> </p>
<p>Natomiast nagłówki tabeli dostarczają nam następujących danych (informacje te odnoszą się do konkretnego zadania; część informacji domyślnie jest wyłączona aby włączyć ich wyświetlanie skorzystaj z klawisza f):</p>
<p style="margin-left: 60px;"><strong>PID</strong> - identyfikator procesu,</p>
<p style="margin-left: 60px;"><strong>PPID</strong> - identyfikator procesu rodzica,</p>
<p style="margin-left: 60px;"><strong>USER</strong> - właściciel procesu/zadania,</p>
<p style="margin-left: 60px;"><strong>UID</strong> - identyfikator właściciela procesu (0 oznacza użytkownika root),</p>
<p style="margin-left: 60px;"><strong>PR</strong> - priorytet zadania,</p>
<p style="margin-left: 60px;"><strong>NI</strong> - wartość parametru nice,</p>
<p style="margin-left: 60px;"><strong>VIRT</strong> - wykorzystywany rozmiar pamięci wirtualnej,</p>
<p style="margin-left: 60px;"><strong>RES</strong> - wykorzystywany rozmiar pamięci fizycznej,</p>
<p style="margin-left: 60px;"><strong>SHR</strong> - wykorzystywany rozmiar pamięci współdzielonej,</p>
<p style="margin-left: 60px;"><strong>S</strong> - stan procesu - poszczególne oznaczenia literowe (podobnie jak w przypadku narzędzia <strong>ps</strong>) oznaczają: S - proces uśpiony; Z - proces zombie; R - proces uruchomiony; T - proces zatrzymany,</p>
<p style="margin-left: 60px;"><strong>%CPU</strong> - procent czasu procesora,</p>
<p style="margin-left: 60px;"><strong>%MEM</strong> - procent wykorzystywanej przez proces pamięci fizycznej,</p>
<p style="margin-left: 60px;"><strong>TIME+</strong> - całkowity czas procesora poświęcony zadaniu,</p>
<p style="margin-left: 60px;"><strong>COMMAND</strong> - polecenie uruchamiające dane zadanie bądź proces.</p>
<p> </p>
<p>Narzędziem bardzo podobnym do aplikacji <strong>top</strong> jest program <strong>htop</strong>. Program również w czasie rzeczywistym pokazuje nam stan uruchomionych procesów.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image19.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image19.png" alt="image19" width="700" height="578" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Narzędzie to umożliwia nam sterowanie wyświetlanymi danymi za pomocą klawiszy funkcyjnych od F1 do F10. Program daje nam możliwość wyszukania danego procesu, użycia filtrów, ukazania drzewa procesów, sortowania, zmianę parametru nice a także zabicie danego procesu. Dodatkowo nad tabelą przedstawione są dane ogólne – tj.: użycie procesora; wykorzystanie pamięci i pliku wymiany; liczbę uruchomionych zadań; średnie obciążenie systemu po upływie 1, 5 i 15 minut; czas pracy systemu.</p>
<p>Uruchomienie narzędzia poprzez dodanie w wierszu poleceń odpowiednich parametrów umożliwia nam wstępne zdefiniowanie uzyskiwanych informacji:</p>
<p style="margin-left: 60px;"><strong>-d <sekunda></strong> - określenie czasu odświeżania,</p>
<p style="margin-left: 60px;"><strong>-u <użytkownik></strong> - wyświetlenie procesów zdefiniowanego użytkownika,</p>
<p style="margin-left: 60px;"><strong>-p <PID></strong> - wyświetlenie zadania o określonej wartości numeru PID (gdy chcesz wyświetlić więcej zadań PID-y oddziel od siebie przecinkami),</p>
<p style="margin-left: 60px;"><strong>-s <rodzaj_sortowania></strong> - wyświetlenie danych posortowanych według ustalonej kolumny, pełna nazwa kolumn dostępna po wydaniu polecenia: <strong>htop --sort-key=help</strong></p>
<p> </p>
<p>Dużą zaletą narzędzia (niż omówionego programu <strong>top</strong>) jest w pełni interaktywny sposób zarządzania procesami za pomocą klawiszy funkcyjnych.</p>
<p>Innymi programami, którymi możemy posłużyć się celem obserwacji uruchomionych procesów są programy <strong>ksysguard</strong>, który jest dedykowany dla środowiska KDE oraz <strong>gtop</strong> przeznaczony dla środowiska GNOM.</p>
<p>W wpisie tym kilka razy pojawił się termin <strong>nice</strong>, parametr ten określa z jaki priorytetem jest uruchomiony dany proces. Zakres tego priorytetu (ang. niceness level) rozciąga się od -20 do 19 przy czym wartość -20 oznacza priorytet najwyższy zaś wartość 19 priorytet najniższy. Aby zmodyfikować wartość z jakim dane zadanie jest uruchamiane możemy skorzystać z narzędzia <strong>nice</strong>.</p>
<p>Użycie narzędzia jest bardzo proste wystarczy wydać polecenie: <strong>nice <nazwa_zadania></strong> Jako przykład niech posłuży nam takie polecenie: <strong>nice mcedit</strong> Wydanie komendy spowoduje uruchomienie programu mcedit. Sprawdźmy zatem wartość parametru nice z jakim to narzędzie zostało uruchomione.</p>
<p>W pierwszej kolejności za pomocą polecenia: <strong>ps auxw | grep mcedit</strong> zidentyfikujemy numer procesu PID uruchomionego programu mcedit. A następnie za pomocą komendy: <strong>top -p <numer_PID> -n 1 -b</strong> wyświetlimy dane dotyczące procesu o zadanym numerze PID (użyta flaga <strong>-b</strong> w narzędziu <strong>top</strong> spowoduje wyświetlenie informacji narzędzia <strong>top</strong> bez czyszczenia okna). Jak widać po poniższym zrzucie w poleceniu została użyta wartość 2754 ponieważ jest to PID zadania mcedit.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image20.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image20.png" alt="image20" width="700" height="448" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Z zrzutu tego uzyskamy również informację o poszukiwanym parametrze nice. Jak już pewnie Czytelniku zauważyłeś wartość parametru nice zadania mcedit wynosi <strong>10</strong>. Wartość ta jest domyślną wartością z jaką będą uruchamiane programy z wykorzystaniem narzędzia <strong>nice</strong>.</p>
<p>Pytanie brzmi - Czy proces poznania wartości przypisanej do parametru nice musi być wykonany w ten sposób, czy nie można tego wykonać prościej? Odpowiedź na to pytanie brzmi – Można wykonać to łatwiej przy użyciu tylko jednego narzędzia jakim jest <strong>ps</strong> (wybacz Czytelniku, że trochę sprawę skomplikowałem ale zależało mi na tym byś poznał jak najwięcej zastosowań omawianych narzędzi). Tak więc ustalony parametr <strong>nice</strong> poznasz szybciej dołączając do narzędzia <strong>ps</strong> flagę <strong>-l</strong> Po wydaniu polecenia: <strong>ps -l a | grep mcedit </strong>stosowna informacja zostanie zawarta w wyświetlonych danych. Jak można zauważyć wartość parametru <strong>nice</strong> poznana po wydaniu polecenia pokrywa się z tą poznaną dzięki narzędziu <strong>top</strong> i wynosi <strong>10</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image21.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image21.png" alt="image21" width="700" height="89" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użycie przełącznika <strong>-l</strong> w narzędziu <strong>ps</strong> pozwala nam na dołączenie do już wyświetlanych danych informacji dodatkowych (bardziej szczegółowych). Dodatkowe kolumny, które zostaną zawarte po użyciu flagi <strong>-l </strong>to informacje o:</p>
<p style="margin-left: 60px;"><strong>UID</strong> - identyfikator właściciela procesu,</p>
<p style="margin-left: 60px;"><strong>PPID</strong> - identyfikator procesu macierzystego,</p>
<p style="margin-left: 60px;"><strong>PRI</strong> i <strong>NI</strong> - priorytety procesów,</p>
<p style="margin-left: 60px;"><strong>WCHAN</strong> - pozwala sprawdzić jaką funkcję systemowy jądra wywołał proces.</p>
<p> </p>
<p>OK wiemy, że wywołanie narzędzia <strong>nice</strong> bez zdefiniowanie parametru procesu włącza dane zadanie z domyślnie zdefiniowaną wartością parametru nice ustawioną na 10. A co gdybyśmy dane zadanie chcieli uruchomić z wartością niższą bądź wyższą? A by wykonać to zadanie do składni polecenia wywołującego dany program musimy dołączyć parametr <strong>-n</strong> po którym to definiujemy wartość nice. Użycie np. takiej komendy: <strong>nice -n -20 mcedit</strong> spowoduje uruchomienie narzędzia mcedit z możliwie najwyższym do zdefiniowania priorytetem -20. Poniżej na zrzucie przedstawiono efekt wydanej komendy, jak widać sprawdzenie (oba wyżej opisane sposoby) tylko utwierdza nas w przekonaniu, że narzędzie mcedit zostało uruchomione z najwyższą wartością parametru nice.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image22.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image22.png" alt="image22" width="700" height="350" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wiemy już jak uruchomić zadanie z żądanym priorytetem - A co w przypadku w którym chcemy zmienić priorytet już uruchomionego zadania?</p>
<p>Aby wykonać to zadanie musimy skorzystać z polecenia: <strong>renice <wartość_parametru_nice> <PID_procesu></strong> Tak więc aby zmienić wartość parametru nice z -20 na 10 uruchomionego zadania mcedit (kontynuujemy przykład zaprezentowany wyżej) o numerze PID równym 2499 należy wydać polecenie: <strong>renice +10 2499</strong> Po wydaniu komendy sprawdźmy efekt jej wydania.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image23.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image23.png" alt="image23" width="700" height="386" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Jak można zauważyć powyżej wydanie polecenia <strong>renice</strong> zmieniło priorytet zadania mcedit. Nowa wartość parametru nice wynosi 10.</p>
<p>To jeszcze jeden przykład – zmiana parametru nice z 10 na -5 (pamiętaj, że zmiana wartości poniżej 0 wymaga praw użytkownika root).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image24.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image24.png" alt="image24" width="700" height="374" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Uważny czytelnik na pewno zauważył, że nie jest to jedyny sposób dokonania modyfikacji parametru nice. Poznane narzędzia <strong>top</strong> oraz <strong>htop</strong> również oferują nam taką możliwość.</p>
<p>Aby zredukować ilość danych ograniczmy się do wyświetlenia informacji dotyczących tylko zadania mcedit. Aby to wykonać wydajmy polecenie: <strong>top -p 2499</strong> Po wydaniu polecenia będziemy mieli wgląd w parametry tylko tego zadania.</p>
<p>Po uruchomieniu narzędzia <strong>top</strong> aby dokonać modyfikacji parametru nice wciskamy klawisz <strong>r</strong>. Na postawione pytanie – o numer procesu PID klikamy <strong>enter</strong> (numer PID zadania mcedit jest ustawiony domyślnie) gdyby tak się nie stało wprowadzamy go ręcznie.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image25.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image25.png" alt="image25" width="700" height="274" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Po podaniu informacji o numerze PID definiujemy wartość parametru nice. W naszym ćwiczeniu decydujemy się parametr ten ustawić na wartość 7.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image26.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image26.png" alt="image26" width="700" height="227" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Po zatwierdzeniu możemy sprawdzić stan parametru nice za pomocą znanych nam poleceń. Jak widać poniżej wartość nice wynosi 7.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image27.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image27.png" alt="image27" width="700" height="345" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Nieraz zdarza się, że na wskutek nieprawidłowego działania programu musimy zakończyć jego proces. Z reguły uruchamiając jakieś zadanie w terminalu aby je zakończyć należy posłużyć się kombinacją klawiszy Ctrl+C lecz w pewnych sytuacjach zabieg ten może okazać się niewystarczający. Wtedy musimy sięgnąć po bardziej drastyczne środki i proces zakończyć ręcznie. Aby zakończyć zadanie należy skorzystać z polecenia: <strong>kill <nazwa_bądź_numer_sygnału> PID</strong></p>
<p>Z uruchomionymi zadaniami możemy porozumieć się poprzez wysłanie do nich odpowiedniego sygnału. Sygnały te są określone i zdefiniowane (nazwa + numer) a pełną ich listę do użycia z narzędziem <strong>kill</strong> poznamy po wydaniu polecenia: <strong>kill -l</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image28.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image28.png" alt="image28" width="700" height="273" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Najczęściej używane sygnały to:</p>
<p style="margin-left: 60px;">sygnał 2 - SIGINT - przerwanie wykonania procesu wywołane wciśnięciem klawiszy Ctrl + C,</p>
<p style="margin-left: 60px;">Sygnał 3 - SIGQUIT - przerwanie wykonania procesu wywołane wciśnięciem klawiszy Ctrl + \ sygnał ten dodatkowo nakazuje wykonanie obrazu pamięci procesu,</p>
<p style="margin-left: 60px;">sygnał 9 - SIGKILL - zabicie procesu,</p>
<p style="margin-left: 60px;">sygnał 15 - SIGTERM - miękkie zakończenie procesu, sygnał ten jest domyślnie zdefiniowany gdy nie wskażemy w poleceniu innego,</p>
<p style="margin-left: 60px;">sygnał 19 - SIGSTOP - zatrzymanie wykonywania procesu wywołane wciśnięciem klawiszy Ctrl + Z, tak zatrzymany proces możemy następnie wznowić wykorzystując do tego narzędzie <strong>fg</strong> bądź <strong>bg</strong>.</p>
<p> </p>
<p>Tak więc aby zabić dany proces należy wydać polecenie: <strong>kill <PID></strong> Poniżej przykład zabicia procesu przeglądarki Firefox.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image29.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Do zidentyfikowania numeru PID przeglądarki zostało wykorzystane narzędzie <strong>pgrep</strong> (jeszcze jeden dodatkowy sposób by poznać PID procesu). Narzędzie <strong>pgrep</strong> zostało wywołane z parametrem <strong>-l</strong> który jest odpowiedzialny za wyświetlenie pełnej nazwy procesu. Narzędzie to świetnie sprawdza się w sytuacji w której znamy nazwę uruchomionego procesu. Wywołanie polecenie bez flagi <strong>-l</strong> spowoduje wyświetlenie samej wartości numeru procesu.</p>
<p>Aby wysłać określony sygnał do procesu w poleceniu <strong>kill</strong> definiujemy jego wartość. Wartość ta może być podana w sposób numeryczny bądź słowny. Aby nakazać wysłanie sygnału SIGKILL, zabijając w ten sposób proces możemy skorzystać z polecenia przedstawionego na poniższym zrzucie (tradycyjnie już zabijamy proces przeglądarki).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image30.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zakończyć wszystkie procesy o danej nazwie należy skorzystać z polecenia<strong>: killall <nazwa_procesu></strong>. Narzędzie to posiada kilka przydatnych przełączników:</p>
<p style="margin-left: 60px;"><strong>-u <użytkownik> <proces></strong> - zabicie wszystkich procesów danego użytkownika, brak definicji procesu spowoduje zabicie wszystkich procesów zdefiniowanego użytkownika,</p>
<p style="margin-left: 60px;"><strong>-o <czas></strong> - zabicie procesów starszych niż zdefiniowany czas,</p>
<p style="margin-left: 60px;"><strong>-y <czas> -</strong> zabicie procesów młodszych niż zdefiniowany czas. Czas określamy za pomocą następujących zmiennych: <strong>s</strong> dla sekund; <strong>m</strong> dla minut; <strong>h</strong> dla godzin; <strong>d</strong> dla dni; <strong>w</strong> dla tygodni; <strong>M</strong> dla miesięcy; <strong>y</strong> dla lat,</p>
<p style="margin-left: 60px;"><strong>-s</strong> <strong><sygnał></strong> - określenie wysyłanego sygnału zamiast domyślnego SIGTERM,</p>
<p style="margin-left: 60px;"><strong>-I</strong> - brak rozróżniania wielkości liter dla definiowanych procesów.</p>
<p> </p>
<p>Narzędziem pozwalającym nam na zabicie procesu bez znajomości jego PID-u lecz z wykorzystaniem nazwy procesu jest program <strong>pkill</strong>. Zabicie danego programu odbywa się po wydaniu komendy: <strong>pkill <nazwa_procesu></strong></p>
<p>Zabicie danego procesu możemy również wykonać za pomocą omówionych narzędzi <strong>top</strong> oraz <strong>htop</strong>.</p>
<p>W systemie Linux występuje katalog <strong>/proc</strong> W katalogu tym zawarte są informacje o działających procesach. Reprezentacja danego procesu jest realizowana poprzez zapis katalogu. Nazwa katalogu odpowiada numerowi PID procesu. W danym katalogu są umieszczone pliki, które opisują status danego procesu, np.: plik cmdline zawiera polecenie uruchamiające dany proces a plik status informacje o stanie procesu.</p>
<p>Katalog <strong>/proc</strong> możemy przeglądać za pomocą opisanego w poprzednim wpisie dotyczącym powłoki bash polecenia <strong>ls</strong> . Jak widać poniżej proces przeglądarki Firefox o numerze PID 2445 ma swoje odzwierciedlenie w folderze <strong>/proc</strong> w formie katalogu o nazwie 2445.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image31.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image31.png" alt="image31" width="700" height="540" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>System plików <strong>/proc</strong> jest całkowicie wirtualny co oznacza, że nie jest on nigdzie zapisany na dysku a istnieje tylko w pamięci. Za utworzenie i zapis informacji odpowiada jądro systemu a jego głównym zadaniem jest dostarczenie informacji o systemie.</p>
<p>Poniżej przedstawiam listę co ważniejszych pozycji znajdujących się w <strong>/proc</strong>.</p>
<p style="margin-left: 60px;"><strong>/proc/cpuinfo</strong> - wykaz informacji o procesorze: model, wydajność, itp.,</p>
<p style="margin-left: 60px;"><strong>/proc/consoles</strong> - informacja o terminalach,</p>
<p style="margin-left: 60px;"><strong> /proc/crypto</strong> - zabezpieczenia kryptograficzne,</p>
<p style="margin-left: 60px;"><strong>/proc/devices </strong>- lista urządzeń,</p>
<p style="margin-left: 60px;"><strong>/proc/filesystems</strong> - informacja o dostępnych systemach plików,</p>
<p style="margin-left: 60px;"><strong>/proc/interrupts </strong>- lista przerwań wykorzystywanych przez system,</p>
<p style="margin-left: 60px;"><strong>/proc/ioports</strong> - porty wejścia/wyjścia,</p>
<p style="margin-left: 60px;"><strong>/proc/kcore</strong> - obraz pamięci systemu,</p>
<p style="margin-left: 60px;"><strong>/proc/meminfo</strong> - wykaz użycia pamięci fizycznej i swapu.</p>
<p style="margin-left: 60px;"><strong>/proc/modules </strong>- lista modułów wykorzystywana przez system,</p>
<p style="margin-left: 60px;"><strong>/proc/net</strong> - informacje o protokołach sieciowych,</p>
<p style="margin-left: 60px;"><strong>/proc/partitions</strong> - lista partycji,</p>
<p style="margin-left: 60px;"><strong>/proc/stat</strong> -statystyki systemu,</p>
<p style="margin-left: 60px;"><strong>/proc/uptime</strong> - czas pracy systemu,</p>
<p style="margin-left: 60px;"><strong>/proc/version</strong> - wersja jądra,</p>
<p style="margin-left: 60px;"><strong>/proc/vmstat</strong> - statystyki użycia pamięci wirtualnej.</p>
<p> </p>
<p>Informacje zawarte w tych plikach można oczywiście odczytywać np. przy pomocy narzędzia <strong>cat</strong> lecz nie należy ich edytować gdyż może to doprowadzić do niestabilnej pracy systemu.</p>
<p>Poniżej przykład użycia narzędzia <strong>cat</strong> celem uzyskania informacji o wykorzystaniu pamięci.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image32.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Co warto nadmienić szereg narzędzi korzysta z informacji zawartych w <strong>/proc</strong>. Przeglądając poszczególne pliki możemy uzyskać bardzo wiele informacji o naszym systemie choć co trzeba przyznać forma prezentacji tych danych jest czasem mało atrakcyjna.</p>
<p>To tej pory przedstawiłem narzędzia, które działają w konsoli systemu Linux jest również kilka programów, które potrafią zarządzać procesami w trybie graficznym. Ja bym chciał przedstawić dwa. Do takich standardowych programów należy: <strong>gnome-system monitor</strong> (by wywołać program w terminalu należy wpisać jego nazwę).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image33.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image33.png" alt="image33" width="700" height="435" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Monitor systemu pozwala nam na: zatrzymanie i wznowienie danego procesu, zatrzymanie procesu, zmianę jego priorytetu a także na uzyskanie podstawowych informacji o danym zadaniu (dostępne po kliknięciu na <strong>Właściwości</strong>).</p>
<p>Programem graficznym o podobnej funkcjonalności co systemowy Monitor systemu jest: <strong>lxtask</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image34.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image34.png" alt="image34" width="700" height="478" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>I na koniec jeszcze kilka prostych programów, które z procesami są powiązane bezpośrednio lub pośrednio a pozwalają na uzyskanie przydatnych informacji.</p>
<p>Pierwsze narzędzie to <strong>w</strong>, wydanie komendy pozwoli nam przejrzeć procesy każdej powłoki wszystkich zalogowanych użytkowników.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image35.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image35.png" alt="image35" width="700" height="131" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Narzędzie to podaje nam następujące informacje:</p>
<p style="margin-left: 60px;"><strong>górny pierwszy wiersz</strong> (od lewej) - aktualny czas; czas pracy systemu; liczbę zalogowanych użytkowników oraz średnie obciążenie systemu - trzy wartości: ostatnia minuta, ostatnie pięć minut, ostatnie piętnaście minut,</p>
<p style="margin-left: 60px;"><strong>kolumny</strong> to informacja o: użytkowniku; identyfikatorze terminala; komputerze z którego nastąpiło logowanie; czasie w którym nastąpiło logowanie; czasie bezczynności; czasie zużycia procesora (JCPU oraz PCPU) oraz uruchomionym zadaniu.</p>
<p> </p>
<p>Narzędzie <strong>xload</strong> w sposób graficzny przedstawia nam obciążenie procesora (oś Y) w funkcji czasu (oś X). Użyta flaga <strong>-update</strong> ustawia odświeżanie (domyślnie 10 sekund).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image36.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Polecenie <strong>free</strong> poda nam zużycie pamięci (jednostka kB).</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_2/image37.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Opcje:</p>
<p style="margin-left: 60px;"><strong>-s <sekunda></strong> - ciągłe działanie programu, odświeżanie o ustaloną wartość,</p>
<p style="margin-left: 60px;"><strong>-b</strong> - zmiana jednostki na bajty,</p>
<p style="margin-left: 60px;"><strong>-m</strong> - zmiana jednostki na megabajty,</p>
<p style="margin-left: 60px;"><strong>-t</strong> - podsumowanie.</p>
<p> </p>
<p>Zadaniem narzędzia <strong>fuser</strong> jest wyświetlenie nazw procesów, które korzystają z podanych plików bądź katalogów. Po wywołaniu narzędzia z parametrem <strong>-v</strong> nakazującym wyświetlenie bardziej szczegółowych informacji i podaniu lokacji uzyskamy listę procesów korzystających z tejże lokacji. Poniżej w przykładzie ukazano procesy korzystające z katalogu domowego użytkownika luk.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image38.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image38.png" alt="image38" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Uzyskane dane dostarczają nam informacji o użytkowniku, PID-zie procesu, nazwie procesu a także rodzaju uzyskanego dostępu. Rodzaj ustanowionego dostępu jest określany za pomocą symboli literowych:</p>
<p style="margin-left: 60px;"><strong>c</strong> - katalog bieżący,</p>
<p style="margin-left: 60px;"><strong>e</strong> - uruchomiony plik wykonywalny,</p>
<p style="margin-left: 60px;"><strong>f</strong> - otwarty plik, pomijane w domyślnym trybie wyświetlania,</p>
<p style="margin-left: 60px;"><strong>r</strong> - katalog root,</p>
<p style="margin-left: 60px;"><strong>m</strong> - mmap-owany plik lub biblioteka dzielona.</p>
<p> </p>
<p>Wywołanie narzędzia bez flagi <strong>-v</strong> wyświetli tylko numer procesów PID i rodzaj ustanowionego dostępu.</p>
<p>Programu możemy również użyć do monitorowania otwartych połączeń sieciowych. Poniżej przykład sprawdzenia dostępności serwera FTP.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image39.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Programu możemy również użyć do zabicia procesów odnoszących się np. do danego katalogu. Wydanie polecenia: <strong>fuser -v -k -i</strong> <strong>.</strong> spowoduje zabicie wszystkich procesów odnoszących się do katalogu domowego użytkownika przy czym dołączenie flagi <strong>-i</strong> powoduje, że jesteśmy pytani o potwierdzenie wykonania wyłączenia każdego zadania z osobna. Pominięcie parametru <strong>-i</strong> spowoduje automatyczne zabicie wszystkich procesów.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_2/image40.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_2/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>I to by było na tyle jeśli chodzi o polecenia i narzędzia pozwalające nam kontrolować uruchomione zadania i procesy w systemie Linux. Jeśli Czytelniku znasz inne narzędzia i chciałbyś się tą wiedzą podzielić zapraszam do komentowania. A w kolejnym wpisie zajmiemy się użytkownikiem.</p>
<p> </p>
<hr />
<p> </p>
<p>Bibliografia:</p>
<p> </p>
<p><a href="http://www.cyberciti.biz/faq/unix-linux-killall-command-examples-usage-syntax/">http://www.cyberciti.biz/faq/unix-linux-killall-command-examples-usage-syntax/</a></p>
<p><a href="http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html">http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html</a></p>
<p><a href="http://www.thegeekstuff.com/2012/02/linux-fuser-command/">http://www.thegeekstuff.com/2012/02/linux-fuser-command/</a></p>
<p><a href="http://www.computerhope.com/unix/ubash.htm">http://www.computerhope.com/unix/ubash.htm</a></p>
<p><a href="http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html">http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html</a></p></div>Dogadać się z Linuxem. Powłoka systemu oraz operacje na plikach.2015-07-10T20:52:24+00:002015-07-10T20:52:24+00:00http://slow7.pl/linux/item/101-dogadac-sie-z-linuxem-powloka-systemu-oraz-operacje-na-plikachpikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/c1011ef61ed9937904f4938c63d014ea_S.jpg" alt="Dogadać się z Linuxem. Powłoka systemu oraz operacje na plikach." /></div><div class="K2FeedIntroText"><p>Terminal w systemie Linux jest tym samym co wiersz poleceń w systemach Windows. Konsola ta jak w przypadku cmd ma nam umożliwić zarządzanie komputerem. Pierwsze uruchomienie konsoli nie zachęca nas do dalszej pracy bo cóż ciekawego może być w oknie z migającym kursorem i czekającym na wpisanie polecenia. Ktoś mógłby zapytać - Po co mi ta umiejętność i po co mam uczyć się poleceń? Wszystko bowiem mogę sobie wyklinać w GUI. No niestety, nie zawsze wszystko znajdziemy w interfejsie graficznym a niektóre opcje, czasem są dość mocno zaszyte wewnątrz systemu. Tak więc umiejętne posługiwanie się konsolą znacznie zwiększa szybkość i skuteczność prowadzonej konfiguracji a także pozwala nam na zautomatyzowanie wykonywanych zadań. I to jest odpowiedź na postawione pytanie.</p>
<p> </p>
<p>Artykuł jest częścią większą cyklu w którym będę chciał pokazać jak posłużyć się konsolą systemu Linux. W tym wpisie zajmiemy się poznaniem powłoki bash, która jest domyślną formą komunikacji w trybie tekstowym z systemami z rodziny Linux a także poznamy szereg poleceń związanych z obsługą plików.</p>
</div><div class="K2FeedFullText">
<p> </p>
<p><strong>Konsola pierwsze spojrzenie. Konfiguracja środowiska pracy.</strong></p>
<hr />
<p> </p>
<p>Pierwsze spotkanie z konsolą systemu Linux w szczególności dla użytkownika, który dopiero co poznaje system Linux nie jest zachęcające ale wystarczy trochę samo zaparcia, ćwiczeń i obycia by stwierdzić, że korzystanie z tej formy komunikacji z systemem ma swoje zalety.</p>
<p> </p>
<p>Po uruchomieniu konsoli system wita nas znakiem zachęty, zapraszającym do wydawania poleceń.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image1.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image1.png" alt="image1" width="700" height="224" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Znak zachęty w przypadku zwykłego użytkownika przyjmuje postać <strong>$</strong> natomiast gdy użytkownikiem jest <strong>root</strong> (odpowiednik administratora w systemie Windows) znak zachęty zostaje zamieniony na <strong>#</strong></p>
<p> </p>
<p>Znak zachęty możemy modyfikować i ustalać jego wygląd w zależności od naszych potrzeb i upodobań. Aby wyświetlić wartość zmiennej środowiskowej <strong>PS1</strong> odpowiedzialnej za budowę informacji pojawiających się w terminalu (ang. prompt) należy użyć polecenia: <strong>echo $PS1</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image2.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Zmianę dokonujemy za pomocą komendy: <strong>export PS1='<opcje>'</strong></p>
<p> </p>
<p>Dostępne opcje to (więcej zobacz: <strong>man bash</strong> pod kątem zmiennej PS1):</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\d</strong> - data w formacie: Dzień tygodnia Miesiąc Dzień,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\t</strong> - czas w formacie 24-godzinnym (HH:MM:SS),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\T</strong> - czas w formacie 12-godzinnym (HH:MM:SS),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\@</strong> - czas w formacie 12-godzinnym (am/pm),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\A</strong> - czas w formacie 24-godzinnym (HH:MM),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\h</strong> - nazwa komputera (hostname) - do pierwszego znaku kropki,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\H</strong> - nazwa komputera (hostname),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\n</strong> - znak nowej linii,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\r</strong> - powrót karetki (ang. carriage return)</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\e</strong> - znak ucieczki ASCII,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\u</strong> - nazwa użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\w</strong> - ścieżka bieżącego katalogu (w przypadku katalogu $HOME nazwa jest skracana do tyldy (~),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\$ </strong>- jeśli numer UID jest 0 to znak: # (root), w przeciwnym wypadku znak: $,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\nnn</strong> - znak przedstawiony za pomocą liczby ósemkowej (np. 011),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\\ </strong>- backslash,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\[ </strong>- start sekwencji nie drukowalnych znaków,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\] </strong>- stop sekwencji nie drukowalnych znaków.</p>
<p> </p>
<p>Do zbudowania promt-a możliwe jest również użycie kolorów. Składnia użycia koloru jest następująca: <strong>\[\e[ X;Y;Zm\] <opcja_kolor> \[\e[m\] </strong>np.<strong> export PS1='\[\e[0;34m\]\u\[\e[m\]'</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image3.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image3.png" alt="image3" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p>gdzie:</p>
<p> </p>
<p>X – kolor tekstu, Y – kolor tła, Z – efekt – przy czym gdy któregoś elementu nie używamy to go pomijamy.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image4.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Tabela opcji:</p>
<p> </p>
<table border="1" style="border-collapse: collapse; width: 499px;" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border: 1pt solid windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%"><strong>Kolor</strong></td>
<td style="width: 16.5%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%"><strong>Tekst</strong></td>
<td style="width: 16.5%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%"><strong>Tło</strong></td>
<td style="width: 27.74%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%"><strong>Efekt</strong></td>
<td style="width: 22.74%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%"><strong>Kod</strong></td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">czarny</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">30</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">40</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">Pogrubienie</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">1</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">czerwony</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">31</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">41</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">bez pogrubienia</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">22</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">zielony</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">32</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">42</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">podkreślenie</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">4</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">żółty</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">33</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">43</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">bez podkreślenia</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">24</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">niebieski</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">34</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">44</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">miganie</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">5</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">magenta</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">35</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">45</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">bez migania</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">25</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">cyjan</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">36</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">46</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%"> </td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%"> </td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">biały</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">37</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">47</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%"> </td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%"> </td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
<p><strong>Zmienne środowiskowe</strong></p>
<hr />
<p> </p>
<p>Pierwszą zmienną już Czytelniku poznałeś (zmienna PS1) a nie jest to jedyna zmienna. W systemie Linux istnieje kilkadziesiąt różnych zmiennych. Wszystkich nie przedstawię ale na liście poniżej znajdziesz te zmienne, które wykorzystuje się najczęściej.</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>USER</strong> – nazwa aktywnego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>HOSTNAME</strong> – nazwa hosta,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>HOME</strong> – katalog domowy aktywnego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>TZ</strong> – ustawiona strefa czasowa,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>EDITOR</strong> – zmienna odpowiedzialna za określenie używanego edytora,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>PATH</strong> – definiuje katalogi, które są przeszukiwane pod kątem wywoływanych poleceń, dzięki tej zmiennej nie musimy wpisywać pełnej ścieżki dostępu do programu,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>SHELL</strong> – powłoka w której jest uruchomiony terminal,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>TERM</strong> – rodzaj użytego terminala,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>UID</strong> – identyfikator zalogowanego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>OSTYPE</strong> – rodzaj systemu operacyjnego,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>LANG</strong> – ustawienia językowe,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>PWD</strong> – katalog roboczy w którym się znajdujemy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>HISTSIZE</strong> – rozmiar bufora historii.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image5.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image5.png" alt="image5" width="700" height="264" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Część dostępnych zmiennych można wyświetlić za pomocą polecenia: <strong>printenv | more</strong> (użycie <strong>more</strong> powoduje zatrzymanie wyświetlania po zapełnieniu ekranu).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image6.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image6.png" alt="image6" width="700" height="439" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Część zmiennych jest jednoznacznie określona lecz dwie z nich wymagają szerszego omówienia mowa tu o zmiennej <strong>PATH</strong> oraz <strong>EDITOR</strong>.</p>
<p> </p>
<p>Zmienna <strong>PATH</strong> jak już zostało wspominane odpowiedzialna jest za odnalezienie programów, które są wywoływane w terminalu poprzez polecenia.</p>
<p> </p>
<p>Gdy chcemy aby wyszukiwanie polecenia rozpoczęło się od aktualnego katalogu roboczego trzeba na początku zmiennej <strong>PATH</strong> wstawić znak kropki (.) – polecenie: <strong>export PATH=".:$PATH"</strong> Gdybyśmy chcieli do zmiennej <strong>PATH</strong> dodać katalog możemy skorzystać z polecenia: <strong>PATH=$PATH':<lokalizacja_katalogu>'</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image7.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image7.png" alt="image7" width="700" height="229" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">1. Sprawdzenie zmiennej PATH,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">2. Dodanie do zmiennej PATH znaku kropki (znak nakazuje rozpoczęcie wyszukiwania programu/skryptu od bieżącej lokalizacji),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">3. Sprawdzenie faktu przypisania,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">4. Dodanie katalogu: /usr/lokal/samba/sbin do zmiennej PATH,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">5. Sprawdzenie faktu przypisania.</p>
<p> </p>
<p>Natomiast do zmiennej <strong>EDITOR</strong> można przypisać swój ulubiony edytor tekstowy. Poniżej przykład przypisania do zmiennej <strong>EDITOR</strong> programu <strong>mcedit</strong> (jakoś wole używać tego edytora niż domyślnie zainstalowanego <strong>vi</strong> czy <strong>nano</strong>). <strong>Mcedit</strong> dostępny jest po zainstalowaniu pakietu <strong>Midnight Commander</strong>, program ten jest menedżerem plików (jak ktoś pamięta Norton Commander to się nie zawiedzie). Program instalujemy za pomocą polecenia: <strong>sudo apt-get install mc</strong></p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">1. Zlokalizowanie programu mcedit,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">2. Sprawdzenie aktualnej wartości zmiennej EDITOR,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">3. Przypisanie do zmiennej EDITOR ścieżki katalogu w której znajduje się program,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">4. Sprawdzenie faktu przypisania.</p>
<p> </p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image8.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Kontrola uruchamianych procesów</strong></p>
<hr />
<p> </p>
<p>Każde wydane polecenie w powłoce systemu Linux powoduje wykonanie jakiegoś zadania. By móc pracować efektywnie z powłoką trzeba umieć zarządzać uruchomionymi zadaniami. Podczas pracy z powłoką mamy wpływ na sposób zachowania się zadań, możemy wykonać następujące operacje wobec uruchamianych zadań:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>uruchomić zadanie na pierwszym planie</strong> - tj. wydana komenda powoduje uruchomienie zadania przez powłokę a zadanie te działa w powłoce tak że niemożliwe jest wydanie kolejnych komend,</p>
<p style="margin-left: 30px;"><strong>uruchomić zadanie w tle</strong> - tj. wydana komenda powoduje uruchomienie zadania przez powłokę a zadanie te działa nie zajmując jej, mamy możliwość wykonywania kolejnych poleceń,</p>
<p style="margin-left: 30px;"><strong>zawieszenie zadania</strong> - wstrzymanie pracy zadania,</p>
<p style="margin-left: 30px;"><strong>wznowienie</strong> - powoduje kontynuację pracy wcześniej zawieszonego zadania.</p>
<p> </p>
<p>Z każdą z tych czynności związane jest odpowiednie polecenie, aby wyświetlić listę aktualnie uruchomionych zadań, skorzystaj z polecenia: <strong>jobs</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image9.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Liczba w nawiasie oznacza numer zadania znak <strong>+</strong> oraz <strong>- </strong>zadania wywołane po wydaniu poleceń <strong>fg</strong> oraz <strong>bg</strong>.</p>
<p> </p>
<p>Aby uruchomić zadanie w tle na końcu polecenia umieszczamy znak: <strong>&</strong></p>
<p> </p>
<p>Gdy uruchomione jest zadanie a my wciśniemy <strong>Ctrl+Z</strong> (można też użyć polecenia: <strong>suspend</strong>) zadanie to zostaje wstrzymane lecz zapamiętywany jest stan zadania.</p>
<p> </p>
<p>Tak wstrzymane zadanie możemy ponownie uruchomić przy czym mamy dwie możliwości: gdy wykorzystamy polecenie: <strong>fg</strong> zadanie to zostanie uruchomione na pierwszym planie; gdy zaś zdecydujemy się użyć polecenia: <strong>bg</strong> zadanie to również zostanie wznowione lecz tym razem w tle.</p>
<p> </p>
<p>Za pomocą tych dwóch komend możliwe jest wznawianie różnych zadań, domyślnie wydanie samego polecenia <strong>fg</strong> bądź <strong>bg</strong> bez żadnych parametrów spowoduje uruchomienie ostatnio wstrzymanego zadania. Gdy zaś chcemy uruchomić, wznowić konkretne zadanie możemy użyć np. komendy: <strong>bg %<numer_zadania></strong> Numer zadania poznamy dzięki poznanemu już poleceniu: <strong>jobs</strong></p>
<p> </p>
<p> </p>
<p><strong>Historia poleceń</strong></p>
<hr />
<p> </p>
<p>Wszystkie polecenia, które wpisujemy do konsoli są zapamiętywane tak więc istniej możliwość odwołania się do już wydanego polecenia. Aby wyświetlić listę wydanych poleceń użyj polecenia: <strong>history</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image10.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Po wydaniu polecenia wyświetli się lista ponumerowanych komend, które w powłoce wydaliśmy. Poniżej przedstawiam kilka przykładów wykorzystania listy komend.</p>
<p> </p>
<p style="margin-left: 30px;"><strong>history <liczba></strong> - wyświetlenie zdefiniowanej liczby ostatnio wydanych poleceń,</p>
<p style="margin-left: 30px;"><strong>history -c</strong> – wyczyszczenie historii,</p>
<p style="margin-left: 30px;"><strong>!! </strong>– ostatnio wydane polecenie,</p>
<p style="margin-left: 30px;"><strong>!<liczba></strong> - wywołanie polecenia o danym numerze,</p>
<p style="margin-left: 30px;"><strong>!-<liczba></strong> - wywołanie polecenia minus zdefiniowana liczba</p>
<p> </p>
<p> </p>
<p><strong>Aliasy</strong></p>
<hr />
<p> </p>
<p>System Linux umożliwia tworzenia tzw. <strong>aliasów</strong> czyli skrótów, które realizują jakieś konkretne polecenie bez konieczności wpisania całej składni polecenia wraz z parametrami.</p>
<p> </p>
<p>W trakcie poznawania systemu Linux bardzo często miałem nawyk czyszczenia ekranu za pomocą windowsowego polecenia <strong>cls</strong> a jak wiadomo w powłoce bash te polecenie nie występuje, bo do czyszczenia okna terminala używa się komendy <strong>clear</strong> bądź <strong>tput clear</strong>. Aby móc jednak czyścić ekran terminala z wykorzystaniem komendy <strong>cls</strong> należy stworzyć <strong>alias</strong>, który będzie łączył ciąg <strong>cls</strong> z poleceniem <strong>clear</strong>. Od tej pory wpisanie w oknie polecenia <strong>cls</strong> wywoła nam komendę <strong>clear</strong>. Alias tworzymy za pomocą ogólnej składni: <strong>alias <nazwa_aliasu>=</strong> <strong>"<polecenie>"</strong> Tak więc chcąc przypisać linuxowe polecenie <strong>clear</strong> tak aby by było wykonane po wpisaniu <strong>cls</strong> należy wydać polecenie: <strong>alias cls="clear"</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image11.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image11.png" alt="image11" style="display: block; margin-left: auto; margin-right: auto;" /></a> </p>
<p>Aliasy dodatkowo mogą być wykorzystane do poruszania się po systemie plików. Gdy bardzo często odwołujemy się do jakiegoś miejsca na dysku możemy stworzyć alias, który będzie łączył nam dany folder z przyjazną dla nas nazwą. Poniżej przykład uworzena aliasu <strong>dok</strong> po wywołaniu, którego będziemy przeniesieni do lokalizacji: <strong>/home/luk/Dokumenty</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image12.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image12.png" alt="image12" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Ciekawe efekty uzyskamy gdy alias połączymy z zmienną.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image13.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Połączyliśmy alias <strong>dok</strong> z zmienną <strong>DOK</strong>, po wydaniu polecenia <strong>dok</strong> jesteśmy przekierowani do zmiennej, która powoduje przejście do zdefiniowanego katalogu. Dodatkowo utworzoną zmienną możemy wykorzystać w poleceniach np. kopiowanie plików. Poniżej przykład skopiowania pliku: <strong>plik1</strong> do lokalizacji <strong>/home/luk/Dokumenty</strong> która to lokalizacja została powiązana z zmienną <strong>DOK</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image14.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image14.png" alt="image14" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby przejrzeć listę utworzonych aliasów wydaj komendę: <strong>alias</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image15.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image15.png" alt="image15" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby usunąć alias należy skorzystać z polecenia: <strong>unalias <nazwa_aliasu></strong></p>
<p> </p>
<p>Wszystkie zmienne i aliasy, które utworzyliśmy mają „cykl życia” ustawiony do czasu w którym system operacyjny działa czyli po wykonaniu restartu systemu utworzone definicje zmiennych i aliasów już nie obowiązują. A dodatkowo zmienne i aliasy nie są dostępne dla innych wywołań konsoli. Aby uniknąć konfiguracji tych parametrów po każdorazowym uruchomieniu systemu należy definicje te umieścić w pliku: <strong>.bashrc </strong>W pliku tym zapisane są Twoje ustawienia a plik ten zlokalizowany jest w katalogu domowym (w przypadku użytkownika root plik znajduje się w /root)</p>
<p> </p>
<p>Gdy skończymy edytować plik <strong>.bashrc</strong> należy go przeładować za pomocą polecenia: <strong>..bashrc</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image16.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image16.png" alt="image16" width="700" height="448" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p>Po wprowadzeniu zmian (dodanie kropki do już istniejącej zmiennej PATH, dodanie nowej zmiennej DOK oraz utworzenie aliasu cls) i zapisaniu pliku, plik ten należy przeładować za pomocą polecenia: <strong>..bashrc</strong> Po przeładowaniu wszystkie wpisy, których dokonaliśmy znajdują swoje odzwierciedlenie w użytych w terminalu poleceniach. </p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image17.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image17.png" alt="image17" width="700" height="330" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Polecenia związane z plikami.</strong></p>
<hr />
<p> </p>
<p>Zanim Czytelniku będziesz próbował testować opisane polecenia należy jeszcze chwilkę zatrzymać się i wyjaśnić zasady jakie obowiązują przy stosowaniu znaku spacji i znaków specjalnych. Praca z plikami, które wykorzystują te znaki powoduje pewne problemy gdyż znaki te i występujące po nich ciągi tekstu, często są traktowane jako parametr lub definicja osobnego pliku.</p>
<p> </p>
<p>W przypadku pliku, który w nazwie zawiera spację oraz znak specjalny by odwołanie do tego pliku zakończyło się sukcesem wystarczy, że nazwę pliku obejmiemy cudzysłowem. Poniżej przykład w którym utworzyłem dwa pliki: pierwszy plik zawiera <strong>spacje</strong> - nazwa pliku: <strong>plik ze spacjami</strong>; drugi zaś plik w swojej nazwie zawiera znak specjalny <strong>></strong> - nazwa pliku: <strong>plikiznanspecjalny></strong> Jak widać tradycyjne odwołanie do obu plików (wykorzystano polecenie: <strong>ls</strong> - pokaż pliki w katalog) kończy się niepowodzeniem, gdy zaś nazwy plików obejmiemy cudzysłowami wydana komenda kończy się sukcesem.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image18.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image18.png" alt="image18" width="700" height="345" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>W przypadku pliku, zaczynającego się od <strong>minusa</strong> objęcie nazwy pliku cudzysłowem nie wystarczy, gdyż w poleceniu w którym do takiego pliku będziemy próbowali się odwołać uzyskamy informację o błędnej opcji. By udało się zbudować komendę z nazwą pliku rozpoczynającą się od minusa, nazwę tego pliku musimy poprzedzić operatorem: <strong>./</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image19.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image19.png" alt="image19" width="700" height="345" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Każde polecenie a raczej wynik uzyskany dzięki wydaniu komendy można zapisać do pliku. Przypuśćmy, że okresowo badamy dostępność jakiegoś hosta i wyniki te chcemy mieć w zewnętrznym pliku. Aby uzyskać nasz cel należy użyć symbolu przekierowania. Są trzy główne symbole przekierowania <strong>></strong>,<strong>>></strong>,<strong><</strong></p>
<p> </p>
<p>Aby zrozumieć sposób ich wykorzystania symbole <strong>></strong>,<strong>>></strong>, połączymy z poleceniem ping, które będzie skanować nam witrynę wp.pl</p>
<p> </p>
<p>Po wydaniu polecenia: <strong>ping -c 3 wp.pl > testwp</strong> nie uzyskamy informacji w terminalu, ponieważ zostają one przekierowane do pliku <strong>testwp</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image20.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image20.png" alt="image20" width="700" height="527" style="display: block; margin-left: auto; margin-right: auto;" /></a> </p>
<p>Użycie polecenia jeszcze raz spowoduje nadpisanie (zastąpienie) już istniejących danych, aby wymusić dopisanie do już istniejącego pliku należy użyć symbolu <strong>>></strong> - <strong>ping -c 3 wp.pl >> testwp</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image21.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image21.png" alt="image21" width="700" height="501" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Operatora przekazania <strong>></strong> można również użyć aby wyniki uzyskane dzięki wydaniu dowolnego polecenia przekierować do innego terminala.</p>
<p> </p>
<p>W tym celu należy poznać nazwę terminala z którego korzystamy. Nazwę tą poznamy za pomocą polecenia: <strong>tty</strong></p>
<p> </p>
<p>Po otworzeniu kolejnych sesji konsoli możemy za pomocą poznanej nazwy przekierowywać wyniki wydawanych poleceń. Poniżej przykład przekierowania wyników uzyskanych dzięki poleceniu <strong>ifconfig</strong> – polecenie: <strong>ifconfig > /dev/pts/25</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image22.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image22.png" alt="image22" width="700" height="310" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użyte polecenia przekierowania <strong>></strong> oraz <strong>>></strong> wymuszały zapisanie wyników wydanych poleceń do pliku, natomiast symbol <strong>< </strong>spowoduje pobranie danych z istniejącego pliku.</p>
<p> </p>
<p>Poniżej przykład pobrania wyrazów z pliku <strong>dane</strong> wraz z ułożeniem ich w kolejności alfabetycznej. Dane pobrane z zewnętrznego pliku dzięki użyciu polecenia <strong>sort</strong> zostają ułożone w kolejności rosnącej tj. od a do z.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image23.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image23.png" alt="image23" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Oczywiście nic nie stoi na przeszkodzie aby symbolów przekierowania w jednym poleceniu użyć kilkakrotnie. Spróbujmy więc posortowane wyrazy z przykładu powyżej zapisać do pliku. Zadanie to wykonamy po użyciu komendy: <strong>sort < dane > posortowane</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image24.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image24.png" alt="image24" width="700" height="504" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Istnieje jeszcze jeden symbol a mianowicie <strong>pionowa kreska</strong> (Shift+"\"). Symbol ten pozwala nam na utworzenie tzw. <strong>potoku</strong> (ang. pipe). Potok pozwala nam na połączenie kilku poleceń tak by stanowiły one jedność, bądź bardziej fachowo aby dane wyjściowe jednego programu były danymi wejściowymi dla innego.</p>
<p> </p>
<p>Taki standardowym przykładem użycia potoku jest sytuacja w której wydajemy polecenia a informacje, które uzyskujemy dzięki wydanej komendzie nie mieszczą się w jednym oknie terminala. Informacji jest tak dużo, że kolejna porcja wypisywanych danych zastępuje te bieżące a my nie mamy możliwości zapoznania się z nim. Natomiast gdy wydamy np. komendę: <strong>ls -l | more</strong> wyniki uzyskane dzięki poleceniu <strong>ls</strong> (pokaż pliki w katalogu) zostaną przekazane do aplikacji <strong>more</strong> powodującej zatrzymanie wyświetlania po zapełnieniu ekranu terminala. Kolejna porcja informacji zostanie wyświetlona po wciśnięciu dowolnego klawisza. Wydane polecenie: <strong>ls -l | more</strong> jest potokiem ponieważ polecenie to zostało zbudowane z dwóch odrębnych komend a połączonych ze sobą operatorem potoku.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image25.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Operatory przekierowania i operator potoku można łączyć tak naprawdę z wszystkimi poleceniami używanymi w powłoce wszystko zależy od celu jaki chcemy osiągnąć. Poniżej jeszcze dwa przykłady w których wykorzystano te operatory.</p>
<p> </p>
<p>Pierwszy przykład pokazuje wykorzystanie operatorów do zapisu w pliku tekstowym nazw plików (w kolejności alfabetycznej) znajdujących się w danym katalogu (w przykładzie katalog /bin/ - polecenie: <strong>ls /bin/ | sort > pliki</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image26.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image26.png" alt="image26" width="700" height="385" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Drugi zaś przykład wyszukuje nam wszystkie pliki z rozszerzeniem jpg a wyniki wraz z sortowaniem zostają zapisane do pliku – polecenie: <strong>find / -name *.jpg | sort > zdjęcia</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image27.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image27.png" alt="image27" width="700" height="448" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Dir i ls – zawartość katalogu</strong></p>
<hr />
<p> </p>
<p>Wyświetlenie plików i katalogów znajdujących się w bieżącej lokalizacji następuje po wydaniu polecenia: <strong>dir</strong> (podobnie jak w systemie Windows).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image28.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wyświetlenie zawartości katalogu może również odbyć się z wykorzystaniem polecenia: <strong>ls</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image29.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Polecenia <strong>dir</strong> i <strong>ls</strong> zawierają szereg opcji (zobacz pomoc) lecz te najczęściej używane przełączniki to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls plik1 plik2 plik3</strong> – listuje tylko wymienione pliki,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls *.doc</strong> – pokaże wszystkie pliki o rozszerzeniu *.doc,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls katalog1 katalog2</strong> – listuje wymienione katalogi,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls -l</strong> – szczegółowa lista plików wraz z atrybutami,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls -a</strong> – pokaż pliki ukryte (czyli te których nazwa zaczyna się kropką),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls -R</strong> – pokaż dodatkowo zawartość podkatalogów.</p>
<p> </p>
<p>Dodatkowo fajnym poleceniem by wyświetlić drzewo katalogów i plików jest komenda: <strong>tree</strong> (w niektórych systemach trzeba doinstalować niezbędne pakiety – <strong>sudo apt-get install tree</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image30.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dodatkowe parametry do polecenia <strong>tree</strong>:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-d</strong> – pokaż tylko katalogi,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-f</strong> – pokaż ścieżkę dostępu,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-a</strong> – pokaż wszystko,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-L <poziom></strong> - poziom listowania katalogów,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-H</strong> – eksport do HTML-a,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-X</strong> – eksport do XML-a.</p>
<p><strong> </strong></p>
<p> </p>
<p><strong>Cd oraz pwd – poruszanie się pomiędzy katalogami</strong></p>
<hr />
<p> </p>
<p>Przejście pomiędzy katalogami realizujemy za pomocą polecenia: <strong>cd</strong> <strong><nazwa_katalogu></strong> możliwe jest wpisanie tylko pierwszych liter katalogu i dopełnienie nazwy za pomocą klawisza TAB (wielkość liter ma znaczenie). Przejście do katalogu wyżej następuje po wydaniu polecenia: <strong>cd ..</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image31.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image31.png" alt="image31" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użycie samego polecenia<strong> cd</strong> przeniesie nas do katalogu aktualnie zalogowanego użytkownika.</p>
<p> </p>
<p> </p>
<p><strong>Mkdir – tworzenie folderu</strong></p>
<hr />
<p> </p>
<p>Aby utworzyć katalog/katalogi należy wykorzystać polecenie: <strong>mkdir <nazwa_katalogu></strong> Jak widać poniżej można za pomocą polecenia utworzyć wiele katalogów (nazwy katalogów po spacji).</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image32.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś utworzyć katalog w nazwie którego zawarta jest spacja należy nazwę umieścić w cudzysłowie.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image33.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Do utworzenia pliku/plików należy wykorzystać polecenie:<strong> ls > <nazwa_pliku></strong> (symbol <strong>></strong> - znak przekierowania). Podobnie jak w przypadku polecenia tworzenia katalogu, nazwę pliku zawierającego spację umieszczamy w cudzysłowie.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image34.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Cp – kopiowanie plików</strong></p>
<hr />
<p> </p>
<p>Kopiowanie plików pomiędzy katalogami następuje z wykorzystaniem komendy: <strong>cp</strong> <strong><element_kopiowany> <lokalizacja></strong> Na przykładzie poniżej, utworzony wcześniej plik o nazwie <strong>plik1</strong> został skopiowany do katalogu o nazwie <strong>katalog2</strong> (symbol <strong>..</strong> nakazuje przejście w strukturze katalogów o jeden poziom wyżej, ponieważ kopiowanie następowało bezpośrednio z folderu <strong>katalog1</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image35.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image35.png" alt="image35" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wydanie komendy: <strong>cp <nazwa_pliku> <nazwa_pliku></strong> spowoduje utworzenie kopii danego pliku.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image36.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Inne przydatne wariacje polecenia <strong>cp</strong> poniżej:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>cp tes* podkatalog/</strong> – skopiuje wszystkie pliki zaczynające się na <strong>tes</strong> do <strong>./podkatalog/</strong></p>
<p style="margin-left: 30px;"><strong>cp -r katalog1 ~</strong> - wydanie polecenia spowoduje skopiowanie katalogu wraz z całą zawartością do katalogu domowego (home/nazwa użytkownika)</p>
<p style="margin-left: 30px;"><strong>cp * katalog1 </strong>– kopiowanie wszystkich plików z bieżącej lokalizacji do folderu <strong>katalog1</strong> (dodanie -r skopiuje również podkatalogi)</p>
<p> </p>
<p> </p>
<p><strong>Mv – przenoszenie plików</strong></p>
<hr />
<p> </p>
<p>Za pomocą polecenia: <strong>mv</strong> przeniesiemy plik bądź zmienimy jego nazwę. Wydanie komendy: <strong>mv <bieżąca_nazwa_pliku> <nowa_nazwa_pliku></strong> zmieni nam nazwę pliku. Polecenia możemy również używać do operacji, które odnoszą się do katalogów.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image37.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użycie następującej składni: <strong>mv <przenoszone_pliki> <miejsce_docelowe></strong> zmieni nam lokalizację plików/katalogów. Poniżej przeniesienie pliku: <strong>plik1</strong> z folderu <strong>katalog1</strong> do folderu <strong>katalog2</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image38.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image38.png" alt="image38" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Przy przenoszeniu plików często przydatny okazuje się parametr <strong>-u</strong>, który to jest odpowiedzialny za przeniesienie plików gdy źródło jest nowsze od celu albo nie ma celu.</p>
<p> </p>
<p> </p>
<p><strong>Rm – kasowanie plików/katalogów</strong></p>
<hr />
<p> </p>
<p>Aby skasować pliki należy posłużyć się poleceniem: <strong>rm <nazwa_pliku></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image39.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dostępne są również przełączniki:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>rm -r katalog</strong> – kasuje wszystko w zdefiniowanym katalogu tj. wszystkie pliki wraz z podkatalogami (--recursive)</p>
<p style="margin-left: 30px;"><strong>rm -f plik</strong> – brak pytania o potwierdzenie kasowanych danych (--force)</p>
<p> </p>
<p>Aby usunąć pusty katalog należy skorzystać z komendy: <strong>rmdir <nazwa_katalogu></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image40.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Chmod – prawa dostępu do plików</strong></p>
<hr />
<p> </p>
<p>W systemie Linux każdy plik jak także katalog ma swoje określone prawa dostępu. Prawa te określają, kto i jaką czynność może z danym plikiem/katalogiem wykonać. Mamy do czynienia z prawem do odczytu, zapisu i wykonania. Oczywiście dany plik/katalog może mieć nałożoną różną kombinacje praw. Aby wykonać sprawdzenie praw dostępu posłuż się Czytelniku znanym już Tobie poleceniem: <strong>ls -l</strong> Na rysunku poniżej zostały przedstawione prawa dostępu do dwóch plików i jednego katalogu.</p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image41.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image41.png" alt="image41" width="700" height="221" style="display: block; margin-left: auto; margin-right: auto;" /></a> </p>
<p>Po wyświetleniu praw dostępu do plików i katalogu (to ten pierwszy ciąg znaków od lewej) możemy przejść do analizy obowiązujących praw.</p>
<p> </p>
<p>Każdy element (tutaj pliki i katalog) posiada zdefiniowane uprawnienia dla trzech grup: <strong>prawa dostępu właściciela pliku</strong>, <strong>prawa dostępu grupy</strong>, oraz <strong>prawa dostępu pozostałych</strong>. Prawa te przybierają formę zapisu dziesięcio elementowego ciągu znaków. Określone znaki na poszczególnych miejscach tego ciągu będą nas informowały o możliwości wykonania na pliku danych operacji. Już wiesz czytelniku, że prawa nakładane są trzem odrębnym grupom i do określenia tych praw zostało zarezerwowane 9 znaków (po trzy znaki na każdą grupę) zaś 10 znak lecz pierwszy w kolejności będzie nam mówił z jakim elementem będziemy mieli do czynienia. Poniżej lista wartości jaka może wystąpić na pierwszym miejscu wraz z opisem:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-</strong> – zwykły plik,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>d</strong> – katalog/folder,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>l</strong> – symlink czyli dowiązanie symboliczne,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>s </strong>– gniazdo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>f </strong>– FIFO,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>c </strong>– urządzenie znakowe,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>b </strong>– urządzenie blokowe.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">Natomiast prawa są określane za pomocą następujących symboli:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>r</strong> – prawo do odczytu (wartość 4),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>w</strong> – prawo do zapisu (wartość 2),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>x</strong> – prawo do wykonania (wartość 1).</p>
<p> </p>
<p>Tak więc uzbrojeni w tą wiedzę spróbujmy rozszyfrować prawa elementów zaprezentowanych na rysunku powyżej (wartości podane w nawiasach zostaną omówione za chwilę).</p>
<p style="padding-left: 30px;"><strong>-rw-rw-r--</strong> prawo właściciela do odczytu i zapisu lecz nie do wykonania (ciąg: rw-), prawo grupy do odczytu i zapisu lecz nie do wykonania (ciąg: rw-), pozostali tylko prawo do odczytu (ciąg: r--),</p>
<p style="padding-left: 30px;"><strong>-rw-r--r--</strong> prawo właściciela do odczytu i zapisu lecz nie do wykonania (ciąg: rw-), prawo grupy do odczytu lecz nie do zapisu i wykonania (ciąg: r--), pozostali tylko prawo do odczytu (ciąg: r--),</p>
<p style="padding-left: 30px;"><strong>drwxrwxr-x</strong> prawo właściciela do odczytu, zapisu i wykonania (ciąg: rwx), prawo grupy do odczytu, zapisu i wykonania (ciąg: rwx), pozostali prawo do odczytu i wykonania lecz brak praw do zapisu (ciąg: r-x), symbol d oznacza, że mamy do czynienia z katalogiem.</p>
<p> </p>
<p>Tak więc chcąc zmienić prawa do danego pliku bądź katalogu musimy posłużyć się poleceniem: <strong>chmod</strong> Ogólna składnia użycia polecenia wygląda następująco: <strong>chmod <opcje> <grupa> <uprawnienia> <plik/katalog></strong> bądź <strong>chmod <opcje> <wartość_liczbowa> <plik/katalog></strong></p>
<p> </p>
<p>W poleceniu stosujemy następujące symbole:</p>
<p> </p>
<p style="padding-left: 30px;">grupa docelowa co do których praw mają obowiązywać: <strong>u</strong> - user, <strong>g </strong>- group, <strong>o</strong> - others,<strong> a</strong> – all</p>
<p style="padding-left: 30px;">uprawnienia: <strong>r</strong> - read, <strong>w </strong>- write,<strong> x</strong> – execute</p>
<p style="padding-left: 30px;"><strong>+</strong> - dodanie uprawnień, <strong>-</strong> - odebranie uprawnień</p>
<p> </p>
<p>Tak więc wykonajmy mały przykład. Naszym zadaniem będzie odebranie prawa odczytu i wykonania grupie pozostali. Jak widzimy poniżej grupa pozostali ma prawo wykonania tych operacji odnośnie folderu katalog1 By odebrać im te uprawnienia należy wydać polecenie: <strong>chmod o-r-x katalog1 </strong>Po ponownym sprawdzeniu uprawnień można zauważyć, że poszczególne prawa zostały odebrane.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image42.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś nadać praw odczytu, zapisu i wykonania dla wszystkich grup możemy użyć komendy: <strong>chmod a+r+w+x katalog 1 </strong>bądź krócej:<strong> chmod a+rwx katalog1</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image43.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image43.png" alt="image43" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby odebrać grupie prawo do zapisu i jednocześnie pozostałym odebrać wszystkie prawa skorzystaj z komendy: <strong>chmod g-w,o-rwx katalog1</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image44.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image44.png" alt="image44" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wcześniej w opisie przy każdym z praw podałem pewne wartości liczbowe, skorzystanie z tych wartości jest znacznie wygodniejszym sposobem nadawania i odbierania praw. Aby zbudować polecenie posłuż się tabelą i przykładem zamieszczonym poniżej. Naszym celem jest nadanie następujących praw do folderu <strong>katalog1</strong>: prawa użytkownika - wszystkie, prawa grupy - odczyt i wykonanie a dla pozostałych tylko odczyt. By wykonać to zadanie możemy posłużyć się poleceniem: <strong>chmod 754 katalog1</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image45.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image45.png" alt="image45" width="700" height="347" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Efekt wydania polecenia.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image46.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image46.png" alt="image46" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Skąd ta liczba i jak ją obliczyć? Cyfry w prawach dostępu to:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>pierwsza</strong> cyfra to prawa właściciela do pliku;</p>
<p style="margin-left: 30px;"><strong>druga</strong> – grupy właściciela;</p>
<p style="margin-left: 30px;"><strong>trzecia</strong> – wszystkich innych.</p>
<p> </p>
<p>Jeżeli chcemy wykonać nasz zadanie otrzymujemy:</p>
<p> </p>
<p style="margin-left: 30px;">prawa właściciela: odczyt+zapis+wykonanie czyli 4+2+1=<strong>7</strong>,</p>
<p style="margin-left: 30px;">prawa grupy: odczyt+wykonanie czyli 4+1=<strong>5</strong></p>
<p style="margin-left: 30px;">prawa pozostałych: odczyt czyli <strong>4</strong></p>
<p> </p>
<p>Tak więc za pomocą tak obliczonego kodu liczbowego możemy przeprowadzić ustawienie uprawnień do plików i katalogów.</p>
<p> </p>
<p>I na koniec warto wspomnieć jeszcze o jednym parametrze a mianowicie opcji: <strong>-R</strong>, która pozwala nam ustalić prawa dla wszystkich plików/katalogów znajdujących się np. w katalogu.</p>
<p> </p>
<p>Na sytuacji przedstawionej na rysunku poniżej wszystkie pliki i podkatalogi znajdujące się w folderze <strong>katalog1</strong> mają ustawione wszystkie prawa (sam folder również – pkt 1 oraz pkt 2) Za pomocą komendy: <strong>chmod -R 707 katalog1</strong> zostały odebrane wszelkie prawa dla grupy (pkt 3) Po sprawdzeniu praw dla folderu i plików znajdujących się w tym folderze widać, że prawa mają zastosowanie (pkt 5 i pkt 6) z wyjątkiem jednego pliku – <strong>plik2</strong> (pkt 7), zmiana praw nie mogła być zastosowana (pkt 4) ponieważ plik ten należy do użytkownika <strong>root</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image47.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image47.png" alt="image47" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Chown, chgrp - zmiana właściciela pliku/katalogu</strong></p>
<hr />
<p> </p>
<p>Czasem istnieje potrzeba zmiany właściciela pliku, bądź przypisania do praw pliku danej grupy. Operację tą możemy wykonać za pomocą polecenia: <strong>chown</strong>. Ogólna składnia polecenia jest następująca: <strong>chown <opcje> <użytkownik/grupa> <plik/katalog></strong></p>
<p> </p>
<p>Poniżej przykład zmiany właściciela pliku: <strong>plik2</strong> Plik ten należy do użytkownika <strong>root</strong>, po wydaniu polecenia: <strong>chown luk plik2</strong> nowym właścicielem pliku staje się użytkownik <strong>luk</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image48.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image48.png" alt="image48" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Zmiana przynależności do pliku jest również możliwa z użyciem UID użytkownika. Identyfikator UID jest przyznawany każdemu nowemu użytkownikowi i jest on niepowtarzalny. Aby poznać identyfikator użytkownika wydaj polecenie: <strong>id <nazwa_użytkownika></strong> Naszym celem będzie ponowne przypisanie praw właściciela użytkownika <strong>root</strong> do pliku: <strong>plik2</strong> UID użytkownika <strong>root</strong> to <strong>0</strong>. Wydanie komendy: <strong>chown 0 plik2 </strong>spowoduje ustawienie właściciela pliku: <strong>plik2</strong> na użytkownika <strong>root</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image49.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wprawne oko co niektórych czytelników na pewno zauważyło, że po wydaniu przedstawionych powyżej komend <strong>chown</strong> zmieniła się tylko przynależność właściciela pliku a nie grupy. By zmienić właściciela pliku odnośnie grupy po zdefiniowaniu nazwy użytkownika podajemy nazwę grupy. Nazwa użytkownika i nazwa grupy są oddzielone <strong>dwukropkiem</strong>.</p>
<p> </p>
<p>Poniżej ponownie przykład zmiany właściciela pliku: plik2 tym razem zmianie ulega właściciel i grupa. Gdy nazwa grupy i użytkownika jest taka sam wystarczy, że po definicji użytkownika wstawimy sam dwukropek. Czyli zmianę przynależności dla przykładu poniżej można by było zrealizować za pomocą polecenia: <strong>chown luk: plik2</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image50.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>I tu również można wykorzystać identyfikator użytkownika i identyfikator grupy.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image51.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Zmiana przynależności samej grupy odbywa się za pomocą przykładowego polecenia: <strong>chown :luk plik2 </strong>(opuszczamy definicję użytkownika i po dwukropku podajemy nazwę grupy).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image52.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zmienić właściciela wszystkich plików i podkatalogów skorzystaj z przełącznika<strong> -R</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image53.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Innym sposobem zmiany przynależności pliku/katalogu do grupy jest skorzystanie z polecenia: <strong>chgrp <nazwa_grupy> <plik/katalog> </strong>Poniżej na zrzucie został przedstawiony przykład zmiany grupy dla pliku: <strong>plik2</strong> Grupa z <strong>root</strong> została zmieniona na <strong>luk</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image54.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Find, Locate, Which – wyszukiwanie plików</strong></p>
<hr />
<p> </p>
<p>Aby wyszukać dany plik bądź katalog należy użyć polecenia: <strong>find -name <nazwa_szukanego elementu> </strong>Poniżej przykład odszukania elementów zawierających ciąg <strong>tmp</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image55.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image55.png" alt="image55" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użycie znaku gwiazdki powoduje wyszukanie plików pasujących do danego wzorca np. polecenie: <strong>find -name temp*</strong> spowoduje wyszukanie wszystkich plików zaczynających się od słowa <strong>temp</strong></p>
<p> </p>
<p>Aby znaleźć pliki ze względu na ich rozmiar możemy posłużyć się np. poleceniem <strong>find -size 5k</strong> – wyszukanie plików, których rozmiar wynosi 5 kB, aby wyszukać pliki o rozmiarze większym niż 5 kB dodajemy znak <strong>plus</strong> natomiast o rozmiarze mniejszym znak <strong>minus</strong> np. <strong>find -size +5k </strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image56.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image56.png" alt="image56" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby odszukać pliki ze względu na uprawnienia do plików możemy posłużyć się poleceniem: <strong>find <uprawnienie></strong> Polecenie ukaże pliki o określonym stanie w kontekście użytkownika wydającego polecenie. Uprawnienia jakie możemy wyszukiwać to:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>-readable</strong> – prawo do odczytu,</p>
<p style="margin-left: 30px;"><strong>-writable</strong> – prawo do zapisu,</p>
<p style="margin-left: 30px;"><strong>-executable</strong> – prawo do wykonania.</p>
<p> </p>
<p>Jak można zauważyć poniżej użytkownik <strong>luk</strong> wydaje polecenie odszukania wszystkich plików, które ma prawo czytać a następnie wszystkich plików, które może zapisywać. Dwa pliki: <strong>plik2</strong> i <strong>plik3</strong> które należą do użytkownika <strong>root</strong> w wynikach wyszukiwania plików do odczytu pojawiają się lecz w wynikach do zapisu już nie. Użytkownik <strong>luk</strong> może te pliki przeglądać ponieważ atrybut dla pozostałych ustawiony jest na <strong>read</strong> dając tym samym prawo do przeglądania wszystkim.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image57.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image57.png" alt="image57" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Do wyszukiwania plików pod kątem uprawnień możemy również użyć przełącznika: <strong>-perm <kod_chmode></strong> Tworzenie kodu <strong>chmod</strong> zostało opisane wyżej tak więc chcąc odnaleźć pliki do których użytkownik ma prawo odczytu (bo atrybut odczytu jest ustawiony w sekcji pozostali) można użyć polecenia: <strong>find -perm -004</strong> Opcja <strong>-type f </strong>nakazuje wyświetlenie tylko plików.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image58.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image58.png" alt="image58" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Polecenie: <strong>find -perm -004</strong> wyświetla te pliki, które mają ustawiony atrybut <strong>read</strong> w sekcji pozostali, reszta pól nie jest brana pod uwagę, ważne jest by ten konkretny atrybut był zdefiniowany (dlatego w wyniku wyszukiwania zostały umieszczone oba pliki).</p>
<p> </p>
<p>Aby odnaleźć plik z konkretnie ustawionym atrybutem <strong>chmod</strong> należy podać samą wartość atrybutu (dlatego tylko jeden plik został umieszczony w wyniku wydania drugiego polecenia, ponieważ tylko ten jeden plik spełnia warunek).</p>
<p> </p>
<p>Użycie znaku <strong>/ </strong>spowoduje wyszukanie wszystkich plików do których zdefiniowana wartość <strong>chmod</strong> pasuje. Na rysunku poniżej użytkownik do jednego pliku ma dostęp poprzez to że jest ich właścicielem a do drugiego poprzez członkostwo w grupie pozostali.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image59.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image59.png" alt="image59" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Polecenie: <strong>find -perm 400</strong> wyszuka tylko te pliki którem mają ustawiony kod <strong>chmod</strong> na <strong>400</strong> (czyli plik: plik1), drugie polecenie: <strong>find -perm 004</strong> pokaże pliki z atrybutem 004 (czyli plik: plik2) natomiast komenda: <strong>find -perm /404</strong> wszystkie pliki z ustawionymi atrybutami: 400, 004 oraz 404</p>
<p> </p>
<p>Poleceniem <strong>find</strong> oprócz znajdowania plików z określonymi atrybutami może zostać wykorzystane również do odnalezienia plików konkretnego użytkownika bądź grupy.</p>
<p> </p>
<p>Aby wyszukać pliki, konkretnego użytkownika należy skorzystać z flagi <strong>-user</strong> bądź <strong>-uid</strong>. Opcja <strong>user</strong> jest łączona z nazwą użytkownika ale także jego numerem uid natomiast flaga <strong>uid</strong> tylko z identyfikatorem użytkownika. Aby poznać numer użytkownika posłuż się poleceniem: <strong>id -u <nazwa_użytkownika></strong> bądź <strong>echo $UID</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image60.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image60.png" alt="image60" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Innym poleceniem pozwalającym nam na zlokalizowanie plików jest komenda: <strong>locate <nazwa_szukanego_elementu></strong> Aby zignorować wielkość znaków użyj przełącznika <strong>-i</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image61.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image61.png" alt="image61" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Szybsze wyszukanie plików zapewnia nam polecenie: <strong>locate</strong> ponieważ polecenie to korzysta z bazy danych, która to przechowuje informacje o położeniu plików. Baza ta co jakiś czas jest aktualizowana przez jedno z zadań programu <strong>cron</strong>. Manualne odświeżenie bazy następuje po wydaniu komendy: <strong>updatedb</strong></p>
<p> </p>
<p>Do lokalizacji plików wykonywalnych możemy użyć polecenia: <strong>which</strong> <nazwa_programu> Poniżej jako przykład lokalizacja programu <strong>firefox</strong> oraz <strong>vim</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image62.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image62.png" alt="image62" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>File – informacja o typie pliku</strong></p>
<hr />
<p> </p>
<p>Narzędzie <strong>file</strong> dostarcza nam informacji o tym z jakim plikiem mamy do czynienia. Składnia polecenia: <strong>file <nazwa_pliku></strong> Jak można zauważyć na rysunku poniżej wydanie polecenia odnośnie plików: <strong>plik</strong>, <strong>plik2</strong> oraz <strong>bash</strong> zwróciło nam informację iż pierwszy jest <strong>dokumentem XML</strong>, drugi <strong>plikiem HTML</strong> a ostatni zaś <strong>plikiem binarnym</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image63.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" /></a> </p>
<p>Polecenie: <strong>grep</strong> jest wykorzystywane do odszukania danej wartości, lub danych które będą pasować do wzorca. Ogólna składnia polecenia jest następująca: <strong>grep <opcje> <wzorzec> <przeszukiwany_plik></strong></p>
<p> </p>
<p>Poniżej został utworzony plik, który zawiera listę załadowanych modułów i w pliku tym poszukujemy informacji na temat modułu Bluetooth. Po wpisaniu polecenia: <strong>grep Bluetooth plik3</strong> nakazującego przeszukanie w <strong>plik3</strong> wystąpienia słowa <strong>Bluetooth</strong> nie uzyskujemy żadnej informacji gdyż szukany ciąg nie wystąpił w przeszukiwanym pliku. A może problemem jest wielkość liter? Aby to sprawdzić w kolejnym poleceniu został dodany przełączki <strong>-i</strong> który każe poleceniu <strong>grep</strong> zignorować wielkość liter. Tym razem uzyskujemy informację, że poszukiwany ciąg został odnaleziony.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image64.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image64.png" alt="image64" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wzorce poszukiwanych ciągów tekstowych możemy budować w zależności od kryteriów jakie muszą spełniać. Poniżej na rysunku wzorzec, który każe wyszukać ciągi znaków w których znajdują się litery xyz – polecenie: <strong>grep [xyz] plik3</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image65.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Jeszcze jeden przykład, który szuka tekstu <strong>snd_</strong> przy czym tekst ten musi wystąpić a po nim może znajdować się dowolna mała litera od a do z – polecenie: <strong>grep snd_[a-z] plik3</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image66.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image66.png" alt="image66" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Przykładów wykorzystania polecenia <strong>grep</strong> można podać bardzo wiele, wszystko zależy od tego co tak naprawdę szukamy. A na pewno pomocne będą poniższe wyrażenia, które pozwolą nam na zbudowanie kryteriów, przeszukujących plik pod kątem naszych oczekiwań:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[xyz]</strong> – pasuje do x lub do y lub do z,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[a-z]</strong> – pasuje do wszystkich liter od a do z</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[A-Za-z]</strong> – pasuje do dowolnej dużej i małej litery,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[0-9]</strong> – pasuje do dowolnej z cyfr,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[^xy]</strong> – pasuje do wszystkich znaków za wyjątkiem x i y,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>. </strong>– dowolny znak,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>^ </strong>– pusty łańcuch na początku linii,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>$ </strong>– pusty łańcuch na końcu linii,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\<</strong> – pusty łańcuch na początku słowa,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\></strong> – pusty łańcuch na końcu słowa.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">Oprócz wyrażeń do dyspozycji mamy również opcje:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-i</strong> – zignoruj wielkość liter,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-v</strong> – wypisz te wiersze, które nie pasują do zbudowanego wzorca,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-f</strong> – porównaj wiersze wg wzorców zapisanych w pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c</strong> – zwróć liczbę wierszy pasujących do wzorca,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-n</strong> – wypisz numer wiersza, w którym zostało odnalezione dopasowanie,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><span class="skrypt"><strong>-l</strong> </span>– wypisz tylko nazwy plików w których znajduje się poszukiwany tekst,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-w</strong> – wyszukuje konkretny ciąg wyrazowy oznacza to że jeżeli szukany tekst to np. <strong>ta</strong> to zwrócone zostaną tylko te wartości w których ten tekst wystąpi, nie zostanie zwrócone np. słowo <strong>tata</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-r</strong> – szukanie rekursywnie tzn. przeszukiwane są również podkatalogi,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><span class="skrypt"><strong>-E</strong></span> – interpretuje wzorzec jako wyrażenie regularne.</p>
<p> </p>
<p>Przy używaniu <strong>grep</strong> należy pamiętać, że aby znaleźć wyrazy zawierające następujące znaki: <strong>+ | { } ( ) ? .</strong> znaki te trzeba zamaskować – maskujemy wykorzystując do tego prawy ukośnik <strong>\</strong></p>
<p>To na koniec jeszcze parę przykładów:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>grep zdjecie\.jpg plik.txt</strong> – gdy w poszukiwanym wyrazie chcemy odnaleźć kropkę wówczas znak kropki musimy zamaskować używając do tego prawego ukośnika, szukany ciąg to zdjecie.jpg</p>
<p style="margin-left: 30px;"><strong>grep joan*a plik.txt</strong> – użycie * oznacza, że poprzedzający gwiazdkę element będzie dopasowany zero lub dowolną ilość razy, wydanie polecenia zwróci tekst: joana a także joanna czy joannna</p>
<p style="margin-left: 30px;"><strong>grep komputer *</strong> – polecenie wyszuka wyraz komputer we wszystkich plikach bieżącego katalogu</p>
<p style="margin-left: 30px;"><strong>grep ka$ plik.txt</strong> – wyrazy kończące się na ka czyli np. pralka, walka itd.</p>
<p style="margin-left: 30px;"><strong>grep -E "^a|^b" plik.txt</strong> – zostaną wybrane wiersze zaczynające się znakiem a lub b (znak<strong> |</strong> oznacza <strong>lub</strong>)</p>
<p> </p>
<p> </p>
<p><strong>Kompresja plików – narzędzia ZIP, TAR i RAR</strong></p>
<hr />
<p> </p>
<p>W każdym szanującym się systemie istnieje możliwość utworzenia plików archiwum, zawierających skompresowane dane. W systemie Linux najpopularniejszymi narzędziami są programy ZIP i TAR. Programy te pozwalają nam na „pakowanie” wielu plików do jednego archiwum jak i na późniejsze wyodrębnienie tych plików z archiwum.</p>
<p> </p>
<p>Aby utworzyć plik archiwum ZIP możemy posłużyć się poleceniem: <strong>zip <nazwa_archiwum> <pliki></strong> Poniżej zostało utworzone archiwum <strong>spakowane.zip</strong> zawierające trzy pliki: <strong>plik, testwp, zdjecia</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image67.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image67.png" alt="image67" width="700" height="389" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby spakować cały katalog można posłużyć się symbolem wieloznacznym *.* bądź gdy chcemy dodać pliki określonego rodzaju np. pliki tekstowe - *.txt</p>
<p> </p>
<p>Dodanie plików do archiwum odbywa się poprzez odwołanie się do wcześniej utworzonego pliku archiwum wraz z nazwą plików, które chcemy dodać. Odwołując się do przykładu powyżej aby do archiwum <strong>spakowane.zip</strong> dodać plik <strong>dane</strong> należałoby posłużyć się poleceniem: <strong>zip spakowane.zip dane</strong></p>
<p> </p>
<p>Sprawdzenie zawartości archiwum bez jego rozpakowania możemy wykonać za pomocą komendy: <strong>unzip -l <archiwum></strong> Jak można zauważyć plik <strong>dane</strong> został dodany do pliku archiwum <strong>spakowane.zip</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image68.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image68.png" alt="image68" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby z pliku <strong>spakowane.zip</strong> wyodrębnić „spakowane” pliki, plik archiwum został przekopiowany do katalogu: <strong>/home/Dokumenty/katalog2</strong> a następnie została wydana komenda: <strong>unzip <plik_archiwum></strong> nakazująca wyodrębnienie plików.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image69.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image69.png" alt="image69" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Narzędzie ZIP jest używane z reguły do kompresji plików, które np. mają zostać wysłane do osoby nie korzystającej z systemu Linux natomiast w przypadku osób posiadających system Linux bardziej odpowiednią opcją wydaje się wybranie drugiego narzędzia a mianowicie TAR.</p>
<p> </p>
<p>Opis narzędzia wykonam na tym samy zestawie danych jakie zostały wykorzystane do omówienia programu ZIP.</p>
<p> </p>
<p>Aby użyć narzędzia TAR celem skompresowania plików należy wydać komendę: <strong>tar cvzf <nazwa_archiwum> <pliki></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image70.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image70.png" alt="image70" width="700" height="124" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby podejrzeć pliki znajdujące się w archiwum skorzystaj z polecenia: <strong>tar tvzf spakowane.tar.gz</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image71.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image71.png" alt="image71" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś rozpakować pliki należy użyć komendy: <strong>tar xvzf <skapowane_archuwum></strong> Na przykładzie poniżej spakowane archiwum zostało skopiowane do folderu <strong>katalog2</strong> i następnie wyodrębniono pliki.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image72.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image72.png" alt="image72" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>W przypadku plików RAR należy w pierwszej kolejności doinstalować aplikacje odpowiedzialne za obsługę tego typu plików: <strong>sudo apt-get install rar unrar</strong> (rar potrafi nam kompresować i dekompresować pliki, natomiast unrar tylko dekompresować).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image73.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image73.png" alt="image73" width="700" height="176" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Kompresja plików odbywa się za pomocą polecenia: <strong>rar a <nazwa_pliku_rar> <pliki/katalogi> </strong>Po wydaniu polecenia następuje kompresja plików.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image74.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image74.png" alt="image74" width="700" height="279" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Test archiwum odbywa się poprzez użycie przełącznika: <strong>t </strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image75.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image75.png" alt="image75" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dodanie pliku do archiwum odbywa się również dzięki ustawionej fladze <strong>a</strong> z zdefiniowanymi plikami, które chcemy do archiwum dodać (w przykładzie poniżej do wcześniej utworzonego archiwum <strong>spakowane.rar</strong> został dodany plik <strong>dane</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image76.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image76.png" alt="image76" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Kasowanie pliku z archiwum możemy wykonać za pomocą przełącznika <strong>d</strong> (wcześniej dodany plik <strong>dane</strong> został z archiwum usunięty)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image77.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image77.png" alt="image77" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dekompresja archiwum odbywa się za pomocą polecenia: <strong>rar e <plik_rar></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image78.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image78.png" alt="image78" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Inne przydatne opcje:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-u</strong> – aktualizacja plików w archiwum,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-p</strong> – ustawienie hasła,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-r</strong> – kompresja wraz z podkatalogami,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c</strong> – komentarz do archiwum.</p>
<p> </p>
<p> </p>
<p><strong>Stat informacje o stanie pliku bądź sytemu plików.</strong></p>
<hr />
<p> </p>
<p>Wydając polecenie <strong>stat <nazwa_pliku/katalogu></strong> uzyskamy podstawowe informacje dotyczące danego pliku a także dane o operacjach wykonywanych na pliku (prawa dostępu, właściciel, czasy zmiany, modyfikacji itd.) natomiast dodając przełącznik <strong>-f</strong> uzyskamy informacje o pliku w kontekście systemu plików.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image79.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image79.png" alt="image79" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dane uzyskane dzięki poleceniu możemy sformatować według własnego uznania poprzez zastosowanie przełączników podanych poniżej. Np. chcąc uzyskać informacje o prawach dostępu do plików w postaci ósemkowej i tradycyjnej należy wydać polecenie: <strong>stat -c %a%A <nazwa_pliku></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image80.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image80.png" alt="image80" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Prawidłowe specyfikacje formatu dla plików (bez opcji --file-system):</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%a </strong>– prawa dostępu ósemkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%A </strong>– prawa dostępu w postaci czytelnej dla człowieka,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%b </strong>– liczba zajętych bloków (zobacz %B),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%B </strong>– rozmiar w bajtach każdego bloku podanego przez %b,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%C </strong>– kontekst bezpieczeństwa,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%d </strong>– numer urządzenia dziesiętnie,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%D</strong> – numer urządzenia szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%f </strong>– tryb surowy, szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%F </strong>– typ pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%g </strong>– numer grupy właściciela pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%G</strong> – nazwa grupy właściciela pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%h </strong>– liczba dowiązań zwykłych,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%i –</strong> numer i-węzła,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%m</strong> – miejsce zamontowania,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%n </strong>– nazwa pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%N</strong> – nazwa pliku w cudzysłowach, rozwiązana jeżeli dowiązanie symboliczne,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%o </strong>– optymalny rozmiar wielkości transferu wejścia/wyjścia,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%s </strong>– całkowity rozmiar w bajtach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%t </strong>– większy numer urządzenia szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%T </strong>– mniejszy numer urządzenia szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%u </strong>– identyfikator właściciela,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%U</strong> – nazwa właściciela,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%w</strong> – czytelny dla człowieka czas utworzenia pliku albo - jeżeli nieznany,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%W</strong> – czas utworzenia pliku w sekundach albo - jeżeli nieznany,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%x </strong>– czytelny dla człowieka czas ostatniego czytania,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%X </strong>– czas ostatniego czytania w sekundach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%y </strong>– czytelny dla człowieka czas ostatniej modyfikacji,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%Y </strong>– czas ostatniej modyfikacji w sekundach</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%z </strong>– czytelny dla człowieka czas ostatniej zmiany czasu,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%Z </strong>– czas ostatniej zmiany czasu w sekundach.</p>
<p> </p>
<p>Prawidłowe specyfikacje formatu dla systemów plików:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%a </strong>– liczba wolnych bloków dostępnych dla zwykłego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%b</strong> – całkowita liczba bloków danych w systemie plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%c </strong>– całkowita liczba i-węzłów w systemie plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%d</strong> – liczba wolnych i-węzłów w systemie plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%f </strong>– liczba wolnych bloków w systemie plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%i </strong>– identyfikator systemu plików szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%l </strong>– maksymalna długość nazw plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%n</strong> – nazwa pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%s </strong>– optymalny rozmiar bloku przy zapisie/odczycie,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%S </strong>– podstawowy rozmiar bloku (dla zliczeń bloków),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%t </strong>– rodzaj systemu plików szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%T </strong>– rodzaj systemu plików w formie czytelnej dla człowieka.</p>
<p> </p>
<p> </p>
<p><strong>Du – wielkość plików/katalogów</strong></p>
<hr />
<p> </p>
<p>Aby poznać wielkość jaką pliki bądź katalogi zajmują na dysku możemy skorzystać z polecenia: <strong>du</strong> Domyślnie wydanie polecenia powoduje wyświetlenie objętości plików i podkatalogów odnośnie katalogu w którym się znajdujemy. Dodanie do polecenia nazwy pliku bądź katalogu spowoduje wyświetlenie objętości pliku/katalogu.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image81.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image81.png" alt="image81" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Przydatne opcje:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-b</strong> – wielkość pliku podawana w bajtach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-k</strong> – wielkość pliku podawana w kilobajtach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-m</strong> – wielkość pliku podawana w megabajtach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-h</strong> – automatyczny dobór wyświetlanej jednostki,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c</strong> – podsumowanie na końcu,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> – jedynie całkowita wielkość.</p>
<p> </p>
<p> </p>
<p><strong>Zawartość pliku</strong></p>
<hr />
<p> </p>
<p>W systemie Linux istnieje szereg poleceń pozwalających nam na podejrzenie zawartości interesującego nas pliku. Poniżej przedstawię kilka przykładów, choć zaprezentowaną przeze mnie gamę poleceń pewnie można jeszcze uzupełnić o dodatkowe.</p>
<p> </p>
<p>Pierwsza polecenie, które chciałbym przedstawić jest to komenda: <strong>less</strong> Polecenie to umożliwi nam zajrzenie do pliku, przy czym prezentowana wartość wyświetlana jest kolejno po jednej stronie. Wydanie np. polecenia: <strong>less /var/log/syslog.1</strong> wyświetli nam zawartość pliku <strong>syslog.1</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image82.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image82.png" alt="image82" width="700" height="456" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Po wciśnięciu klawisza: <strong>h</strong> w trakcie działania polecenia zostanie wyświetlona pomoc programu. W pomocy zawarte są informacje dotyczące działania programu dotyczące np. sposobu wyświetlania zawartości pliku.</p>
<p> </p>
<p>Dodatkowo podczas wywołania programu można skorzystać z szeregu opcji pozwalających nam na określenie sposobu działania programu. Przydatne flagi to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-N</strong> – numeracja wyświetlanych wierszy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c</strong> – wyczyszczenie ekranu, przed wyświetleniem następnego,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-m</strong> – informacja o procencie wyświetlonego pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> – puste wiersze są redukowane do jednego,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-S</strong> – wyłączenie zawijania wierszy, teks jest przycięty do szerokości ekranu.</p>
<p> </p>
<p>Użycie polecenia: <strong>head</strong> spowoduje wypisanie pierwszych dziesięciu wierszy pliku. Polecenia można używać by szybko zorientować się co w danym pliku się znajduje.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image83.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image83.png" alt="image83" width="700" height="282" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Parametry na, które mamy wpływ to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-<liczba></strong> - wyświetlenie zdefiniowanej liczby wierszy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c <liczba></strong> - wyświetlenie zdefiniowanej liczby bajtów pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-q</strong> - tryb cichy, polecenie <strong>head</strong> przy większej ilości zdefiniowanych do wyświetlenia plików nie wyświetla nagłówka pliku zawierającego jego nazwę.</p>
<p> </p>
<p>Podobnym poleceniem, które możemy użyć do szybkiego zbadania zawartości pliku jest polecenie: <strong>tail</strong> tylko w przeciwieństwie do <strong>head</strong> wydanie komendy spowoduje wyświetlenie ostatnich dziesięciu wierszy.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image84.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image84.png" alt="image84" width="700" height="256" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Parametry na, które mamy wpływ to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-<liczba></strong> - wyświetlenie zdefiniowanej liczby wierszy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c <liczba></strong> - wyświetlenie zdefiniowanej liczby bajtów pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-q</strong> - tryb cichy, polecenie <strong>tail</strong> przy większej ilości zdefiniowanych do wyświetlenia plików nie wyświetla nagłówka pliku zawierającego jego nazwę,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-f</strong> - użycie tej flagi spowoduje otwarcie pliku i jego ciągłe monitorowanie, nowe wiersze będą się pojawiać w miarę dodawania nowych informacji do otwartego pliku. Użycie tego parametru świetnie nadaje się do przeglądania wszelkiego rodzajów logów monitorujących stan systemu.</p>
<p> </p>
<p>Innym programem, który pozwoli nam na podejrzenie zawartości pliku jest: <strong>cat</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image85.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image85.png" alt="image85" width="700" height="438" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Niektóre parametry programu to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> - użycie flagi spowoduje połączenie pustych następujących po sobie wierszy w jeden,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-b</strong> - numerowanie nie pustych wierszy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-n</strong> - numerowanie wierszy</p>
<p> </p>
<p>Gdy istnieje potrzeba numeracji wierszy w danym pliku możemy do tego celu użyć komendy: <strong>nl</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image86.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image86.png" alt="image86" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Parametry:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-v <liczba></strong> - rozpoczęcie numeracji od zdefiniowanej liczby,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-i <liczba></strong> - zdefiniowanie licznika numeracji czyli wartość o jaką będą się zmieniały kolejne numerowane wiersze,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-b <a><t><n><pW></strong> - określenie sposobu numerowania: <strong>-ba</strong> numeracja wszystkich wierszy; <strong>-bt</strong> numeracja niepustych wierszy; <strong>-bn </strong>brak numerowania; <strong>-pW</strong> numerowanie tylko tych wierszy, które zawierają zdefiniowane wyrażenie <strong>W</strong>,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-n <ln><rn></strong> - wyrównanie numeracji: <strong>-nln</strong> wyrównanie do lewej strony, <strong>-nrn </strong>wyrównanie do prawej strony,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-w <liczba></strong> - ustalenie szerokości przeznaczonej na numerację,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s <znak></strong> - ustalenie znaku, który zostanie wstawiony pomiędzy numerację a tekst (domyślnie jest to znak tabulacji).</p>
<p> </p>
<p>Aby wydobyć ciągi tekstowe z blików binarnych możemy posłużyć się poleceniem: <strong>strings</strong> Polecenie przydatne, gdy chcemy poznać wersję czy autora danego programu.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image87.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image87.png" alt="image87" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>W przypadku potrzeby przeglądnięcia pliku binarnego możemy skorzystać z dwóch programów: pierwszy z nich to <strong>od</strong> drugi to zaś <strong>xxd</strong>.</p>
<p> </p>
<p>W przypadku pierwszego mamy możliwość wyświetlenia zawartości pliku w postaci ósemkowej (domyślna wartość), dziesiętnej (flaga: <strong>-Ad</strong>) lub heksadecymalnej (flaga: <strong>-Ax</strong>).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image88.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image88.png" alt="image88" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Drugi program dane prezentuje w formie heksadecymalnej bądź binarnej (flaga: <strong>-b</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image89.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image89.png" alt="image89" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby przeglądać pliki PDF możemy skorzystać z programu <strong>xpdf</strong> lub <strong>gv</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image90.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image90.png" alt="image90" width="700" height="355" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>I tu chciałbym zakończyć, mam nadzieję, że nie zraziłeś się Czytelniku do takiej formy komunikacji z systemem i że dalej będziesz chciał odkrywać tajniki tej formy dogadania się z Linuxem. W kolejnym wpisie zajmiemy się kontrolą procesów oraz użytkownikami.</p>
<p> </p>
<hr />
<p> </p>
<p><strong>Bibliografia:</strong></p>
<p> </p>
<p><a href="http://www.computerhope.com/unix/uchmod.htm">http://www.computerhope.com/unix/uchmod.htm</a></p>
<p><a href="http://krnlpanic.com/wp/linux-file-and-directory-permissions-explained/">http://krnlpanic.com/wp/linux-file-and-directory-permissions-explained/</a></p>
<p><a href="http://rtfq.net/linux/linux-single-user/permissions-basic-command-line-tutorial/">http://rtfq.net/linux/linux-single-user/permissions-basic-command-line-tutorial/</a></p></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/c1011ef61ed9937904f4938c63d014ea_S.jpg" alt="Dogadać się z Linuxem. Powłoka systemu oraz operacje na plikach." /></div><div class="K2FeedIntroText"><p>Terminal w systemie Linux jest tym samym co wiersz poleceń w systemach Windows. Konsola ta jak w przypadku cmd ma nam umożliwić zarządzanie komputerem. Pierwsze uruchomienie konsoli nie zachęca nas do dalszej pracy bo cóż ciekawego może być w oknie z migającym kursorem i czekającym na wpisanie polecenia. Ktoś mógłby zapytać - Po co mi ta umiejętność i po co mam uczyć się poleceń? Wszystko bowiem mogę sobie wyklinać w GUI. No niestety, nie zawsze wszystko znajdziemy w interfejsie graficznym a niektóre opcje, czasem są dość mocno zaszyte wewnątrz systemu. Tak więc umiejętne posługiwanie się konsolą znacznie zwiększa szybkość i skuteczność prowadzonej konfiguracji a także pozwala nam na zautomatyzowanie wykonywanych zadań. I to jest odpowiedź na postawione pytanie.</p>
<p> </p>
<p>Artykuł jest częścią większą cyklu w którym będę chciał pokazać jak posłużyć się konsolą systemu Linux. W tym wpisie zajmiemy się poznaniem powłoki bash, która jest domyślną formą komunikacji w trybie tekstowym z systemami z rodziny Linux a także poznamy szereg poleceń związanych z obsługą plików.</p>
</div><div class="K2FeedFullText">
<p> </p>
<p><strong>Konsola pierwsze spojrzenie. Konfiguracja środowiska pracy.</strong></p>
<hr />
<p> </p>
<p>Pierwsze spotkanie z konsolą systemu Linux w szczególności dla użytkownika, który dopiero co poznaje system Linux nie jest zachęcające ale wystarczy trochę samo zaparcia, ćwiczeń i obycia by stwierdzić, że korzystanie z tej formy komunikacji z systemem ma swoje zalety.</p>
<p> </p>
<p>Po uruchomieniu konsoli system wita nas znakiem zachęty, zapraszającym do wydawania poleceń.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image1.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image1.png" alt="image1" width="700" height="224" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Znak zachęty w przypadku zwykłego użytkownika przyjmuje postać <strong>$</strong> natomiast gdy użytkownikiem jest <strong>root</strong> (odpowiednik administratora w systemie Windows) znak zachęty zostaje zamieniony na <strong>#</strong></p>
<p> </p>
<p>Znak zachęty możemy modyfikować i ustalać jego wygląd w zależności od naszych potrzeb i upodobań. Aby wyświetlić wartość zmiennej środowiskowej <strong>PS1</strong> odpowiedzialnej za budowę informacji pojawiających się w terminalu (ang. prompt) należy użyć polecenia: <strong>echo $PS1</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image2.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Zmianę dokonujemy za pomocą komendy: <strong>export PS1='<opcje>'</strong></p>
<p> </p>
<p>Dostępne opcje to (więcej zobacz: <strong>man bash</strong> pod kątem zmiennej PS1):</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\d</strong> - data w formacie: Dzień tygodnia Miesiąc Dzień,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\t</strong> - czas w formacie 24-godzinnym (HH:MM:SS),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\T</strong> - czas w formacie 12-godzinnym (HH:MM:SS),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\@</strong> - czas w formacie 12-godzinnym (am/pm),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\A</strong> - czas w formacie 24-godzinnym (HH:MM),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\h</strong> - nazwa komputera (hostname) - do pierwszego znaku kropki,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\H</strong> - nazwa komputera (hostname),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\n</strong> - znak nowej linii,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\r</strong> - powrót karetki (ang. carriage return)</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\e</strong> - znak ucieczki ASCII,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\u</strong> - nazwa użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\w</strong> - ścieżka bieżącego katalogu (w przypadku katalogu $HOME nazwa jest skracana do tyldy (~),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\$ </strong>- jeśli numer UID jest 0 to znak: # (root), w przeciwnym wypadku znak: $,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\nnn</strong> - znak przedstawiony za pomocą liczby ósemkowej (np. 011),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\\ </strong>- backslash,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\[ </strong>- start sekwencji nie drukowalnych znaków,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\] </strong>- stop sekwencji nie drukowalnych znaków.</p>
<p> </p>
<p>Do zbudowania promt-a możliwe jest również użycie kolorów. Składnia użycia koloru jest następująca: <strong>\[\e[ X;Y;Zm\] <opcja_kolor> \[\e[m\] </strong>np.<strong> export PS1='\[\e[0;34m\]\u\[\e[m\]'</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image3.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image3.png" alt="image3" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p>gdzie:</p>
<p> </p>
<p>X – kolor tekstu, Y – kolor tła, Z – efekt – przy czym gdy któregoś elementu nie używamy to go pomijamy.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image4.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Tabela opcji:</p>
<p> </p>
<table border="1" style="border-collapse: collapse; width: 499px;" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border: 1pt solid windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%"><strong>Kolor</strong></td>
<td style="width: 16.5%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%"><strong>Tekst</strong></td>
<td style="width: 16.5%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%"><strong>Tło</strong></td>
<td style="width: 27.74%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%"><strong>Efekt</strong></td>
<td style="width: 22.74%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%"><strong>Kod</strong></td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">czarny</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">30</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">40</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">Pogrubienie</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">1</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">czerwony</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">31</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">41</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">bez pogrubienia</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">22</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">zielony</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">32</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">42</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">podkreślenie</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">4</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">żółty</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">33</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">43</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">bez podkreślenia</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">24</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">niebieski</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">34</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">44</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">miganie</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">5</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">magenta</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">35</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">45</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%">bez migania</td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%">25</td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">cyjan</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">36</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">46</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%"> </td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%"> </td>
</tr>
<tr style="height: 25.5pt;">
<td style="width: 16.52%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">biały</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">37</td>
<td style="width: 16.5%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="16%">47</td>
<td style="width: 27.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="27%"> </td>
<td style="width: 22.74%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0cm 5.4pt; height: 25.5pt; text-align: center;" width="22%"> </td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
<p><strong>Zmienne środowiskowe</strong></p>
<hr />
<p> </p>
<p>Pierwszą zmienną już Czytelniku poznałeś (zmienna PS1) a nie jest to jedyna zmienna. W systemie Linux istnieje kilkadziesiąt różnych zmiennych. Wszystkich nie przedstawię ale na liście poniżej znajdziesz te zmienne, które wykorzystuje się najczęściej.</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>USER</strong> – nazwa aktywnego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>HOSTNAME</strong> – nazwa hosta,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>HOME</strong> – katalog domowy aktywnego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>TZ</strong> – ustawiona strefa czasowa,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>EDITOR</strong> – zmienna odpowiedzialna za określenie używanego edytora,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>PATH</strong> – definiuje katalogi, które są przeszukiwane pod kątem wywoływanych poleceń, dzięki tej zmiennej nie musimy wpisywać pełnej ścieżki dostępu do programu,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>SHELL</strong> – powłoka w której jest uruchomiony terminal,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>TERM</strong> – rodzaj użytego terminala,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>UID</strong> – identyfikator zalogowanego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>OSTYPE</strong> – rodzaj systemu operacyjnego,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>LANG</strong> – ustawienia językowe,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>PWD</strong> – katalog roboczy w którym się znajdujemy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>HISTSIZE</strong> – rozmiar bufora historii.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image5.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image5.png" alt="image5" width="700" height="264" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Część dostępnych zmiennych można wyświetlić za pomocą polecenia: <strong>printenv | more</strong> (użycie <strong>more</strong> powoduje zatrzymanie wyświetlania po zapełnieniu ekranu).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image6.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image6.png" alt="image6" width="700" height="439" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Część zmiennych jest jednoznacznie określona lecz dwie z nich wymagają szerszego omówienia mowa tu o zmiennej <strong>PATH</strong> oraz <strong>EDITOR</strong>.</p>
<p> </p>
<p>Zmienna <strong>PATH</strong> jak już zostało wspominane odpowiedzialna jest za odnalezienie programów, które są wywoływane w terminalu poprzez polecenia.</p>
<p> </p>
<p>Gdy chcemy aby wyszukiwanie polecenia rozpoczęło się od aktualnego katalogu roboczego trzeba na początku zmiennej <strong>PATH</strong> wstawić znak kropki (.) – polecenie: <strong>export PATH=".:$PATH"</strong> Gdybyśmy chcieli do zmiennej <strong>PATH</strong> dodać katalog możemy skorzystać z polecenia: <strong>PATH=$PATH':<lokalizacja_katalogu>'</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image7.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image7.png" alt="image7" width="700" height="229" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">1. Sprawdzenie zmiennej PATH,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">2. Dodanie do zmiennej PATH znaku kropki (znak nakazuje rozpoczęcie wyszukiwania programu/skryptu od bieżącej lokalizacji),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">3. Sprawdzenie faktu przypisania,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">4. Dodanie katalogu: /usr/lokal/samba/sbin do zmiennej PATH,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">5. Sprawdzenie faktu przypisania.</p>
<p> </p>
<p>Natomiast do zmiennej <strong>EDITOR</strong> można przypisać swój ulubiony edytor tekstowy. Poniżej przykład przypisania do zmiennej <strong>EDITOR</strong> programu <strong>mcedit</strong> (jakoś wole używać tego edytora niż domyślnie zainstalowanego <strong>vi</strong> czy <strong>nano</strong>). <strong>Mcedit</strong> dostępny jest po zainstalowaniu pakietu <strong>Midnight Commander</strong>, program ten jest menedżerem plików (jak ktoś pamięta Norton Commander to się nie zawiedzie). Program instalujemy za pomocą polecenia: <strong>sudo apt-get install mc</strong></p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">1. Zlokalizowanie programu mcedit,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">2. Sprawdzenie aktualnej wartości zmiennej EDITOR,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">3. Przypisanie do zmiennej EDITOR ścieżki katalogu w której znajduje się program,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">4. Sprawdzenie faktu przypisania.</p>
<p> </p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image8.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Kontrola uruchamianych procesów</strong></p>
<hr />
<p> </p>
<p>Każde wydane polecenie w powłoce systemu Linux powoduje wykonanie jakiegoś zadania. By móc pracować efektywnie z powłoką trzeba umieć zarządzać uruchomionymi zadaniami. Podczas pracy z powłoką mamy wpływ na sposób zachowania się zadań, możemy wykonać następujące operacje wobec uruchamianych zadań:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>uruchomić zadanie na pierwszym planie</strong> - tj. wydana komenda powoduje uruchomienie zadania przez powłokę a zadanie te działa w powłoce tak że niemożliwe jest wydanie kolejnych komend,</p>
<p style="margin-left: 30px;"><strong>uruchomić zadanie w tle</strong> - tj. wydana komenda powoduje uruchomienie zadania przez powłokę a zadanie te działa nie zajmując jej, mamy możliwość wykonywania kolejnych poleceń,</p>
<p style="margin-left: 30px;"><strong>zawieszenie zadania</strong> - wstrzymanie pracy zadania,</p>
<p style="margin-left: 30px;"><strong>wznowienie</strong> - powoduje kontynuację pracy wcześniej zawieszonego zadania.</p>
<p> </p>
<p>Z każdą z tych czynności związane jest odpowiednie polecenie, aby wyświetlić listę aktualnie uruchomionych zadań, skorzystaj z polecenia: <strong>jobs</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image9.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Liczba w nawiasie oznacza numer zadania znak <strong>+</strong> oraz <strong>- </strong>zadania wywołane po wydaniu poleceń <strong>fg</strong> oraz <strong>bg</strong>.</p>
<p> </p>
<p>Aby uruchomić zadanie w tle na końcu polecenia umieszczamy znak: <strong>&</strong></p>
<p> </p>
<p>Gdy uruchomione jest zadanie a my wciśniemy <strong>Ctrl+Z</strong> (można też użyć polecenia: <strong>suspend</strong>) zadanie to zostaje wstrzymane lecz zapamiętywany jest stan zadania.</p>
<p> </p>
<p>Tak wstrzymane zadanie możemy ponownie uruchomić przy czym mamy dwie możliwości: gdy wykorzystamy polecenie: <strong>fg</strong> zadanie to zostanie uruchomione na pierwszym planie; gdy zaś zdecydujemy się użyć polecenia: <strong>bg</strong> zadanie to również zostanie wznowione lecz tym razem w tle.</p>
<p> </p>
<p>Za pomocą tych dwóch komend możliwe jest wznawianie różnych zadań, domyślnie wydanie samego polecenia <strong>fg</strong> bądź <strong>bg</strong> bez żadnych parametrów spowoduje uruchomienie ostatnio wstrzymanego zadania. Gdy zaś chcemy uruchomić, wznowić konkretne zadanie możemy użyć np. komendy: <strong>bg %<numer_zadania></strong> Numer zadania poznamy dzięki poznanemu już poleceniu: <strong>jobs</strong></p>
<p> </p>
<p> </p>
<p><strong>Historia poleceń</strong></p>
<hr />
<p> </p>
<p>Wszystkie polecenia, które wpisujemy do konsoli są zapamiętywane tak więc istniej możliwość odwołania się do już wydanego polecenia. Aby wyświetlić listę wydanych poleceń użyj polecenia: <strong>history</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image10.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Po wydaniu polecenia wyświetli się lista ponumerowanych komend, które w powłoce wydaliśmy. Poniżej przedstawiam kilka przykładów wykorzystania listy komend.</p>
<p> </p>
<p style="margin-left: 30px;"><strong>history <liczba></strong> - wyświetlenie zdefiniowanej liczby ostatnio wydanych poleceń,</p>
<p style="margin-left: 30px;"><strong>history -c</strong> – wyczyszczenie historii,</p>
<p style="margin-left: 30px;"><strong>!! </strong>– ostatnio wydane polecenie,</p>
<p style="margin-left: 30px;"><strong>!<liczba></strong> - wywołanie polecenia o danym numerze,</p>
<p style="margin-left: 30px;"><strong>!-<liczba></strong> - wywołanie polecenia minus zdefiniowana liczba</p>
<p> </p>
<p> </p>
<p><strong>Aliasy</strong></p>
<hr />
<p> </p>
<p>System Linux umożliwia tworzenia tzw. <strong>aliasów</strong> czyli skrótów, które realizują jakieś konkretne polecenie bez konieczności wpisania całej składni polecenia wraz z parametrami.</p>
<p> </p>
<p>W trakcie poznawania systemu Linux bardzo często miałem nawyk czyszczenia ekranu za pomocą windowsowego polecenia <strong>cls</strong> a jak wiadomo w powłoce bash te polecenie nie występuje, bo do czyszczenia okna terminala używa się komendy <strong>clear</strong> bądź <strong>tput clear</strong>. Aby móc jednak czyścić ekran terminala z wykorzystaniem komendy <strong>cls</strong> należy stworzyć <strong>alias</strong>, który będzie łączył ciąg <strong>cls</strong> z poleceniem <strong>clear</strong>. Od tej pory wpisanie w oknie polecenia <strong>cls</strong> wywoła nam komendę <strong>clear</strong>. Alias tworzymy za pomocą ogólnej składni: <strong>alias <nazwa_aliasu>=</strong> <strong>"<polecenie>"</strong> Tak więc chcąc przypisać linuxowe polecenie <strong>clear</strong> tak aby by było wykonane po wpisaniu <strong>cls</strong> należy wydać polecenie: <strong>alias cls="clear"</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image11.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image11.png" alt="image11" style="display: block; margin-left: auto; margin-right: auto;" /></a> </p>
<p>Aliasy dodatkowo mogą być wykorzystane do poruszania się po systemie plików. Gdy bardzo często odwołujemy się do jakiegoś miejsca na dysku możemy stworzyć alias, który będzie łączył nam dany folder z przyjazną dla nas nazwą. Poniżej przykład uworzena aliasu <strong>dok</strong> po wywołaniu, którego będziemy przeniesieni do lokalizacji: <strong>/home/luk/Dokumenty</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image12.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image12.png" alt="image12" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Ciekawe efekty uzyskamy gdy alias połączymy z zmienną.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image13.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Połączyliśmy alias <strong>dok</strong> z zmienną <strong>DOK</strong>, po wydaniu polecenia <strong>dok</strong> jesteśmy przekierowani do zmiennej, która powoduje przejście do zdefiniowanego katalogu. Dodatkowo utworzoną zmienną możemy wykorzystać w poleceniach np. kopiowanie plików. Poniżej przykład skopiowania pliku: <strong>plik1</strong> do lokalizacji <strong>/home/luk/Dokumenty</strong> która to lokalizacja została powiązana z zmienną <strong>DOK</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image14.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image14.png" alt="image14" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby przejrzeć listę utworzonych aliasów wydaj komendę: <strong>alias</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image15.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image15.png" alt="image15" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby usunąć alias należy skorzystać z polecenia: <strong>unalias <nazwa_aliasu></strong></p>
<p> </p>
<p>Wszystkie zmienne i aliasy, które utworzyliśmy mają „cykl życia” ustawiony do czasu w którym system operacyjny działa czyli po wykonaniu restartu systemu utworzone definicje zmiennych i aliasów już nie obowiązują. A dodatkowo zmienne i aliasy nie są dostępne dla innych wywołań konsoli. Aby uniknąć konfiguracji tych parametrów po każdorazowym uruchomieniu systemu należy definicje te umieścić w pliku: <strong>.bashrc </strong>W pliku tym zapisane są Twoje ustawienia a plik ten zlokalizowany jest w katalogu domowym (w przypadku użytkownika root plik znajduje się w /root)</p>
<p> </p>
<p>Gdy skończymy edytować plik <strong>.bashrc</strong> należy go przeładować za pomocą polecenia: <strong>..bashrc</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image16.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image16.png" alt="image16" width="700" height="448" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p>Po wprowadzeniu zmian (dodanie kropki do już istniejącej zmiennej PATH, dodanie nowej zmiennej DOK oraz utworzenie aliasu cls) i zapisaniu pliku, plik ten należy przeładować za pomocą polecenia: <strong>..bashrc</strong> Po przeładowaniu wszystkie wpisy, których dokonaliśmy znajdują swoje odzwierciedlenie w użytych w terminalu poleceniach. </p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image17.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image17.png" alt="image17" width="700" height="330" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Polecenia związane z plikami.</strong></p>
<hr />
<p> </p>
<p>Zanim Czytelniku będziesz próbował testować opisane polecenia należy jeszcze chwilkę zatrzymać się i wyjaśnić zasady jakie obowiązują przy stosowaniu znaku spacji i znaków specjalnych. Praca z plikami, które wykorzystują te znaki powoduje pewne problemy gdyż znaki te i występujące po nich ciągi tekstu, często są traktowane jako parametr lub definicja osobnego pliku.</p>
<p> </p>
<p>W przypadku pliku, który w nazwie zawiera spację oraz znak specjalny by odwołanie do tego pliku zakończyło się sukcesem wystarczy, że nazwę pliku obejmiemy cudzysłowem. Poniżej przykład w którym utworzyłem dwa pliki: pierwszy plik zawiera <strong>spacje</strong> - nazwa pliku: <strong>plik ze spacjami</strong>; drugi zaś plik w swojej nazwie zawiera znak specjalny <strong>></strong> - nazwa pliku: <strong>plikiznanspecjalny></strong> Jak widać tradycyjne odwołanie do obu plików (wykorzystano polecenie: <strong>ls</strong> - pokaż pliki w katalog) kończy się niepowodzeniem, gdy zaś nazwy plików obejmiemy cudzysłowami wydana komenda kończy się sukcesem.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image18.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image18.png" alt="image18" width="700" height="345" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>W przypadku pliku, zaczynającego się od <strong>minusa</strong> objęcie nazwy pliku cudzysłowem nie wystarczy, gdyż w poleceniu w którym do takiego pliku będziemy próbowali się odwołać uzyskamy informację o błędnej opcji. By udało się zbudować komendę z nazwą pliku rozpoczynającą się od minusa, nazwę tego pliku musimy poprzedzić operatorem: <strong>./</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image19.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image19.png" alt="image19" width="700" height="345" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Każde polecenie a raczej wynik uzyskany dzięki wydaniu komendy można zapisać do pliku. Przypuśćmy, że okresowo badamy dostępność jakiegoś hosta i wyniki te chcemy mieć w zewnętrznym pliku. Aby uzyskać nasz cel należy użyć symbolu przekierowania. Są trzy główne symbole przekierowania <strong>></strong>,<strong>>></strong>,<strong><</strong></p>
<p> </p>
<p>Aby zrozumieć sposób ich wykorzystania symbole <strong>></strong>,<strong>>></strong>, połączymy z poleceniem ping, które będzie skanować nam witrynę wp.pl</p>
<p> </p>
<p>Po wydaniu polecenia: <strong>ping -c 3 wp.pl > testwp</strong> nie uzyskamy informacji w terminalu, ponieważ zostają one przekierowane do pliku <strong>testwp</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image20.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image20.png" alt="image20" width="700" height="527" style="display: block; margin-left: auto; margin-right: auto;" /></a> </p>
<p>Użycie polecenia jeszcze raz spowoduje nadpisanie (zastąpienie) już istniejących danych, aby wymusić dopisanie do już istniejącego pliku należy użyć symbolu <strong>>></strong> - <strong>ping -c 3 wp.pl >> testwp</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image21.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image21.png" alt="image21" width="700" height="501" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Operatora przekazania <strong>></strong> można również użyć aby wyniki uzyskane dzięki wydaniu dowolnego polecenia przekierować do innego terminala.</p>
<p> </p>
<p>W tym celu należy poznać nazwę terminala z którego korzystamy. Nazwę tą poznamy za pomocą polecenia: <strong>tty</strong></p>
<p> </p>
<p>Po otworzeniu kolejnych sesji konsoli możemy za pomocą poznanej nazwy przekierowywać wyniki wydawanych poleceń. Poniżej przykład przekierowania wyników uzyskanych dzięki poleceniu <strong>ifconfig</strong> – polecenie: <strong>ifconfig > /dev/pts/25</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image22.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image22.png" alt="image22" width="700" height="310" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użyte polecenia przekierowania <strong>></strong> oraz <strong>>></strong> wymuszały zapisanie wyników wydanych poleceń do pliku, natomiast symbol <strong>< </strong>spowoduje pobranie danych z istniejącego pliku.</p>
<p> </p>
<p>Poniżej przykład pobrania wyrazów z pliku <strong>dane</strong> wraz z ułożeniem ich w kolejności alfabetycznej. Dane pobrane z zewnętrznego pliku dzięki użyciu polecenia <strong>sort</strong> zostają ułożone w kolejności rosnącej tj. od a do z.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image23.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image23.png" alt="image23" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Oczywiście nic nie stoi na przeszkodzie aby symbolów przekierowania w jednym poleceniu użyć kilkakrotnie. Spróbujmy więc posortowane wyrazy z przykładu powyżej zapisać do pliku. Zadanie to wykonamy po użyciu komendy: <strong>sort < dane > posortowane</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image24.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image24.png" alt="image24" width="700" height="504" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Istnieje jeszcze jeden symbol a mianowicie <strong>pionowa kreska</strong> (Shift+"\"). Symbol ten pozwala nam na utworzenie tzw. <strong>potoku</strong> (ang. pipe). Potok pozwala nam na połączenie kilku poleceń tak by stanowiły one jedność, bądź bardziej fachowo aby dane wyjściowe jednego programu były danymi wejściowymi dla innego.</p>
<p> </p>
<p>Taki standardowym przykładem użycia potoku jest sytuacja w której wydajemy polecenia a informacje, które uzyskujemy dzięki wydanej komendzie nie mieszczą się w jednym oknie terminala. Informacji jest tak dużo, że kolejna porcja wypisywanych danych zastępuje te bieżące a my nie mamy możliwości zapoznania się z nim. Natomiast gdy wydamy np. komendę: <strong>ls -l | more</strong> wyniki uzyskane dzięki poleceniu <strong>ls</strong> (pokaż pliki w katalogu) zostaną przekazane do aplikacji <strong>more</strong> powodującej zatrzymanie wyświetlania po zapełnieniu ekranu terminala. Kolejna porcja informacji zostanie wyświetlona po wciśnięciu dowolnego klawisza. Wydane polecenie: <strong>ls -l | more</strong> jest potokiem ponieważ polecenie to zostało zbudowane z dwóch odrębnych komend a połączonych ze sobą operatorem potoku.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image25.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Operatory przekierowania i operator potoku można łączyć tak naprawdę z wszystkimi poleceniami używanymi w powłoce wszystko zależy od celu jaki chcemy osiągnąć. Poniżej jeszcze dwa przykłady w których wykorzystano te operatory.</p>
<p> </p>
<p>Pierwszy przykład pokazuje wykorzystanie operatorów do zapisu w pliku tekstowym nazw plików (w kolejności alfabetycznej) znajdujących się w danym katalogu (w przykładzie katalog /bin/ - polecenie: <strong>ls /bin/ | sort > pliki</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image26.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image26.png" alt="image26" width="700" height="385" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Drugi zaś przykład wyszukuje nam wszystkie pliki z rozszerzeniem jpg a wyniki wraz z sortowaniem zostają zapisane do pliku – polecenie: <strong>find / -name *.jpg | sort > zdjęcia</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image27.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image27.png" alt="image27" width="700" height="448" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Dir i ls – zawartość katalogu</strong></p>
<hr />
<p> </p>
<p>Wyświetlenie plików i katalogów znajdujących się w bieżącej lokalizacji następuje po wydaniu polecenia: <strong>dir</strong> (podobnie jak w systemie Windows).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image28.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wyświetlenie zawartości katalogu może również odbyć się z wykorzystaniem polecenia: <strong>ls</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image29.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Polecenia <strong>dir</strong> i <strong>ls</strong> zawierają szereg opcji (zobacz pomoc) lecz te najczęściej używane przełączniki to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls plik1 plik2 plik3</strong> – listuje tylko wymienione pliki,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls *.doc</strong> – pokaże wszystkie pliki o rozszerzeniu *.doc,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls katalog1 katalog2</strong> – listuje wymienione katalogi,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls -l</strong> – szczegółowa lista plików wraz z atrybutami,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls -a</strong> – pokaż pliki ukryte (czyli te których nazwa zaczyna się kropką),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ls -R</strong> – pokaż dodatkowo zawartość podkatalogów.</p>
<p> </p>
<p>Dodatkowo fajnym poleceniem by wyświetlić drzewo katalogów i plików jest komenda: <strong>tree</strong> (w niektórych systemach trzeba doinstalować niezbędne pakiety – <strong>sudo apt-get install tree</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image30.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dodatkowe parametry do polecenia <strong>tree</strong>:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-d</strong> – pokaż tylko katalogi,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-f</strong> – pokaż ścieżkę dostępu,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-a</strong> – pokaż wszystko,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-L <poziom></strong> - poziom listowania katalogów,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-H</strong> – eksport do HTML-a,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-X</strong> – eksport do XML-a.</p>
<p><strong> </strong></p>
<p> </p>
<p><strong>Cd oraz pwd – poruszanie się pomiędzy katalogami</strong></p>
<hr />
<p> </p>
<p>Przejście pomiędzy katalogami realizujemy za pomocą polecenia: <strong>cd</strong> <strong><nazwa_katalogu></strong> możliwe jest wpisanie tylko pierwszych liter katalogu i dopełnienie nazwy za pomocą klawisza TAB (wielkość liter ma znaczenie). Przejście do katalogu wyżej następuje po wydaniu polecenia: <strong>cd ..</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image31.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image31.png" alt="image31" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użycie samego polecenia<strong> cd</strong> przeniesie nas do katalogu aktualnie zalogowanego użytkownika.</p>
<p> </p>
<p> </p>
<p><strong>Mkdir – tworzenie folderu</strong></p>
<hr />
<p> </p>
<p>Aby utworzyć katalog/katalogi należy wykorzystać polecenie: <strong>mkdir <nazwa_katalogu></strong> Jak widać poniżej można za pomocą polecenia utworzyć wiele katalogów (nazwy katalogów po spacji).</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image32.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś utworzyć katalog w nazwie którego zawarta jest spacja należy nazwę umieścić w cudzysłowie.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image33.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Do utworzenia pliku/plików należy wykorzystać polecenie:<strong> ls > <nazwa_pliku></strong> (symbol <strong>></strong> - znak przekierowania). Podobnie jak w przypadku polecenia tworzenia katalogu, nazwę pliku zawierającego spację umieszczamy w cudzysłowie.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image34.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Cp – kopiowanie plików</strong></p>
<hr />
<p> </p>
<p>Kopiowanie plików pomiędzy katalogami następuje z wykorzystaniem komendy: <strong>cp</strong> <strong><element_kopiowany> <lokalizacja></strong> Na przykładzie poniżej, utworzony wcześniej plik o nazwie <strong>plik1</strong> został skopiowany do katalogu o nazwie <strong>katalog2</strong> (symbol <strong>..</strong> nakazuje przejście w strukturze katalogów o jeden poziom wyżej, ponieważ kopiowanie następowało bezpośrednio z folderu <strong>katalog1</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image35.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image35.png" alt="image35" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wydanie komendy: <strong>cp <nazwa_pliku> <nazwa_pliku></strong> spowoduje utworzenie kopii danego pliku.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image36.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Inne przydatne wariacje polecenia <strong>cp</strong> poniżej:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>cp tes* podkatalog/</strong> – skopiuje wszystkie pliki zaczynające się na <strong>tes</strong> do <strong>./podkatalog/</strong></p>
<p style="margin-left: 30px;"><strong>cp -r katalog1 ~</strong> - wydanie polecenia spowoduje skopiowanie katalogu wraz z całą zawartością do katalogu domowego (home/nazwa użytkownika)</p>
<p style="margin-left: 30px;"><strong>cp * katalog1 </strong>– kopiowanie wszystkich plików z bieżącej lokalizacji do folderu <strong>katalog1</strong> (dodanie -r skopiuje również podkatalogi)</p>
<p> </p>
<p> </p>
<p><strong>Mv – przenoszenie plików</strong></p>
<hr />
<p> </p>
<p>Za pomocą polecenia: <strong>mv</strong> przeniesiemy plik bądź zmienimy jego nazwę. Wydanie komendy: <strong>mv <bieżąca_nazwa_pliku> <nowa_nazwa_pliku></strong> zmieni nam nazwę pliku. Polecenia możemy również używać do operacji, które odnoszą się do katalogów.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image37.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użycie następującej składni: <strong>mv <przenoszone_pliki> <miejsce_docelowe></strong> zmieni nam lokalizację plików/katalogów. Poniżej przeniesienie pliku: <strong>plik1</strong> z folderu <strong>katalog1</strong> do folderu <strong>katalog2</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image38.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image38.png" alt="image38" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Przy przenoszeniu plików często przydatny okazuje się parametr <strong>-u</strong>, który to jest odpowiedzialny za przeniesienie plików gdy źródło jest nowsze od celu albo nie ma celu.</p>
<p> </p>
<p> </p>
<p><strong>Rm – kasowanie plików/katalogów</strong></p>
<hr />
<p> </p>
<p>Aby skasować pliki należy posłużyć się poleceniem: <strong>rm <nazwa_pliku></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image39.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dostępne są również przełączniki:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>rm -r katalog</strong> – kasuje wszystko w zdefiniowanym katalogu tj. wszystkie pliki wraz z podkatalogami (--recursive)</p>
<p style="margin-left: 30px;"><strong>rm -f plik</strong> – brak pytania o potwierdzenie kasowanych danych (--force)</p>
<p> </p>
<p>Aby usunąć pusty katalog należy skorzystać z komendy: <strong>rmdir <nazwa_katalogu></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image40.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Chmod – prawa dostępu do plików</strong></p>
<hr />
<p> </p>
<p>W systemie Linux każdy plik jak także katalog ma swoje określone prawa dostępu. Prawa te określają, kto i jaką czynność może z danym plikiem/katalogiem wykonać. Mamy do czynienia z prawem do odczytu, zapisu i wykonania. Oczywiście dany plik/katalog może mieć nałożoną różną kombinacje praw. Aby wykonać sprawdzenie praw dostępu posłuż się Czytelniku znanym już Tobie poleceniem: <strong>ls -l</strong> Na rysunku poniżej zostały przedstawione prawa dostępu do dwóch plików i jednego katalogu.</p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image41.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image41.png" alt="image41" width="700" height="221" style="display: block; margin-left: auto; margin-right: auto;" /></a> </p>
<p>Po wyświetleniu praw dostępu do plików i katalogu (to ten pierwszy ciąg znaków od lewej) możemy przejść do analizy obowiązujących praw.</p>
<p> </p>
<p>Każdy element (tutaj pliki i katalog) posiada zdefiniowane uprawnienia dla trzech grup: <strong>prawa dostępu właściciela pliku</strong>, <strong>prawa dostępu grupy</strong>, oraz <strong>prawa dostępu pozostałych</strong>. Prawa te przybierają formę zapisu dziesięcio elementowego ciągu znaków. Określone znaki na poszczególnych miejscach tego ciągu będą nas informowały o możliwości wykonania na pliku danych operacji. Już wiesz czytelniku, że prawa nakładane są trzem odrębnym grupom i do określenia tych praw zostało zarezerwowane 9 znaków (po trzy znaki na każdą grupę) zaś 10 znak lecz pierwszy w kolejności będzie nam mówił z jakim elementem będziemy mieli do czynienia. Poniżej lista wartości jaka może wystąpić na pierwszym miejscu wraz z opisem:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-</strong> – zwykły plik,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>d</strong> – katalog/folder,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>l</strong> – symlink czyli dowiązanie symboliczne,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>s </strong>– gniazdo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>f </strong>– FIFO,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>c </strong>– urządzenie znakowe,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>b </strong>– urządzenie blokowe.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">Natomiast prawa są określane za pomocą następujących symboli:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>r</strong> – prawo do odczytu (wartość 4),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>w</strong> – prawo do zapisu (wartość 2),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>x</strong> – prawo do wykonania (wartość 1).</p>
<p> </p>
<p>Tak więc uzbrojeni w tą wiedzę spróbujmy rozszyfrować prawa elementów zaprezentowanych na rysunku powyżej (wartości podane w nawiasach zostaną omówione za chwilę).</p>
<p style="padding-left: 30px;"><strong>-rw-rw-r--</strong> prawo właściciela do odczytu i zapisu lecz nie do wykonania (ciąg: rw-), prawo grupy do odczytu i zapisu lecz nie do wykonania (ciąg: rw-), pozostali tylko prawo do odczytu (ciąg: r--),</p>
<p style="padding-left: 30px;"><strong>-rw-r--r--</strong> prawo właściciela do odczytu i zapisu lecz nie do wykonania (ciąg: rw-), prawo grupy do odczytu lecz nie do zapisu i wykonania (ciąg: r--), pozostali tylko prawo do odczytu (ciąg: r--),</p>
<p style="padding-left: 30px;"><strong>drwxrwxr-x</strong> prawo właściciela do odczytu, zapisu i wykonania (ciąg: rwx), prawo grupy do odczytu, zapisu i wykonania (ciąg: rwx), pozostali prawo do odczytu i wykonania lecz brak praw do zapisu (ciąg: r-x), symbol d oznacza, że mamy do czynienia z katalogiem.</p>
<p> </p>
<p>Tak więc chcąc zmienić prawa do danego pliku bądź katalogu musimy posłużyć się poleceniem: <strong>chmod</strong> Ogólna składnia użycia polecenia wygląda następująco: <strong>chmod <opcje> <grupa> <uprawnienia> <plik/katalog></strong> bądź <strong>chmod <opcje> <wartość_liczbowa> <plik/katalog></strong></p>
<p> </p>
<p>W poleceniu stosujemy następujące symbole:</p>
<p> </p>
<p style="padding-left: 30px;">grupa docelowa co do których praw mają obowiązywać: <strong>u</strong> - user, <strong>g </strong>- group, <strong>o</strong> - others,<strong> a</strong> – all</p>
<p style="padding-left: 30px;">uprawnienia: <strong>r</strong> - read, <strong>w </strong>- write,<strong> x</strong> – execute</p>
<p style="padding-left: 30px;"><strong>+</strong> - dodanie uprawnień, <strong>-</strong> - odebranie uprawnień</p>
<p> </p>
<p>Tak więc wykonajmy mały przykład. Naszym zadaniem będzie odebranie prawa odczytu i wykonania grupie pozostali. Jak widzimy poniżej grupa pozostali ma prawo wykonania tych operacji odnośnie folderu katalog1 By odebrać im te uprawnienia należy wydać polecenie: <strong>chmod o-r-x katalog1 </strong>Po ponownym sprawdzeniu uprawnień można zauważyć, że poszczególne prawa zostały odebrane.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image42.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś nadać praw odczytu, zapisu i wykonania dla wszystkich grup możemy użyć komendy: <strong>chmod a+r+w+x katalog 1 </strong>bądź krócej:<strong> chmod a+rwx katalog1</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image43.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image43.png" alt="image43" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby odebrać grupie prawo do zapisu i jednocześnie pozostałym odebrać wszystkie prawa skorzystaj z komendy: <strong>chmod g-w,o-rwx katalog1</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image44.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image44.png" alt="image44" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wcześniej w opisie przy każdym z praw podałem pewne wartości liczbowe, skorzystanie z tych wartości jest znacznie wygodniejszym sposobem nadawania i odbierania praw. Aby zbudować polecenie posłuż się tabelą i przykładem zamieszczonym poniżej. Naszym celem jest nadanie następujących praw do folderu <strong>katalog1</strong>: prawa użytkownika - wszystkie, prawa grupy - odczyt i wykonanie a dla pozostałych tylko odczyt. By wykonać to zadanie możemy posłużyć się poleceniem: <strong>chmod 754 katalog1</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image45.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image45.png" alt="image45" width="700" height="347" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Efekt wydania polecenia.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image46.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image46.png" alt="image46" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Skąd ta liczba i jak ją obliczyć? Cyfry w prawach dostępu to:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>pierwsza</strong> cyfra to prawa właściciela do pliku;</p>
<p style="margin-left: 30px;"><strong>druga</strong> – grupy właściciela;</p>
<p style="margin-left: 30px;"><strong>trzecia</strong> – wszystkich innych.</p>
<p> </p>
<p>Jeżeli chcemy wykonać nasz zadanie otrzymujemy:</p>
<p> </p>
<p style="margin-left: 30px;">prawa właściciela: odczyt+zapis+wykonanie czyli 4+2+1=<strong>7</strong>,</p>
<p style="margin-left: 30px;">prawa grupy: odczyt+wykonanie czyli 4+1=<strong>5</strong></p>
<p style="margin-left: 30px;">prawa pozostałych: odczyt czyli <strong>4</strong></p>
<p> </p>
<p>Tak więc za pomocą tak obliczonego kodu liczbowego możemy przeprowadzić ustawienie uprawnień do plików i katalogów.</p>
<p> </p>
<p>I na koniec warto wspomnieć jeszcze o jednym parametrze a mianowicie opcji: <strong>-R</strong>, która pozwala nam ustalić prawa dla wszystkich plików/katalogów znajdujących się np. w katalogu.</p>
<p> </p>
<p>Na sytuacji przedstawionej na rysunku poniżej wszystkie pliki i podkatalogi znajdujące się w folderze <strong>katalog1</strong> mają ustawione wszystkie prawa (sam folder również – pkt 1 oraz pkt 2) Za pomocą komendy: <strong>chmod -R 707 katalog1</strong> zostały odebrane wszelkie prawa dla grupy (pkt 3) Po sprawdzeniu praw dla folderu i plików znajdujących się w tym folderze widać, że prawa mają zastosowanie (pkt 5 i pkt 6) z wyjątkiem jednego pliku – <strong>plik2</strong> (pkt 7), zmiana praw nie mogła być zastosowana (pkt 4) ponieważ plik ten należy do użytkownika <strong>root</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image47.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image47.png" alt="image47" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Chown, chgrp - zmiana właściciela pliku/katalogu</strong></p>
<hr />
<p> </p>
<p>Czasem istnieje potrzeba zmiany właściciela pliku, bądź przypisania do praw pliku danej grupy. Operację tą możemy wykonać za pomocą polecenia: <strong>chown</strong>. Ogólna składnia polecenia jest następująca: <strong>chown <opcje> <użytkownik/grupa> <plik/katalog></strong></p>
<p> </p>
<p>Poniżej przykład zmiany właściciela pliku: <strong>plik2</strong> Plik ten należy do użytkownika <strong>root</strong>, po wydaniu polecenia: <strong>chown luk plik2</strong> nowym właścicielem pliku staje się użytkownik <strong>luk</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image48.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image48.png" alt="image48" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Zmiana przynależności do pliku jest również możliwa z użyciem UID użytkownika. Identyfikator UID jest przyznawany każdemu nowemu użytkownikowi i jest on niepowtarzalny. Aby poznać identyfikator użytkownika wydaj polecenie: <strong>id <nazwa_użytkownika></strong> Naszym celem będzie ponowne przypisanie praw właściciela użytkownika <strong>root</strong> do pliku: <strong>plik2</strong> UID użytkownika <strong>root</strong> to <strong>0</strong>. Wydanie komendy: <strong>chown 0 plik2 </strong>spowoduje ustawienie właściciela pliku: <strong>plik2</strong> na użytkownika <strong>root</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image49.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wprawne oko co niektórych czytelników na pewno zauważyło, że po wydaniu przedstawionych powyżej komend <strong>chown</strong> zmieniła się tylko przynależność właściciela pliku a nie grupy. By zmienić właściciela pliku odnośnie grupy po zdefiniowaniu nazwy użytkownika podajemy nazwę grupy. Nazwa użytkownika i nazwa grupy są oddzielone <strong>dwukropkiem</strong>.</p>
<p> </p>
<p>Poniżej ponownie przykład zmiany właściciela pliku: plik2 tym razem zmianie ulega właściciel i grupa. Gdy nazwa grupy i użytkownika jest taka sam wystarczy, że po definicji użytkownika wstawimy sam dwukropek. Czyli zmianę przynależności dla przykładu poniżej można by było zrealizować za pomocą polecenia: <strong>chown luk: plik2</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image50.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>I tu również można wykorzystać identyfikator użytkownika i identyfikator grupy.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image51.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Zmiana przynależności samej grupy odbywa się za pomocą przykładowego polecenia: <strong>chown :luk plik2 </strong>(opuszczamy definicję użytkownika i po dwukropku podajemy nazwę grupy).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image52.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zmienić właściciela wszystkich plików i podkatalogów skorzystaj z przełącznika<strong> -R</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image53.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Innym sposobem zmiany przynależności pliku/katalogu do grupy jest skorzystanie z polecenia: <strong>chgrp <nazwa_grupy> <plik/katalog> </strong>Poniżej na zrzucie został przedstawiony przykład zmiany grupy dla pliku: <strong>plik2</strong> Grupa z <strong>root</strong> została zmieniona na <strong>luk</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image54.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>Find, Locate, Which – wyszukiwanie plików</strong></p>
<hr />
<p> </p>
<p>Aby wyszukać dany plik bądź katalog należy użyć polecenia: <strong>find -name <nazwa_szukanego elementu> </strong>Poniżej przykład odszukania elementów zawierających ciąg <strong>tmp</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image55.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image55.png" alt="image55" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Użycie znaku gwiazdki powoduje wyszukanie plików pasujących do danego wzorca np. polecenie: <strong>find -name temp*</strong> spowoduje wyszukanie wszystkich plików zaczynających się od słowa <strong>temp</strong></p>
<p> </p>
<p>Aby znaleźć pliki ze względu na ich rozmiar możemy posłużyć się np. poleceniem <strong>find -size 5k</strong> – wyszukanie plików, których rozmiar wynosi 5 kB, aby wyszukać pliki o rozmiarze większym niż 5 kB dodajemy znak <strong>plus</strong> natomiast o rozmiarze mniejszym znak <strong>minus</strong> np. <strong>find -size +5k </strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image56.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image56.png" alt="image56" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby odszukać pliki ze względu na uprawnienia do plików możemy posłużyć się poleceniem: <strong>find <uprawnienie></strong> Polecenie ukaże pliki o określonym stanie w kontekście użytkownika wydającego polecenie. Uprawnienia jakie możemy wyszukiwać to:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>-readable</strong> – prawo do odczytu,</p>
<p style="margin-left: 30px;"><strong>-writable</strong> – prawo do zapisu,</p>
<p style="margin-left: 30px;"><strong>-executable</strong> – prawo do wykonania.</p>
<p> </p>
<p>Jak można zauważyć poniżej użytkownik <strong>luk</strong> wydaje polecenie odszukania wszystkich plików, które ma prawo czytać a następnie wszystkich plików, które może zapisywać. Dwa pliki: <strong>plik2</strong> i <strong>plik3</strong> które należą do użytkownika <strong>root</strong> w wynikach wyszukiwania plików do odczytu pojawiają się lecz w wynikach do zapisu już nie. Użytkownik <strong>luk</strong> może te pliki przeglądać ponieważ atrybut dla pozostałych ustawiony jest na <strong>read</strong> dając tym samym prawo do przeglądania wszystkim.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image57.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image57.png" alt="image57" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Do wyszukiwania plików pod kątem uprawnień możemy również użyć przełącznika: <strong>-perm <kod_chmode></strong> Tworzenie kodu <strong>chmod</strong> zostało opisane wyżej tak więc chcąc odnaleźć pliki do których użytkownik ma prawo odczytu (bo atrybut odczytu jest ustawiony w sekcji pozostali) można użyć polecenia: <strong>find -perm -004</strong> Opcja <strong>-type f </strong>nakazuje wyświetlenie tylko plików.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image58.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image58.png" alt="image58" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Polecenie: <strong>find -perm -004</strong> wyświetla te pliki, które mają ustawiony atrybut <strong>read</strong> w sekcji pozostali, reszta pól nie jest brana pod uwagę, ważne jest by ten konkretny atrybut był zdefiniowany (dlatego w wyniku wyszukiwania zostały umieszczone oba pliki).</p>
<p> </p>
<p>Aby odnaleźć plik z konkretnie ustawionym atrybutem <strong>chmod</strong> należy podać samą wartość atrybutu (dlatego tylko jeden plik został umieszczony w wyniku wydania drugiego polecenia, ponieważ tylko ten jeden plik spełnia warunek).</p>
<p> </p>
<p>Użycie znaku <strong>/ </strong>spowoduje wyszukanie wszystkich plików do których zdefiniowana wartość <strong>chmod</strong> pasuje. Na rysunku poniżej użytkownik do jednego pliku ma dostęp poprzez to że jest ich właścicielem a do drugiego poprzez członkostwo w grupie pozostali.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image59.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image59.png" alt="image59" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Polecenie: <strong>find -perm 400</strong> wyszuka tylko te pliki którem mają ustawiony kod <strong>chmod</strong> na <strong>400</strong> (czyli plik: plik1), drugie polecenie: <strong>find -perm 004</strong> pokaże pliki z atrybutem 004 (czyli plik: plik2) natomiast komenda: <strong>find -perm /404</strong> wszystkie pliki z ustawionymi atrybutami: 400, 004 oraz 404</p>
<p> </p>
<p>Poleceniem <strong>find</strong> oprócz znajdowania plików z określonymi atrybutami może zostać wykorzystane również do odnalezienia plików konkretnego użytkownika bądź grupy.</p>
<p> </p>
<p>Aby wyszukać pliki, konkretnego użytkownika należy skorzystać z flagi <strong>-user</strong> bądź <strong>-uid</strong>. Opcja <strong>user</strong> jest łączona z nazwą użytkownika ale także jego numerem uid natomiast flaga <strong>uid</strong> tylko z identyfikatorem użytkownika. Aby poznać numer użytkownika posłuż się poleceniem: <strong>id -u <nazwa_użytkownika></strong> bądź <strong>echo $UID</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image60.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image60.png" alt="image60" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Innym poleceniem pozwalającym nam na zlokalizowanie plików jest komenda: <strong>locate <nazwa_szukanego_elementu></strong> Aby zignorować wielkość znaków użyj przełącznika <strong>-i</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image61.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image61.png" alt="image61" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Szybsze wyszukanie plików zapewnia nam polecenie: <strong>locate</strong> ponieważ polecenie to korzysta z bazy danych, która to przechowuje informacje o położeniu plików. Baza ta co jakiś czas jest aktualizowana przez jedno z zadań programu <strong>cron</strong>. Manualne odświeżenie bazy następuje po wydaniu komendy: <strong>updatedb</strong></p>
<p> </p>
<p>Do lokalizacji plików wykonywalnych możemy użyć polecenia: <strong>which</strong> <nazwa_programu> Poniżej jako przykład lokalizacja programu <strong>firefox</strong> oraz <strong>vim</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image62.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image62.png" alt="image62" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p> </p>
<p><strong>File – informacja o typie pliku</strong></p>
<hr />
<p> </p>
<p>Narzędzie <strong>file</strong> dostarcza nam informacji o tym z jakim plikiem mamy do czynienia. Składnia polecenia: <strong>file <nazwa_pliku></strong> Jak można zauważyć na rysunku poniżej wydanie polecenia odnośnie plików: <strong>plik</strong>, <strong>plik2</strong> oraz <strong>bash</strong> zwróciło nam informację iż pierwszy jest <strong>dokumentem XML</strong>, drugi <strong>plikiem HTML</strong> a ostatni zaś <strong>plikiem binarnym</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linux_1/image63.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" /></a> </p>
<p>Polecenie: <strong>grep</strong> jest wykorzystywane do odszukania danej wartości, lub danych które będą pasować do wzorca. Ogólna składnia polecenia jest następująca: <strong>grep <opcje> <wzorzec> <przeszukiwany_plik></strong></p>
<p> </p>
<p>Poniżej został utworzony plik, który zawiera listę załadowanych modułów i w pliku tym poszukujemy informacji na temat modułu Bluetooth. Po wpisaniu polecenia: <strong>grep Bluetooth plik3</strong> nakazującego przeszukanie w <strong>plik3</strong> wystąpienia słowa <strong>Bluetooth</strong> nie uzyskujemy żadnej informacji gdyż szukany ciąg nie wystąpił w przeszukiwanym pliku. A może problemem jest wielkość liter? Aby to sprawdzić w kolejnym poleceniu został dodany przełączki <strong>-i</strong> który każe poleceniu <strong>grep</strong> zignorować wielkość liter. Tym razem uzyskujemy informację, że poszukiwany ciąg został odnaleziony.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image64.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image64.png" alt="image64" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Wzorce poszukiwanych ciągów tekstowych możemy budować w zależności od kryteriów jakie muszą spełniać. Poniżej na rysunku wzorzec, który każe wyszukać ciągi znaków w których znajdują się litery xyz – polecenie: <strong>grep [xyz] plik3</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image65.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Jeszcze jeden przykład, który szuka tekstu <strong>snd_</strong> przy czym tekst ten musi wystąpić a po nim może znajdować się dowolna mała litera od a do z – polecenie: <strong>grep snd_[a-z] plik3</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image66.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image66.png" alt="image66" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Przykładów wykorzystania polecenia <strong>grep</strong> można podać bardzo wiele, wszystko zależy od tego co tak naprawdę szukamy. A na pewno pomocne będą poniższe wyrażenia, które pozwolą nam na zbudowanie kryteriów, przeszukujących plik pod kątem naszych oczekiwań:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[xyz]</strong> – pasuje do x lub do y lub do z,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[a-z]</strong> – pasuje do wszystkich liter od a do z</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[A-Za-z]</strong> – pasuje do dowolnej dużej i małej litery,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[0-9]</strong> – pasuje do dowolnej z cyfr,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>[^xy]</strong> – pasuje do wszystkich znaków za wyjątkiem x i y,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>. </strong>– dowolny znak,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>^ </strong>– pusty łańcuch na początku linii,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>$ </strong>– pusty łańcuch na końcu linii,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\<</strong> – pusty łańcuch na początku słowa,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>\></strong> – pusty łańcuch na końcu słowa.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;">Oprócz wyrażeń do dyspozycji mamy również opcje:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-i</strong> – zignoruj wielkość liter,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-v</strong> – wypisz te wiersze, które nie pasują do zbudowanego wzorca,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-f</strong> – porównaj wiersze wg wzorców zapisanych w pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c</strong> – zwróć liczbę wierszy pasujących do wzorca,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-n</strong> – wypisz numer wiersza, w którym zostało odnalezione dopasowanie,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><span class="skrypt"><strong>-l</strong> </span>– wypisz tylko nazwy plików w których znajduje się poszukiwany tekst,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-w</strong> – wyszukuje konkretny ciąg wyrazowy oznacza to że jeżeli szukany tekst to np. <strong>ta</strong> to zwrócone zostaną tylko te wartości w których ten tekst wystąpi, nie zostanie zwrócone np. słowo <strong>tata</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-r</strong> – szukanie rekursywnie tzn. przeszukiwane są również podkatalogi,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><span class="skrypt"><strong>-E</strong></span> – interpretuje wzorzec jako wyrażenie regularne.</p>
<p> </p>
<p>Przy używaniu <strong>grep</strong> należy pamiętać, że aby znaleźć wyrazy zawierające następujące znaki: <strong>+ | { } ( ) ? .</strong> znaki te trzeba zamaskować – maskujemy wykorzystując do tego prawy ukośnik <strong>\</strong></p>
<p>To na koniec jeszcze parę przykładów:</p>
<p> </p>
<p style="margin-left: 30px;"><strong>grep zdjecie\.jpg plik.txt</strong> – gdy w poszukiwanym wyrazie chcemy odnaleźć kropkę wówczas znak kropki musimy zamaskować używając do tego prawego ukośnika, szukany ciąg to zdjecie.jpg</p>
<p style="margin-left: 30px;"><strong>grep joan*a plik.txt</strong> – użycie * oznacza, że poprzedzający gwiazdkę element będzie dopasowany zero lub dowolną ilość razy, wydanie polecenia zwróci tekst: joana a także joanna czy joannna</p>
<p style="margin-left: 30px;"><strong>grep komputer *</strong> – polecenie wyszuka wyraz komputer we wszystkich plikach bieżącego katalogu</p>
<p style="margin-left: 30px;"><strong>grep ka$ plik.txt</strong> – wyrazy kończące się na ka czyli np. pralka, walka itd.</p>
<p style="margin-left: 30px;"><strong>grep -E "^a|^b" plik.txt</strong> – zostaną wybrane wiersze zaczynające się znakiem a lub b (znak<strong> |</strong> oznacza <strong>lub</strong>)</p>
<p> </p>
<p> </p>
<p><strong>Kompresja plików – narzędzia ZIP, TAR i RAR</strong></p>
<hr />
<p> </p>
<p>W każdym szanującym się systemie istnieje możliwość utworzenia plików archiwum, zawierających skompresowane dane. W systemie Linux najpopularniejszymi narzędziami są programy ZIP i TAR. Programy te pozwalają nam na „pakowanie” wielu plików do jednego archiwum jak i na późniejsze wyodrębnienie tych plików z archiwum.</p>
<p> </p>
<p>Aby utworzyć plik archiwum ZIP możemy posłużyć się poleceniem: <strong>zip <nazwa_archiwum> <pliki></strong> Poniżej zostało utworzone archiwum <strong>spakowane.zip</strong> zawierające trzy pliki: <strong>plik, testwp, zdjecia</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image67.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image67.png" alt="image67" width="700" height="389" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby spakować cały katalog można posłużyć się symbolem wieloznacznym *.* bądź gdy chcemy dodać pliki określonego rodzaju np. pliki tekstowe - *.txt</p>
<p> </p>
<p>Dodanie plików do archiwum odbywa się poprzez odwołanie się do wcześniej utworzonego pliku archiwum wraz z nazwą plików, które chcemy dodać. Odwołując się do przykładu powyżej aby do archiwum <strong>spakowane.zip</strong> dodać plik <strong>dane</strong> należałoby posłużyć się poleceniem: <strong>zip spakowane.zip dane</strong></p>
<p> </p>
<p>Sprawdzenie zawartości archiwum bez jego rozpakowania możemy wykonać za pomocą komendy: <strong>unzip -l <archiwum></strong> Jak można zauważyć plik <strong>dane</strong> został dodany do pliku archiwum <strong>spakowane.zip</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image68.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image68.png" alt="image68" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby z pliku <strong>spakowane.zip</strong> wyodrębnić „spakowane” pliki, plik archiwum został przekopiowany do katalogu: <strong>/home/Dokumenty/katalog2</strong> a następnie została wydana komenda: <strong>unzip <plik_archiwum></strong> nakazująca wyodrębnienie plików.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image69.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image69.png" alt="image69" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Narzędzie ZIP jest używane z reguły do kompresji plików, które np. mają zostać wysłane do osoby nie korzystającej z systemu Linux natomiast w przypadku osób posiadających system Linux bardziej odpowiednią opcją wydaje się wybranie drugiego narzędzia a mianowicie TAR.</p>
<p> </p>
<p>Opis narzędzia wykonam na tym samy zestawie danych jakie zostały wykorzystane do omówienia programu ZIP.</p>
<p> </p>
<p>Aby użyć narzędzia TAR celem skompresowania plików należy wydać komendę: <strong>tar cvzf <nazwa_archiwum> <pliki></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image70.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image70.png" alt="image70" width="700" height="124" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby podejrzeć pliki znajdujące się w archiwum skorzystaj z polecenia: <strong>tar tvzf spakowane.tar.gz</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image71.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image71.png" alt="image71" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby zaś rozpakować pliki należy użyć komendy: <strong>tar xvzf <skapowane_archuwum></strong> Na przykładzie poniżej spakowane archiwum zostało skopiowane do folderu <strong>katalog2</strong> i następnie wyodrębniono pliki.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image72.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image72.png" alt="image72" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>W przypadku plików RAR należy w pierwszej kolejności doinstalować aplikacje odpowiedzialne za obsługę tego typu plików: <strong>sudo apt-get install rar unrar</strong> (rar potrafi nam kompresować i dekompresować pliki, natomiast unrar tylko dekompresować).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image73.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image73.png" alt="image73" width="700" height="176" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Kompresja plików odbywa się za pomocą polecenia: <strong>rar a <nazwa_pliku_rar> <pliki/katalogi> </strong>Po wydaniu polecenia następuje kompresja plików.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image74.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image74.png" alt="image74" width="700" height="279" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Test archiwum odbywa się poprzez użycie przełącznika: <strong>t </strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image75.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image75.png" alt="image75" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dodanie pliku do archiwum odbywa się również dzięki ustawionej fladze <strong>a</strong> z zdefiniowanymi plikami, które chcemy do archiwum dodać (w przykładzie poniżej do wcześniej utworzonego archiwum <strong>spakowane.rar</strong> został dodany plik <strong>dane</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image76.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image76.png" alt="image76" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Kasowanie pliku z archiwum możemy wykonać za pomocą przełącznika <strong>d</strong> (wcześniej dodany plik <strong>dane</strong> został z archiwum usunięty)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image77.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image77.png" alt="image77" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dekompresja archiwum odbywa się za pomocą polecenia: <strong>rar e <plik_rar></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image78.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image78.png" alt="image78" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Inne przydatne opcje:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-u</strong> – aktualizacja plików w archiwum,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-p</strong> – ustawienie hasła,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-r</strong> – kompresja wraz z podkatalogami,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c</strong> – komentarz do archiwum.</p>
<p> </p>
<p> </p>
<p><strong>Stat informacje o stanie pliku bądź sytemu plików.</strong></p>
<hr />
<p> </p>
<p>Wydając polecenie <strong>stat <nazwa_pliku/katalogu></strong> uzyskamy podstawowe informacje dotyczące danego pliku a także dane o operacjach wykonywanych na pliku (prawa dostępu, właściciel, czasy zmiany, modyfikacji itd.) natomiast dodając przełącznik <strong>-f</strong> uzyskamy informacje o pliku w kontekście systemu plików.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image79.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image79.png" alt="image79" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Dane uzyskane dzięki poleceniu możemy sformatować według własnego uznania poprzez zastosowanie przełączników podanych poniżej. Np. chcąc uzyskać informacje o prawach dostępu do plików w postaci ósemkowej i tradycyjnej należy wydać polecenie: <strong>stat -c %a%A <nazwa_pliku></strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image80.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image80.png" alt="image80" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Prawidłowe specyfikacje formatu dla plików (bez opcji --file-system):</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%a </strong>– prawa dostępu ósemkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%A </strong>– prawa dostępu w postaci czytelnej dla człowieka,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%b </strong>– liczba zajętych bloków (zobacz %B),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%B </strong>– rozmiar w bajtach każdego bloku podanego przez %b,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%C </strong>– kontekst bezpieczeństwa,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%d </strong>– numer urządzenia dziesiętnie,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%D</strong> – numer urządzenia szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%f </strong>– tryb surowy, szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%F </strong>– typ pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%g </strong>– numer grupy właściciela pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%G</strong> – nazwa grupy właściciela pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%h </strong>– liczba dowiązań zwykłych,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%i –</strong> numer i-węzła,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%m</strong> – miejsce zamontowania,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%n </strong>– nazwa pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%N</strong> – nazwa pliku w cudzysłowach, rozwiązana jeżeli dowiązanie symboliczne,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%o </strong>– optymalny rozmiar wielkości transferu wejścia/wyjścia,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%s </strong>– całkowity rozmiar w bajtach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%t </strong>– większy numer urządzenia szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%T </strong>– mniejszy numer urządzenia szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%u </strong>– identyfikator właściciela,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%U</strong> – nazwa właściciela,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%w</strong> – czytelny dla człowieka czas utworzenia pliku albo - jeżeli nieznany,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%W</strong> – czas utworzenia pliku w sekundach albo - jeżeli nieznany,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%x </strong>– czytelny dla człowieka czas ostatniego czytania,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%X </strong>– czas ostatniego czytania w sekundach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%y </strong>– czytelny dla człowieka czas ostatniej modyfikacji,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%Y </strong>– czas ostatniej modyfikacji w sekundach</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%z </strong>– czytelny dla człowieka czas ostatniej zmiany czasu,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%Z </strong>– czas ostatniej zmiany czasu w sekundach.</p>
<p> </p>
<p>Prawidłowe specyfikacje formatu dla systemów plików:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%a </strong>– liczba wolnych bloków dostępnych dla zwykłego użytkownika,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%b</strong> – całkowita liczba bloków danych w systemie plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%c </strong>– całkowita liczba i-węzłów w systemie plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%d</strong> – liczba wolnych i-węzłów w systemie plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%f </strong>– liczba wolnych bloków w systemie plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%i </strong>– identyfikator systemu plików szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%l </strong>– maksymalna długość nazw plików,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%n</strong> – nazwa pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%s </strong>– optymalny rozmiar bloku przy zapisie/odczycie,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%S </strong>– podstawowy rozmiar bloku (dla zliczeń bloków),</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%t </strong>– rodzaj systemu plików szesnastkowo,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>%T </strong>– rodzaj systemu plików w formie czytelnej dla człowieka.</p>
<p> </p>
<p> </p>
<p><strong>Du – wielkość plików/katalogów</strong></p>
<hr />
<p> </p>
<p>Aby poznać wielkość jaką pliki bądź katalogi zajmują na dysku możemy skorzystać z polecenia: <strong>du</strong> Domyślnie wydanie polecenia powoduje wyświetlenie objętości plików i podkatalogów odnośnie katalogu w którym się znajdujemy. Dodanie do polecenia nazwy pliku bądź katalogu spowoduje wyświetlenie objętości pliku/katalogu.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image81.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image81.png" alt="image81" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Przydatne opcje:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-b</strong> – wielkość pliku podawana w bajtach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-k</strong> – wielkość pliku podawana w kilobajtach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-m</strong> – wielkość pliku podawana w megabajtach,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-h</strong> – automatyczny dobór wyświetlanej jednostki,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c</strong> – podsumowanie na końcu,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> – jedynie całkowita wielkość.</p>
<p> </p>
<p> </p>
<p><strong>Zawartość pliku</strong></p>
<hr />
<p> </p>
<p>W systemie Linux istnieje szereg poleceń pozwalających nam na podejrzenie zawartości interesującego nas pliku. Poniżej przedstawię kilka przykładów, choć zaprezentowaną przeze mnie gamę poleceń pewnie można jeszcze uzupełnić o dodatkowe.</p>
<p> </p>
<p>Pierwsza polecenie, które chciałbym przedstawić jest to komenda: <strong>less</strong> Polecenie to umożliwi nam zajrzenie do pliku, przy czym prezentowana wartość wyświetlana jest kolejno po jednej stronie. Wydanie np. polecenia: <strong>less /var/log/syslog.1</strong> wyświetli nam zawartość pliku <strong>syslog.1</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image82.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image82.png" alt="image82" width="700" height="456" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Po wciśnięciu klawisza: <strong>h</strong> w trakcie działania polecenia zostanie wyświetlona pomoc programu. W pomocy zawarte są informacje dotyczące działania programu dotyczące np. sposobu wyświetlania zawartości pliku.</p>
<p> </p>
<p>Dodatkowo podczas wywołania programu można skorzystać z szeregu opcji pozwalających nam na określenie sposobu działania programu. Przydatne flagi to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-N</strong> – numeracja wyświetlanych wierszy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c</strong> – wyczyszczenie ekranu, przed wyświetleniem następnego,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-m</strong> – informacja o procencie wyświetlonego pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> – puste wiersze są redukowane do jednego,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-S</strong> – wyłączenie zawijania wierszy, teks jest przycięty do szerokości ekranu.</p>
<p> </p>
<p>Użycie polecenia: <strong>head</strong> spowoduje wypisanie pierwszych dziesięciu wierszy pliku. Polecenia można używać by szybko zorientować się co w danym pliku się znajduje.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image83.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image83.png" alt="image83" width="700" height="282" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Parametry na, które mamy wpływ to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-<liczba></strong> - wyświetlenie zdefiniowanej liczby wierszy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c <liczba></strong> - wyświetlenie zdefiniowanej liczby bajtów pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-q</strong> - tryb cichy, polecenie <strong>head</strong> przy większej ilości zdefiniowanych do wyświetlenia plików nie wyświetla nagłówka pliku zawierającego jego nazwę.</p>
<p> </p>
<p>Podobnym poleceniem, które możemy użyć do szybkiego zbadania zawartości pliku jest polecenie: <strong>tail</strong> tylko w przeciwieństwie do <strong>head</strong> wydanie komendy spowoduje wyświetlenie ostatnich dziesięciu wierszy.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image84.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image84.png" alt="image84" width="700" height="256" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Parametry na, które mamy wpływ to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-<liczba></strong> - wyświetlenie zdefiniowanej liczby wierszy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-c <liczba></strong> - wyświetlenie zdefiniowanej liczby bajtów pliku,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-q</strong> - tryb cichy, polecenie <strong>tail</strong> przy większej ilości zdefiniowanych do wyświetlenia plików nie wyświetla nagłówka pliku zawierającego jego nazwę,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-f</strong> - użycie tej flagi spowoduje otwarcie pliku i jego ciągłe monitorowanie, nowe wiersze będą się pojawiać w miarę dodawania nowych informacji do otwartego pliku. Użycie tego parametru świetnie nadaje się do przeglądania wszelkiego rodzajów logów monitorujących stan systemu.</p>
<p> </p>
<p>Innym programem, który pozwoli nam na podejrzenie zawartości pliku jest: <strong>cat</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image85.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image85.png" alt="image85" width="700" height="438" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Niektóre parametry programu to:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> - użycie flagi spowoduje połączenie pustych następujących po sobie wierszy w jeden,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-b</strong> - numerowanie nie pustych wierszy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-n</strong> - numerowanie wierszy</p>
<p> </p>
<p>Gdy istnieje potrzeba numeracji wierszy w danym pliku możemy do tego celu użyć komendy: <strong>nl</strong></p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image86.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image86.png" alt="image86" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Parametry:</p>
<p> </p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-v <liczba></strong> - rozpoczęcie numeracji od zdefiniowanej liczby,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-i <liczba></strong> - zdefiniowanie licznika numeracji czyli wartość o jaką będą się zmieniały kolejne numerowane wiersze,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-b <a><t><n><pW></strong> - określenie sposobu numerowania: <strong>-ba</strong> numeracja wszystkich wierszy; <strong>-bt</strong> numeracja niepustych wierszy; <strong>-bn </strong>brak numerowania; <strong>-pW</strong> numerowanie tylko tych wierszy, które zawierają zdefiniowane wyrażenie <strong>W</strong>,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-n <ln><rn></strong> - wyrównanie numeracji: <strong>-nln</strong> wyrównanie do lewej strony, <strong>-nrn </strong>wyrównanie do prawej strony,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-w <liczba></strong> - ustalenie szerokości przeznaczonej na numerację,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s <znak></strong> - ustalenie znaku, który zostanie wstawiony pomiędzy numerację a tekst (domyślnie jest to znak tabulacji).</p>
<p> </p>
<p>Aby wydobyć ciągi tekstowe z blików binarnych możemy posłużyć się poleceniem: <strong>strings</strong> Polecenie przydatne, gdy chcemy poznać wersję czy autora danego programu.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image87.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image87.png" alt="image87" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>W przypadku potrzeby przeglądnięcia pliku binarnego możemy skorzystać z dwóch programów: pierwszy z nich to <strong>od</strong> drugi to zaś <strong>xxd</strong>.</p>
<p> </p>
<p>W przypadku pierwszego mamy możliwość wyświetlenia zawartości pliku w postaci ósemkowej (domyślna wartość), dziesiętnej (flaga: <strong>-Ad</strong>) lub heksadecymalnej (flaga: <strong>-Ax</strong>).</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image88.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image88.png" alt="image88" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Drugi program dane prezentuje w formie heksadecymalnej bądź binarnej (flaga: <strong>-b</strong>)</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image89.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image89.png" alt="image89" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>Aby przeglądać pliki PDF możemy skorzystać z programu <strong>xpdf</strong> lub <strong>gv</strong>.</p>
<p> <a href="http://slow7.pl/images/stories/linux/linux_1/image90.png" target="_blank" class="jcepopup"><img src="http://slow7.pl/images/stories/linux/linux_1/image90.png" alt="image90" width="700" height="355" style="display: block; margin-left: auto; margin-right: auto;" /></a></p>
<p> </p>
<p>I tu chciałbym zakończyć, mam nadzieję, że nie zraziłeś się Czytelniku do takiej formy komunikacji z systemem i że dalej będziesz chciał odkrywać tajniki tej formy dogadania się z Linuxem. W kolejnym wpisie zajmiemy się kontrolą procesów oraz użytkownikami.</p>
<p> </p>
<hr />
<p> </p>
<p><strong>Bibliografia:</strong></p>
<p> </p>
<p><a href="http://www.computerhope.com/unix/uchmod.htm">http://www.computerhope.com/unix/uchmod.htm</a></p>
<p><a href="http://krnlpanic.com/wp/linux-file-and-directory-permissions-explained/">http://krnlpanic.com/wp/linux-file-and-directory-permissions-explained/</a></p>
<p><a href="http://rtfq.net/linux/linux-single-user/permissions-basic-command-line-tutorial/">http://rtfq.net/linux/linux-single-user/permissions-basic-command-line-tutorial/</a></p></div>FTP w wydaniu Linux Ubuntu2015-05-11T18:03:14+00:002015-05-11T18:03:14+00:00http://slow7.pl/linux/item/96-ftp-w-wydaniu-linux-ubuntupikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/ea457adccaa9e569cff05de9b4f3b04d_S.jpg" alt="FTP w wydaniu Linux Ubuntu" /></div><div class="K2FeedIntroText"><p>Protokół FTP pomimo już sędziwego wieku (bo data powstania to 1973r.) do tej pory jest używany aby w łatwy sposób wysłać bądź ściągnąć pliki z serwera. Ci co prowadzą strony internetowe nieodzownie się z nim spotykają gdyż jest to najprostszy sposób aby wgrać bądź uaktualnić stronę internetową. Firmy (np. drukarnie) bardzo często udostępniają swoim klientom możliwość przesłania plików właśnie z wykorzystaniem protokołu FTP. Uruchomienie swojego własnego serwera FTP (bądź jego bezpiecznej wersji FTPS czy też nazywanej SFTP) nie jest trudnym zadaniem i w tym wpisie się tym zajmiemy. Naszym celem jest skonfigurowanie serwera FTP wykorzystując do tego system Linux Ubuntu 14.04 oraz oprogramowanie <strong>vsftpd</strong>.</p>
</div><div class="K2FeedFullText">
<p>Instalację serwera FTP zaczynamy od pobrania pakietu <strong>vsftpd</strong>. Pakiet ten zawiera serwer FTP dla systemów uniksowych. Zapewnia obsługę standardowego protokołu FTP jak i jego zabezpieczonej wersji FTPS a dodatkowo również ma wsparcie dla IPv6.</p>
<p>Po wydaniu komendy: <strong>apt-get install vsftpd</strong> następuje proces instalacji serwera FTP.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image1.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image1.png" alt="image1" width="700" height="437" /></a></p>
<p> </p>
<p>Serwer uruchamiamy poleceniem: <strong>sudo service vsftpd start</strong> a działanie (nasłuchiwanie) możemy sprawdzić za pomocą komendy: <strong>netstat -a | grep ftp</strong> Jak widać poniżej serwer został uruchomiony i czeka na połączenia.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image2.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image2.png" alt="image2" /></a></p>
<p> </p>
<p>Aby sprawdzić działanie serwera możemy spróbować połączyć się za pomocą poświadczeń konta, które mamy już w systemie utworzone. Poniżej udało się nawiązać połączenie z wykorzystaniem wcześniej założonego konta <strong>luk</strong>, dostęp do katalogu domowego poprzez FTP jest możliwy.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image3.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image3.png" alt="image3" /></a></p>
<p> </p>
<p>Aby założyć nowe konto możemy do tego celu wykorzystać panel <strong>Konta użytkowników</strong> dostępny poprzez <strong>Ustawienia systemu</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image4.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image4.png" alt="image4" width="700" height="357" /></a></p>
<p> </p>
<p>Konto (użytkownik john) tworzymy poprzez kliknięcie w prawym górnym oknie na opcję <strong>Odblokuj</strong> i po podaniu hasła poprzez przycisk <strong>plus (+)</strong> mamy możliwość dodania nowego użytkownika. Hasło ustalamy poprzez kliknięcie na pole <strong>Hasło</strong></p>
<p>Po utworzeniu w ten sposób nowego konta z wykorzystaniem skonfigurowanych poświadczeń będziemy mogli uzyskać dostęp do katalogu domowego poprzez serwer FTP.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image5.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image5.png" alt="image5" /></a></p>
<p> </p>
<p>Po zalogowaniu się na serwerze FTP do dyspozycji mamy tylko operacje: przeglądania katalogów oraz kopiowania plików z serwera na host lokalny. Zabronione jest możliwość wysyłania plików. Poniżej przykład utworzenia katalogu <strong>test</strong> (polecenie: <strong>mkdir test</strong>), wydanie polecenia kończy się niepowodzeniem.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image6.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image6.png" alt="image6" /></a></p>
<p> </p>
<p>Natomiast operacja w drugą stronę jest jak najbardziej możliwa. Aby skopiować plik z serwera za pomocą polecenia: <strong>lcd <katalog_lokalny></strong> ustawiamy lokalizację (folder) do której mają zostać przekopiowane pliki a następnie przy użyciu komendy: <strong>get <nazwa_pliku></strong> wskazujemy na plik, który ma zostać skopiowany. Możliwe jest również użycie polecenia: <strong>mget</strong> <strong><plik1> <plik2> <itd.> </strong>gdy chcemy przetransferować większa liczbę plików. W poniższym przykładzie z serwera został skopiowany plik <strong>1.pdf</strong> do lokalizacji <strong>/home/luk/Pulpit</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image7.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image7.png" alt="image7" width="700" height="394" /></a></p>
<p> </p>
<p>Domyślna zmiana ustawień serwera następuje poprzez edycję pliku <strong>vsftpd.conf</strong> zapisanego w katalogu <strong>/etc</strong></p>
<p>Pierwszą czynnością jaką wykonamy będzie danie użytkownikom możliwości zapisu. Po otwarciu pliku <strong>vsftpd.conf </strong>(np. vi /etc/vsftpd.conf lub nano vi /etc/vsftpd.conf ) należy odszukać linię: <strong>write_enable=YES</strong> i z początku linii usunąć znak komentarza: <strong>#</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image8.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image8.png" alt="image8" width="700" height="465" /></a></p>
<p> </p>
<p>Po wprowadzeniu zmian i zapisie pliku będzie dana możliwość wysyłania danych na serwer FTP. Lecz by wprowadzone przez nas zmiany doszły do skutku serwer FTP należy za pomocą polecenia: <strong>sudo service vsftpd restart </strong>zrestartować.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image9.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image9.png" alt="image9" /></a></p>
<p> </p>
<p>Po wykonaniu restartu i ponownym zalogowaniu się spróbujmy utworzyć katalog<strong> test</strong>. Jak widać poniżej bez żadnych przeszkód udało nam się wykonać tę operację.</p>
<p>Tworzenie katalogu następuje po wydaniu polecenia: <strong>mkdir <nazwa_katalogu></strong> natomiast kasowanie odbywa się przy użyciu komendy: <strong>rmdir <nazwa_katalogu></strong></p>
<p>Sprawdźmy jeszcze jak odbywa się proces przesyłu pliku. Po poprawnym zalogowaniu się i po przejściu do katalogu <strong>test</strong> (polecenie: <strong>cd test</strong>) następuje ustawienie katalogu roboczego (polecenie: <strong>lcd</strong>) i przy użyciu komend: <strong>put <nazwa_pliku></strong> bądź opcjonalnie <strong>send <nazwa_pliku></strong> pliki <strong>1.pdf</strong> oraz <strong>2.pdf</strong> zostają wysłane na serwer.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image10.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image10.png" alt="image10" width="700" height="357" /></a></p>
<p> </p>
<p>W przypadku użycia polecenia <strong>put</strong> możliwe jest zapisanie pliku pod zmienioną nazwą: <strong>put <plik_kopiowany> <nowa_nazwa_pliku> </strong>Aby wysłać wiele plików należy do tego celu użyć polecenia: <strong>mput <plik1> <plik2> <itd.> </strong>Kasowanie plików odbywa się z wykorzystaniem polecenia: <strong>delete <nazwa_pliku></strong> i tradycyjnie już gdy chcemy skasować wiele plików należy posłużyć się poleceniem: <strong>mdelete <plik1> <plik2> <itd.></strong></p>
<p>Do rozwiązania ewentualnych problemów oraz do kontroli kto, kiedy łączył się z naszym serwerem FTP może posłużyć nam <strong>log</strong> programu <strong>vsftpd</strong>. Oprócz wspomnianych informacji <strong>log</strong> dostarcza nam również dane o plikach, które zostały pobrane lub wgrane na nasz serwer. <strong>Log</strong> dostępny jest w lokalizacji: <strong>/var/log/vsftpd.log</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image12.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image12.png" alt="image12" width="700" height="335" /></a></p>
<p> </p>
<p>Do naszego serwera dostęp mogą mieć użytkownicy anonimowi, którzy nie mają założonego konta w systemie. Wystarczy, że w pliku <strong>vsftpd.conf</strong> włączymy takowy dostęp za pomocą polecenia: <strong>anonymous_enable=YES</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image13.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image13.png" alt="image13" width="700" height="465" /></a></p>
<p> </p>
<p>Domyślnym katalogiem dla użytkowników domowych jest folder <strong>/srv/ftp </strong>aby zmienić tę lokalizację należy dodać linię: <strong>anon_root=<lokalizacja></strong> np. <strong>anon_root=/pub/ftp</strong></p>
<p>Po zresetowaniu serwera dostęp dla użytkownika anonimowego powinien być dostępny.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image14.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image14.png" alt="image14" width="700" height="401" /></a></p>
<p> </p>
<p>Podstawowe pojęcia mamy omówione spróbujmy więc wykonać trochę bardziej zaawansowane zadanie a mianowicie założenia zadania są następujące:</p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li>mamy dwie grupy użytkowników: <strong>marketing</strong> i <strong>reklama</strong></li>
<li>do grupy <strong>marketing</strong> należy użytkownik <strong>jan.kowalski</strong> a do grupy <strong>reklama</strong> użytkownik <strong>tadeusz.nowak</strong></li>
<li>na serwerze FTP znajdują się trzy katalogi: <strong>rekfol</strong>, <strong>marfol</strong>, i <strong>wszyscy</strong>. Do katalogu <strong>rekfol</strong> dostęp mają tylko członkowie grupy <strong>reklama</strong> (zapis i odczyt), do katalogu <strong>marfol</strong> dostęp mają tylko członkowie grupy <strong>marketing</strong> (zapis i odczyt) natomiast do folderu <strong>wszyscy</strong> członkowie obu grup.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Zadanie zaczniemy od utworzenia katalogów <strong>rekfol</strong> oraz <strong>marfol</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image15.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image15.png" alt="image15" /></a></p>
<p> </p>
<p>Następnie utworzymy dwie grupy: <strong>marketing</strong> i <strong>reklama</strong>. Grupę można stworzyć za pomocą komendy: <strong>groupadd <nazwa_grupy></strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image16.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image16.png" alt="image16" /></a></p>
<p> </p>
<p>A następnie tworzymy konta użytkowników. Do utworzenia konta użytkownika wykorzystujemy polecenie <strong>useradd</strong> W poleceniu zostały użyte dodatkowe flagi a mianowicie:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-g</strong> – dodanie użytkownika do grupy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-d</strong> – przypisanie użytkownikowi katalogu domowego,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> – ustawienie powłoki systemowej.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image17.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image17.png" alt="image17" width="700" height="60" /></a></p>
<p> </p>
<p>Do utworzonych w poprzednim kroku kont definiujemy hasła. Do przypisania hasła użytkownikowi służy polecenie: <strong>passwd <nazwa_użytkownika> </strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image18.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image18.png" alt="image18" /></a></p>
<p> </p>
<p>Spróbujmy się zalogować. Jak widać poniżej nie udało się zalogować z poświadczeniami użytkownika <strong>jan.kowalski</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image19.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image19.png" alt="image19" /></a></p>
<p> </p>
<p>By logowanie stało się możliwe i dostęp do powłoki został uzyskany musimy do pliku <strong><span style="font-family: 'Calibri','sans-serif';">/etc/shells dodać linię: /usr/sbin/nologin gdyż taką ścieżkę podaliśmy przy poleceniu utworzenia konta użytkownika.</span></strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image20.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image20.png" alt="image20" /></a></p>
<p> </p>
<p>Po wprowadzonych zmianach dostęp do serwera FTP jest możliwy ale jak widać poniżej niemożliwe jest kopiowanie plików. Wydana komenda: <strong>put 1.pdf</strong> nakazująca wysłanie pliku kończy się niepowodzeniem.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image21.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image21.png" alt="image21" /></a></p>
<p> </p>
<p>Kopiowanie plików jest niemożliwe (lokacja /ftp) gdyż nie mamy przyznanych praw zapisu do katalogów w których pliki te mają zostać zapisane. Katalog został utworzony z poziomu użytkownika <strong>root</strong> i tylko on ma możliwość dokonania zapisu my tylko mamy prawo do odczytu i wykonania (zapis <strong>r-x</strong>, trzy ostatnie symbole). Zapis <strong>drwxr-xr-x</strong> oznacza że:</p>
<p style="margin-left: 30px;"><strong>d</strong>rwxr-xr-x – do czynienia mamy z katalogiem,</p>
<p style="margin-left: 30px;">d<strong>rwx</strong>r-xr-x – trzy pierwsze symbole oznaczają <strong>prawa użytkownika</strong> w tym przypadku odnoszą się do użytkownika <strong>root</strong>, symbol: <strong>r</strong> (ang. read) oznacza prawo do czytania, symbol: <strong>w</strong> (ang. write) prawo do zapisu zaś symbol: <strong>x </strong>(ang. execute) prawo do wykonania,</p>
<p style="margin-left: 30px;">drwx<strong>r-x</strong>r-x – kolejne trzy symbole odnoszą się do <strong>praw grupy</strong>; grupa root prawo do czytania i prawo do wykonania,</p>
<p style="margin-left: 30px;">drwxr-x<strong>r-x</strong> – ostatnie symbole odzwierciedlają <strong>prawa pozostałych grup</strong> czyli w naszym przypadku prawo do czytania i prawo do wykonania.</p>
<p style="margin-left: 30px;"> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image22.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image22.png" alt="image22" /></a></p>
<p> </p>
<p>Zalogowany użytkownik <strong>jan.kowalski</strong> należy do grupy <strong>marketing</strong> więc jego prawa zawarte są w zapisie: <strong>drwxr-xr-x </strong>(grupy pozostałe) i jak widać dla grup tych prawo zapisu nie zostało przyznane.</p>
<p>Odmowa zapisu dotyczy również katalogów <strong>marfol</strong> i <strong>rekfol</strong>.</p>
<p>Aby osiągnąć nasz cel musimy zmienić właściciela utworzonych katalogów gdyż katalogi te są przypisane grupie <strong>root</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image23.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image23.png" alt="image23" /></a></p>
<p> </p>
<p>Zgodnie z scenariuszem folder <strong>rekfol</strong> przypiszemy grupie <strong>reklama</strong> zaś folder <strong>marfol</strong> grupie marketing. Zmieńmy więc właścicieli katalogów. Zmiana właściciela katalogu odbywa się za pomocą polecenia: <strong>chown <użytkownik>:<grupa_nowa> <katalog></strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image24.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image24.png" alt="image24" /></a></p>
<p> </p>
<p>Po wydaniu komendy <strong>chown</strong> właścicielem katalogu <strong>marfol</strong> staje się grupa <strong>marketing</strong> zaś właścicielem folderu <strong>rekfol</strong> jest grupa <strong>reklama</strong>.</p>
<p>Po zmianie właściciela katalogów trzeba jeszcze grupie przyznać <strong>prawo zapisu</strong>. Do zmiany praw (dodanie bądź odjęcie) wykorzystujemy polecenie: <strong>chmod <prawa> <folder></strong> Zostało wydane polecenie <strong>chmod</strong> z flagą <strong>775</strong> ponieważ liczba ta oznacza:</p>
<p style="margin-left: 30px;"><strong>7</strong> – <strong>prawa użytkownika</strong> – prawo do odczytu wartość: 4 + prawo do zapisu wartość: 2 + prawo do wykonania wartość: 1 co po zsumowaniu daje nam liczbę <strong>7</strong>,</p>
<p style="margin-left: 30px;"><strong>7 </strong>– <strong>prawa grupy</strong> – ten sam zestaw praw co powyżej,</p>
<p style="margin-left: 30px;"><strong>5</strong> – <strong>prawa dla pozostałych</strong> - prawo do odczytu wartość: 4 + prawo do zapisu nie zostaje przyznane wartość: 0 + prawo do wykonania wartość: 1 co po zsumowaniu daje nam liczbę <strong>5</strong>.</p>
<p>Po wydaniu komendy: <strong>ls -l</strong> możemy sprawdzić stan nadanych uprawnień</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image25.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image25.png" alt="image25" /></a></p>
<p> </p>
<p>Tak więc sprawdźmy jak teraz wygląda efekt przeprowadzonych przez nas operacji. Czy skonfigurowani przez nas użytkownicy mogą wykonać zdefiniowane przez nas czynności.</p>
<p>Na pierwszy ogień weźmiemy użytkownika <strong>jan.kowalski</strong></p>
<p>Po nawiązaniu sesji FTP (pkt. 1) następuje ustawienie katalogu roboczego na folder <strong>/home/luk/Pulpit</strong> (pkt. 2) i następnie przejście do folderu <strong>marfol</strong> (pkt. 3) Do lokalizacji tej zostaje wysłany plik <strong>1.pdf</strong> (pkt. 4) a operacja ta kończy się sukcesem (pkt. 5). W następnej kolejności przechodzimy do katalogu <strong>rekfol</strong> (pkt. 6) i tu ponownie następuje próba skopiowania pliku <strong>1.pdf</strong> lecz tym razem próba ta kończy się niepowodzeniem (pkt. 7).</p>
<p>Czyli przeprowadzona konfiguracja spełnia założenia naszego scenariusza. Użytkownik <strong>jan.kowalski</strong> jako członek grupy <strong>marketing</strong> w swoim folderze może wykonać zapis lecz w folderze <strong>rekfol</strong> który należy do grupy <strong>reklama</strong> operacja zapisu jest zablokowana.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image26.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image26.png" alt="image26" /></a></p>
<p> </p>
<p>W przypadku użytkownika <strong>tadeusz.nowak</strong> mamy do czynienia z sytuacją odwrotną. Użytkownik ten jako członek grupy <strong>reklama</strong> nie może wykonać operacji zapisu do folderu <strong>marfol</strong> (pkt. 1) gdyż nie jest członkiem grupy <strong>marketing</strong> natomiast do folderu <strong>rekfol</strong> tak (pkt. 2) gdyż pozwala mu na to przynależność do grupy <strong>reklama</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image27.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image27.png" alt="image27" /></a></p>
<p> </p>
<p>Efekt naszych prób możemy również zaobserwować przeglądając log serwera.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image28.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image28.png" alt="image28" width="700" height="91" /></a></p>
<p> </p>
<p>Jakbyśmy chcieli np. zablokować dostęp do katalogu danej grupy należy tylko odpowiednio dobrać uprawnienia do katalogu. Teraz członek grupy <strong>reklama</strong> może prowadzić zapis do katalogu <strong>rekfol</strong> natomiast odmowa następuje w przypadku folderu <strong>marfol</strong>. Aby zablokować wejście użytkownikowi grupy <strong>reklama</strong> do folderu <strong>marfol</strong> należącego do grupy <strong>marketing</strong> na folder ten należy nałożyć uprawnienie <strong>770</strong></p>
<p>Ostatnim zadaniem, które na nas czeka jest danie uprawnienia obu grupom do prowadzenia zapisu w wspólnym folderze <strong>wszyscy</strong>. Zaczniemy od utworzenia katalogu <strong>wszyscy</strong> i utworzenia nowej grupy <strong>razem</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image29.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image29.png" alt="image29" /></a></p>
<p> </p>
<p>Kolejnym naszym krokiem będzie do nowo utworzonej grupy dodanie użytkowników <strong>jan.kowalski</strong> oraz <strong>tadeusz.nowak</strong>. Dodanie do grupy realizujemy za pomocą polecenia <strong>usermod</strong> z opcją <strong>G</strong> Gdybyśmy popełnili błąd za pomocą polecenia: <strong>deluser <użytkownik> <grupa></strong> możemy danego użytkownika wykluczyć z grupy. Aby sprawdzić prawidłowość dodania użytkownika do grupy wykorzystaj polecenie: <strong>groups <użytkownik></strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image30.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image30.png" alt="image30" /></a></p>
<p> </p>
<p>Po wykonaniu operacji oba konta będą należeć do swoich grup podstawowych a zarazem do wspólnej grupy <strong>razem</strong>.</p>
<p>Aby zapis był możliwy musimy zmienić właściciela katalogu <strong>wszyscy</strong>. Nowym właścicielem katalogu staje się grupa <strong>razem</strong> (polecenie: <strong>chown</strong>)</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image31.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image31.png" alt="image31" /></a></p>
<p> </p>
<p>Ostatnią czynnością jest ustalenie uprawnień do katalogu. Zostaje nadane uprawnienie <strong>770</strong> - użytkownik <strong>root</strong> może wykonać wszystkie operacje, członek grupy <strong>razem</strong> może wykonać wszystkie operacje natomiast <strong>pozostali</strong> nie mogą zrobić nic.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image32.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image32.png" alt="image32" /></a></p>
<p> </p>
<p>Po dokonaniu konfiguracji sprawdźmy efekt naszych działań. Użytkownik <strong>jan.kowalski</strong> uzyskuje dostęp do serwera (pkt.1). Próba zapisu pliku <strong>2.pdf</strong> do katalogu <strong>marfol</strong>, kończy się sukcesem (pkt.2), zapis do katalogu <strong>rekfol</strong> kończy się niepowodzeniem (pkt.3) natomiast zapis do folderu <strong>wszyscy</strong> zgodnie z oczekiwaniami jest możliwy (pkt.4).</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image33.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image33.png" alt="image33" /></a></p>
<p> </p>
<p>Tak więc osiągnęliśmy nasz cel. Zadanie zostało wykonane.</p>
<p>Jak wiadomo protokół FTP do zbyt bezpiecznych nie należy gdyż dane uwierzytelniające (login i hasło) są przesyłane tekstem otwartym. Spróbujmy więc podnieść poziom bezpieczeństwa i spróbujmy skonfigurować nasz serwer aby korzystał z szyfrowania.</p>
<p>Naszym zadaniem będzie uruchomienie serwera FTPS (znany także jako FTP Secure i FTP-SSL) czyli serwera FTP który to umożliwia wsparcie dla szyfrowanych protokołów Transport Layer Security (TLS) oraz Secure Sockets Layer (SSL).</p>
<p>Zaczniemy od utworzenia certyfikatu SSL, który to w kolejnym kroku powiążemy z <strong>vsftpd</strong>. Aby utworzyć certyfikat CA skorzystamy z polecenia: <strong>openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem</strong></p>
<p>Po wydaniu polecenia możemy odpowiedzieć na pojawiające się pytania (dane wystawcy certyfikatu) lub pola pozostawić puste zatwierdzając każde pytanie enterem.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image34.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image34.png" alt="image34" width="700" height="388" /></a></p>
<p> </p>
<p>Po poprawnym utworzeniu certyfikatu czas by wygenerowane pliki powiązać z naszym serwerem FTP.</p>
<p>Aby skonfigurować serwer do korzystania z bezpiecznego połączenia w pierwszej kolejności dodajemy do pliku <strong>vsftpd.conf</strong> wpisy wskazujące na lokalizację klucza oraz certyfikatu utworzonego przez narzędzie <strong>openssl</strong>. Dodajemy wpisy: <strong>rsa_cert_file=/etc/ssl/private/vsftpd.pem</strong> oraz <strong>rsa_private_key_file=/etc/ssl/private/vsftpd.pem</strong></p>
<p>W kolejnym kroku włączamy korzystanie z SSL:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_enable=YES</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>allow_anon_ssl=NO</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>force_local_data_ssl=YES</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>force_local_logins_ssl=YES</strong></p>
<p style="margin-bottom: 0.0001pt;">Umieszczenie tych wpisów w pliku <strong>vsftpd.conf</strong> spowoduje, że łączność z naszym serwerem będzie mogła odbywać się tylko z wykorzystaniem protokołu SSL. Gdy chcemy użytkownikowi dać wybór i pozostawić mu możliwość nawiązania połączenia w tradycyjny sposób parametry <strong>force_local_data_ssl</strong> oraz <strong>force_local_logins_ssl </strong>zamieniamy na NO</p>
<p style="margin-bottom: 0.0001pt;">Za pomocą wpisów poniżej określamy preferencję używanej wersji protokołu:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_tlsv1=YES</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_sslv2=NO</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_sslv3=NO</strong></p>
<p style="margin-bottom: 0.0001pt;">i na koniec do naszego pliku dodajemy jeszcze dwa wpisy:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>require_ssl_reuse=NO</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_ciphers=HIGH</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image35.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image35.png" alt="image35" width="700" height="420" /></a></p>
<p> </p>
<p>Po tak przeprowadzonej konfiguracji powinno nam się udać połączyć z naszym serwerem z wykorzystaniem protokołu SSL. Przy pierwszym połączeniu będziemy proszeni o zaakceptowanie certyfikatu, reszta czynności przebiega identycznie jak w przypadku korzystania z tradycyjnej wersji FTP.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image36.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image36.png" alt="image36" width="700" height="324" /></a></p>
<p> </p>
<p>Poniżej argument, który powinien przekonać cię Czytelniku, że jednak warto zdecydować się na wdrożenie wersji zabezpieczonej naszego serwera. Na dwóch zrzutach poniżej przedstawiam screeny z przechwyconych sesji nawiązywania połączenia z serwerem FTP. Pierwszy screen dotyczy tradycyjnego serwera FTP (bez SSL) natomiast drugi jego bezpieczniejszej odmiany.</p>
<p>Wersja tradycyjna</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image37.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image37.png" alt="image37" width="700" height="382" /></a></p>
<p> </p>
<p>oraz wersja z wdrożonym szyfrowaniem</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image38.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image38.png" alt="image38" width="700" height="382" /></a></p>
<p> </p>
<p>Analiza zrzutów mam nadzieje, że mówi sama za siebie (jak prosto jest odczytać login i hasło podłączającego się użytkownika).</p>
<p>Poniżej prezentuję jeszcze krótki opis wpisów zawartych w pliku <strong>/etc/vsftpd.conf</strong> odpowiedzialnych za konfigurację serwera FTP.</p>
<p>Opcje:</p>
<p style="margin-left: 30px;"><strong>nopriv_user=</strong> - określa poziom z którego zostaje uruchomiony serwer</p>
<p style="margin-left: 30px;"><strong>listen=</strong> - uruchomienie serwera</p>
<p style="margin-left: 30px;"><strong>listen_port=</strong> - określenie portu nasłuchiwania, można zmienić domyślny port 21 wykorzystywany przez większość serwerów FTP na dowolny. Przy zmianie tego parametru należy pamiętać, że w trakcie nawiązywania połączenia trzeba w adresie serwera do tego portu nawiązać np. mojserwer.pl:<numer_portu></p>
<p style="margin-left: 30px;"><strong>ascii_download_enable=</strong> - włączenie metody ASCI, pobieranie plików,</p>
<p style="margin-left: 30px;"><strong>ascii_upload_enable=</strong> - włączenie metody ASCI, wysyłanie plików,</p>
<p style="margin-left: 30px;"><strong>connect_from_port_20=</strong> - włączenie trybu aktywnego (YES) bądź pasywnego (NO),</p>
<p style="margin-left: 30px;"><strong>port_enable=</strong> - wpisanie YES aktywuje tryb pasywny,</p>
<p style="margin-left: 30px;"><strong>local_enable=</strong> - włączenie możliwości połączenia dla użytkowników lokalnych</p>
<p style="margin-left: 30px;"><strong>write_enable=</strong> - włączenie możliwości zapisu dla połączeń nawiązywanych przez użytkowników lokalnych</p>
<p style="margin-left: 30px;"><strong>local_umask=</strong> - umask (domyślnie 022) tzw. maska użytkownika bądź maska uprawnień. Czyli zestaw wartości, który jest wykorzystywany do przypisania uprawnień dla nowych plików</p>
<p style="margin-left: 30px;"><strong>anon_umask=</strong> - maska dotycząca użytkowników anonimowych</p>
<p style="margin-left: 30px;"><strong>no_anon_password=</strong> - pytanie o hasło, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_world_readable_only=</strong> - włączenie możliwości pobierania plików, atrybut pliku musi być ustawiony na read, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_upload_enable=</strong> - włączenie możliwości zapisu plików na serwerze, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_mkdir_write_enable=</strong> - włączenie możliwości tworzenia nowych katalogów, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_other_write_enable=</strong> - włączenie kasowana katalogów, lub zmiany ich nazwy, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_max_rate=</strong> - limit prędkości, jednostka bajty na sekundę, zapis 0 oznacza prędkość maksymalną, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>local_max_rate=</strong> - limit prędkości, jednostka bajty na sekundę, zapis 0 oznacza prędkość maksymalną</p>
<p style="margin-left: 30px;"><strong>xferlog_enable=</strong> - włączenie logowania,</p>
<p style="margin-left: 30px;"><strong>xferlog_file=/var/log/vsftpd.log</strong> - ścieżka do pliku loga,</p>
<p style="margin-left: 30px;"><strong>log_ftp_protocol=</strong> - włączenie zapisu loga odnośnie poleceń wydawanych przez użytkowników,</p>
<p style="margin-left: 30px;"><strong>max_clients=</strong> - maksymalna liczba jedoczesnych połączeń,</p>
<p style="margin-left: 30px;"><strong>max_per_ip=</strong> - maksymalna liczba jedoczesnych połączeń w zależności od adresu IP,</p>
<p style="margin-left: 30px;"><strong>banner_file=/etc/vsftpd/vsftpd.banner</strong> - ścieżka do pliku definiującego banner, który wyświetlany jest podczas łączenia się z serwerem,</p>
<p style="margin-left: 30px;"><strong>ftpd_banner=</strong> - definicja tekstu bannera, który wyświetlany jest podczas łączenia się z serwerem,</p>
<p style="margin-left: 30px;"><strong>idle_session_timeout=</strong> - czas bezczynności, jednostka sekundy,</p>
<p style="margin-left: 30px;"><strong>chroot_local_user=</strong> - definicja pozwolenia poruszania się po całej strukturze plików serwera FTP. Domyślnie użytkownik łączy się z swoim katalogiem domowym, poprzez to ustawienie możemy znieść to ograniczenia. Poniżej przykład w którym użytkownik luk może przejść do katalogu głównego systemu Linux.</p>
<p style="margin-left: 30px;"> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image39.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image39.png" alt="image39" width="700" height="559" /></a></p>
<p style="margin-left: 30px;"> </p>
<p style="margin-left: 30px;"><strong>chroot_list_enable=</strong> - stosowane gdy chcemy zdefiniować listę uprawnionych użytkowników, którzy mogą poruszać się poza obrębem swojego katalogu domowego. Listę użytkowników tworzymy bp. w pliku <strong>/etc/vsftpd/chroot.list</strong> dodając ścieżkę do pliku w definicji <strong>chroot_list_file=<ścieżka_do_pliku></strong></p>
<p> </p>
<p>Opcji konfigurujących nasz serwer jest znacznie więcej, przedstawiłem te które konfiguruje się najczęściej. Jeśli Czytelniku nie znalazłeś tych, które są Ci potrzebne odsyłam do bibliografii.</p>
<p>I na tym chciałbym zakończyć myślę, że po lekturze tego wpisu nie będzie już problemu by serwer FTP postawić w własnym zakresie. Gdyby coś jednak było nie jasne zapraszam do oglądnięcia filmiku w którym pokazałem wszystkie czynności opisane w tym artykule.</p>
<p> </p>
<p style="text-align: center;">{mp4}ftplinux/ftplinux{/mp4}</p>
<p> </p>
<hr />
<p> </p>
<p style="text-align: right;"><strong>Bibliografia:</strong></p>
<p style="text-align: right;"><a href="https://security.appspot.com/vsftpd/vsftpd_conf.html">https://security.appspot.com/vsftpd/vsftpd_conf.html</a></p>
<p style="text-align: right;"><a href="http://retheesh.blogspot.com/2009/09/change-vsftpd-anonymous-login-default.html">http://retheesh.blogspot.com/2009/09/change-vsftpd-anonymous-login-default.html</a></p>
<p style="text-align: right;"><a href="https://bbs.archlinux.org/viewtopic.php?id=140802">https://bbs.archlinux.org/viewtopic.php?id=140802</a></p>
<p style="text-align: right;"><a href="http://www.krizna.com/ubuntu/setup-ftp-server-on-ubuntu-14-04-vsftpd/">http://www.krizna.com/ubuntu/setup-ftp-server-on-ubuntu-14-04-vsftpd/</a></p>
<p style="text-align: right;"><a href="https://www.youtube.com/watch?v=SiiFFy1M4jU">https://www.youtube.com/watch?v=SiiFFy1M4jU</a></p>
<p style="text-align: right;"><a href="http://www.wikihow.com/Set-up-an-FTP-Server-in-Ubuntu-Linux">http://www.wikihow.com/Set-up-an-FTP-Server-in-Ubuntu-Linux</a></p>
<p style="text-align: right;"><a href="https://help.ubuntu.com/community/vsftpd">https://help.ubuntu.com/community/vsftpd</a></p>
<p style="text-align: right;"><a href="http://ubuntuforums.org/showthread.php?t=518293">http://ubuntuforums.org/showthread.php?t=518293</a></p></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/ea457adccaa9e569cff05de9b4f3b04d_S.jpg" alt="FTP w wydaniu Linux Ubuntu" /></div><div class="K2FeedIntroText"><p>Protokół FTP pomimo już sędziwego wieku (bo data powstania to 1973r.) do tej pory jest używany aby w łatwy sposób wysłać bądź ściągnąć pliki z serwera. Ci co prowadzą strony internetowe nieodzownie się z nim spotykają gdyż jest to najprostszy sposób aby wgrać bądź uaktualnić stronę internetową. Firmy (np. drukarnie) bardzo często udostępniają swoim klientom możliwość przesłania plików właśnie z wykorzystaniem protokołu FTP. Uruchomienie swojego własnego serwera FTP (bądź jego bezpiecznej wersji FTPS czy też nazywanej SFTP) nie jest trudnym zadaniem i w tym wpisie się tym zajmiemy. Naszym celem jest skonfigurowanie serwera FTP wykorzystując do tego system Linux Ubuntu 14.04 oraz oprogramowanie <strong>vsftpd</strong>.</p>
</div><div class="K2FeedFullText">
<p>Instalację serwera FTP zaczynamy od pobrania pakietu <strong>vsftpd</strong>. Pakiet ten zawiera serwer FTP dla systemów uniksowych. Zapewnia obsługę standardowego protokołu FTP jak i jego zabezpieczonej wersji FTPS a dodatkowo również ma wsparcie dla IPv6.</p>
<p>Po wydaniu komendy: <strong>apt-get install vsftpd</strong> następuje proces instalacji serwera FTP.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image1.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image1.png" alt="image1" width="700" height="437" /></a></p>
<p> </p>
<p>Serwer uruchamiamy poleceniem: <strong>sudo service vsftpd start</strong> a działanie (nasłuchiwanie) możemy sprawdzić za pomocą komendy: <strong>netstat -a | grep ftp</strong> Jak widać poniżej serwer został uruchomiony i czeka na połączenia.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image2.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image2.png" alt="image2" /></a></p>
<p> </p>
<p>Aby sprawdzić działanie serwera możemy spróbować połączyć się za pomocą poświadczeń konta, które mamy już w systemie utworzone. Poniżej udało się nawiązać połączenie z wykorzystaniem wcześniej założonego konta <strong>luk</strong>, dostęp do katalogu domowego poprzez FTP jest możliwy.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image3.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image3.png" alt="image3" /></a></p>
<p> </p>
<p>Aby założyć nowe konto możemy do tego celu wykorzystać panel <strong>Konta użytkowników</strong> dostępny poprzez <strong>Ustawienia systemu</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image4.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image4.png" alt="image4" width="700" height="357" /></a></p>
<p> </p>
<p>Konto (użytkownik john) tworzymy poprzez kliknięcie w prawym górnym oknie na opcję <strong>Odblokuj</strong> i po podaniu hasła poprzez przycisk <strong>plus (+)</strong> mamy możliwość dodania nowego użytkownika. Hasło ustalamy poprzez kliknięcie na pole <strong>Hasło</strong></p>
<p>Po utworzeniu w ten sposób nowego konta z wykorzystaniem skonfigurowanych poświadczeń będziemy mogli uzyskać dostęp do katalogu domowego poprzez serwer FTP.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image5.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image5.png" alt="image5" /></a></p>
<p> </p>
<p>Po zalogowaniu się na serwerze FTP do dyspozycji mamy tylko operacje: przeglądania katalogów oraz kopiowania plików z serwera na host lokalny. Zabronione jest możliwość wysyłania plików. Poniżej przykład utworzenia katalogu <strong>test</strong> (polecenie: <strong>mkdir test</strong>), wydanie polecenia kończy się niepowodzeniem.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image6.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image6.png" alt="image6" /></a></p>
<p> </p>
<p>Natomiast operacja w drugą stronę jest jak najbardziej możliwa. Aby skopiować plik z serwera za pomocą polecenia: <strong>lcd <katalog_lokalny></strong> ustawiamy lokalizację (folder) do której mają zostać przekopiowane pliki a następnie przy użyciu komendy: <strong>get <nazwa_pliku></strong> wskazujemy na plik, który ma zostać skopiowany. Możliwe jest również użycie polecenia: <strong>mget</strong> <strong><plik1> <plik2> <itd.> </strong>gdy chcemy przetransferować większa liczbę plików. W poniższym przykładzie z serwera został skopiowany plik <strong>1.pdf</strong> do lokalizacji <strong>/home/luk/Pulpit</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image7.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image7.png" alt="image7" width="700" height="394" /></a></p>
<p> </p>
<p>Domyślna zmiana ustawień serwera następuje poprzez edycję pliku <strong>vsftpd.conf</strong> zapisanego w katalogu <strong>/etc</strong></p>
<p>Pierwszą czynnością jaką wykonamy będzie danie użytkownikom możliwości zapisu. Po otwarciu pliku <strong>vsftpd.conf </strong>(np. vi /etc/vsftpd.conf lub nano vi /etc/vsftpd.conf ) należy odszukać linię: <strong>write_enable=YES</strong> i z początku linii usunąć znak komentarza: <strong>#</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image8.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image8.png" alt="image8" width="700" height="465" /></a></p>
<p> </p>
<p>Po wprowadzeniu zmian i zapisie pliku będzie dana możliwość wysyłania danych na serwer FTP. Lecz by wprowadzone przez nas zmiany doszły do skutku serwer FTP należy za pomocą polecenia: <strong>sudo service vsftpd restart </strong>zrestartować.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image9.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image9.png" alt="image9" /></a></p>
<p> </p>
<p>Po wykonaniu restartu i ponownym zalogowaniu się spróbujmy utworzyć katalog<strong> test</strong>. Jak widać poniżej bez żadnych przeszkód udało nam się wykonać tę operację.</p>
<p>Tworzenie katalogu następuje po wydaniu polecenia: <strong>mkdir <nazwa_katalogu></strong> natomiast kasowanie odbywa się przy użyciu komendy: <strong>rmdir <nazwa_katalogu></strong></p>
<p>Sprawdźmy jeszcze jak odbywa się proces przesyłu pliku. Po poprawnym zalogowaniu się i po przejściu do katalogu <strong>test</strong> (polecenie: <strong>cd test</strong>) następuje ustawienie katalogu roboczego (polecenie: <strong>lcd</strong>) i przy użyciu komend: <strong>put <nazwa_pliku></strong> bądź opcjonalnie <strong>send <nazwa_pliku></strong> pliki <strong>1.pdf</strong> oraz <strong>2.pdf</strong> zostają wysłane na serwer.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image10.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image10.png" alt="image10" width="700" height="357" /></a></p>
<p> </p>
<p>W przypadku użycia polecenia <strong>put</strong> możliwe jest zapisanie pliku pod zmienioną nazwą: <strong>put <plik_kopiowany> <nowa_nazwa_pliku> </strong>Aby wysłać wiele plików należy do tego celu użyć polecenia: <strong>mput <plik1> <plik2> <itd.> </strong>Kasowanie plików odbywa się z wykorzystaniem polecenia: <strong>delete <nazwa_pliku></strong> i tradycyjnie już gdy chcemy skasować wiele plików należy posłużyć się poleceniem: <strong>mdelete <plik1> <plik2> <itd.></strong></p>
<p>Do rozwiązania ewentualnych problemów oraz do kontroli kto, kiedy łączył się z naszym serwerem FTP może posłużyć nam <strong>log</strong> programu <strong>vsftpd</strong>. Oprócz wspomnianych informacji <strong>log</strong> dostarcza nam również dane o plikach, które zostały pobrane lub wgrane na nasz serwer. <strong>Log</strong> dostępny jest w lokalizacji: <strong>/var/log/vsftpd.log</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image12.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image12.png" alt="image12" width="700" height="335" /></a></p>
<p> </p>
<p>Do naszego serwera dostęp mogą mieć użytkownicy anonimowi, którzy nie mają założonego konta w systemie. Wystarczy, że w pliku <strong>vsftpd.conf</strong> włączymy takowy dostęp za pomocą polecenia: <strong>anonymous_enable=YES</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image13.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image13.png" alt="image13" width="700" height="465" /></a></p>
<p> </p>
<p>Domyślnym katalogiem dla użytkowników domowych jest folder <strong>/srv/ftp </strong>aby zmienić tę lokalizację należy dodać linię: <strong>anon_root=<lokalizacja></strong> np. <strong>anon_root=/pub/ftp</strong></p>
<p>Po zresetowaniu serwera dostęp dla użytkownika anonimowego powinien być dostępny.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image14.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image14.png" alt="image14" width="700" height="401" /></a></p>
<p> </p>
<p>Podstawowe pojęcia mamy omówione spróbujmy więc wykonać trochę bardziej zaawansowane zadanie a mianowicie założenia zadania są następujące:</p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li>mamy dwie grupy użytkowników: <strong>marketing</strong> i <strong>reklama</strong></li>
<li>do grupy <strong>marketing</strong> należy użytkownik <strong>jan.kowalski</strong> a do grupy <strong>reklama</strong> użytkownik <strong>tadeusz.nowak</strong></li>
<li>na serwerze FTP znajdują się trzy katalogi: <strong>rekfol</strong>, <strong>marfol</strong>, i <strong>wszyscy</strong>. Do katalogu <strong>rekfol</strong> dostęp mają tylko członkowie grupy <strong>reklama</strong> (zapis i odczyt), do katalogu <strong>marfol</strong> dostęp mają tylko członkowie grupy <strong>marketing</strong> (zapis i odczyt) natomiast do folderu <strong>wszyscy</strong> członkowie obu grup.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Zadanie zaczniemy od utworzenia katalogów <strong>rekfol</strong> oraz <strong>marfol</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image15.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image15.png" alt="image15" /></a></p>
<p> </p>
<p>Następnie utworzymy dwie grupy: <strong>marketing</strong> i <strong>reklama</strong>. Grupę można stworzyć za pomocą komendy: <strong>groupadd <nazwa_grupy></strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image16.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image16.png" alt="image16" /></a></p>
<p> </p>
<p>A następnie tworzymy konta użytkowników. Do utworzenia konta użytkownika wykorzystujemy polecenie <strong>useradd</strong> W poleceniu zostały użyte dodatkowe flagi a mianowicie:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-g</strong> – dodanie użytkownika do grupy,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-d</strong> – przypisanie użytkownikowi katalogu domowego,</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>-s</strong> – ustawienie powłoki systemowej.</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image17.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image17.png" alt="image17" width="700" height="60" /></a></p>
<p> </p>
<p>Do utworzonych w poprzednim kroku kont definiujemy hasła. Do przypisania hasła użytkownikowi służy polecenie: <strong>passwd <nazwa_użytkownika> </strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image18.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image18.png" alt="image18" /></a></p>
<p> </p>
<p>Spróbujmy się zalogować. Jak widać poniżej nie udało się zalogować z poświadczeniami użytkownika <strong>jan.kowalski</strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image19.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image19.png" alt="image19" /></a></p>
<p> </p>
<p>By logowanie stało się możliwe i dostęp do powłoki został uzyskany musimy do pliku <strong><span style="font-family: 'Calibri','sans-serif';">/etc/shells dodać linię: /usr/sbin/nologin gdyż taką ścieżkę podaliśmy przy poleceniu utworzenia konta użytkownika.</span></strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image20.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image20.png" alt="image20" /></a></p>
<p> </p>
<p>Po wprowadzonych zmianach dostęp do serwera FTP jest możliwy ale jak widać poniżej niemożliwe jest kopiowanie plików. Wydana komenda: <strong>put 1.pdf</strong> nakazująca wysłanie pliku kończy się niepowodzeniem.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image21.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image21.png" alt="image21" /></a></p>
<p> </p>
<p>Kopiowanie plików jest niemożliwe (lokacja /ftp) gdyż nie mamy przyznanych praw zapisu do katalogów w których pliki te mają zostać zapisane. Katalog został utworzony z poziomu użytkownika <strong>root</strong> i tylko on ma możliwość dokonania zapisu my tylko mamy prawo do odczytu i wykonania (zapis <strong>r-x</strong>, trzy ostatnie symbole). Zapis <strong>drwxr-xr-x</strong> oznacza że:</p>
<p style="margin-left: 30px;"><strong>d</strong>rwxr-xr-x – do czynienia mamy z katalogiem,</p>
<p style="margin-left: 30px;">d<strong>rwx</strong>r-xr-x – trzy pierwsze symbole oznaczają <strong>prawa użytkownika</strong> w tym przypadku odnoszą się do użytkownika <strong>root</strong>, symbol: <strong>r</strong> (ang. read) oznacza prawo do czytania, symbol: <strong>w</strong> (ang. write) prawo do zapisu zaś symbol: <strong>x </strong>(ang. execute) prawo do wykonania,</p>
<p style="margin-left: 30px;">drwx<strong>r-x</strong>r-x – kolejne trzy symbole odnoszą się do <strong>praw grupy</strong>; grupa root prawo do czytania i prawo do wykonania,</p>
<p style="margin-left: 30px;">drwxr-x<strong>r-x</strong> – ostatnie symbole odzwierciedlają <strong>prawa pozostałych grup</strong> czyli w naszym przypadku prawo do czytania i prawo do wykonania.</p>
<p style="margin-left: 30px;"> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image22.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image22.png" alt="image22" /></a></p>
<p> </p>
<p>Zalogowany użytkownik <strong>jan.kowalski</strong> należy do grupy <strong>marketing</strong> więc jego prawa zawarte są w zapisie: <strong>drwxr-xr-x </strong>(grupy pozostałe) i jak widać dla grup tych prawo zapisu nie zostało przyznane.</p>
<p>Odmowa zapisu dotyczy również katalogów <strong>marfol</strong> i <strong>rekfol</strong>.</p>
<p>Aby osiągnąć nasz cel musimy zmienić właściciela utworzonych katalogów gdyż katalogi te są przypisane grupie <strong>root</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image23.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image23.png" alt="image23" /></a></p>
<p> </p>
<p>Zgodnie z scenariuszem folder <strong>rekfol</strong> przypiszemy grupie <strong>reklama</strong> zaś folder <strong>marfol</strong> grupie marketing. Zmieńmy więc właścicieli katalogów. Zmiana właściciela katalogu odbywa się za pomocą polecenia: <strong>chown <użytkownik>:<grupa_nowa> <katalog></strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image24.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image24.png" alt="image24" /></a></p>
<p> </p>
<p>Po wydaniu komendy <strong>chown</strong> właścicielem katalogu <strong>marfol</strong> staje się grupa <strong>marketing</strong> zaś właścicielem folderu <strong>rekfol</strong> jest grupa <strong>reklama</strong>.</p>
<p>Po zmianie właściciela katalogów trzeba jeszcze grupie przyznać <strong>prawo zapisu</strong>. Do zmiany praw (dodanie bądź odjęcie) wykorzystujemy polecenie: <strong>chmod <prawa> <folder></strong> Zostało wydane polecenie <strong>chmod</strong> z flagą <strong>775</strong> ponieważ liczba ta oznacza:</p>
<p style="margin-left: 30px;"><strong>7</strong> – <strong>prawa użytkownika</strong> – prawo do odczytu wartość: 4 + prawo do zapisu wartość: 2 + prawo do wykonania wartość: 1 co po zsumowaniu daje nam liczbę <strong>7</strong>,</p>
<p style="margin-left: 30px;"><strong>7 </strong>– <strong>prawa grupy</strong> – ten sam zestaw praw co powyżej,</p>
<p style="margin-left: 30px;"><strong>5</strong> – <strong>prawa dla pozostałych</strong> - prawo do odczytu wartość: 4 + prawo do zapisu nie zostaje przyznane wartość: 0 + prawo do wykonania wartość: 1 co po zsumowaniu daje nam liczbę <strong>5</strong>.</p>
<p>Po wydaniu komendy: <strong>ls -l</strong> możemy sprawdzić stan nadanych uprawnień</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image25.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image25.png" alt="image25" /></a></p>
<p> </p>
<p>Tak więc sprawdźmy jak teraz wygląda efekt przeprowadzonych przez nas operacji. Czy skonfigurowani przez nas użytkownicy mogą wykonać zdefiniowane przez nas czynności.</p>
<p>Na pierwszy ogień weźmiemy użytkownika <strong>jan.kowalski</strong></p>
<p>Po nawiązaniu sesji FTP (pkt. 1) następuje ustawienie katalogu roboczego na folder <strong>/home/luk/Pulpit</strong> (pkt. 2) i następnie przejście do folderu <strong>marfol</strong> (pkt. 3) Do lokalizacji tej zostaje wysłany plik <strong>1.pdf</strong> (pkt. 4) a operacja ta kończy się sukcesem (pkt. 5). W następnej kolejności przechodzimy do katalogu <strong>rekfol</strong> (pkt. 6) i tu ponownie następuje próba skopiowania pliku <strong>1.pdf</strong> lecz tym razem próba ta kończy się niepowodzeniem (pkt. 7).</p>
<p>Czyli przeprowadzona konfiguracja spełnia założenia naszego scenariusza. Użytkownik <strong>jan.kowalski</strong> jako członek grupy <strong>marketing</strong> w swoim folderze może wykonać zapis lecz w folderze <strong>rekfol</strong> który należy do grupy <strong>reklama</strong> operacja zapisu jest zablokowana.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image26.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image26.png" alt="image26" /></a></p>
<p> </p>
<p>W przypadku użytkownika <strong>tadeusz.nowak</strong> mamy do czynienia z sytuacją odwrotną. Użytkownik ten jako członek grupy <strong>reklama</strong> nie może wykonać operacji zapisu do folderu <strong>marfol</strong> (pkt. 1) gdyż nie jest członkiem grupy <strong>marketing</strong> natomiast do folderu <strong>rekfol</strong> tak (pkt. 2) gdyż pozwala mu na to przynależność do grupy <strong>reklama</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image27.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image27.png" alt="image27" /></a></p>
<p> </p>
<p>Efekt naszych prób możemy również zaobserwować przeglądając log serwera.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image28.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image28.png" alt="image28" width="700" height="91" /></a></p>
<p> </p>
<p>Jakbyśmy chcieli np. zablokować dostęp do katalogu danej grupy należy tylko odpowiednio dobrać uprawnienia do katalogu. Teraz członek grupy <strong>reklama</strong> może prowadzić zapis do katalogu <strong>rekfol</strong> natomiast odmowa następuje w przypadku folderu <strong>marfol</strong>. Aby zablokować wejście użytkownikowi grupy <strong>reklama</strong> do folderu <strong>marfol</strong> należącego do grupy <strong>marketing</strong> na folder ten należy nałożyć uprawnienie <strong>770</strong></p>
<p>Ostatnim zadaniem, które na nas czeka jest danie uprawnienia obu grupom do prowadzenia zapisu w wspólnym folderze <strong>wszyscy</strong>. Zaczniemy od utworzenia katalogu <strong>wszyscy</strong> i utworzenia nowej grupy <strong>razem</strong>.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image29.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image29.png" alt="image29" /></a></p>
<p> </p>
<p>Kolejnym naszym krokiem będzie do nowo utworzonej grupy dodanie użytkowników <strong>jan.kowalski</strong> oraz <strong>tadeusz.nowak</strong>. Dodanie do grupy realizujemy za pomocą polecenia <strong>usermod</strong> z opcją <strong>G</strong> Gdybyśmy popełnili błąd za pomocą polecenia: <strong>deluser <użytkownik> <grupa></strong> możemy danego użytkownika wykluczyć z grupy. Aby sprawdzić prawidłowość dodania użytkownika do grupy wykorzystaj polecenie: <strong>groups <użytkownik></strong></p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image30.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image30.png" alt="image30" /></a></p>
<p> </p>
<p>Po wykonaniu operacji oba konta będą należeć do swoich grup podstawowych a zarazem do wspólnej grupy <strong>razem</strong>.</p>
<p>Aby zapis był możliwy musimy zmienić właściciela katalogu <strong>wszyscy</strong>. Nowym właścicielem katalogu staje się grupa <strong>razem</strong> (polecenie: <strong>chown</strong>)</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image31.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image31.png" alt="image31" /></a></p>
<p> </p>
<p>Ostatnią czynnością jest ustalenie uprawnień do katalogu. Zostaje nadane uprawnienie <strong>770</strong> - użytkownik <strong>root</strong> może wykonać wszystkie operacje, członek grupy <strong>razem</strong> może wykonać wszystkie operacje natomiast <strong>pozostali</strong> nie mogą zrobić nic.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image32.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image32.png" alt="image32" /></a></p>
<p> </p>
<p>Po dokonaniu konfiguracji sprawdźmy efekt naszych działań. Użytkownik <strong>jan.kowalski</strong> uzyskuje dostęp do serwera (pkt.1). Próba zapisu pliku <strong>2.pdf</strong> do katalogu <strong>marfol</strong>, kończy się sukcesem (pkt.2), zapis do katalogu <strong>rekfol</strong> kończy się niepowodzeniem (pkt.3) natomiast zapis do folderu <strong>wszyscy</strong> zgodnie z oczekiwaniami jest możliwy (pkt.4).</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image33.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image33.png" alt="image33" /></a></p>
<p> </p>
<p>Tak więc osiągnęliśmy nasz cel. Zadanie zostało wykonane.</p>
<p>Jak wiadomo protokół FTP do zbyt bezpiecznych nie należy gdyż dane uwierzytelniające (login i hasło) są przesyłane tekstem otwartym. Spróbujmy więc podnieść poziom bezpieczeństwa i spróbujmy skonfigurować nasz serwer aby korzystał z szyfrowania.</p>
<p>Naszym zadaniem będzie uruchomienie serwera FTPS (znany także jako FTP Secure i FTP-SSL) czyli serwera FTP który to umożliwia wsparcie dla szyfrowanych protokołów Transport Layer Security (TLS) oraz Secure Sockets Layer (SSL).</p>
<p>Zaczniemy od utworzenia certyfikatu SSL, który to w kolejnym kroku powiążemy z <strong>vsftpd</strong>. Aby utworzyć certyfikat CA skorzystamy z polecenia: <strong>openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem</strong></p>
<p>Po wydaniu polecenia możemy odpowiedzieć na pojawiające się pytania (dane wystawcy certyfikatu) lub pola pozostawić puste zatwierdzając każde pytanie enterem.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image34.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image34.png" alt="image34" width="700" height="388" /></a></p>
<p> </p>
<p>Po poprawnym utworzeniu certyfikatu czas by wygenerowane pliki powiązać z naszym serwerem FTP.</p>
<p>Aby skonfigurować serwer do korzystania z bezpiecznego połączenia w pierwszej kolejności dodajemy do pliku <strong>vsftpd.conf</strong> wpisy wskazujące na lokalizację klucza oraz certyfikatu utworzonego przez narzędzie <strong>openssl</strong>. Dodajemy wpisy: <strong>rsa_cert_file=/etc/ssl/private/vsftpd.pem</strong> oraz <strong>rsa_private_key_file=/etc/ssl/private/vsftpd.pem</strong></p>
<p>W kolejnym kroku włączamy korzystanie z SSL:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_enable=YES</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>allow_anon_ssl=NO</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>force_local_data_ssl=YES</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>force_local_logins_ssl=YES</strong></p>
<p style="margin-bottom: 0.0001pt;">Umieszczenie tych wpisów w pliku <strong>vsftpd.conf</strong> spowoduje, że łączność z naszym serwerem będzie mogła odbywać się tylko z wykorzystaniem protokołu SSL. Gdy chcemy użytkownikowi dać wybór i pozostawić mu możliwość nawiązania połączenia w tradycyjny sposób parametry <strong>force_local_data_ssl</strong> oraz <strong>force_local_logins_ssl </strong>zamieniamy na NO</p>
<p style="margin-bottom: 0.0001pt;">Za pomocą wpisów poniżej określamy preferencję używanej wersji protokołu:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_tlsv1=YES</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_sslv2=NO</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_sslv3=NO</strong></p>
<p style="margin-bottom: 0.0001pt;">i na koniec do naszego pliku dodajemy jeszcze dwa wpisy:</p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>require_ssl_reuse=NO</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"><strong>ssl_ciphers=HIGH</strong></p>
<p style="margin: 0cm 0cm 0.0001pt 30px;"> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image35.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image35.png" alt="image35" width="700" height="420" /></a></p>
<p> </p>
<p>Po tak przeprowadzonej konfiguracji powinno nam się udać połączyć z naszym serwerem z wykorzystaniem protokołu SSL. Przy pierwszym połączeniu będziemy proszeni o zaakceptowanie certyfikatu, reszta czynności przebiega identycznie jak w przypadku korzystania z tradycyjnej wersji FTP.</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image36.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image36.png" alt="image36" width="700" height="324" /></a></p>
<p> </p>
<p>Poniżej argument, który powinien przekonać cię Czytelniku, że jednak warto zdecydować się na wdrożenie wersji zabezpieczonej naszego serwera. Na dwóch zrzutach poniżej przedstawiam screeny z przechwyconych sesji nawiązywania połączenia z serwerem FTP. Pierwszy screen dotyczy tradycyjnego serwera FTP (bez SSL) natomiast drugi jego bezpieczniejszej odmiany.</p>
<p>Wersja tradycyjna</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image37.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image37.png" alt="image37" width="700" height="382" /></a></p>
<p> </p>
<p>oraz wersja z wdrożonym szyfrowaniem</p>
<p> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image38.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image38.png" alt="image38" width="700" height="382" /></a></p>
<p> </p>
<p>Analiza zrzutów mam nadzieje, że mówi sama za siebie (jak prosto jest odczytać login i hasło podłączającego się użytkownika).</p>
<p>Poniżej prezentuję jeszcze krótki opis wpisów zawartych w pliku <strong>/etc/vsftpd.conf</strong> odpowiedzialnych za konfigurację serwera FTP.</p>
<p>Opcje:</p>
<p style="margin-left: 30px;"><strong>nopriv_user=</strong> - określa poziom z którego zostaje uruchomiony serwer</p>
<p style="margin-left: 30px;"><strong>listen=</strong> - uruchomienie serwera</p>
<p style="margin-left: 30px;"><strong>listen_port=</strong> - określenie portu nasłuchiwania, można zmienić domyślny port 21 wykorzystywany przez większość serwerów FTP na dowolny. Przy zmianie tego parametru należy pamiętać, że w trakcie nawiązywania połączenia trzeba w adresie serwera do tego portu nawiązać np. mojserwer.pl:<numer_portu></p>
<p style="margin-left: 30px;"><strong>ascii_download_enable=</strong> - włączenie metody ASCI, pobieranie plików,</p>
<p style="margin-left: 30px;"><strong>ascii_upload_enable=</strong> - włączenie metody ASCI, wysyłanie plików,</p>
<p style="margin-left: 30px;"><strong>connect_from_port_20=</strong> - włączenie trybu aktywnego (YES) bądź pasywnego (NO),</p>
<p style="margin-left: 30px;"><strong>port_enable=</strong> - wpisanie YES aktywuje tryb pasywny,</p>
<p style="margin-left: 30px;"><strong>local_enable=</strong> - włączenie możliwości połączenia dla użytkowników lokalnych</p>
<p style="margin-left: 30px;"><strong>write_enable=</strong> - włączenie możliwości zapisu dla połączeń nawiązywanych przez użytkowników lokalnych</p>
<p style="margin-left: 30px;"><strong>local_umask=</strong> - umask (domyślnie 022) tzw. maska użytkownika bądź maska uprawnień. Czyli zestaw wartości, który jest wykorzystywany do przypisania uprawnień dla nowych plików</p>
<p style="margin-left: 30px;"><strong>anon_umask=</strong> - maska dotycząca użytkowników anonimowych</p>
<p style="margin-left: 30px;"><strong>no_anon_password=</strong> - pytanie o hasło, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_world_readable_only=</strong> - włączenie możliwości pobierania plików, atrybut pliku musi być ustawiony na read, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_upload_enable=</strong> - włączenie możliwości zapisu plików na serwerze, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_mkdir_write_enable=</strong> - włączenie możliwości tworzenia nowych katalogów, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_other_write_enable=</strong> - włączenie kasowana katalogów, lub zmiany ich nazwy, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>anon_max_rate=</strong> - limit prędkości, jednostka bajty na sekundę, zapis 0 oznacza prędkość maksymalną, dotyczy użytkownika anonimowego,</p>
<p style="margin-left: 30px;"><strong>local_max_rate=</strong> - limit prędkości, jednostka bajty na sekundę, zapis 0 oznacza prędkość maksymalną</p>
<p style="margin-left: 30px;"><strong>xferlog_enable=</strong> - włączenie logowania,</p>
<p style="margin-left: 30px;"><strong>xferlog_file=/var/log/vsftpd.log</strong> - ścieżka do pliku loga,</p>
<p style="margin-left: 30px;"><strong>log_ftp_protocol=</strong> - włączenie zapisu loga odnośnie poleceń wydawanych przez użytkowników,</p>
<p style="margin-left: 30px;"><strong>max_clients=</strong> - maksymalna liczba jedoczesnych połączeń,</p>
<p style="margin-left: 30px;"><strong>max_per_ip=</strong> - maksymalna liczba jedoczesnych połączeń w zależności od adresu IP,</p>
<p style="margin-left: 30px;"><strong>banner_file=/etc/vsftpd/vsftpd.banner</strong> - ścieżka do pliku definiującego banner, który wyświetlany jest podczas łączenia się z serwerem,</p>
<p style="margin-left: 30px;"><strong>ftpd_banner=</strong> - definicja tekstu bannera, który wyświetlany jest podczas łączenia się z serwerem,</p>
<p style="margin-left: 30px;"><strong>idle_session_timeout=</strong> - czas bezczynności, jednostka sekundy,</p>
<p style="margin-left: 30px;"><strong>chroot_local_user=</strong> - definicja pozwolenia poruszania się po całej strukturze plików serwera FTP. Domyślnie użytkownik łączy się z swoim katalogiem domowym, poprzez to ustawienie możemy znieść to ograniczenia. Poniżej przykład w którym użytkownik luk może przejść do katalogu głównego systemu Linux.</p>
<p style="margin-left: 30px;"> </p>
<p><a href="http://slow7.pl/images/stories/linux/linuxftp/image39.png" target="_blank" class="jcepopup"><img style="display: block; margin-left: auto; margin-right: auto;" src="http://slow7.pl/images/stories/linux/linuxftp/image39.png" alt="image39" width="700" height="559" /></a></p>
<p style="margin-left: 30px;"> </p>
<p style="margin-left: 30px;"><strong>chroot_list_enable=</strong> - stosowane gdy chcemy zdefiniować listę uprawnionych użytkowników, którzy mogą poruszać się poza obrębem swojego katalogu domowego. Listę użytkowników tworzymy bp. w pliku <strong>/etc/vsftpd/chroot.list</strong> dodając ścieżkę do pliku w definicji <strong>chroot_list_file=<ścieżka_do_pliku></strong></p>
<p> </p>
<p>Opcji konfigurujących nasz serwer jest znacznie więcej, przedstawiłem te które konfiguruje się najczęściej. Jeśli Czytelniku nie znalazłeś tych, które są Ci potrzebne odsyłam do bibliografii.</p>
<p>I na tym chciałbym zakończyć myślę, że po lekturze tego wpisu nie będzie już problemu by serwer FTP postawić w własnym zakresie. Gdyby coś jednak było nie jasne zapraszam do oglądnięcia filmiku w którym pokazałem wszystkie czynności opisane w tym artykule.</p>
<p> </p>
<p style="text-align: center;">{mp4}ftplinux/ftplinux{/mp4}</p>
<p> </p>
<hr />
<p> </p>
<p style="text-align: right;"><strong>Bibliografia:</strong></p>
<p style="text-align: right;"><a href="https://security.appspot.com/vsftpd/vsftpd_conf.html">https://security.appspot.com/vsftpd/vsftpd_conf.html</a></p>
<p style="text-align: right;"><a href="http://retheesh.blogspot.com/2009/09/change-vsftpd-anonymous-login-default.html">http://retheesh.blogspot.com/2009/09/change-vsftpd-anonymous-login-default.html</a></p>
<p style="text-align: right;"><a href="https://bbs.archlinux.org/viewtopic.php?id=140802">https://bbs.archlinux.org/viewtopic.php?id=140802</a></p>
<p style="text-align: right;"><a href="http://www.krizna.com/ubuntu/setup-ftp-server-on-ubuntu-14-04-vsftpd/">http://www.krizna.com/ubuntu/setup-ftp-server-on-ubuntu-14-04-vsftpd/</a></p>
<p style="text-align: right;"><a href="https://www.youtube.com/watch?v=SiiFFy1M4jU">https://www.youtube.com/watch?v=SiiFFy1M4jU</a></p>
<p style="text-align: right;"><a href="http://www.wikihow.com/Set-up-an-FTP-Server-in-Ubuntu-Linux">http://www.wikihow.com/Set-up-an-FTP-Server-in-Ubuntu-Linux</a></p>
<p style="text-align: right;"><a href="https://help.ubuntu.com/community/vsftpd">https://help.ubuntu.com/community/vsftpd</a></p>
<p style="text-align: right;"><a href="http://ubuntuforums.org/showthread.php?t=518293">http://ubuntuforums.org/showthread.php?t=518293</a></p></div>Active Directory w wydaniu Linux2014-11-28T14:06:47+00:002014-11-28T14:06:47+00:00http://slow7.pl/linux/item/74-active-directory-w-wydaniu-linuxpikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/5483e331a9bace540b3a2478fc014e25_S.jpg" alt="Active Directory w wydaniu Linux" /></div><div class="K2FeedIntroText"><p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Projekt Samba działa już od wielu lat a swoje początki sięga roku 1991 kiedy to Andrew Tridgell na potrzeby swojej lokalnej sieci napisał program serwera plików. Po kilku latach Tridgell rozwinął swój serwer nazywając go Sambą a efekty swojej pracy udostępnił w Internecie. Do niedawna główne zadanie Samby sprowadzało się do umożliwenia komputerom działającym pod kontrolą systemu Linux (lecz nie tylko) na łączenie się z sieciami opartmi na sytemie Windows. Serwer Samba dodatkowo umożliwiał wzajemną wymianę plików a także dostęp do drukarek. Wszak Samba pozwalała na uzyskanie połączenia z domeną opartą o Active Directory, lecz nie oferowała usługi samodzielnego kontrolera usługi katalogowej Active Directory. Wszystko zmieniło się od wydania czwartej odsłony Samby. Udostępnione oprogramowanie jest </span>opensource'owym zamiennikiem oprogramowania zawartego w Windows Server (przynajmniej jeśli chodzi o świadczenie usług domenowych opartych o AD). <span>Serwery oparte o Sambą nie tylko oferują wszystkie funkcjonalności Active Directory, lecz także pozwalają na łączność z już istniejącym i działającym schematem AD a dodatkowo pozwalają na odwrócenie roli czyli utworzenie domeny opartej o Sambę i późniejsze dołączenie kontrolerów, których pracą steruje system Windows. Działanie Samby w oparciu o usługę Active Directory możliwe jest dzięki zintegrowaniu z oprogramowaniem serwera katalogowego LDAP, serwera uwierzytelnienia Kerberos, usługi rozwiązywania adresów domenowych (DNS) oraz pakietu wywołań zdalnych procedur.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
</div><div class="K2FeedFullText">
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Nasze rozważania na temat Samby, Active Directory i tematów pokrewnych skoncentrujemy na następujących zagadnieniach:</span></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>instalacja systemu Linux Debian w wersji 7.7,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>konfiguracja i przygotowanie systemu Linux do instalacji serwera Samba,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>instalacja serwera Samba 4.1.13,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>weryfikacja przeprowadzonej konfiguracj,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>podstawowe zarządzanie kontrolerem domeny.</span></li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Instalacja sytemu Debian" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Instalację systemu <strong>Debian</strong> rozpoczynamy od pobrania interesującego nas obrazu sytemu ze strony projektu - </span><a href="https://www.debian.org/CD/http-ftp/">https://www.debian.org/CD/http-ftp/</a><span> bądź </span><a href="https://www.debian.org/releases/wheezy/debian-installer/index.pl.html">https://www.debian.org/releases/wheezy/debian-installer/index.pl.html</a></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Po wypaleniu płyty (a raczej płyt, a dokładnie trzech – wersja DVD) możemy pierwszy nośnik umieścić w napędzie. Po chwili instalator powinien zgłosić gotowość do pracy. </span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Proces instalacji możemy przeprowadzić korzystając z instalatora tekstowego bądź instalatora opartego na grafice. Instalator graficzny od instalatora tekstowego różni się tylko obsługą myszki, oraz wyglądem menu, pytania na które musimy odpowiedzieć podczas prowadzonego procesu instalacji są takie same. My skorzystamy z drugiego rozwiązania tak więc z listy wybieramy <strong>Graphical install</strong>. Gdy chcemy skorzystać z innego środowiska graficznego niż domyślne instalowane Gnome 3 wybierz <strong>Advanced options </strong></span>(do wyboru KDE, LXDE, Xfce)<span>.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" height="480" width="640" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Na pierwszym ekranie czeka nas wybór języka. Wybieramy język polski.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny krok to wybór lokalizacji – wybieramy Polska. Wybór ten ma wpływ na ustawienie strefy czasowej oraz parametrów regionalnych.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image3.png" alt="image3" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Na kolejnym ekranie wybieramy układ klawiatury.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po kliknięciu na <strong>Dalej</strong> zostają załadowane składniki instalatora.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ekran <strong>Konfiguruj sieć</strong> umożliwia nam wybranie interfejsu sieciowego, który zostanie użyty podczas instalacji systemu. Wybieramy interfejs z dostępem do Internetu tak aby instalator mógł pobrać pakiety aktualizacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image6.png" alt="image6" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Następuje konfiguracja sieci. W przypadku niepowodzenia będziemy mogli sami dokonać ustawień adresów IP. Konfiguracja ręczna wiąże się z podaniem następujących danych: adres IP twojego komputera, maskę sieci, bramę sieciową, adresy serwerów nazw (serwery DNS).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image7.png" alt="image7" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Na kolejnym ekranie <strong>Konfiguruj sieć</strong> dokonujemy konfiguracji nazwy naszego komputera/hosta. W naszym przypadku pozostawiam wartość domyślną – <strong>debian</strong>, choć ty czytelniku możesz oczywiście wpisać swoją dowolną wymyśloną wartość.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny ekran to podanie nazwy domeny do której należy host. Komputer nie przynależy do żadnej domeny a więc pole pozostawiamy puste (domenę będziemy dopiero tworzyć).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przyszła pora na konfigurację użytkowników i haseł. Tak więc pierwszą czynnością jest ustalenie hasła dla konta <strong>root</strong> – administratora systemu. Hasło wpisujemy dwukrotnie.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny krok to podanie <strong>nazwy konta</strong> –najczęściej podajemy imię i nazwisko . Podawana nazwa będzie używana przez programy, które używają prawdziwej nazwy użytkownika np. programy pocztowe do uzupełnienia pola nadawca. Konto to jest kontem do użytku programów nie związane z celami administracyjnymi.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image11.png" alt="image11" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny ekran służy do zdefiniowania <strong>nazwy konta</strong> w systemie (konta systemowego).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image12.png" alt="image12" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnią czynności jest podanie hasła do nowo utworzonego konta.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po przejściu opcji związanych z użytkownikiem, przyszedł czas by określić <strong>strukturę partycji</strong> na naszym dysku. My decydujemy się na ustawienia standardowe, tak więc będziemy partycjonować cały dysk.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image14.png" alt="image14" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Wybieramy dysk na którym zostanie utworzona partycja bądź partycje i dalsza instalacja systemu. Proces spowoduje usunięcie wszystkich danych znajdujących się na dysku.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image15.png" alt="image15" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejna decyzja wiąże się z wyborem <strong>schematu partycji</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image16.png" alt="image16" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Na kolejnym ekranie mamy podgląd aktualnie skonfigurowanych partycji i punktów montowania a także mamy możliwość dokonania ewentualnych poprawek.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image17.png" alt="image17" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatni ekran podsumowujący wprowadzone ustawienia do schematu partycji. Kliknięcie na <strong>Tak</strong> spowoduje <strong>zatwierdzenie</strong> wszystkich ustawień.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image18.png" alt="image18" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Następuje tworzenie partycji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image19.png" alt="image19" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wykonaniu partycjonowania dysku, instalator systemu <strong>Debian</strong> pyta się o istnienie innych nośników zawierających pliki instalatora systemu. Jeśli posiadamy takowe płyty umieszczamy je w napędzie i wybieramy <strong>Tak</strong>. W przeciwnym wypadku pomijamy ten krok.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image20.png" alt="image20" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Skanowanie nośników ma na celu wyeliminowanie pobierania plików instalatora z Internetu. Potrzebne pakiety zamiast być pobierane będą dostarczone z zeskanowanych nośników.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image21.png" alt="image21" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny krok to pytanie o możliwość uczestnictwa w programie zbierania statystyk.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image22.png" alt="image22" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przed rozpoczęciem kopiowania plików mamy jeszcze możliwość wybrania zestawu usług jakie ma nam oferować system. My decydujemy się na wybór tylko podstawowych składników gdyż potrzebne nam usługi skonfigurujemy sami.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image23.png" alt="image23" style="display: block; margin-left: auto; margin-right: auto;" height="600" width="800" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Następuje proces instalacji i kopiowania niezbędnych pakietów.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image24.png" alt="image24" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnia decyzja wiąże się z instalacją <strong>programu rozruchowego GRUB</strong>. W tym momencie gdy na naszym komputerze mamy zainstalowane inne systemy operacyjne powinny one być uwidocznione. Program rozruchowy jest odpowiedzialny za wybór uruchamianego systemu.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Poprawnie przeprowadzona instalacja systemu kończy się komunikatem podsumowującym.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image26.png" alt="image26" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Przygotowanie sytemu przed instalacją serwera Samba4" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po poprawnej instalacji systemu warto na początek wykonać <strong>aktualizację całego systemu</strong>. Aby aktualizacja powiodła się jako użytkownik <strong>root</strong> wydajemy polecenie: <strong>apt-get update && apt-get upgrade</strong> Następuje aktualizacja systemu.</p>
<p style="margin-bottom: 0.0001pt;"> <img src="http://slow7.pl/images/stories/linux/debianad/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" height="233" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zanim przejdę dalej jeszcze jedno słowo wytłumaczenia. Wszystkie prezentowane przeze mnie czynności są wykonywane w symulowanym środowisku opierającym się na <strong>VirtualBox</strong>. Tak aby sobie ułatwić pracę z wirtualnymi maszynami warto zainstalować na każdym wirtualnym systemie zestaw narzędzi <strong>Guest Additions</strong>. O ile instalacja tych narzędzi w systemach z rodziny Windows nie nastręcza żadnych problemów (gdy maszyna wirtualna jest uruchomiona z menu wybieramy <strong>Devices</strong> i następnie <strong>Insert Guest Additions CD Image</strong>, po tej operacji powinien pojawić się instalator dodatku, który instalujemy jak każdy inny program) to już w systemach pokroju Linux sprawa wygląda bardzo różnie. Tak więc jakbyś czytelniku sam chciał przeprowadzić wszystkie opisane czynności zainstalowanie dodatku <strong>Guest Additions </strong>wykonajwg. punktów poniżej:</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">1. zaloguj się jako <strong>root</strong>, bądź włącz konsolę z uprawnieniami administratora,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><span>2. zainstaluj pakiety <strong>build-essential module-assistant</strong> (polecenie: <strong>apt-get install build-essential module-assistant</strong>);</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">3. wydaj polecenie: <strong>m-a prepare</strong>,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><span>4. kliknij <strong>Install Guest Additions</strong> z menu <strong>Devices</strong> menu, </span></p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">5. wydaj polecenie: <strong>sh /media/cdrom/VBoxLinuxAdditions.run </strong>(pamiętaj, że ścieżka może się różnić)</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejnym nieudogodnieniem z którym możemy się spotkać to jest niemożliwość uruchomienia danego polecenia z <strong>uprawnieniami administratora</strong> z konta które takowych uprawnień nie posiada. Przykład poniżej - z konta <strong>luk</strong> zostało uruchomione polecenie nakazujące aktualizację systemu, lecz polecenie to zostaje przerwane komunikatem: <strong>luk nie występuje w pliku sudoers. Ten incydent zostanie zgłoszony</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" height="199" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby możliwe było wykonanie poleceń z podwyższonymi uprawnieniami należy konto <strong>luk</strong> dodać do <strong>pliku sudoers</strong>. Aby dodać użytkownika do <strong>pliku sudoers</strong> należy:</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">1. zalogować się na konto <strong>root'a</strong>,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">2. włączyć edycję pliku wydając polecenie: <strong>gedit /etc/sudoers </strong><span>bądź<strong> nano /etc/sudoers</strong> (wszystko zależy od naszych preferencji edytora),</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><span>3. w sekcji: <strong># User privilege specificationroot</strong> dodać wpis: <strong><nazwa_konta> ALL=(ALL:ALL) ALL</strong> czyli w moim przypadku: <strong>luk ALL=(ALL:ALL) ALL</strong></span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" height="583" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zapisujemy plik. Od teraz powinno wszystko działać jak należy i jak widać poniżej tak jest.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" height="264" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Chwilkę temu wspomniałem o edytorze zawartości plików. Linux jest systemem w którym edycję plików możemy przeprowadzać za pomocą wielu narzędzi a że edycję plików będziemy przeprowadzać bardzo często ważne jest aby wybrać edytor, który będzie dla nas wygodny. Na samym początku można spróbować korzystać z edytorów dostępnych wraz z systemem czyli <strong>gedit</strong> bądź <strong>nano</strong>. Oczywiście możliwa jest instalacja produktów alternatywnych. Bardzo często wykorzystywanym edytorem jest pakiet <strong>Midnight Commander</strong>. Pakiet ten tak naprawdę zainstaluje menadżer plików lecz także edytor tekstowy. Aby zainstalować aplikację wydaj polecenie: <strong>apt-get install mc</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Od tej pory możemy korzystać z menadżera plików (aż się łezka kręci, jakie to podobne do Norton Commander) lecz także edytora zawartości plików.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image31.png" alt="image31" style="display: block; margin-left: auto; margin-right: auto;" height="589" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Edycja plików sprowadza się do wykonania jeszcze jednego ustawienia. Poniżej przedstawiono zrzut ekranu w którym edycja pliku następuje za pomocą edytora <strong>nano</strong> (edytor ustawiony jako domyślny).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" height="548" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby zmienić ustawienie domyślnie wykorzystywanego edytora należy wydać polecenie: <strong>update-alternatives --config editor</strong> a następnie podać numer przypisany do edytora, którego chcemy używać (w naszym przypadku edytor <strong>mcedit</strong> ma przypisany numer 2).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" height="290" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Od tej pory <strong>mcedit</strong> będzie wykorzystywany jako domyślny edytor.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" height="571" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">OK mamy przygotowane środowisko do zainstalowania serwera Samba oraz dokonaliśmy niezbędnych ustawień komputera do pełnienia roli kontrolera domeny. Zanim przejdziemy dalej jeszcze chwilkę się zatrzymamy i dopowiemy parę słów, tak aby wszystko było jasne.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Pierwszą sprawą jest użyta topologia sieci i przyjęta adresacja. Drugą zaś osobną kwestią jest lista usług jakie będziemy chcieli uruchomić na serwerze. Myślę, że wszystkie wątpliwości rozwieje poniższy rysunek.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image35.png" alt="image35" style="display: block; margin-left: auto; margin-right: auto;" height="576" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc analizując powyższy schemat dochodzimy do wniosku, że czeka nas trochę roboty, gdyż oprócz konfiguracji i instalacji samej Samby będziemy musieli uruchomić i skonfigurować usługę DNS i DHCP oraz włączyć przekazywanie pakietów pomiędzy dwoma sieciami (NAT). Serwer jest zaopatrzony w dwie karty sieciowe i stanowi bramę dla sieci 10.0.0.0/24.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby móc przystąpić do instalacji Samby należy zainstalować dodatkowe funkcje i pakiety. Do najważniejszych z nich należą:</p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>python-dev</strong> - rozszerzenie interpretera języka Python,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libacl1-dev</strong> - pakiet zawiera biblioteki i pliki nagłówkowe potrzebne do tworzenia programów,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>resolvconf</strong> - pakiet wspomaga wymianę informacji oraz służy do utrzymywania aktualności informacji systemu o serwerach nazw,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libldap2-dev</strong> - OpenLDAP, implementacja protokołu LDAP, protokół przeznaczony do korzystania z usług katalogowych,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>build-essential</strong> - pakiet jest wymagany do budowania pakietów Debiana,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>libgnutls-dev</span></strong><span> - biblioteka, która implementuje protokół Transport Layer Security (TLS) 1.0 oraz Secure Sockets Layer (SSL) 3.0,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>pkg-config</strong> - pakiet, który pozwala na kompilację i konsolidację bibliotek,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>cups</span></strong><span> - Common UNIX Printing System (CUPS(tm)) - serwer wydruku,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libcups2-dev</strong> - wspomaga serwer wydruku CUPS,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>krb5-user</strong> - implementacja protokołu Kerberos. Protokół ten odpowiedzialny jest za uwierzytelnienie (weryfikacja tożsamości) w domenach Windows,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>docbook-xsl</strong> - arkuszy stylów XSL,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>attr</strong> - narzędzia do obsługi systemu plików,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libbsd-dev</strong> - funkcje użytkowe systemów BSD,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>python-dnspython</strong> - zestaw narzędzi DNS dla Pythona. Pakiet obsługuje prawie wszystkie typy rekordów. Może być używany do tworzenia zapytań, transferów strefy i dynamicznych aktualizacji,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libattr1-dev</strong> - zawiera biblioteki i pliki nagłówkowe potrzebne do działania programów,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>git</strong> - system kontroli wersji, który śledzi wszystkie zmiany dokonywane na pliku (lub plikach) i umożliwia przywołanie dowolnej wcześniejszej wersji,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>gdb</strong> - GDB to debuger plików źródłowych, pozwalający na zatrzymanie programu w konkretnym miejscu, wyświetlanie wartości zmiennych oraz określenie gdzie wystąpił błąd. Debuger współpracuje z programami napisanymi w językach C, C++, Fortran, Modula 2 i Java,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>xsltproc</strong> - pakiet umożliwia konwersję plików XML na inne, dowolne formaty takie jak: HTML, zwykły tekst itp.,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libsasl2-dev</strong> - pakiet umożliwia wykorzystanie metody SASL (Simple Authentication Security Layer) celem uwierzytelnienai użytkownika,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libaio-dev</strong> - biblioteka wykorzystywana przy korzystaniu z baz danych,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>isc-dhcp-server</span></strong><span> - pakiet instaluje serwer DHCP.</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>acl</strong> – pakiet niezbędny do manipulowania listami kontroli dostępu,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libreadline-dev</strong> - biblioteki GNU obsługujące interfejs użytkownika,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>valgrind</strong> - aplikacja na licencji GPL, narzędzie, które wspomaga zarządzanie pamięcią,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>ldap-utils</strong> - pakiet zawiera narzędzia pakietu OpenLDAP (Lightweight Directory Access Protocol). Narzędzia te pozwalają uzyskać dostęp do lokalnego lub zdalnego serwera LDAP,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>ntp</strong> - implementacja protokołu synchronizacji czasu.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc aby zainstalować wszystkie powyższe pakiety (i jeszcze parę dodatkowych) wydaj polecenie: <strong>apt-get install python-dev autoconf pkg-config libcups2-dev git build-essential xsltproc cups krb5-user docbook-xsl libsasl2-dev libacl1-dev libgnutls-dev libattr1-dev python-dnspython libreadline-dev libbsd-dev libldap2-dev libblkid-dev valgrind attr libpopt-dev acl gdb libaio-dev libpam-dev resolvconf ldap-utils ntp isc-dhcp-server</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Wydanie polecenia spowoduje instalację dodatkowych aplikacji i komponentów (CUPS, DHCP, Kerberos), bibliotek niezbędnych do przeprowadzenia komplikacji Samby a także zostaną zainstalowane wszystkie pakiety zależne (pakiety, które są wymagane aby aplikacje działały prawidłowo).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Proces instalacji powinien przebiec bez żadnych komplikacji, jedyne co będzie trzeba podać to informacje, które są niezbędne do implementacji mechanizmu Kerberos. Tak więc w pierwszym oknie podajemy <strong>nazwę domeny</strong> (koniecznie wielkie litery).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Drugie okno to adres IP serwera (bądź serwerów), wskazujemy na komputer lokalny a więc wpisanym adresem będzie adres 127.0.0.1 (można zamiast adresu IP zdecydować się na zdefiniowaną nazwę hosta – w naszym scenariuszu należałoby by wpisać: <strong>debian</strong>).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">W trzecim ostatnim oknie również należy użyć adresu IP wskazującego na komputer lokalny (również możemy wykorzystać nazwę hosta).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image38.png" alt="image38" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Serwer Samba a także usługa Active Directory korzysta z pewnych funkcji systemu <strong>plików ext4</strong>. Aby przejść dalej należy się upewnić, że funkcje te są włączone (system instalowaliśmy z opcjami domyślnymi a więc funkcje te powinny być skonfigurowane poprawnie). <span>Tak więc wydaj polecenie: <strong>grep CONFIG_EXT4_FS /boot/config-`uname -r`</strong></span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" height="284" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wydaniu polecenia powinniśmy uzyskać dane takie jak na rysunku powyżej. Poszczególne wpisy informują nas o:</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">1 - system plików ext4 działa jako moduł,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">2 - obsługiwana jest funkcja xattr (rozszerzone atrybuty pliku),</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">3 - obsługiwane są listy kontroli dostępu (posix_acl),</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">4 - obsługa mechanizmów zabezpieczeń.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Fakt włączenia funkcji możemy również sprawdzić poprzez ręczny podgląd pliku <strong>config-<wersja_systemu_linux></strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" height="543" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejnym krokiem, który musimy wykonać jest wprowadzenie zmian w pliku <strong>fstab</strong>, plik ten jest odpowiedzialny m.in. za konfigurację systemu plików ext4. Warto nadmienić, że nieprawidłowo przeprowadzona edycja pliku może doprowadzić do nie uruchomienia się systemu. Tak więc aby zabezpieczyć się przed ewentualnymi problemami za pomocą polecenia <strong>cp</strong> wykonujemy kopie pliku – polecenie: <strong>cp -pR /etc/fstab /etc/fstab_backup</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image41.png" alt="image41" style="display: block; margin-left: auto; margin-right: auto;" height="550" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wykonaniu kopii pliku przechodzimy do jego edycji. Wprowadzone zmiany włączą funkcje systemu plików ext4, które są potrzebne aby serwer Samba działał prawidłowo (funkcja xattr oraz listy kontroli dostępu). Edycja pliku sprowadza się do dodania wpisu: <strong>user_xattr,acl,barrier=1</strong> przy wpisie każdej z partycji (w scenariuszu został użyta tylko jedna partycja).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" height="468" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po przygotowaniu systemu plików czas aby skonfigurować interfejsy sieciowe komputera. Przedstawiony kilka rysunków wyżej schemat naszej testowej sieci ułatwi nam to zadanie. Jak widać po rysunku interfejs <strong>eth1</strong> jest interfejsem, który ma połączenie z siecią Internet i ten interfejs domyślnie skonfigurowany jest do korzystania z serwera DHCP. Ustawienie to pozostawiamy bez zmian. Stały adres IP 192.168.0.11 jest przyznawany zawsze dzięki rezerwacji tegoż adresu w puli serwera DHCP (powiązanie adresu IP z adresem MAC interfejsu eth1).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Odrębną sprawą jest już przyjęta adresacja interfejsu <strong>eth0</strong>. Adresację tą wykonujemy <strong>statycznie</strong> czyli sami powiążemy niezbędne adresy IP z interfejsem <strong>eth0</strong>. Jak można zauważyć poniżej po wydaniu polecenia: <strong>ifconfig eth0 </strong>żaden adres IPv4 nie został przyznany interfejsowi.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image43.png" alt="image43" style="display: block; margin-left: auto; margin-right: auto;" height="352" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby zmiana interfejsu była stała, należy odpowiednie dane wprowadzić do pliku <strong>/etc/network/interfaces</strong> odpowiedzialnego za konfigurację interfejsów sieciowych komputera. Wprowadzone zmiany zostały ujęte na rysunku poniżej.</p>
<p class="contentpane" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: courier new,courier;">auto eth0<br />iface eth0 inet static<br />address 10.0.0.2<br />netmask 255.255.255.0<br />dns-search firma.local<br />dns-domain firma.local<br />dns-nameservers 10.0.0.2</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image44.png" alt="image44" style="display: block; margin-left: auto; margin-right: auto;" height="530" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Wpisy te tworzą statyczny interfejs sieciowy <strong>eth0</strong> z adresem IP 10.0.0.2 i maską 255.255.255.0 oraz konfigurują domenę. Funkcję serwera DNS będzie pełnił serwer zainstalowany lokalnie wraz z instalacją Samby.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wprowadzeniu zmian i ponownym uruchomieniu komputera (można zamiast restartować wydać polecenie: <strong>/etc/init.d/networking restart</strong>) ponowne wydanie polecenia: <strong>ifconfig eth0 </strong>uwidoczni wprowadzone zmiany. Jak widać poniżej interfejs <strong>eth0</strong> został skonfigurowany poprawnie i działa prawidłowo.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image45.png" alt="image45" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejną czynnością jest konfiguracja serwera <strong>czasu NTP</strong> (ang. Network Time Protocol). Odpowiednie pakiety zostały zainstalowane wcześniej. Usługa czasu ma znaczenie krytyczne podczas działania serwera Samba. Nasz komputer po konfiguracji dodatkowo będzie pełnił rolę <strong>serwera czasu</strong> dla komputerów znajdujących się w naszej sieci. Cała konfiguracja sprowadza się do dopisania dwóch dodatkowych wierszy do pliku konfigurującego serwer. Zmiany dokonujemy w pliku <strong>/etc/ntp.conf</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: 'Courier New';">ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/<br />restrict default mssntp</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image46.png" alt="image46" style="display: block; margin-left: auto; margin-right: auto;" height="530" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Sprawdzenie statusu serwera NTP możemy dokonać po wpisaniu polecenia: <strong>service ntp status</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image47.png" alt="image47" style="display: block; margin-left: auto; margin-right: auto;" height="145" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Dodatkowo sprawdzenie serwera NTP dokonamy na kliencie za pomocą programu <strong>NTPTool</strong>. Jak widać poniżej po wpisaniu adresu naszego serwera i wysłaniu zapytania, serwer NTP odsyła nam odpowiedź.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image48.png" alt="image48" style="display: block; margin-left: auto; margin-right: auto;" height="480" width="644" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">i dokonamy przechwycenia pakietów</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" height="577" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Jak widać powyżej wszystko jest w porządku. Uważnego czytelnika może zaabsorbować fakt różnicy czasu (dokładnie 1 godzina) pomiędzy wynikami programu <strong>NTPTool</strong> a przechwyconymi pakietami. Stało się tak ponieważ serwer przesyła czas UTC (zob. rysunek przechwycone pakiety) a w systemie strefa czasowa jest ustawiona jako UTC+01:00 (zob. wyniki reprezentowane przez program <strong>NTPTool)</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Nasz komputer oprócz pełnienia roli serwera czasu będzie pełnił jeszcze jedną dodatkową funkcję a mianowicie będzie również <strong>serwerem DHCP.</strong> Oczywiście jeżeli w swojej sieci masz już serwer DHCP to krok ten możesz pominąć oraz podczas instalacji dodatkowych pakietów zrezygnuj z pakietu: <strong>isc-dhcp-server</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Konfiguracja <strong>serwera DHCP</strong> sprowadza się do wprowadzenia odpowiednich informacji do pliku <strong>/etc/dhcp/dhcpd.conf </strong>odpowiedzialnego za działanie serwera DHCP. Wprowadzone informacje to m.in.:</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">1 - nazwa domeny,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">2 - adresy serwerów DNS,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">3 - serwer NetBIOS,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">4 - serwer NTP,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">5 - czas dzierżawy adresu IP w sekundach,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">6 - obsługiwana sieć,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">7 - pula adresów IP serwera DHCP,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">8 - adres IP routera/bramy.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" height="485" width="700" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><span style="font-family: courier new,courier;">ddns-updates on; <br />option domain-name "firma.local"; <br />option domain-name-servers 10.0.0.2, 10.0.0.2; <br />option netbios-name-servers 10.0.0.2; <br />option ntp-servers 10.0.0.2; <br />default-lease-time 600; <br />max-lease-time 7200; <br />log-facility local7; <br />subnet 10.0.0.0 <br />netmask 255.255.255.0 { <br />range 10.0.0.10 10.0.0.100; <br />option routers 10.0.0.2; }</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Dodatkowo w pliku <strong>/etc/default/isc-dhcp-server</strong> w sekcji <strong>INTERFACES</strong> należy określić interfejs sieciowy, który ma zostać powiązany z <strong>serwerem DHCP</strong> (ten interfejs będzie obsługiwany prze serwer DHCP).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" height="485" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wprowadzeniu wszystkich zmian przyszedł czas na uruchomienie i przetestowanie wprowadzonych ustawień serwera DHCP. Serwer uruchamiamy poleceniem: <strong>/etc/init.d/isc-dhcp-server start</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" height="224" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Status serwera sprawdzamy poleceniem: <strong>/etc/init.d/isc-dhcp-server status</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" height="218" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Serwer DHCP pracuje a więc podłączmy klienta. Klient został podłączony jak widać poniżej wszystkie dane konfigurujące interfejs sieciowy zostały prawidłowo klientowi dostarczone. Klient otrzymał pierwszy adres IP z puli czyli 10.0.0.10 z maską 255.255.255.0 i komunikacja z serwerem jest zapewniona.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" height="400" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przechwycony ruch pakietów pomiędzy klientem a serwerem również jest prawidłowy.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image55.png" alt="image55" style="display: block; margin-left: auto; margin-right: auto;" height="578" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Stan dzierżaw adresów IP na serwerze DHCP można sprawdzić za pomocą polecenia: <strong>more /var/lib/dhcp/dhcpd.leases</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image56.png" alt="image56" style="display: block; margin-left: auto; margin-right: auto;" height="534" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zakończyliśmy wszystkie czynności przygotowawcze a więc najwyższy czas aby wykonać instalację serwera Samba 4.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Instalacja Samba4" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Do instalacji serwera wykorzystamy repozytoria git (za przeprowadzenie tej operacji będzie odpowiedzialny pakiet git, który zainstalowaliśmy w fazie przygotowania systemu).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc pierwszą naszą czynnością będzie sklonowanie stabilnej wersji Samby 4 z oficjalnej strony projektu a następnie kompilacja oprogramowania. Tu troszeczkę pójdziemy dłuższą drogą ponieważ oczywiście możliwa jest bezpośrednia instalacja pakietów Samby lecz dzięki wybraniu tej metody możemy przeprowadzić dodatkowe testy przed instalacyjne tak aby mieć pewność, że po instalacji będzie nam wszystko działać.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Klonowanie przeprowadzamy za pomocą polecenia: <strong>git clone -b <wersja_serwera_Samba> git://git.sama.org/samba.git <katalog></strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnią aktualną wersję serwera sprawdzisz na stronie <a href="https://git.samba.org/">https://git.samba.org/</a> wybierając <strong>samba.git</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image57.png" alt="image57" style="display: block; margin-left: auto; margin-right: auto;" height="465" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc chcąc sklonować Sambę z oficjalnego repozytorium wydaj polecenie: <strong>git clone -b samba-4.1.13 git://git.samba.org/samba.git samba4</strong> bądź <strong>git clone -b v4-1-13-stable git://repo.or.cz/samba.git samba4</strong> <strong>Repo.or.cz</strong> jest serwisem, który oferują podobną funkcjonalność, co samba.org (adres przydatny w przypadku awarii).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wydaniu polecenia następuje kopiowanie serwera do katalogu <strong>samba4</strong> z zdalnej lokacji. Szybkość wykonywania polecenia zależy od prędkości naszego łącza internetowego.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image58.png" alt="image58" style="display: block; margin-left: auto; margin-right: auto;" height="381" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wykonaniu kopiowanie przyszedł czas by wykonać kompilację oprogramowania. Kompilację wykonujemy za pomocą polecenia: <strong>./configure --enable-debug --enable-selftest</strong> Dodatkowy parametr <strong>selftest</strong> spowoduje dodanie opcji wykonania testu przed próbą podjęcia instalacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image59.png" alt="image59" style="display: block; margin-left: auto; margin-right: auto;" height="274" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wydaniu polecenia następuje proces kompilacji, który uzależniony jest od posiadanego przez nasz sprzętu. Proces ten powinien zakończyć się wypisaniem komunikatu o pozytywnym zakończeniu operacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image60.png" alt="image60" style="display: block; margin-left: auto; margin-right: auto;" height="574" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><img src="http://slow7.pl/images/stories/linux/debianad/image61.png" alt="image61" style="display: block; margin-left: auto; margin-right: auto;" height="835" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po prawidłowo zakończonym procesie kompilacji tak naprawdę moglibyśmy już przejść do instalacji serwera Samba ale zanim to zrobimy wykonamy jeszcze jeden test, który przeprowadzi weryfikację środowiska w którym będzie pracował serwer Samba. Aby wykonać test wydaj polecenie: <strong>make quicktest</strong> Polecenie uruchomi szereg procedur sprawdzających, które powinny zakończyć się komunikatem: <strong>ALL OK</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image62.png" alt="image62" style="display: block; margin-left: auto; margin-right: auto;" height="518" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Gdyby z jakiś powodów test zakończył się niepowodzeniem to podsumowanie testu możesz przejrzeć tutaj: .<strong>st/summary</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnim naszym krokiem jest instalacja serwera, instalację rozpoczniemy po wydaniu polecenia: <strong>make install</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" height="134" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Po kliknięciu Enter rozpoczyna się proces instalacji.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image64.png" alt="image64" style="display: block; margin-left: auto; margin-right: auto;" height="885" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Serwer Samba 4 został zainstalowany poprawnie.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Gdyby z jakiś powodów niemożliwe było ściągnięcie repozytorium zawsze można posłużyć się innym sposobem a mianowicie wykorzystać do tego serwer FTP. Paczki wszystkich dystrybucji Samba znajdziemy np. pod adresem: <a href="http://ftp.samba.org/pub/samba/">http://ftp.samba.org/pub/samba/</a></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" height="465" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po odnalezieniu interesującej nas wersji (w naszym przypadku samba-4.1.13.tar.gz) przechodzimy do konsoli i wydajemy polecenie: <strong>wget http://ftp.samba.org/pub/samba/samba-4.1.13.tar.gz</strong> Po wydaniu polecenia następuje ściągnięcie pliku i zapisaniu go w bieżącym katalogu.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image66.png" alt="image66" style="display: block; margin-left: auto; margin-right: auto;" height="274" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Rozpakowanie pakietu dokonujemy za pomocą polecenia: <strong>tar zxvf <nazwa_ściągniętego_pliku></strong> czyli w naszym przypadku: <strong>tar zxvf samba-4.1.13.tar.gz</strong> Wszystkie pliki zostają zapisane do katalogu: <strong>samba-4.1.13</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image67.png" alt="image67" style="display: block; margin-left: auto; margin-right: auto;" height="274" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Proces instalacji kontynuujemy zgodnie z instrukcjami odnoszącymi się do procesu wykorzystującego repozytorium git.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po zakończonej sukcesem instalacji serwera Samba 4 przechodzimy do konfiguracji domeny.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Samba4 jako kontroler domeny" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Bardzo często będziemy odwoływali się do poleceń serwera Samba a więc aby móc polecenia związane z zarządzaniem serwerem wpisywać bezpośrednio w konsoli bez odwoływania się za każdym razem do ścieżki, katalog instalacji Samby dodamy do zmiennej <strong>PATH</strong>. Zmienna ta jest odpowiedzialna za ustawienia katalogów które będą przeszukiwane celem znalezienia wpisywanych komend/programów. Po wydaniu polecenia: <strong>echo $PATH</strong> możemy sprawdzić jakie aktualne katalogi są do tej zmiennej przypisane.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image68.png" alt="image68" style="display: block; margin-left: auto; margin-right: auto;" height="210" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Naszym celem jest dodanie dwóch katalogów instalacyjnych serwera Samba do zmiennej <strong>PATH</strong>: katalog <strong>/usr/local/samba/bin</strong> oraz katalog <strong>/usr/local/samba/sbin</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby po każdym zalogowaniu mieć ustawione konkretne zmienne środowiskowe, należy je umieścić w pliku <strong>~/.bash_profile</strong>. Zmienne te możemy po prostu wpisać do wyżej wymienionego pliku bądź wykorzystać do tego polecenie <strong>set</strong> (ustawienie zmiennej) oraz polecenie <strong>export</strong> (zapis zmiennej). Tak więc przypisanie dwóch interesujących nas katalogów do zmiennej PATH sprowadza się do wydania następujących poleceń:</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>set PATH=$PATH':/usr/local/samba/bin'<br />set PATH=$PATH':/usr/local/samba/sbin'<br />export PATH=/usr/local/samba/bin:$PATH >> ~/.bash_profile<br />export PATH=/usr/local/samba/sbin:$PATH >> ~/.bash_profil</span></strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image69.png" alt="image69" style="display: block; margin-left: auto; margin-right: auto;" height="303" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ponowne wydanie polecenia: <strong>echo $PATH</strong> uwidoczni wprowadzone zmiany.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Serwer Samba został zainstalowany pora aby nasz serwer wypromować do pełnienia roli kontrolera domeny <strong>firma.local</strong>. Aby zacząć cały proces wydajemy polecenie: <strong>samba-tool domain provision --realm=firma.local --domain=firma --adminpass='B@rdzotajnehaslo1' --server-role='domain controller'</strong> – polecenie <strong>samba-tool</strong> jest odpowiednikiem windowsowego polecenia <strong>dcpromo</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong>gdzie:</strong></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>domain provision </strong>-ozn. konfigurację domeny,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>realm </strong>- pełna nazwa domeny,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>domain</strong> - nazwa domeny,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>adminpass</strong> - hasło administratora domeny, hasło musi spełniać wymogi silnego hasła stawiane przez system Windows tj. min długość hasła 8 znaków + użycie wielkiej litery + użycie cyfry + użycie znaków specjalnych,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>server-role</strong> - rola serwera.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image70.png" alt="image70" style="display: block; margin-left: auto; margin-right: auto;" height="758" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Serwer od teraz chwili jest już prawie gotowy do pełnienia roli kontrolera domeny Active Directory. Pozostało nam do wykonani kilka czynności zanim serwer zostanie w pełni uruchomiony.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Pierwszą czynnością jest skopiowanie pliku <strong>krb5.conf</strong> wygenerowanego podczas promowania do roli serwera AD do katalogu <strong>/etc/</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kopiowanie pliku możemy zrealizować za pomocą polecenia: <strong>cp -pRf /usr/local/samba/private/krb5.conf /etc/</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image71.png" alt="image71" style="display: block; margin-left: auto; margin-right: auto;" height="573" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po skopiowaniu pliku należy do niego wprowadzić dane według poniższego schematu (zanim zaczniesz wprowadzać zmiany wykonaj kopię pliku - tak na wszelki wypadek) :</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: 'Courier New';">[libdefaults]<br /> default_realm = pełna_nazwa_domeny<br /> dns lookup_realm = false<br /> dns_lookup_kdc = true<br /> [realms] <br /> pełna_nazwa_domeny = { <br /> kdc = nazwa_komputera.pełna_nazwa_domeny<br /> admin_server = nazwa_komputera.pełna_nazwa_domeny<br /> default_domain = pełna_nazwa_domeny<br /> }</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image72.png" alt="image72" style="display: block; margin-left: auto; margin-right: auto;" height="500" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Drugą bardzo ważną zmianą jest skonfigurowanie serwera DNS tak aby wszystkie zapytania, które serwer nie może rozwiązać przekazywał dalej. W tym celu musimy przejść do edycji pliku <strong>/usr/local/samba/etc/smb.conf</strong> i w sekcji <strong>dns forwarder</strong> wpisać adres serwera DNS (w scenariuszu został użyty ogólnie dostępny serwer Google ale nic nie stoi na przeszkodzie aby wskazać na własny serwer DNS)</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image73.png" alt="image73" style="display: block; margin-left: auto; margin-right: auto;" height="522" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc po wszystkich trudach, przyszła pora aby uruchomić serwer i sprawdzić czy działa on prawidłowo. Uruchomimy serwer w trybie jednowątkowym. By serwer zaczął działać wydaj polecenie: <strong>samba -i -M single</strong> wydanie polecenia powinno skutkować otrzymaniem ekranu podobnego jak na poniższym zrzucie.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image74.png" alt="image74" style="display: block; margin-left: auto; margin-right: auto;" height="248" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Jak widać powyżej nie otrzymaliśmy żadnych komunikatów o błędach, serwer powinien działać prawidłowo ale (czy zawsze musi być jakieś ALE???) by mieć pewność przeprowadzimy dodatkową weryfikację.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kluczowym zagadnieniem świadczenia przez serwer usług opartych o Active Directory jest prawidłowe działanie serwera DNS tak więc proces sprawdzania zaczniemy właśnie od serwera DNS. Do zlokalizowania kontrolerów domeny usługa Active Directory używa rekordów SRV, krytyczne są rekordy, które pozwalają na zlokalizowanie komputerów, które świadczą usługi związane z obsługą protokołu LDAP i Kerberos. Aby możliwa była lokalizacja tych hostów odpowiednie rekordy SRV muszą zostać umieszczone w konfiguracji serwera DNS. Naszym celem będzie sprawdzenie czy wyżej wymienione rekordy istnieją.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby dokonać sprawdzenia rekordu usługi Kerberos wydaj polecenie: <strong>host -t SRV _kerberos._udp.firma.local</strong> Jak widać poniżej rekord taki istnieje a rozwiązana nazwa wskazuje na host <strong>debian.firma.local</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image75.png" alt="image75" style="display: block; margin-left: auto; margin-right: auto;" height="147" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby dokonać sprawdzenia rekordu usługi LDAP wydaj polecenie: <strong>host -t SRV _ldap._tcp.firma.local</strong> Jak widać poniżej rekord taki istnieje a rozwiązana nazwa wskazuje na host <strong>debian.firma.local</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image76.png" alt="image76" style="display: block; margin-left: auto; margin-right: auto;" height="147" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Dodatkowo możemy sprawdzić rozwiązywanie nazw serwisów dostępnych w Internecie.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image77.png" alt="image77" style="display: block; margin-left: auto; margin-right: auto;" height="181" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Sprawdzenie poprawności działania serwera LDAP możemy dokonać za pomocą polecenia: <strong>ldapsearch -x -h localhost -s base -D cn=administrator,cn=Users,dc=firma,dc=local -W</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong>gdzie:</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-x</strong> wykorzystanie protokołu Simple Authentication and Security Layer, SASL (protokół wykorzystywany celem udostępnienia zasobów katalogu w zależności od przydzielonych uprawnień)</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-h</strong> zdefiniowanie adresu hosta,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-s <zasięg></strong> parametr określa zasięg wyszukiwania. Zasięg może przybierać wartość <strong>base</strong>, <strong>one</strong> lub <strong>sub</strong>. Użyta wartość <strong>base</strong> określa wyszukiwanie podstawowe,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-D <szukana_nazwa/kontener></strong> określa poszukiwaną nazwę, szukany kontener,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-W</strong> włączenie monitu podania hasła.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wydaniu polecenia będziemy poproszeni o podanie hasła administratora domeny, podanie hasła spowoduje odszukanie i podanie informacji o kontenerze.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image78.png" alt="image78" style="display: block; margin-left: auto; margin-right: auto;" height="652" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Sprawdzanie poprawności udostępniania udziałów możemy dokonać za pomocą polecenia: <strong>/usr/local/samba/bin/smbclient -L localhost -U% </strong>Jak widać poniżej udziały zostały udostępnione prawidłowo.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image79.png" alt="image79" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">I ostatnim testem jakim wykonamy jest sprawdzenie dostępności serwera Kerberos. Dostępność sprawdzimy za pomocą polecenia: <strong>kinit administrator(małpa)FIRMA.LOCAL</strong> Po wywołaniu polecenia zostaniemy poproszeni o podanie hasła administratora domeny Active Directory. Po poprawnym podaniu hasła zostaniemy poinformowani o długości ważności naszego hasła.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image80.png" alt="image80" style="display: block; margin-left: auto; margin-right: auto;" height="178" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Instalacja kontrolera domeny przebiegła prawidłowo, nowo postawiony DC działa a przeprowadzone testy zakończyły się powodzeniem.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Zarządzanie kontrolerem domeny" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przyszła pora aby do naszej domeny podłączyć pierwszego klienta. Na komputerze, który stanie się częścią domeny przed samym dołączeniem do domeny warto sprawdzić czy wszystkie ustawienia sieciowe są prawidłowe i co najważniejsze czy jest zachowana komunikacja pomiędzy komputerami.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Jak widać poniżej wszystko wydaje się być ustawione prawidłowo.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image81.png" alt="image81" style="display: block; margin-left: auto; margin-right: auto;" height="823" width="677" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby dołączyć komputer do domeny w oknie <strong>System</strong> wybieramy <strong>Menedżer urządzeń</strong> i następnie na karcie <strong>Nazwa komputera</strong> klikamy na <strong>Zmień</strong>. W oknie <strong>Zmiany nazwy komputera/domeny</strong> w sekcji <strong>Członkostwo</strong> wybieramy <strong>Domena</strong> i następnie wypisujemy nazwę domeny.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image82.png" alt="image82" style="display: block; margin-left: auto; margin-right: auto;" height="400" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wpisaniu <strong>nazwy domeny</strong> i kliknięciu na <strong>OK</strong> celem włączenia komputera do domeny trzeba będzie podać dane uwierzytelniające użytkownika mającego prawo do wykonania tej operacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image83.png" alt="image83" style="display: block; margin-left: auto; margin-right: auto;" height="271" width="439" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wpisaniu hasła powinien pojawić się komunikat powitalny informujący nas o poprawnie przeprowadzonym procesie.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image84.png" alt="image84" style="display: block; margin-left: auto; margin-right: auto;" height="171" width="256" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wykonaniu restartu maszyny komputer staje się pełnoprawnym członkiem domeny <strong>firma.local</strong>. Celem weryfikacji ustawień komputera i sprawdzenia funkcjonalności domeny możemy zalogować się na konto użytkownika domeny (w naszym przypadku mamy aktywne tylko jedno konto a mianowicie konto administratora domeny i te konto wykorzystamy do logowania).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image85.png" alt="image85" style="display: block; margin-left: auto; margin-right: auto;" height="532" width="574" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Proces logowania przebiegł prawidłowo, na karcie <strong>System</strong> komputera możemy zweryfikować wprowadzone ustawienia.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image86.png" alt="image86" style="display: block; margin-left: auto; margin-right: auto;" height="507" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Weryfikację usługi Active Directory możemy przeprowadzić za pomocą programu <strong>AdExplorer</strong>, który to program jest zaawansowaną przeglądarką a także edytorem informacji zawartych w bazie Active Directory. Aplikacja jest darmowa i jest częścią pakietu <strong>Sysinternals</strong> - <a href="http://technet.microsoft.com/pl-pl/sysinternals/bb963907.aspx">http://technet.microsoft.com/pl-pl/sysinternals/bb963907.aspx</a></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image87.png" alt="image87" style="display: block; margin-left: auto; margin-right: auto;" height="506" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zarządzanie naszą domeną będziemy przeprowadzać za pomocą oprogramowania Microsoftu. Wybór padł na to oprogramowanie z jednej tylko przyczyny ponieważ tak jest znacznie wygodniej. Konfigurację domeny wykonamy z już przyłączonego komputera. Jak pewnie zauważyłeś czytelniku przyłączony komputer pracuje pod kontrolą systemu Windows 7, ten system niestety nie ma żadnych narzędzi, które by pozwalały na wyżej wymienioną konfigurację. Gdybyśmy do domeny podłączyli system serwerowy np. Windows Server 2008 to sprawa by była prostsza gdyż system ten już na starcie zawiera wiele narzędzi gotowych do natychmiastowego użycia . Na szczęście sytuacja nie jest beznadziejna bo z pomocą przychodzi nam Microsoft. Możliwe jest wykorzystanie systemu Windows 7 do zdalnej administracji serwerem AD trzeba tylko zaopatrzyć się w odpowiednia narzędzia a tak naprawdę trzeba tylko pobrać i zainstalować dodatkowe funkcje systemu Windows. Narzędzia administracji zdalnej serwera dla systemu Windows umożliwiają administratorom zarządzanie usługą Active Directory z poziomu komputera zdalnego. Narzędzia te dobieramy ze względu na zainstalowany system i do naszej dyspozycji przygotowane są następujące zestawy:</p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>Windows 7 - </span><a href="http://www.microsoft.com/pl-PL/download/details.aspx?id=7887">http://www.microsoft.com/pl-PL/download/details.aspx?id=7887</a></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>Windows Vista - </span><a href="http://www.microsoft.com/pl-PL/download/details.aspx?id=21090">http://www.microsoft.com/pl-PL/download/details.aspx?id=21090</a></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>Windows XP, Server 2003 - </span><a href="http://www.microsoft.com/pl-PL/download/details.aspx?id=6315">http://www.microsoft.com/pl-PL/download/details.aspx?id=6315</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po pobraniu odpowiedniej wersji oprogramowania przystępujemy do instalacji. Instalacja sprowadza się do zaakceptowania postanowień licencyjnych gdzie po akceptacji następuje kopiowanie plików.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image88.png" alt="image88" style="display: block; margin-left: auto; margin-right: auto;" height="396" width="561" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zainstalowane narzędzia powinny być dostępne w <strong>Narzędziach administracyjnych.</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image89.png" alt="image89" style="display: block; margin-left: auto; margin-right: auto;" height="420" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Gdyby tak się nie stało (rysunek powyżej) należy przejść do <strong>Panelu Sterowania</strong> i dalej wybrać <strong>Programy i funkcje</strong> a następnie <strong>Włącz lub wyłącz funkcje systemu Windows</strong>. Z dostępnej listy wybieramy te narzędzia, które nas interesują – gałąź <strong>Narzędzia administracji zdalnej serwera</strong> (najważniejsze są te funkcje, które dotyczą usługi Active Directory).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image90.png" alt="image90" style="display: block; margin-left: auto; margin-right: auto;" height="485" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wybraniu funkcji odpowiednie skróty zostaną umieszczone w <strong>Narzędziach administracyjnych.</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image91.png" alt="image91" style="display: block; margin-left: auto; margin-right: auto;" height="578" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zainstalowane narzędzia dostępne są zarówno z poziomu narzędzi administracyjnych jak i konsoli MMC. Poniżej na rysunku pokazane narzędzia: <strong>Użytkownicy i komputery usługi Active Directory</strong>; <strong>Menedżer DNS</strong>; <strong>Zarządzanie zasadami grupy</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image92.png" alt="image92" style="display: block; margin-left: auto; margin-right: auto;" height="492" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc spróbujmy wykorzystać zainstalowane narzędzia do przeprowadzenia typowej czynności jaką jest założenie nowego konta dla użytkownika. Po wybraniu <strong>Użytkownicy i komputery usługi Active Directory </strong>i kliknięciu kontenera <strong>Users </strong>inastępnym wybraniu z menu kontekstowego <strong>Nowy</strong> – <strong>Użytkownik</strong> możemy przeprowadzić proces dodania nowego użytkownika.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image93.png" alt="image93" style="display: block; margin-left: auto; margin-right: auto;" height="384" width="451" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po uzupełnieniu wszystkich danych i ustaleniu hasła (hasło przynajmniej 7 liter i hasło musi być złożone z małych liter + dużych liter + cyfr + znaków specjalnych) będzie można utworzyć konto. W przypadku nie spełnienia warunku złożoności hasła konta nie będzie można utworzyć.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image94.png" alt="image94" style="display: block; margin-left: auto; margin-right: auto;" height="399" width="538" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po utworzeniu konta oczywiście możliwe jest wykorzystanie konta do uzyskania dostępu do komputera. Jak widać poniżej udało nam się uzyskać dostęp do konta, które należy do Jana Kowalskiego.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><img src="http://slow7.pl/images/stories/linux/debianad/image95.png" alt="image95" style="display: block; margin-left: auto; margin-right: auto;" height="530" width="547" /> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Więcej informacji na temat kont użytkowników oraz grup znajdziesz w poniższych artykułach:</p>
<ul>
<li style="padding-left: 60px;"><a href="http://slow7.pl/item/86-usluga-katalogowa-active-directory-zarzadzanie">http://slow7.pl/item/86-usluga-katalogowa-active-directory-zarzadzanie</a></li>
<li style="padding-left: 60px;"><a href="http://slow7.pl/item/85-czym-jest-grupa-w-usludze-activedirectory-tworzenie-modyfikacja-i-zarzadzanie">http://slow7.pl/item/85-czym-jest-grupa-w-usludze-activedirectory-tworzenie-modyfikacja-i-zarzadzanie</a></li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;">Oczywiście dodanie konta użytkownika do bazy AD można zrealizować bez pomocy oprogramowania Microsoftu tylko bezpośrednio na serwerze Samba.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Dodanie nowego konta można zrealizować za pomocą następującego polecenia: <strong>samba-tool user add tadnow tajnehaslo --given-name=Tadeusz --surname=Nowak </strong>Wydanie komendy powinno spowodować utworzenie konta <strong>tadnow</strong> z hasłem <strong>tajnehaslo</strong> i dodatkowo zostało zdefiniowane pole <strong>imię</strong> oraz <strong>nazwisko</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image96.png" alt="image96" style="display: block; margin-left: auto; margin-right: auto;" height="245" width="683" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Jak można zauważyć po powyższym zrzucie, że jednak operacja dodania konta zakończyła się niepowodzeniem (stąd w apapicie powyżej słowo powinno). Nowe konto nie zostało utworzone ponieważ wybrane hasło nie spełnia wymogów silnego hasła.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Reguły tworzenia haseł sprawdzimy po wydaniu polecenia: </span><strong>samba-tool domain passwordsettings show</strong> Jak widać poniżej za hasło silne jest uznawane hasło przynajmniej 7 literowe i zawierające małe litery + duże litery + liczby +znaki specjalne (opcja complexity ustawiona na on).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image97.png" alt="image97" style="display: block; margin-left: auto; margin-right: auto;" height="281" width="683" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Po wyłączeniu opcji wymuszającej utworzenie złożonego hasła za pomocą polecenia: </span><strong>samba-tool domain passwordsettings set --complexity=off</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image98.png" alt="image98" style="display: block; margin-left: auto; margin-right: auto;" height="353" width="692" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ponowne wydanie komendy nakazującej utworzenie konta <strong>tadnow</strong> kończy się sukcesem.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image99.png" alt="image99" style="display: block; margin-left: auto; margin-right: auto;" height="173" width="683" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Dodatkowe opcje związane z ustaleniem zasad tworzonych haseł możemy zdefiniować za pomocą następujących przełączników:</span></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>Wymagania co do złożoności hasła (domyślnie on) - p</span>assword complexity: <strong>--complexity=<on/off></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Przechowywania haseł w postaci zwykłego tekstu - store plaintext passwords: <strong>--store-plaintext=<on/off></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Wymuszaj tworzenie historii haseł - password history length: <strong>--history-length=<wartość></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Minimalna długość hasła - minimum password length: <strong>--min-pwd-length=<wartość></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Minimalny okres ważności hasła (dni) -minimum password age (days): <strong>--min-pwd-age=<wartość></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Maksymalny okres ważności hasła (dni) - maximum password age (days): <strong>-max-pwd-age=<wartość></strong></li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Dodatkowe dostępne parametry związane z tworzeniem i definiowaniem nowego konta użytkownika pokazano na poniższym zrzucie.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image100.png" alt="image100" style="display: block; margin-left: auto; margin-right: auto;" height="882" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po utworzeniu konta użytkownika można przeprowadzić weryfikację wykonanych operacji poprzez wykonanie próby logowania do domeny. Logowanie zakończyło się sukcesem (rysunek niżej).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image101.png" alt="image101" style="display: block; margin-left: auto; margin-right: auto;" height="593" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zarządzanie sporą ilością użytkowników staje się bardzie efektywne gdy skorzystamy z zasad grup. O wiele łatwiej jest przypisać konkretne zasady do grupy w której znajdują się użytkownicy (robimy to tylko raz) niż do każdego użytkownika z osobna. Dlatego warto jest łączyć konta użytkowników o podobnych uprawnieniach i wymaganiach w grupy. Utworzenie grupy zrealizujemy za pomocą polecenia: <strong>samba-tool group add biuro --group-scope=Domain --group-type=Security</strong> Polecenie tworzy grupę <strong>biuro</strong>, grupa jest typu <strong>zabezpieczenia</strong> a zakres grupy obejmuje <strong>domenę</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image102.png" alt="image102" style="display: block; margin-left: auto; margin-right: auto;" height="136" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Do sprawdzenia poprawności utworzenia danej grupy możemy również wykorzystać narzędzia windowsowe.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image103.png" alt="image103" style="display: block; margin-left: auto; margin-right: auto;" height="509" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Weryfikację utworzonych użytkowników możemy dokonać wydając polecenie: <strong>samba-tool user list</strong> i analogicznie utworzonych grup: <strong>samba-tool group list</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image104.png" alt="image104" style="display: block; margin-left: auto; margin-right: auto;" height="204" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Sprawdzenie członków danej grupy wykonujemy za pomocą polecenia: <strong>samba-tool group listmembers <nazwa_grupy></strong> Poniżej sprawdzenie członków grupy <strong>biuro</strong> oraz <strong>domain admins</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image105.png" alt="image105" style="display: block; margin-left: auto; margin-right: auto;" height="167" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Jak widać powyżej do grupy <strong>biuro</strong> nie jest przypisany żaden użytkownik natomiast w grupie <strong>domain admins</strong> znajduje się jeden użytkownik <strong>administrator</strong>. Przypisanie użytkownika do danej grupy dokonujemy za pomocą komendy: <strong>samba-tool group addmembers <nazwa_grupy> <użykownik></strong> tak więc aby dodać użytkownika <strong>tadnow</strong> do grupy <strong>biuro</strong> wydaj polecenie: <strong>samba-tool group addmembers biuro tadnow </strong>Po dodaniu użytkownika do grupy dokonujemy weryfikacji wykonanej operacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image106.png" alt="image106" style="display: block; margin-left: auto; margin-right: auto;" height="169" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przynależność danego użytkownika do grupy możemy również zweryfikować za pomocą przystawki <strong>Użytkownicy i komputery usługi Active Directory</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image107.png" alt="image107" style="display: block; margin-left: auto; margin-right: auto;" height="539" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnią naszą czynnością jest włączenie funkcji translacji adresów pomiędzy siecią LAN (10.0.0.0/24) a siecią mającą dostęp do Internetu (192.168.0.0/24). Włączenie funkcji pozwoli na uzyskanie dostępu do sieci Internet dla komputerów znajdujących się po stronie sieci lokalnej.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Usługę przekazywania pakietów pomiędzy sieciami włączymy wydając następujące polecenia:</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>sysctl -w net.ipv4.conf.all.forwarding=1<br />iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE<br />iptables -A FORWARD -s 10.0.0.0/24 -i eth0 -j ACCEPT</span></strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong>gdzie:</strong></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;">eth0 – interfejs po stronie sieci LAN,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;">eth1 – interfejs z dostepem do Internetu,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;">10.0.0.0/24 0 - sieć lokalna, która ma uzyskać dostęp do Internetu.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image108.png" alt="image108" style="display: block; margin-left: auto; margin-right: auto;" height="249" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wprowadzeniu wszystkich poleceń komputery znajdujące się w sieci 10.0.0.0/24 uzyskują dostęp do sieci Internet.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image109.png" alt="image109" style="display: block; margin-left: auto; margin-right: auto;" height="448" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">I na tym etapie chciałbym zakończyć swój wpis. Przedstawiony przeze mnie sposób konfiguracji serwera Samba 4 do korzystania z usługi Active Directory można oczywiście rozwinąć o dodatkową konfigurację, bo serwer Samba to nie tylko użytkownicy, grupy czy jednostki organizacyjne ale to też usługi współdzielenia plików czy usługi drukowania. Ale te dodatkowe usługi to już temat na kolejny wpis.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: center;">{mp4}debian/debian_ad{/mp4}</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><em><strong>BIBLIOGRAFIA</strong></em></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="https://git.wiki.kernel.org/index.php/GitHosting">https://git.wiki.kernel.org/index.php/GitHosting</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://repo.or.cz/w/Samba.git">http://repo.or.cz/w/Samba.git</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://ubuntuforums.org/showthread.php?t=2146198">http://ubuntuforums.org/showthread.php?t=2146198</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://crunchbang.org/forums/viewtopic.php?pid=400466">http://crunchbang.org/forums/viewtopic.php?pid=400466</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="https://www.youtube.com/watch?v=OVrRK8oACBI">https://www.youtube.com/watch?v=OVrRK8oACBI</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://www.samba.org.pl/2013/09/active-directory-na-linuxie-kompletny.html">http://www.samba.org.pl/2013/09/active-directory-na-linuxie-kompletny.html</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="https://wiki.samba.org/index.php/Samba_4/OS_Requirements">https://wiki.samba.org/index.php/Samba_4/OS_Requirements</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://jakilinux.org/linux/debian/instalacja-i-konfiguracja-domowego-serwera-plikow/">http://jakilinux.org/linux/debian/instalacja-i-konfiguracja-domowego-serwera-plikow/</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://www.samba.org.pl/2013/03/samba4-jako-podstawowy-kontroler-domeny.html">http://www.samba.org.pl/2013/03/samba4-jako-podstawowy-kontroler-domeny.html</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://emarcel.com/kurs-bash/">http://emarcel.com/kurs-bash/</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://opentodo.net/2013/01/samba4-as-ad-domain-controller-on-centos-6/">http://opentodo.net/2013/01/samba4-as-ad-domain-controller-on-centos-6/</a></p>
<p> </p></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/5483e331a9bace540b3a2478fc014e25_S.jpg" alt="Active Directory w wydaniu Linux" /></div><div class="K2FeedIntroText"><p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Projekt Samba działa już od wielu lat a swoje początki sięga roku 1991 kiedy to Andrew Tridgell na potrzeby swojej lokalnej sieci napisał program serwera plików. Po kilku latach Tridgell rozwinął swój serwer nazywając go Sambą a efekty swojej pracy udostępnił w Internecie. Do niedawna główne zadanie Samby sprowadzało się do umożliwenia komputerom działającym pod kontrolą systemu Linux (lecz nie tylko) na łączenie się z sieciami opartmi na sytemie Windows. Serwer Samba dodatkowo umożliwiał wzajemną wymianę plików a także dostęp do drukarek. Wszak Samba pozwalała na uzyskanie połączenia z domeną opartą o Active Directory, lecz nie oferowała usługi samodzielnego kontrolera usługi katalogowej Active Directory. Wszystko zmieniło się od wydania czwartej odsłony Samby. Udostępnione oprogramowanie jest </span>opensource'owym zamiennikiem oprogramowania zawartego w Windows Server (przynajmniej jeśli chodzi o świadczenie usług domenowych opartych o AD). <span>Serwery oparte o Sambą nie tylko oferują wszystkie funkcjonalności Active Directory, lecz także pozwalają na łączność z już istniejącym i działającym schematem AD a dodatkowo pozwalają na odwrócenie roli czyli utworzenie domeny opartej o Sambę i późniejsze dołączenie kontrolerów, których pracą steruje system Windows. Działanie Samby w oparciu o usługę Active Directory możliwe jest dzięki zintegrowaniu z oprogramowaniem serwera katalogowego LDAP, serwera uwierzytelnienia Kerberos, usługi rozwiązywania adresów domenowych (DNS) oraz pakietu wywołań zdalnych procedur.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
</div><div class="K2FeedFullText">
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Nasze rozważania na temat Samby, Active Directory i tematów pokrewnych skoncentrujemy na następujących zagadnieniach:</span></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>instalacja systemu Linux Debian w wersji 7.7,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>konfiguracja i przygotowanie systemu Linux do instalacji serwera Samba,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>instalacja serwera Samba 4.1.13,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>weryfikacja przeprowadzonej konfiguracj,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>podstawowe zarządzanie kontrolerem domeny.</span></li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Instalacja sytemu Debian" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Instalację systemu <strong>Debian</strong> rozpoczynamy od pobrania interesującego nas obrazu sytemu ze strony projektu - </span><a href="https://www.debian.org/CD/http-ftp/">https://www.debian.org/CD/http-ftp/</a><span> bądź </span><a href="https://www.debian.org/releases/wheezy/debian-installer/index.pl.html">https://www.debian.org/releases/wheezy/debian-installer/index.pl.html</a></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Po wypaleniu płyty (a raczej płyt, a dokładnie trzech – wersja DVD) możemy pierwszy nośnik umieścić w napędzie. Po chwili instalator powinien zgłosić gotowość do pracy. </span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Proces instalacji możemy przeprowadzić korzystając z instalatora tekstowego bądź instalatora opartego na grafice. Instalator graficzny od instalatora tekstowego różni się tylko obsługą myszki, oraz wyglądem menu, pytania na które musimy odpowiedzieć podczas prowadzonego procesu instalacji są takie same. My skorzystamy z drugiego rozwiązania tak więc z listy wybieramy <strong>Graphical install</strong>. Gdy chcemy skorzystać z innego środowiska graficznego niż domyślne instalowane Gnome 3 wybierz <strong>Advanced options </strong></span>(do wyboru KDE, LXDE, Xfce)<span>.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image1.png" alt="image1" style="display: block; margin-left: auto; margin-right: auto;" height="480" width="640" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Na pierwszym ekranie czeka nas wybór języka. Wybieramy język polski.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image2.png" alt="image2" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny krok to wybór lokalizacji – wybieramy Polska. Wybór ten ma wpływ na ustawienie strefy czasowej oraz parametrów regionalnych.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image3.png" alt="image3" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Na kolejnym ekranie wybieramy układ klawiatury.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image4.png" alt="image4" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po kliknięciu na <strong>Dalej</strong> zostają załadowane składniki instalatora.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image5.png" alt="image5" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ekran <strong>Konfiguruj sieć</strong> umożliwia nam wybranie interfejsu sieciowego, który zostanie użyty podczas instalacji systemu. Wybieramy interfejs z dostępem do Internetu tak aby instalator mógł pobrać pakiety aktualizacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image6.png" alt="image6" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Następuje konfiguracja sieci. W przypadku niepowodzenia będziemy mogli sami dokonać ustawień adresów IP. Konfiguracja ręczna wiąże się z podaniem następujących danych: adres IP twojego komputera, maskę sieci, bramę sieciową, adresy serwerów nazw (serwery DNS).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image7.png" alt="image7" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Na kolejnym ekranie <strong>Konfiguruj sieć</strong> dokonujemy konfiguracji nazwy naszego komputera/hosta. W naszym przypadku pozostawiam wartość domyślną – <strong>debian</strong>, choć ty czytelniku możesz oczywiście wpisać swoją dowolną wymyśloną wartość.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image8.png" alt="image8" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny ekran to podanie nazwy domeny do której należy host. Komputer nie przynależy do żadnej domeny a więc pole pozostawiamy puste (domenę będziemy dopiero tworzyć).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image9.png" alt="image9" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przyszła pora na konfigurację użytkowników i haseł. Tak więc pierwszą czynnością jest ustalenie hasła dla konta <strong>root</strong> – administratora systemu. Hasło wpisujemy dwukrotnie.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image10.png" alt="image10" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny krok to podanie <strong>nazwy konta</strong> –najczęściej podajemy imię i nazwisko . Podawana nazwa będzie używana przez programy, które używają prawdziwej nazwy użytkownika np. programy pocztowe do uzupełnienia pola nadawca. Konto to jest kontem do użytku programów nie związane z celami administracyjnymi.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image11.png" alt="image11" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny ekran służy do zdefiniowania <strong>nazwy konta</strong> w systemie (konta systemowego).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image12.png" alt="image12" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnią czynności jest podanie hasła do nowo utworzonego konta.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image13.png" alt="image13" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po przejściu opcji związanych z użytkownikiem, przyszedł czas by określić <strong>strukturę partycji</strong> na naszym dysku. My decydujemy się na ustawienia standardowe, tak więc będziemy partycjonować cały dysk.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image14.png" alt="image14" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Wybieramy dysk na którym zostanie utworzona partycja bądź partycje i dalsza instalacja systemu. Proces spowoduje usunięcie wszystkich danych znajdujących się na dysku.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image15.png" alt="image15" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejna decyzja wiąże się z wyborem <strong>schematu partycji</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image16.png" alt="image16" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Na kolejnym ekranie mamy podgląd aktualnie skonfigurowanych partycji i punktów montowania a także mamy możliwość dokonania ewentualnych poprawek.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image17.png" alt="image17" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatni ekran podsumowujący wprowadzone ustawienia do schematu partycji. Kliknięcie na <strong>Tak</strong> spowoduje <strong>zatwierdzenie</strong> wszystkich ustawień.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image18.png" alt="image18" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Następuje tworzenie partycji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image19.png" alt="image19" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wykonaniu partycjonowania dysku, instalator systemu <strong>Debian</strong> pyta się o istnienie innych nośników zawierających pliki instalatora systemu. Jeśli posiadamy takowe płyty umieszczamy je w napędzie i wybieramy <strong>Tak</strong>. W przeciwnym wypadku pomijamy ten krok.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image20.png" alt="image20" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Skanowanie nośników ma na celu wyeliminowanie pobierania plików instalatora z Internetu. Potrzebne pakiety zamiast być pobierane będą dostarczone z zeskanowanych nośników.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image21.png" alt="image21" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejny krok to pytanie o możliwość uczestnictwa w programie zbierania statystyk.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image22.png" alt="image22" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przed rozpoczęciem kopiowania plików mamy jeszcze możliwość wybrania zestawu usług jakie ma nam oferować system. My decydujemy się na wybór tylko podstawowych składników gdyż potrzebne nam usługi skonfigurujemy sami.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image23.png" alt="image23" style="display: block; margin-left: auto; margin-right: auto;" height="600" width="800" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Następuje proces instalacji i kopiowania niezbędnych pakietów.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image24.png" alt="image24" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnia decyzja wiąże się z instalacją <strong>programu rozruchowego GRUB</strong>. W tym momencie gdy na naszym komputerze mamy zainstalowane inne systemy operacyjne powinny one być uwidocznione. Program rozruchowy jest odpowiedzialny za wybór uruchamianego systemu.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image25.png" alt="image25" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Poprawnie przeprowadzona instalacja systemu kończy się komunikatem podsumowującym.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image26.png" alt="image26" style="display: block; margin-left: auto; margin-right: auto;" height="525" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Przygotowanie sytemu przed instalacją serwera Samba4" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po poprawnej instalacji systemu warto na początek wykonać <strong>aktualizację całego systemu</strong>. Aby aktualizacja powiodła się jako użytkownik <strong>root</strong> wydajemy polecenie: <strong>apt-get update && apt-get upgrade</strong> Następuje aktualizacja systemu.</p>
<p style="margin-bottom: 0.0001pt;"> <img src="http://slow7.pl/images/stories/linux/debianad/image27.png" alt="image27" style="display: block; margin-left: auto; margin-right: auto;" height="233" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zanim przejdę dalej jeszcze jedno słowo wytłumaczenia. Wszystkie prezentowane przeze mnie czynności są wykonywane w symulowanym środowisku opierającym się na <strong>VirtualBox</strong>. Tak aby sobie ułatwić pracę z wirtualnymi maszynami warto zainstalować na każdym wirtualnym systemie zestaw narzędzi <strong>Guest Additions</strong>. O ile instalacja tych narzędzi w systemach z rodziny Windows nie nastręcza żadnych problemów (gdy maszyna wirtualna jest uruchomiona z menu wybieramy <strong>Devices</strong> i następnie <strong>Insert Guest Additions CD Image</strong>, po tej operacji powinien pojawić się instalator dodatku, który instalujemy jak każdy inny program) to już w systemach pokroju Linux sprawa wygląda bardzo różnie. Tak więc jakbyś czytelniku sam chciał przeprowadzić wszystkie opisane czynności zainstalowanie dodatku <strong>Guest Additions </strong>wykonajwg. punktów poniżej:</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">1. zaloguj się jako <strong>root</strong>, bądź włącz konsolę z uprawnieniami administratora,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><span>2. zainstaluj pakiety <strong>build-essential module-assistant</strong> (polecenie: <strong>apt-get install build-essential module-assistant</strong>);</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">3. wydaj polecenie: <strong>m-a prepare</strong>,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><span>4. kliknij <strong>Install Guest Additions</strong> z menu <strong>Devices</strong> menu, </span></p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">5. wydaj polecenie: <strong>sh /media/cdrom/VBoxLinuxAdditions.run </strong>(pamiętaj, że ścieżka może się różnić)</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejnym nieudogodnieniem z którym możemy się spotkać to jest niemożliwość uruchomienia danego polecenia z <strong>uprawnieniami administratora</strong> z konta które takowych uprawnień nie posiada. Przykład poniżej - z konta <strong>luk</strong> zostało uruchomione polecenie nakazujące aktualizację systemu, lecz polecenie to zostaje przerwane komunikatem: <strong>luk nie występuje w pliku sudoers. Ten incydent zostanie zgłoszony</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image28.png" alt="image28" style="display: block; margin-left: auto; margin-right: auto;" height="199" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby możliwe było wykonanie poleceń z podwyższonymi uprawnieniami należy konto <strong>luk</strong> dodać do <strong>pliku sudoers</strong>. Aby dodać użytkownika do <strong>pliku sudoers</strong> należy:</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">1. zalogować się na konto <strong>root'a</strong>,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">2. włączyć edycję pliku wydając polecenie: <strong>gedit /etc/sudoers </strong><span>bądź<strong> nano /etc/sudoers</strong> (wszystko zależy od naszych preferencji edytora),</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><span>3. w sekcji: <strong># User privilege specificationroot</strong> dodać wpis: <strong><nazwa_konta> ALL=(ALL:ALL) ALL</strong> czyli w moim przypadku: <strong>luk ALL=(ALL:ALL) ALL</strong></span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image29.png" alt="image29" style="display: block; margin-left: auto; margin-right: auto;" height="583" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zapisujemy plik. Od teraz powinno wszystko działać jak należy i jak widać poniżej tak jest.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image30.png" alt="image30" style="display: block; margin-left: auto; margin-right: auto;" height="264" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Chwilkę temu wspomniałem o edytorze zawartości plików. Linux jest systemem w którym edycję plików możemy przeprowadzać za pomocą wielu narzędzi a że edycję plików będziemy przeprowadzać bardzo często ważne jest aby wybrać edytor, który będzie dla nas wygodny. Na samym początku można spróbować korzystać z edytorów dostępnych wraz z systemem czyli <strong>gedit</strong> bądź <strong>nano</strong>. Oczywiście możliwa jest instalacja produktów alternatywnych. Bardzo często wykorzystywanym edytorem jest pakiet <strong>Midnight Commander</strong>. Pakiet ten tak naprawdę zainstaluje menadżer plików lecz także edytor tekstowy. Aby zainstalować aplikację wydaj polecenie: <strong>apt-get install mc</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Od tej pory możemy korzystać z menadżera plików (aż się łezka kręci, jakie to podobne do Norton Commander) lecz także edytora zawartości plików.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image31.png" alt="image31" style="display: block; margin-left: auto; margin-right: auto;" height="589" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Edycja plików sprowadza się do wykonania jeszcze jednego ustawienia. Poniżej przedstawiono zrzut ekranu w którym edycja pliku następuje za pomocą edytora <strong>nano</strong> (edytor ustawiony jako domyślny).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image32.png" alt="image32" style="display: block; margin-left: auto; margin-right: auto;" height="548" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby zmienić ustawienie domyślnie wykorzystywanego edytora należy wydać polecenie: <strong>update-alternatives --config editor</strong> a następnie podać numer przypisany do edytora, którego chcemy używać (w naszym przypadku edytor <strong>mcedit</strong> ma przypisany numer 2).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image33.png" alt="image33" style="display: block; margin-left: auto; margin-right: auto;" height="290" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Od tej pory <strong>mcedit</strong> będzie wykorzystywany jako domyślny edytor.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image34.png" alt="image34" style="display: block; margin-left: auto; margin-right: auto;" height="571" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">OK mamy przygotowane środowisko do zainstalowania serwera Samba oraz dokonaliśmy niezbędnych ustawień komputera do pełnienia roli kontrolera domeny. Zanim przejdziemy dalej jeszcze chwilkę się zatrzymamy i dopowiemy parę słów, tak aby wszystko było jasne.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Pierwszą sprawą jest użyta topologia sieci i przyjęta adresacja. Drugą zaś osobną kwestią jest lista usług jakie będziemy chcieli uruchomić na serwerze. Myślę, że wszystkie wątpliwości rozwieje poniższy rysunek.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image35.png" alt="image35" style="display: block; margin-left: auto; margin-right: auto;" height="576" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc analizując powyższy schemat dochodzimy do wniosku, że czeka nas trochę roboty, gdyż oprócz konfiguracji i instalacji samej Samby będziemy musieli uruchomić i skonfigurować usługę DNS i DHCP oraz włączyć przekazywanie pakietów pomiędzy dwoma sieciami (NAT). Serwer jest zaopatrzony w dwie karty sieciowe i stanowi bramę dla sieci 10.0.0.0/24.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby móc przystąpić do instalacji Samby należy zainstalować dodatkowe funkcje i pakiety. Do najważniejszych z nich należą:</p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>python-dev</strong> - rozszerzenie interpretera języka Python,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libacl1-dev</strong> - pakiet zawiera biblioteki i pliki nagłówkowe potrzebne do tworzenia programów,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>resolvconf</strong> - pakiet wspomaga wymianę informacji oraz służy do utrzymywania aktualności informacji systemu o serwerach nazw,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libldap2-dev</strong> - OpenLDAP, implementacja protokołu LDAP, protokół przeznaczony do korzystania z usług katalogowych,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>build-essential</strong> - pakiet jest wymagany do budowania pakietów Debiana,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>libgnutls-dev</span></strong><span> - biblioteka, która implementuje protokół Transport Layer Security (TLS) 1.0 oraz Secure Sockets Layer (SSL) 3.0,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>pkg-config</strong> - pakiet, który pozwala na kompilację i konsolidację bibliotek,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>cups</span></strong><span> - Common UNIX Printing System (CUPS(tm)) - serwer wydruku,</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libcups2-dev</strong> - wspomaga serwer wydruku CUPS,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>krb5-user</strong> - implementacja protokołu Kerberos. Protokół ten odpowiedzialny jest za uwierzytelnienie (weryfikacja tożsamości) w domenach Windows,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>docbook-xsl</strong> - arkuszy stylów XSL,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>attr</strong> - narzędzia do obsługi systemu plików,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libbsd-dev</strong> - funkcje użytkowe systemów BSD,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>python-dnspython</strong> - zestaw narzędzi DNS dla Pythona. Pakiet obsługuje prawie wszystkie typy rekordów. Może być używany do tworzenia zapytań, transferów strefy i dynamicznych aktualizacji,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libattr1-dev</strong> - zawiera biblioteki i pliki nagłówkowe potrzebne do działania programów,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>git</strong> - system kontroli wersji, który śledzi wszystkie zmiany dokonywane na pliku (lub plikach) i umożliwia przywołanie dowolnej wcześniejszej wersji,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>gdb</strong> - GDB to debuger plików źródłowych, pozwalający na zatrzymanie programu w konkretnym miejscu, wyświetlanie wartości zmiennych oraz określenie gdzie wystąpił błąd. Debuger współpracuje z programami napisanymi w językach C, C++, Fortran, Modula 2 i Java,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>xsltproc</strong> - pakiet umożliwia konwersję plików XML na inne, dowolne formaty takie jak: HTML, zwykły tekst itp.,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libsasl2-dev</strong> - pakiet umożliwia wykorzystanie metody SASL (Simple Authentication Security Layer) celem uwierzytelnienai użytkownika,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libaio-dev</strong> - biblioteka wykorzystywana przy korzystaniu z baz danych,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>isc-dhcp-server</span></strong><span> - pakiet instaluje serwer DHCP.</span></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>acl</strong> – pakiet niezbędny do manipulowania listami kontroli dostępu,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>libreadline-dev</strong> - biblioteki GNU obsługujące interfejs użytkownika,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>valgrind</strong> - aplikacja na licencji GPL, narzędzie, które wspomaga zarządzanie pamięcią,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>ldap-utils</strong> - pakiet zawiera narzędzia pakietu OpenLDAP (Lightweight Directory Access Protocol). Narzędzia te pozwalają uzyskać dostęp do lokalnego lub zdalnego serwera LDAP,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>ntp</strong> - implementacja protokołu synchronizacji czasu.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc aby zainstalować wszystkie powyższe pakiety (i jeszcze parę dodatkowych) wydaj polecenie: <strong>apt-get install python-dev autoconf pkg-config libcups2-dev git build-essential xsltproc cups krb5-user docbook-xsl libsasl2-dev libacl1-dev libgnutls-dev libattr1-dev python-dnspython libreadline-dev libbsd-dev libldap2-dev libblkid-dev valgrind attr libpopt-dev acl gdb libaio-dev libpam-dev resolvconf ldap-utils ntp isc-dhcp-server</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Wydanie polecenia spowoduje instalację dodatkowych aplikacji i komponentów (CUPS, DHCP, Kerberos), bibliotek niezbędnych do przeprowadzenia komplikacji Samby a także zostaną zainstalowane wszystkie pakiety zależne (pakiety, które są wymagane aby aplikacje działały prawidłowo).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Proces instalacji powinien przebiec bez żadnych komplikacji, jedyne co będzie trzeba podać to informacje, które są niezbędne do implementacji mechanizmu Kerberos. Tak więc w pierwszym oknie podajemy <strong>nazwę domeny</strong> (koniecznie wielkie litery).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image36.png" alt="image36" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Drugie okno to adres IP serwera (bądź serwerów), wskazujemy na komputer lokalny a więc wpisanym adresem będzie adres 127.0.0.1 (można zamiast adresu IP zdecydować się na zdefiniowaną nazwę hosta – w naszym scenariuszu należałoby by wpisać: <strong>debian</strong>).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image37.png" alt="image37" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">W trzecim ostatnim oknie również należy użyć adresu IP wskazującego na komputer lokalny (również możemy wykorzystać nazwę hosta).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image38.png" alt="image38" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Serwer Samba a także usługa Active Directory korzysta z pewnych funkcji systemu <strong>plików ext4</strong>. Aby przejść dalej należy się upewnić, że funkcje te są włączone (system instalowaliśmy z opcjami domyślnymi a więc funkcje te powinny być skonfigurowane poprawnie). <span>Tak więc wydaj polecenie: <strong>grep CONFIG_EXT4_FS /boot/config-`uname -r`</strong></span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image39.png" alt="image39" style="display: block; margin-left: auto; margin-right: auto;" height="284" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wydaniu polecenia powinniśmy uzyskać dane takie jak na rysunku powyżej. Poszczególne wpisy informują nas o:</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">1 - system plików ext4 działa jako moduł,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">2 - obsługiwana jest funkcja xattr (rozszerzone atrybuty pliku),</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">3 - obsługiwane są listy kontroli dostępu (posix_acl),</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">4 - obsługa mechanizmów zabezpieczeń.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Fakt włączenia funkcji możemy również sprawdzić poprzez ręczny podgląd pliku <strong>config-<wersja_systemu_linux></strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image40.png" alt="image40" style="display: block; margin-left: auto; margin-right: auto;" height="543" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejnym krokiem, który musimy wykonać jest wprowadzenie zmian w pliku <strong>fstab</strong>, plik ten jest odpowiedzialny m.in. za konfigurację systemu plików ext4. Warto nadmienić, że nieprawidłowo przeprowadzona edycja pliku może doprowadzić do nie uruchomienia się systemu. Tak więc aby zabezpieczyć się przed ewentualnymi problemami za pomocą polecenia <strong>cp</strong> wykonujemy kopie pliku – polecenie: <strong>cp -pR /etc/fstab /etc/fstab_backup</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image41.png" alt="image41" style="display: block; margin-left: auto; margin-right: auto;" height="550" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wykonaniu kopii pliku przechodzimy do jego edycji. Wprowadzone zmiany włączą funkcje systemu plików ext4, które są potrzebne aby serwer Samba działał prawidłowo (funkcja xattr oraz listy kontroli dostępu). Edycja pliku sprowadza się do dodania wpisu: <strong>user_xattr,acl,barrier=1</strong> przy wpisie każdej z partycji (w scenariuszu został użyta tylko jedna partycja).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image42.png" alt="image42" style="display: block; margin-left: auto; margin-right: auto;" height="468" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po przygotowaniu systemu plików czas aby skonfigurować interfejsy sieciowe komputera. Przedstawiony kilka rysunków wyżej schemat naszej testowej sieci ułatwi nam to zadanie. Jak widać po rysunku interfejs <strong>eth1</strong> jest interfejsem, który ma połączenie z siecią Internet i ten interfejs domyślnie skonfigurowany jest do korzystania z serwera DHCP. Ustawienie to pozostawiamy bez zmian. Stały adres IP 192.168.0.11 jest przyznawany zawsze dzięki rezerwacji tegoż adresu w puli serwera DHCP (powiązanie adresu IP z adresem MAC interfejsu eth1).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Odrębną sprawą jest już przyjęta adresacja interfejsu <strong>eth0</strong>. Adresację tą wykonujemy <strong>statycznie</strong> czyli sami powiążemy niezbędne adresy IP z interfejsem <strong>eth0</strong>. Jak można zauważyć poniżej po wydaniu polecenia: <strong>ifconfig eth0 </strong>żaden adres IPv4 nie został przyznany interfejsowi.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image43.png" alt="image43" style="display: block; margin-left: auto; margin-right: auto;" height="352" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby zmiana interfejsu była stała, należy odpowiednie dane wprowadzić do pliku <strong>/etc/network/interfaces</strong> odpowiedzialnego za konfigurację interfejsów sieciowych komputera. Wprowadzone zmiany zostały ujęte na rysunku poniżej.</p>
<p class="contentpane" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: courier new,courier;">auto eth0<br />iface eth0 inet static<br />address 10.0.0.2<br />netmask 255.255.255.0<br />dns-search firma.local<br />dns-domain firma.local<br />dns-nameservers 10.0.0.2</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image44.png" alt="image44" style="display: block; margin-left: auto; margin-right: auto;" height="530" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Wpisy te tworzą statyczny interfejs sieciowy <strong>eth0</strong> z adresem IP 10.0.0.2 i maską 255.255.255.0 oraz konfigurują domenę. Funkcję serwera DNS będzie pełnił serwer zainstalowany lokalnie wraz z instalacją Samby.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wprowadzeniu zmian i ponownym uruchomieniu komputera (można zamiast restartować wydać polecenie: <strong>/etc/init.d/networking restart</strong>) ponowne wydanie polecenia: <strong>ifconfig eth0 </strong>uwidoczni wprowadzone zmiany. Jak widać poniżej interfejs <strong>eth0</strong> został skonfigurowany poprawnie i działa prawidłowo.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image45.png" alt="image45" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kolejną czynnością jest konfiguracja serwera <strong>czasu NTP</strong> (ang. Network Time Protocol). Odpowiednie pakiety zostały zainstalowane wcześniej. Usługa czasu ma znaczenie krytyczne podczas działania serwera Samba. Nasz komputer po konfiguracji dodatkowo będzie pełnił rolę <strong>serwera czasu</strong> dla komputerów znajdujących się w naszej sieci. Cała konfiguracja sprowadza się do dopisania dwóch dodatkowych wierszy do pliku konfigurującego serwer. Zmiany dokonujemy w pliku <strong>/etc/ntp.conf</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: 'Courier New';">ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/<br />restrict default mssntp</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image46.png" alt="image46" style="display: block; margin-left: auto; margin-right: auto;" height="530" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Sprawdzenie statusu serwera NTP możemy dokonać po wpisaniu polecenia: <strong>service ntp status</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image47.png" alt="image47" style="display: block; margin-left: auto; margin-right: auto;" height="145" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Dodatkowo sprawdzenie serwera NTP dokonamy na kliencie za pomocą programu <strong>NTPTool</strong>. Jak widać poniżej po wpisaniu adresu naszego serwera i wysłaniu zapytania, serwer NTP odsyła nam odpowiedź.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image48.png" alt="image48" style="display: block; margin-left: auto; margin-right: auto;" height="480" width="644" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">i dokonamy przechwycenia pakietów</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image49.png" alt="image49" style="display: block; margin-left: auto; margin-right: auto;" height="577" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Jak widać powyżej wszystko jest w porządku. Uważnego czytelnika może zaabsorbować fakt różnicy czasu (dokładnie 1 godzina) pomiędzy wynikami programu <strong>NTPTool</strong> a przechwyconymi pakietami. Stało się tak ponieważ serwer przesyła czas UTC (zob. rysunek przechwycone pakiety) a w systemie strefa czasowa jest ustawiona jako UTC+01:00 (zob. wyniki reprezentowane przez program <strong>NTPTool)</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Nasz komputer oprócz pełnienia roli serwera czasu będzie pełnił jeszcze jedną dodatkową funkcję a mianowicie będzie również <strong>serwerem DHCP.</strong> Oczywiście jeżeli w swojej sieci masz już serwer DHCP to krok ten możesz pominąć oraz podczas instalacji dodatkowych pakietów zrezygnuj z pakietu: <strong>isc-dhcp-server</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Konfiguracja <strong>serwera DHCP</strong> sprowadza się do wprowadzenia odpowiednich informacji do pliku <strong>/etc/dhcp/dhcpd.conf </strong>odpowiedzialnego za działanie serwera DHCP. Wprowadzone informacje to m.in.:</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">1 - nazwa domeny,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">2 - adresy serwerów DNS,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">3 - serwer NetBIOS,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">4 - serwer NTP,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">5 - czas dzierżawy adresu IP w sekundach,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">6 - obsługiwana sieć,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">7 - pula adresów IP serwera DHCP,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;">8 - adres IP routera/bramy.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image50.png" alt="image50" style="display: block; margin-left: auto; margin-right: auto;" height="485" width="700" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><span style="font-family: courier new,courier;">ddns-updates on; <br />option domain-name "firma.local"; <br />option domain-name-servers 10.0.0.2, 10.0.0.2; <br />option netbios-name-servers 10.0.0.2; <br />option ntp-servers 10.0.0.2; <br />default-lease-time 600; <br />max-lease-time 7200; <br />log-facility local7; <br />subnet 10.0.0.0 <br />netmask 255.255.255.0 { <br />range 10.0.0.10 10.0.0.100; <br />option routers 10.0.0.2; }</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Dodatkowo w pliku <strong>/etc/default/isc-dhcp-server</strong> w sekcji <strong>INTERFACES</strong> należy określić interfejs sieciowy, który ma zostać powiązany z <strong>serwerem DHCP</strong> (ten interfejs będzie obsługiwany prze serwer DHCP).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image51.png" alt="image51" style="display: block; margin-left: auto; margin-right: auto;" height="485" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wprowadzeniu wszystkich zmian przyszedł czas na uruchomienie i przetestowanie wprowadzonych ustawień serwera DHCP. Serwer uruchamiamy poleceniem: <strong>/etc/init.d/isc-dhcp-server start</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image52.png" alt="image52" style="display: block; margin-left: auto; margin-right: auto;" height="224" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Status serwera sprawdzamy poleceniem: <strong>/etc/init.d/isc-dhcp-server status</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image53.png" alt="image53" style="display: block; margin-left: auto; margin-right: auto;" height="218" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Serwer DHCP pracuje a więc podłączmy klienta. Klient został podłączony jak widać poniżej wszystkie dane konfigurujące interfejs sieciowy zostały prawidłowo klientowi dostarczone. Klient otrzymał pierwszy adres IP z puli czyli 10.0.0.10 z maską 255.255.255.0 i komunikacja z serwerem jest zapewniona.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image54.png" alt="image54" style="display: block; margin-left: auto; margin-right: auto;" height="400" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przechwycony ruch pakietów pomiędzy klientem a serwerem również jest prawidłowy.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image55.png" alt="image55" style="display: block; margin-left: auto; margin-right: auto;" height="578" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Stan dzierżaw adresów IP na serwerze DHCP można sprawdzić za pomocą polecenia: <strong>more /var/lib/dhcp/dhcpd.leases</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image56.png" alt="image56" style="display: block; margin-left: auto; margin-right: auto;" height="534" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zakończyliśmy wszystkie czynności przygotowawcze a więc najwyższy czas aby wykonać instalację serwera Samba 4.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Instalacja Samba4" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Do instalacji serwera wykorzystamy repozytoria git (za przeprowadzenie tej operacji będzie odpowiedzialny pakiet git, który zainstalowaliśmy w fazie przygotowania systemu).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc pierwszą naszą czynnością będzie sklonowanie stabilnej wersji Samby 4 z oficjalnej strony projektu a następnie kompilacja oprogramowania. Tu troszeczkę pójdziemy dłuższą drogą ponieważ oczywiście możliwa jest bezpośrednia instalacja pakietów Samby lecz dzięki wybraniu tej metody możemy przeprowadzić dodatkowe testy przed instalacyjne tak aby mieć pewność, że po instalacji będzie nam wszystko działać.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Klonowanie przeprowadzamy za pomocą polecenia: <strong>git clone -b <wersja_serwera_Samba> git://git.sama.org/samba.git <katalog></strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnią aktualną wersję serwera sprawdzisz na stronie <a href="https://git.samba.org/">https://git.samba.org/</a> wybierając <strong>samba.git</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image57.png" alt="image57" style="display: block; margin-left: auto; margin-right: auto;" height="465" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc chcąc sklonować Sambę z oficjalnego repozytorium wydaj polecenie: <strong>git clone -b samba-4.1.13 git://git.samba.org/samba.git samba4</strong> bądź <strong>git clone -b v4-1-13-stable git://repo.or.cz/samba.git samba4</strong> <strong>Repo.or.cz</strong> jest serwisem, który oferują podobną funkcjonalność, co samba.org (adres przydatny w przypadku awarii).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wydaniu polecenia następuje kopiowanie serwera do katalogu <strong>samba4</strong> z zdalnej lokacji. Szybkość wykonywania polecenia zależy od prędkości naszego łącza internetowego.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image58.png" alt="image58" style="display: block; margin-left: auto; margin-right: auto;" height="381" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wykonaniu kopiowanie przyszedł czas by wykonać kompilację oprogramowania. Kompilację wykonujemy za pomocą polecenia: <strong>./configure --enable-debug --enable-selftest</strong> Dodatkowy parametr <strong>selftest</strong> spowoduje dodanie opcji wykonania testu przed próbą podjęcia instalacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image59.png" alt="image59" style="display: block; margin-left: auto; margin-right: auto;" height="274" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wydaniu polecenia następuje proces kompilacji, który uzależniony jest od posiadanego przez nasz sprzętu. Proces ten powinien zakończyć się wypisaniem komunikatu o pozytywnym zakończeniu operacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image60.png" alt="image60" style="display: block; margin-left: auto; margin-right: auto;" height="574" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><img src="http://slow7.pl/images/stories/linux/debianad/image61.png" alt="image61" style="display: block; margin-left: auto; margin-right: auto;" height="835" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po prawidłowo zakończonym procesie kompilacji tak naprawdę moglibyśmy już przejść do instalacji serwera Samba ale zanim to zrobimy wykonamy jeszcze jeden test, który przeprowadzi weryfikację środowiska w którym będzie pracował serwer Samba. Aby wykonać test wydaj polecenie: <strong>make quicktest</strong> Polecenie uruchomi szereg procedur sprawdzających, które powinny zakończyć się komunikatem: <strong>ALL OK</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image62.png" alt="image62" style="display: block; margin-left: auto; margin-right: auto;" height="518" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Gdyby z jakiś powodów test zakończył się niepowodzeniem to podsumowanie testu możesz przejrzeć tutaj: .<strong>st/summary</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnim naszym krokiem jest instalacja serwera, instalację rozpoczniemy po wydaniu polecenia: <strong>make install</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image63.png" alt="image63" style="display: block; margin-left: auto; margin-right: auto;" height="134" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Po kliknięciu Enter rozpoczyna się proces instalacji.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image64.png" alt="image64" style="display: block; margin-left: auto; margin-right: auto;" height="885" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Serwer Samba 4 został zainstalowany poprawnie.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Gdyby z jakiś powodów niemożliwe było ściągnięcie repozytorium zawsze można posłużyć się innym sposobem a mianowicie wykorzystać do tego serwer FTP. Paczki wszystkich dystrybucji Samba znajdziemy np. pod adresem: <a href="http://ftp.samba.org/pub/samba/">http://ftp.samba.org/pub/samba/</a></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image65.png" alt="image65" style="display: block; margin-left: auto; margin-right: auto;" height="465" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po odnalezieniu interesującej nas wersji (w naszym przypadku samba-4.1.13.tar.gz) przechodzimy do konsoli i wydajemy polecenie: <strong>wget http://ftp.samba.org/pub/samba/samba-4.1.13.tar.gz</strong> Po wydaniu polecenia następuje ściągnięcie pliku i zapisaniu go w bieżącym katalogu.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image66.png" alt="image66" style="display: block; margin-left: auto; margin-right: auto;" height="274" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Rozpakowanie pakietu dokonujemy za pomocą polecenia: <strong>tar zxvf <nazwa_ściągniętego_pliku></strong> czyli w naszym przypadku: <strong>tar zxvf samba-4.1.13.tar.gz</strong> Wszystkie pliki zostają zapisane do katalogu: <strong>samba-4.1.13</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image67.png" alt="image67" style="display: block; margin-left: auto; margin-right: auto;" height="274" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Proces instalacji kontynuujemy zgodnie z instrukcjami odnoszącymi się do procesu wykorzystującego repozytorium git.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po zakończonej sukcesem instalacji serwera Samba 4 przechodzimy do konfiguracji domeny.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Samba4 jako kontroler domeny" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Bardzo często będziemy odwoływali się do poleceń serwera Samba a więc aby móc polecenia związane z zarządzaniem serwerem wpisywać bezpośrednio w konsoli bez odwoływania się za każdym razem do ścieżki, katalog instalacji Samby dodamy do zmiennej <strong>PATH</strong>. Zmienna ta jest odpowiedzialna za ustawienia katalogów które będą przeszukiwane celem znalezienia wpisywanych komend/programów. Po wydaniu polecenia: <strong>echo $PATH</strong> możemy sprawdzić jakie aktualne katalogi są do tej zmiennej przypisane.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image68.png" alt="image68" style="display: block; margin-left: auto; margin-right: auto;" height="210" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Naszym celem jest dodanie dwóch katalogów instalacyjnych serwera Samba do zmiennej <strong>PATH</strong>: katalog <strong>/usr/local/samba/bin</strong> oraz katalog <strong>/usr/local/samba/sbin</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby po każdym zalogowaniu mieć ustawione konkretne zmienne środowiskowe, należy je umieścić w pliku <strong>~/.bash_profile</strong>. Zmienne te możemy po prostu wpisać do wyżej wymienionego pliku bądź wykorzystać do tego polecenie <strong>set</strong> (ustawienie zmiennej) oraz polecenie <strong>export</strong> (zapis zmiennej). Tak więc przypisanie dwóch interesujących nas katalogów do zmiennej PATH sprowadza się do wydania następujących poleceń:</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>set PATH=$PATH':/usr/local/samba/bin'<br />set PATH=$PATH':/usr/local/samba/sbin'<br />export PATH=/usr/local/samba/bin:$PATH >> ~/.bash_profile<br />export PATH=/usr/local/samba/sbin:$PATH >> ~/.bash_profil</span></strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image69.png" alt="image69" style="display: block; margin-left: auto; margin-right: auto;" height="303" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ponowne wydanie polecenia: <strong>echo $PATH</strong> uwidoczni wprowadzone zmiany.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Serwer Samba został zainstalowany pora aby nasz serwer wypromować do pełnienia roli kontrolera domeny <strong>firma.local</strong>. Aby zacząć cały proces wydajemy polecenie: <strong>samba-tool domain provision --realm=firma.local --domain=firma --adminpass='B@rdzotajnehaslo1' --server-role='domain controller'</strong> – polecenie <strong>samba-tool</strong> jest odpowiednikiem windowsowego polecenia <strong>dcpromo</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong>gdzie:</strong></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>domain provision </strong>-ozn. konfigurację domeny,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>realm </strong>- pełna nazwa domeny,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>domain</strong> - nazwa domeny,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>adminpass</strong> - hasło administratora domeny, hasło musi spełniać wymogi silnego hasła stawiane przez system Windows tj. min długość hasła 8 znaków + użycie wielkiej litery + użycie cyfry + użycie znaków specjalnych,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><strong>server-role</strong> - rola serwera.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image70.png" alt="image70" style="display: block; margin-left: auto; margin-right: auto;" height="758" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Serwer od teraz chwili jest już prawie gotowy do pełnienia roli kontrolera domeny Active Directory. Pozostało nam do wykonani kilka czynności zanim serwer zostanie w pełni uruchomiony.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Pierwszą czynnością jest skopiowanie pliku <strong>krb5.conf</strong> wygenerowanego podczas promowania do roli serwera AD do katalogu <strong>/etc/</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kopiowanie pliku możemy zrealizować za pomocą polecenia: <strong>cp -pRf /usr/local/samba/private/krb5.conf /etc/</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image71.png" alt="image71" style="display: block; margin-left: auto; margin-right: auto;" height="573" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po skopiowaniu pliku należy do niego wprowadzić dane według poniższego schematu (zanim zaczniesz wprowadzać zmiany wykonaj kopię pliku - tak na wszelki wypadek) :</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: 'Courier New';">[libdefaults]<br /> default_realm = pełna_nazwa_domeny<br /> dns lookup_realm = false<br /> dns_lookup_kdc = true<br /> [realms] <br /> pełna_nazwa_domeny = { <br /> kdc = nazwa_komputera.pełna_nazwa_domeny<br /> admin_server = nazwa_komputera.pełna_nazwa_domeny<br /> default_domain = pełna_nazwa_domeny<br /> }</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image72.png" alt="image72" style="display: block; margin-left: auto; margin-right: auto;" height="500" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Drugą bardzo ważną zmianą jest skonfigurowanie serwera DNS tak aby wszystkie zapytania, które serwer nie może rozwiązać przekazywał dalej. W tym celu musimy przejść do edycji pliku <strong>/usr/local/samba/etc/smb.conf</strong> i w sekcji <strong>dns forwarder</strong> wpisać adres serwera DNS (w scenariuszu został użyty ogólnie dostępny serwer Google ale nic nie stoi na przeszkodzie aby wskazać na własny serwer DNS)</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image73.png" alt="image73" style="display: block; margin-left: auto; margin-right: auto;" height="522" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc po wszystkich trudach, przyszła pora aby uruchomić serwer i sprawdzić czy działa on prawidłowo. Uruchomimy serwer w trybie jednowątkowym. By serwer zaczął działać wydaj polecenie: <strong>samba -i -M single</strong> wydanie polecenia powinno skutkować otrzymaniem ekranu podobnego jak na poniższym zrzucie.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image74.png" alt="image74" style="display: block; margin-left: auto; margin-right: auto;" height="248" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Jak widać powyżej nie otrzymaliśmy żadnych komunikatów o błędach, serwer powinien działać prawidłowo ale (czy zawsze musi być jakieś ALE???) by mieć pewność przeprowadzimy dodatkową weryfikację.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Kluczowym zagadnieniem świadczenia przez serwer usług opartych o Active Directory jest prawidłowe działanie serwera DNS tak więc proces sprawdzania zaczniemy właśnie od serwera DNS. Do zlokalizowania kontrolerów domeny usługa Active Directory używa rekordów SRV, krytyczne są rekordy, które pozwalają na zlokalizowanie komputerów, które świadczą usługi związane z obsługą protokołu LDAP i Kerberos. Aby możliwa była lokalizacja tych hostów odpowiednie rekordy SRV muszą zostać umieszczone w konfiguracji serwera DNS. Naszym celem będzie sprawdzenie czy wyżej wymienione rekordy istnieją.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby dokonać sprawdzenia rekordu usługi Kerberos wydaj polecenie: <strong>host -t SRV _kerberos._udp.firma.local</strong> Jak widać poniżej rekord taki istnieje a rozwiązana nazwa wskazuje na host <strong>debian.firma.local</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image75.png" alt="image75" style="display: block; margin-left: auto; margin-right: auto;" height="147" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby dokonać sprawdzenia rekordu usługi LDAP wydaj polecenie: <strong>host -t SRV _ldap._tcp.firma.local</strong> Jak widać poniżej rekord taki istnieje a rozwiązana nazwa wskazuje na host <strong>debian.firma.local</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image76.png" alt="image76" style="display: block; margin-left: auto; margin-right: auto;" height="147" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Dodatkowo możemy sprawdzić rozwiązywanie nazw serwisów dostępnych w Internecie.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image77.png" alt="image77" style="display: block; margin-left: auto; margin-right: auto;" height="181" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Sprawdzenie poprawności działania serwera LDAP możemy dokonać za pomocą polecenia: <strong>ldapsearch -x -h localhost -s base -D cn=administrator,cn=Users,dc=firma,dc=local -W</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong>gdzie:</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-x</strong> wykorzystanie protokołu Simple Authentication and Security Layer, SASL (protokół wykorzystywany celem udostępnienia zasobów katalogu w zależności od przydzielonych uprawnień)</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-h</strong> zdefiniowanie adresu hosta,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-s <zasięg></strong> parametr określa zasięg wyszukiwania. Zasięg może przybierać wartość <strong>base</strong>, <strong>one</strong> lub <strong>sub</strong>. Użyta wartość <strong>base</strong> określa wyszukiwanie podstawowe,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-D <szukana_nazwa/kontener></strong> określa poszukiwaną nazwę, szukany kontener,</p>
<p style="margin-bottom: 0.0001pt; text-align: left; margin-left: 60px;"><strong>-W</strong> włączenie monitu podania hasła.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wydaniu polecenia będziemy poproszeni o podanie hasła administratora domeny, podanie hasła spowoduje odszukanie i podanie informacji o kontenerze.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image78.png" alt="image78" style="display: block; margin-left: auto; margin-right: auto;" height="652" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Sprawdzanie poprawności udostępniania udziałów możemy dokonać za pomocą polecenia: <strong>/usr/local/samba/bin/smbclient -L localhost -U% </strong>Jak widać poniżej udziały zostały udostępnione prawidłowo.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image79.png" alt="image79" style="display: block; margin-left: auto; margin-right: auto;" height="472" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">I ostatnim testem jakim wykonamy jest sprawdzenie dostępności serwera Kerberos. Dostępność sprawdzimy za pomocą polecenia: <strong>kinit administrator(małpa)FIRMA.LOCAL</strong> Po wywołaniu polecenia zostaniemy poproszeni o podanie hasła administratora domeny Active Directory. Po poprawnym podaniu hasła zostaniemy poinformowani o długości ważności naszego hasła.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image80.png" alt="image80" style="display: block; margin-left: auto; margin-right: auto;" height="178" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Instalacja kontrolera domeny przebiegła prawidłowo, nowo postawiony DC działa a przeprowadzone testy zakończyły się powodzeniem.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr class="system-pagebreak" title="Zarządzanie kontrolerem domeny" />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przyszła pora aby do naszej domeny podłączyć pierwszego klienta. Na komputerze, który stanie się częścią domeny przed samym dołączeniem do domeny warto sprawdzić czy wszystkie ustawienia sieciowe są prawidłowe i co najważniejsze czy jest zachowana komunikacja pomiędzy komputerami.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Jak widać poniżej wszystko wydaje się być ustawione prawidłowo.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image81.png" alt="image81" style="display: block; margin-left: auto; margin-right: auto;" height="823" width="677" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Aby dołączyć komputer do domeny w oknie <strong>System</strong> wybieramy <strong>Menedżer urządzeń</strong> i następnie na karcie <strong>Nazwa komputera</strong> klikamy na <strong>Zmień</strong>. W oknie <strong>Zmiany nazwy komputera/domeny</strong> w sekcji <strong>Członkostwo</strong> wybieramy <strong>Domena</strong> i następnie wypisujemy nazwę domeny.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image82.png" alt="image82" style="display: block; margin-left: auto; margin-right: auto;" height="400" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wpisaniu <strong>nazwy domeny</strong> i kliknięciu na <strong>OK</strong> celem włączenia komputera do domeny trzeba będzie podać dane uwierzytelniające użytkownika mającego prawo do wykonania tej operacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image83.png" alt="image83" style="display: block; margin-left: auto; margin-right: auto;" height="271" width="439" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wpisaniu hasła powinien pojawić się komunikat powitalny informujący nas o poprawnie przeprowadzonym procesie.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image84.png" alt="image84" style="display: block; margin-left: auto; margin-right: auto;" height="171" width="256" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wykonaniu restartu maszyny komputer staje się pełnoprawnym członkiem domeny <strong>firma.local</strong>. Celem weryfikacji ustawień komputera i sprawdzenia funkcjonalności domeny możemy zalogować się na konto użytkownika domeny (w naszym przypadku mamy aktywne tylko jedno konto a mianowicie konto administratora domeny i te konto wykorzystamy do logowania).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image85.png" alt="image85" style="display: block; margin-left: auto; margin-right: auto;" height="532" width="574" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Proces logowania przebiegł prawidłowo, na karcie <strong>System</strong> komputera możemy zweryfikować wprowadzone ustawienia.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image86.png" alt="image86" style="display: block; margin-left: auto; margin-right: auto;" height="507" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Weryfikację usługi Active Directory możemy przeprowadzić za pomocą programu <strong>AdExplorer</strong>, który to program jest zaawansowaną przeglądarką a także edytorem informacji zawartych w bazie Active Directory. Aplikacja jest darmowa i jest częścią pakietu <strong>Sysinternals</strong> - <a href="http://technet.microsoft.com/pl-pl/sysinternals/bb963907.aspx">http://technet.microsoft.com/pl-pl/sysinternals/bb963907.aspx</a></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image87.png" alt="image87" style="display: block; margin-left: auto; margin-right: auto;" height="506" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zarządzanie naszą domeną będziemy przeprowadzać za pomocą oprogramowania Microsoftu. Wybór padł na to oprogramowanie z jednej tylko przyczyny ponieważ tak jest znacznie wygodniej. Konfigurację domeny wykonamy z już przyłączonego komputera. Jak pewnie zauważyłeś czytelniku przyłączony komputer pracuje pod kontrolą systemu Windows 7, ten system niestety nie ma żadnych narzędzi, które by pozwalały na wyżej wymienioną konfigurację. Gdybyśmy do domeny podłączyli system serwerowy np. Windows Server 2008 to sprawa by była prostsza gdyż system ten już na starcie zawiera wiele narzędzi gotowych do natychmiastowego użycia . Na szczęście sytuacja nie jest beznadziejna bo z pomocą przychodzi nam Microsoft. Możliwe jest wykorzystanie systemu Windows 7 do zdalnej administracji serwerem AD trzeba tylko zaopatrzyć się w odpowiednia narzędzia a tak naprawdę trzeba tylko pobrać i zainstalować dodatkowe funkcje systemu Windows. Narzędzia administracji zdalnej serwera dla systemu Windows umożliwiają administratorom zarządzanie usługą Active Directory z poziomu komputera zdalnego. Narzędzia te dobieramy ze względu na zainstalowany system i do naszej dyspozycji przygotowane są następujące zestawy:</p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>Windows 7 - </span><a href="http://www.microsoft.com/pl-PL/download/details.aspx?id=7887">http://www.microsoft.com/pl-PL/download/details.aspx?id=7887</a></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>Windows Vista - </span><a href="http://www.microsoft.com/pl-PL/download/details.aspx?id=21090">http://www.microsoft.com/pl-PL/download/details.aspx?id=21090</a></li>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>Windows XP, Server 2003 - </span><a href="http://www.microsoft.com/pl-PL/download/details.aspx?id=6315">http://www.microsoft.com/pl-PL/download/details.aspx?id=6315</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po pobraniu odpowiedniej wersji oprogramowania przystępujemy do instalacji. Instalacja sprowadza się do zaakceptowania postanowień licencyjnych gdzie po akceptacji następuje kopiowanie plików.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image88.png" alt="image88" style="display: block; margin-left: auto; margin-right: auto;" height="396" width="561" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zainstalowane narzędzia powinny być dostępne w <strong>Narzędziach administracyjnych.</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image89.png" alt="image89" style="display: block; margin-left: auto; margin-right: auto;" height="420" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Gdyby tak się nie stało (rysunek powyżej) należy przejść do <strong>Panelu Sterowania</strong> i dalej wybrać <strong>Programy i funkcje</strong> a następnie <strong>Włącz lub wyłącz funkcje systemu Windows</strong>. Z dostępnej listy wybieramy te narzędzia, które nas interesują – gałąź <strong>Narzędzia administracji zdalnej serwera</strong> (najważniejsze są te funkcje, które dotyczą usługi Active Directory).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image90.png" alt="image90" style="display: block; margin-left: auto; margin-right: auto;" height="485" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wybraniu funkcji odpowiednie skróty zostaną umieszczone w <strong>Narzędziach administracyjnych.</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image91.png" alt="image91" style="display: block; margin-left: auto; margin-right: auto;" height="578" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zainstalowane narzędzia dostępne są zarówno z poziomu narzędzi administracyjnych jak i konsoli MMC. Poniżej na rysunku pokazane narzędzia: <strong>Użytkownicy i komputery usługi Active Directory</strong>; <strong>Menedżer DNS</strong>; <strong>Zarządzanie zasadami grupy</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image92.png" alt="image92" style="display: block; margin-left: auto; margin-right: auto;" height="492" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Tak więc spróbujmy wykorzystać zainstalowane narzędzia do przeprowadzenia typowej czynności jaką jest założenie nowego konta dla użytkownika. Po wybraniu <strong>Użytkownicy i komputery usługi Active Directory </strong>i kliknięciu kontenera <strong>Users </strong>inastępnym wybraniu z menu kontekstowego <strong>Nowy</strong> – <strong>Użytkownik</strong> możemy przeprowadzić proces dodania nowego użytkownika.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image93.png" alt="image93" style="display: block; margin-left: auto; margin-right: auto;" height="384" width="451" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po uzupełnieniu wszystkich danych i ustaleniu hasła (hasło przynajmniej 7 liter i hasło musi być złożone z małych liter + dużych liter + cyfr + znaków specjalnych) będzie można utworzyć konto. W przypadku nie spełnienia warunku złożoności hasła konta nie będzie można utworzyć.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image94.png" alt="image94" style="display: block; margin-left: auto; margin-right: auto;" height="399" width="538" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po utworzeniu konta oczywiście możliwe jest wykorzystanie konta do uzyskania dostępu do komputera. Jak widać poniżej udało nam się uzyskać dostęp do konta, które należy do Jana Kowalskiego.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><img src="http://slow7.pl/images/stories/linux/debianad/image95.png" alt="image95" style="display: block; margin-left: auto; margin-right: auto;" height="530" width="547" /> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Więcej informacji na temat kont użytkowników oraz grup znajdziesz w poniższych artykułach:</p>
<ul>
<li style="padding-left: 60px;"><a href="http://slow7.pl/item/86-usluga-katalogowa-active-directory-zarzadzanie">http://slow7.pl/item/86-usluga-katalogowa-active-directory-zarzadzanie</a></li>
<li style="padding-left: 60px;"><a href="http://slow7.pl/item/85-czym-jest-grupa-w-usludze-activedirectory-tworzenie-modyfikacja-i-zarzadzanie">http://slow7.pl/item/85-czym-jest-grupa-w-usludze-activedirectory-tworzenie-modyfikacja-i-zarzadzanie</a></li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;">Oczywiście dodanie konta użytkownika do bazy AD można zrealizować bez pomocy oprogramowania Microsoftu tylko bezpośrednio na serwerze Samba.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Dodanie nowego konta można zrealizować za pomocą następującego polecenia: <strong>samba-tool user add tadnow tajnehaslo --given-name=Tadeusz --surname=Nowak </strong>Wydanie komendy powinno spowodować utworzenie konta <strong>tadnow</strong> z hasłem <strong>tajnehaslo</strong> i dodatkowo zostało zdefiniowane pole <strong>imię</strong> oraz <strong>nazwisko</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image96.png" alt="image96" style="display: block; margin-left: auto; margin-right: auto;" height="245" width="683" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Jak można zauważyć po powyższym zrzucie, że jednak operacja dodania konta zakończyła się niepowodzeniem (stąd w apapicie powyżej słowo powinno). Nowe konto nie zostało utworzone ponieważ wybrane hasło nie spełnia wymogów silnego hasła.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Reguły tworzenia haseł sprawdzimy po wydaniu polecenia: </span><strong>samba-tool domain passwordsettings show</strong> Jak widać poniżej za hasło silne jest uznawane hasło przynajmniej 7 literowe i zawierające małe litery + duże litery + liczby +znaki specjalne (opcja complexity ustawiona na on).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image97.png" alt="image97" style="display: block; margin-left: auto; margin-right: auto;" height="281" width="683" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Po wyłączeniu opcji wymuszającej utworzenie złożonego hasła za pomocą polecenia: </span><strong>samba-tool domain passwordsettings set --complexity=off</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image98.png" alt="image98" style="display: block; margin-left: auto; margin-right: auto;" height="353" width="692" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ponowne wydanie komendy nakazującej utworzenie konta <strong>tadnow</strong> kończy się sukcesem.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image99.png" alt="image99" style="display: block; margin-left: auto; margin-right: auto;" height="173" width="683" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Dodatkowe opcje związane z ustaleniem zasad tworzonych haseł możemy zdefiniować za pomocą następujących przełączników:</span></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;"><span>Wymagania co do złożoności hasła (domyślnie on) - p</span>assword complexity: <strong>--complexity=<on/off></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Przechowywania haseł w postaci zwykłego tekstu - store plaintext passwords: <strong>--store-plaintext=<on/off></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Wymuszaj tworzenie historii haseł - password history length: <strong>--history-length=<wartość></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Minimalna długość hasła - minimum password length: <strong>--min-pwd-length=<wartość></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Minimalny okres ważności hasła (dni) -minimum password age (days): <strong>--min-pwd-age=<wartość></strong></li>
<li style="margin-bottom: 0.0001pt; text-align: left;">Maksymalny okres ważności hasła (dni) - maximum password age (days): <strong>-max-pwd-age=<wartość></strong></li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><span>Dodatkowe dostępne parametry związane z tworzeniem i definiowaniem nowego konta użytkownika pokazano na poniższym zrzucie.</span></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image100.png" alt="image100" style="display: block; margin-left: auto; margin-right: auto;" height="882" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po utworzeniu konta użytkownika można przeprowadzić weryfikację wykonanych operacji poprzez wykonanie próby logowania do domeny. Logowanie zakończyło się sukcesem (rysunek niżej).</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image101.png" alt="image101" style="display: block; margin-left: auto; margin-right: auto;" height="593" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Zarządzanie sporą ilością użytkowników staje się bardzie efektywne gdy skorzystamy z zasad grup. O wiele łatwiej jest przypisać konkretne zasady do grupy w której znajdują się użytkownicy (robimy to tylko raz) niż do każdego użytkownika z osobna. Dlatego warto jest łączyć konta użytkowników o podobnych uprawnieniach i wymaganiach w grupy. Utworzenie grupy zrealizujemy za pomocą polecenia: <strong>samba-tool group add biuro --group-scope=Domain --group-type=Security</strong> Polecenie tworzy grupę <strong>biuro</strong>, grupa jest typu <strong>zabezpieczenia</strong> a zakres grupy obejmuje <strong>domenę</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image102.png" alt="image102" style="display: block; margin-left: auto; margin-right: auto;" height="136" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Do sprawdzenia poprawności utworzenia danej grupy możemy również wykorzystać narzędzia windowsowe.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image103.png" alt="image103" style="display: block; margin-left: auto; margin-right: auto;" height="509" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Weryfikację utworzonych użytkowników możemy dokonać wydając polecenie: <strong>samba-tool user list</strong> i analogicznie utworzonych grup: <strong>samba-tool group list</strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image104.png" alt="image104" style="display: block; margin-left: auto; margin-right: auto;" height="204" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Sprawdzenie członków danej grupy wykonujemy za pomocą polecenia: <strong>samba-tool group listmembers <nazwa_grupy></strong> Poniżej sprawdzenie członków grupy <strong>biuro</strong> oraz <strong>domain admins</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image105.png" alt="image105" style="display: block; margin-left: auto; margin-right: auto;" height="167" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Jak widać powyżej do grupy <strong>biuro</strong> nie jest przypisany żaden użytkownik natomiast w grupie <strong>domain admins</strong> znajduje się jeden użytkownik <strong>administrator</strong>. Przypisanie użytkownika do danej grupy dokonujemy za pomocą komendy: <strong>samba-tool group addmembers <nazwa_grupy> <użykownik></strong> tak więc aby dodać użytkownika <strong>tadnow</strong> do grupy <strong>biuro</strong> wydaj polecenie: <strong>samba-tool group addmembers biuro tadnow </strong>Po dodaniu użytkownika do grupy dokonujemy weryfikacji wykonanej operacji.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image106.png" alt="image106" style="display: block; margin-left: auto; margin-right: auto;" height="169" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Przynależność danego użytkownika do grupy możemy również zweryfikować za pomocą przystawki <strong>Użytkownicy i komputery usługi Active Directory</strong>.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image107.png" alt="image107" style="display: block; margin-left: auto; margin-right: auto;" height="539" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Ostatnią naszą czynnością jest włączenie funkcji translacji adresów pomiędzy siecią LAN (10.0.0.0/24) a siecią mającą dostęp do Internetu (192.168.0.0/24). Włączenie funkcji pozwoli na uzyskanie dostępu do sieci Internet dla komputerów znajdujących się po stronie sieci lokalnej.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Usługę przekazywania pakietów pomiędzy sieciami włączymy wydając następujące polecenia:</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>sysctl -w net.ipv4.conf.all.forwarding=1<br />iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE<br />iptables -A FORWARD -s 10.0.0.0/24 -i eth0 -j ACCEPT</span></strong></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"><strong>gdzie:</strong></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li style="margin-bottom: 0.0001pt; text-align: left;">eth0 – interfejs po stronie sieci LAN,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;">eth1 – interfejs z dostepem do Internetu,</li>
<li style="margin-bottom: 0.0001pt; text-align: left;">10.0.0.0/24 0 - sieć lokalna, która ma uzyskać dostęp do Internetu.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image108.png" alt="image108" style="display: block; margin-left: auto; margin-right: auto;" height="249" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">Po wprowadzeniu wszystkich poleceń komputery znajdujące się w sieci 10.0.0.0/24 uzyskują dostęp do sieci Internet.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> <img src="http://slow7.pl/images/stories/linux/debianad/image109.png" alt="image109" style="display: block; margin-left: auto; margin-right: auto;" height="448" width="700" /></p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: left;">I na tym etapie chciałbym zakończyć swój wpis. Przedstawiony przeze mnie sposób konfiguracji serwera Samba 4 do korzystania z usługi Active Directory można oczywiście rozwinąć o dodatkową konfigurację, bo serwer Samba to nie tylko użytkownicy, grupy czy jednostki organizacyjne ale to też usługi współdzielenia plików czy usługi drukowania. Ale te dodatkowe usługi to już temat na kolejny wpis.</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: center;">{mp4}debian/debian_ad{/mp4}</p>
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<hr />
<p style="margin-bottom: 0.0001pt; text-align: left;"> </p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><em><strong>BIBLIOGRAFIA</strong></em></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="https://git.wiki.kernel.org/index.php/GitHosting">https://git.wiki.kernel.org/index.php/GitHosting</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://repo.or.cz/w/Samba.git">http://repo.or.cz/w/Samba.git</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://ubuntuforums.org/showthread.php?t=2146198">http://ubuntuforums.org/showthread.php?t=2146198</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://crunchbang.org/forums/viewtopic.php?pid=400466">http://crunchbang.org/forums/viewtopic.php?pid=400466</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="https://www.youtube.com/watch?v=OVrRK8oACBI">https://www.youtube.com/watch?v=OVrRK8oACBI</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://www.samba.org.pl/2013/09/active-directory-na-linuxie-kompletny.html">http://www.samba.org.pl/2013/09/active-directory-na-linuxie-kompletny.html</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="https://wiki.samba.org/index.php/Samba_4/OS_Requirements">https://wiki.samba.org/index.php/Samba_4/OS_Requirements</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://jakilinux.org/linux/debian/instalacja-i-konfiguracja-domowego-serwera-plikow/">http://jakilinux.org/linux/debian/instalacja-i-konfiguracja-domowego-serwera-plikow/</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://www.samba.org.pl/2013/03/samba4-jako-podstawowy-kontroler-domeny.html">http://www.samba.org.pl/2013/03/samba4-jako-podstawowy-kontroler-domeny.html</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://emarcel.com/kurs-bash/">http://emarcel.com/kurs-bash/</a></p>
<p style="margin-bottom: 0.0001pt; text-align: right;"><a href="http://opentodo.net/2013/01/samba4-as-ad-domain-controller-on-centos-6/">http://opentodo.net/2013/01/samba4-as-ad-domain-controller-on-centos-6/</a></p>
<p> </p></div>WiFi a'la Linux2013-12-09T21:25:41+00:002013-12-09T21:25:41+00:00http://slow7.pl/linux/item/75-wifi-a-la-linuxpikolo[email protected]<div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/68b62085e41e8f225811766f8d5eb2bb_S.jpg" alt="WiFi a'la Linux" /></div><div class="K2FeedIntroText"><p style="text-align: left;">Artykuł jest uzupełnieniem wpisu <a href="http://slow7.pl/item/49-wifi-bez-tajemnic"><strong>WiFi bez tajemnic</strong></a> a mówiący o konfiguracji sieci bezprzewodowych lecz tym razem z punktu widzenia systemu Linux.</p>
</div><div class="K2FeedFullText">
<p style="text-align: left;"> </p>
<p style="text-align: left;">Konfiguracja związana z obsługą sieci WiFi w systemie Linux sprowadza się do wykorzystania kilku poleceń konsoli. Polecenia te to:</p>
<ul style="text-align: left;">
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li><strong>ifconfig</strong> – narzędzie służące do zmiany ustawień interfejsów sieciowych zainstalowanych w systemie,</li>
<li><strong>iwconfig</strong> – główne narzędzie służące do konfiguracji kart bezprzewodowych,</li>
<li><strong>iwlist</strong> – narzędzie informacyjne dostarcza nam dane na temat wykorzystywanego interfejsu,</li>
<li><strong>iwgetid</strong> – narzędzie informacyjne,</li>
<li><strong>iwevent</strong> – narzędzie, które dostarcza nam informacje generowane przez sterownik karty WiFi np. zmiana ustawień karty sieciowej.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="text-align: left;">Polecenie <strong>ifconfig</strong> wydane bez parametrów wyświetla listę wszystkich interfejsów.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image1.png" alt="image1" width="700" height="487" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Włączenie interfejsu następuje po wydaniu polecenia <strong>ifconfig <nazwa_interfejsu></strong> <strong>up</strong> natomiast jego wyłączenie po wydaniu <strong>ifconfig <nazwa_interfejsu></strong> <strong>down</strong> Jeśli podczas testowania poniższych komend, któreś z poleceń Ci nie zadziała spróbuj wyłączyć dany interfejs do, którego polecenie się odnosi. Również trzeba mieć na uwadze, że niektóre komendy będą działać tylko z określonymi urządzeniami. Więc bardzo często dojdzie do sytuacji w której otrzymasz informacje, że dane polecenie jest nieobsługiwane i nie może być wykonane.</p>
<p style="text-align: left;">Warto wiedzieć, że podczas wydawania poleceń nie musimy ich kończyć ponieważ gdy istnieje tylko jedyne dopasowanie do określonej komendy system uzna je jako napisane do końca. A dodatkowo komendy możemy dopełniać poprzez używanie klawisza TAB. Czyli np. polecenie <strong>iwlist wlan0 scannning </strong>(jako te poprawne) jest tożsame z poleceniem<strong> iwlist wlan0 scan </strong>ponieważ <strong>scan</strong> jest jedynym pasującym dopasowaniem do <strong>scannning</strong>. Powyższe zasady nie są jakąś ogólnie przyjętą wykładnią i mogą nie mieć zastosowania we wszystkich wersjach systemu Linux.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image2.png" alt="image2" width="700" height="112" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><span>Pierwszą grupą poleceń są komendy <strong>iwlist</strong>. </span>Polecenie <strong>iwlist</strong> używane jest do uzyskania informacji na temat podstawowych parametrów naszej karty bezprzewodowej wraz z niektórymi informacjami na temat dostępnych sieci bezprzewodowych. Polecenie <strong>iwlist</strong> dopełnia informacje uzyskane dzięki komendzie <strong>iwconfig</strong>.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image3.png" alt="image3" width="700" height="364" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Podstawowym poleceniem z którym będziemy mieli najczęściej do czynienia jest polecenie <strong>iwlist</strong> służące do wykrycia sieci bezprzewodowych. A więc by uzyskać listę wszystkich dostępnych sieci bezprzewodowych wydajemy polecenie <strong>iwlist <nazwa_interfejsu> scannning</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image4.png" alt="image4" width="700" height="487" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Wydanie polecenia <strong>iwlist <nazwa_interfejsu> channel</strong> wyświetli nam listę dostępnych częstotliwości i kanałów obsługiwanych przez kartę WiFi.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image5.png" alt="image5" width="700" height="595" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Wydanie polecenia <strong>iwlist <nazwa_interfejsu> frequency </strong>będzie skutkowało wynikiem podobnym do poprzedniego.</p>
<p style="text-align: left;">Komenda <strong>iwlist <nazwa_interfejsu> rate</strong> podaje dostępne prędkości transmisji, razem z obecnie używaną prędkością. Taki sam efekt można uzyskać wpisując polecenie <strong>iwlist <nazwa_interfejsu> bitrate</strong>.</p>
<p style="text-align: left;">Polecenie<strong> iwlist <nazwa_interfejsu> encryption </strong>powoduje wyświetlenie informacji na temat obecnie używanego klucza, trybie bezpieczeństwa – czy sposobach weryfikacji użytkownika.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image6.png" alt="image6" width="700" height="309" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Informację na temat użytych kluczy (rodzaj, długość) uzyskasz po wydaniu komendy <strong>iwlist <nazwa_interfejsu> keys</strong> a także <strong>iwlist <nazwa_interfejsu> wpakeys</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image7.png" alt="image7" width="700" height="206" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Podstawowym poleceniem służącym do konfiguracji bezprzewodowego interfejsu jest <strong>iwconfig</strong>.</p>
<p style="text-align: left;">Wydanie polecenia<strong> iwconfig <nazwa_interfejsu> mode master</strong> powoduje ustawienie karty w trybie master. Natomiast polecenie <strong>iwconfig <nazwa_interfejsu> mode monitor</strong> nakazuje karcie przejście w tryb nasłuch (tryb RFMON) umożliwiając tym samym sniffing (przechwytywanie) pakietów sieci 802.11. Jak widać na poniższym rysunku ustawienie karty w tryb <strong>master</strong> nie powiodło się natomiast włączenie trybu <strong>monitor</strong> przebiegło bez najmniejszych problemów.</p>
<p style="text-align: left;">Te dwa tryby działania kart WiFi są najbardziej problematyczne i niestety niewiele kart potrafi je obsłużyć. Listę kart obsługujących tryb <strong>RFMON</strong> znajdziesz tutaj: <a href="http://www.aircrack-ng.org/doku.php?id=compatibility_drivers">http://www.aircrack-ng.org/doku.php?id=compatibility_drivers</a> natomiast listę kart wspierające tryb <strong>master</strong> tutaj: <a>https://help.ubuntu.com/community/WifiDocs/MasterMode</a></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image8.png" alt="image8" width="700" height="302" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Inne tryby w które możemy przestawić kartę to domyślny tryb <strong>managed</strong> (tryb klienta)ustawiany za pomocą polecenia <strong>iwconfig <nazwa_interfejsu> mode manager </strong>czy ustawienie wymuszający na karcie włączenie trybu <strong>adhoc</strong> - <strong>iwconfig <nazwa_interfejsu> mode ad-hoc</strong></p>
<p style="text-align: left;">Przećwiczmy komendy <strong>iwconfig</strong> próbując uruchomić połączenie adhoc pomiędzy dwoma komputerami a także próbując zestawić połączenie z punktem dostępowym (AP).</p>
<p style="text-align: left;">Otwieramy terminal i uruchamiamy go w trybie root - <strong>sudo su</strong>. Przejście w ten tryb nastąpi po podaniu hasła.</p>
<p style="text-align: left;">Następnie wyłączamy interfejs bezprzewodowy - <strong>ifconfig <nazwa_interfejsu> down</strong> (nazwy interfejsów poznasz po wydaniu komendy <strong>ifconfig</strong>).</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image9.png" alt="image9" width="700" height="113" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">i przestawiamy naszą kartę do pracy w trybie adhoc - <strong>iwconfig <nazwa_interfejsu> mode ad-hoc</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image10.png" alt="image10" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Wybieramy kanał pracy naszej sieci - <strong>iwconfig <nazwa_interfejsu> channel 1</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image11.png" alt="image11" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /> </p>
<p style="text-align: left;">Ustawiamy nazwę tworzonej sieci bezprzewodowej - <strong>iwconfig <nazwa_interfejsu> essid <"<span>nazwa_sieci</span>"></strong> W naszym scenariuszu przyjęto nazwę sieci adhocTest.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image12.png" alt="image12" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">By zabezpieczyć naszą sieć możemy ustawić hasło - <strong>iwconfig <nazwa_interfejsu> key s:<<span>hasło> </span></strong><span>klucz jest ustawiany jako ciąg znaków ASCII. Możemy również zdecydować się na użycie 64-bitowego klucza </span>WEP - <strong>iwconfig <nazwa_interfejsu> key 11111111</strong> bądź wybrać klucz 128<span>-bitowy <strong>iwconfig <nazwa_interfejsu> key 1111-1111-1111-1111 </strong>By nie komplikować sobie życia, ponieważ tryb adhoc ustawia się najczęściej by komuś na szybko udostępnić połączenie internetowe lub przesłać określone pliki najlepiej wybrać <strong>iwconfig </strong></span><strong><nazwa_interfejsu> <span>key off</span></strong><span> by wyłączyć szyfrowanie WEP oraz <strong>iwconfig </strong></span><strong><nazwa_interfejsu> <span>key open</span></strong><span> by włączyć tryb otwarty.</span></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image13.png" alt="image13" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image14.png" alt="image14" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Aktywacja tak utworzonej sieci następuje po podniesieniu interfejsu WiFi - <strong>ifconfig <nazwa_interfejsu> up</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image15.png" alt="image15" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Ostatnim krokiem jest przypisanie adresu IP komputerowi na którym jest tworzona sieć, następuje to po wydaniu polecenia - <strong>ifconfig <nazwa_interfejsu> <adres_IP> netmask <adres_maski></strong> Komputerowi rozgłaszającemu sieć adhoc został przypisany adres IP 10.0.0.1</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image16.png" alt="image16" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Od tego momentu sieć powinna być dostępna i rozgłaszana, sprawdźmy to. Jak widać poniżej sieć jest widoczna a więc spróbujmy podłączyć się do niej. Proces podłączenia przebiega prawidłowo, następuje uzyskanie dostępu do sieci. Żeby było ciekawiej sieć adhoc jest tworzona na systemie Linux Kali natomiast klientem jest Windows 7.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image17.png" alt="image17" width="200" height="282" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Sprawdzenie dostępnych sieci możemy również wykonać z poziomu command line wydając polecenie <strong>netsh wlan show networks mode=bssid</strong> jak widać uzyskane parametry są zgodne z tymi, które wybraliśmy podczas tworzenia sieci (nazwa sieci, uwierzytelnienie czy wybrany kanał).</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image18.png" alt="image18" width="677" height="246" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Ostatnim krokiem jest przypisanie adresu IP zgodnego z adresacją sieci przyjętą podczas tworzenia sieci adhoc. W naszym scenariuszu adres IP może zostać wybrany z przedziału 10.0.0.2 do 10.0.0.254. Klientowi korzystającemu z Windows 7 zostaje przypisany adres IP 10.0.0.2</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image19.png" alt="image19" width="414" height="461" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po operacji przypisania adresu nie pozostaje nam nic innego jak tylko sprawdzenie poprawności komunikacji. Sprawdźmy czy uda nam się skomunikować z komputerem hosta sieci adhoc. Wysłanie pakietu ICMP (ping do 10.0.0.1) kończy się sukcesem.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image20.png" alt="image20" width="677" height="342" style="display: block; margin-left: auto; margin-right: auto;" /> </p>
<p style="text-align: left;">Również możliwa jest komunikacja z komputerem klientem. W tym przypadku uzyskujemy dostęp do folderów udostępnionych na maszynie z zainstalowanym Windows 7.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image21.png" alt="image21" width="700" height="511" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Znacznie częściej będziemy jednak łączyli się z punktami dostępowymi niż tworzyli sieć typu adhoc. A więc po niżej przedstawiam trzy możliwe scenariusz z jakimi będziemy mogli się spotkać.</p>
<ol style="text-align: left;">
<li style="list-style-type: none;"><ol>
<li style="list-style-type: none;"><ol>
<li>połączenie z siecią WiFi bez zabezpieczeń – sieć otwarta,</li>
<li>połączenie z siecią WiFi zabezpieczoną kluczem WEP,</li>
<li>oraz połączenie z siecią zabezpieczoną kluczem WEP2</li>
</ol></li>
</ol></li>
</ol>
<p style="text-align: left;">Pierwszym krokiem do ustanowienia połączenia z siecią bezprzewodową jest sprawdzenie nazwy szukanej sieci Wifi, czyli wykorzystujemy już znane nam polecanie <strong>iwlist <nazwa_interfejsu> scan</strong>.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image22.png" alt="image22" width="696" height="547" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Ustanowienia połączenia z AP następuje po wydaniu polecenia <strong>iwconfig <nazwa_interfejsu> essid <nazwa_sieci> </strong>W przedstawianym scenariuszu następuje połączenie z siecią bezprzewodową Temp za pomocą interfejsu wlan0. Jak widać sieć jest otwarta ponieważ nie podajemy żadnego klucza (uwidocznione jest to również na rysunku powyżej – sekcja: <strong>Encryption key: off</strong>).</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image23.png" alt="image23" width="686" height="114" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po połączeniu z siecią co obrazuje nam uruchomiona usługa zdarzeń – <strong>iwevent </strong>należy usyskać adres IP.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image24.png" alt="image24" width="672" height="212" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Adres ten możemy przypisać statycznie za pomocą polecenia<strong> ifconfig <nazwa_interfejsu> <adres_IP> netmask <adres_maski></strong> bądź skorzystać z DHCP. My decydujemy się na to drugie rozwiązanie a więc by uzyskać adres IP wydajemy polecenie <strong>dhclient <nazwa_interfejsu>.</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image25.png" alt="image25" width="711" height="275" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po wydaniu polecenia nasz host uzyskał dostęp do Internetu.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image26.png" alt="image26" width="700" height="221" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Drugim omawianym przypadkiem jest podłączenie do sieci, która jest zabezpieczona kluczem WEP. W naszym scenariuszu również dokonujemy podłączenia do sieci Temp przy czym hasło tej sieci stanowi klucz: 9999999999.</p>
<p style="text-align: left;"> <img src="http://slow7.pl/images/stories/linux/wifilinux/image27.png" alt="image27" width="418" height="307" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po wydaniu polecenia <strong>iwlist <nazwa_interfejsu> scan</strong> ukazuje się nam lista dostępnych sieci bezprzewodowych, jak widać sieć TEMP jest zabezpieczona – <strong>encryption key: on</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image28.png" alt="image28" width="670" height="461" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Podłączenia do sieci dokonujemy bardzo podobnie jak to było w przypadku sieci otwartej lecz dodajemy dodatkowy parametr <strong>key</strong>. Czyli w naszym przypadku polecenie będzie miało postać <strong>iwconfig <nazwa_interfejsu> essid <nazwa_sieci> key <hasło_sieci></strong>. W przypadku korzystania z klucza w formacie ASCI nasze polecenie przyjmie postać <strong>iwconfig <nazwa_interfejsu> essid <nazwa_sieci> key s:<hasło_sieci</strong></p>
<p style="text-align: left;">I na koniec przypisanie adresu IP do interfejsu by po chwili móc się cieszyć połączeniem z Internetem.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image29.png" alt="image29" width="668" height="346" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image30.png" alt="image30" width="668" height="143" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Ostatnią sytuacją jest scenariusz z którym będziemy spotykać się najczęściej czyli łączność z tą siecią w której zastosowano mechanizm WPA2. Niestety połączenie z siecią bezprzewodową, która korzysta z zabezpieczeń w standardach IEEE 802.1X oraz IEEE 802.11i wiąże się z instalacją tzw. wpa_supplicant. Ale wszystko po kolei.</p>
<p style="text-align: left;">Zaczynamy od instalacji pakietu wpasupplicant. W oknie terminalu wydajemy komendę <strong>sudo aptitude install wpasupplicant </strong>(dla wiersza poleceń) dla GUI - <strong>sudo aptitude install wpasupplicant wpagui</strong></p>
<p style="text-align: left;">Po poprawnej instalacji możemy przejść do zestawienia połączenia z siecią WiFi. Jak w poprzednich przypadkach wykrywamy dostępne na danym obszarze sieci bezprzewodowe. Siecią do której będziemy się podłączać jest tradycyjnie sieć Temp. Jak widać poniżej korzysta ona z zabezpieczenia opartego na WPA2.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image31.png" alt="image31" width="700" height="538" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Zaczynamy od utworzenia pliku konfiguracyjnego w którym to będą zapisane informacje niezbędne do uzyskania uwierzytelnienia. Plik ten tworzy się za pomocą komendy <strong>wpa_passphrase <nazwa_sieci> <hasło></strong>. Dodatkowo został użyty symbol przekierowania <strong>></strong>, który to spowoduje zapisanie wygenerowanych informacji do pliku wpa.conf (katalog użytkownika) Dozwolone jest również wydanie samego polecenia <strong>wpa_passphrase <nazwa_sieci> </strong>wtedy program czekana wprowadzenie hasła.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image32.png" alt="image32" width="700" height="425" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Nie pozostało nam nic innego jak użyć tak przygotowany plik do zestawienia połączenia z siecią bezprzewodową. Aplikacja wpa_supplicant korzysta z następujących przełączników:</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image33.png" alt="image33" width="700" height="785" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">By połączyć się z siecią WiFi musimy wydać polecenie: <strong>wpa_supplicant -D<wybrane_sterowniki> –i<interfejs> –c<ścieżka_do_pliku_conf></strong> czyli w naszym przypadku polecenie przyjmie postać - <strong>wpa_supplicant -Dwext –iwlan0 –c/root/wpa.conf</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image34.png" alt="image34" width="700" height="166" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Tradycyjnie już ostatnią czynnością jest uzyskanie adresu IP, by po jej wykonaniu</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image35.png" alt="image35" width="672" height="292" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">móc cieszyć się połączeniem z Internetem.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image36.png" alt="image36" width="672" height="445" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Gdyby z jakiś powodów połączenie nie doszło do skutku by zresetować ustawienia należy posłużyć się komendami: <strong>ifconfig <interfejs> down</strong> (wyłączenie interfejsu sieciowego) oraz <strong>killall wpa_supplicant dhclient </strong>(wyłączenie aplikacji wpa_supplicant wraz z klientem DHCP).</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image37.png" alt="image37" width="668" height="121" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">By adresy IP przypisać statycznie musimy wykonać następujące czynności:</p>
<p style="text-align: left;">1. Przypisać adres IP do interfejsu sieciowego za pomocą polecenia <strong>ifconfig <nazwa_interfejsu> <adres_IP> netmask <adres_maski> </strong> - oczywiście adres musi być zgodny z przyjętą adresacją sieci</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image38.png" alt="image38" width="666" height="113" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">2. Ustalić adres bramy domyślnej za pomocą komendy:</p>
<p style="text-align: left;"><strong>route add default gw <adres_IP_bramy> <nazwa_interfejsu></strong></p>
<p style="text-align: left;">Poprawność dodania trasy do tablicy routingu możemy sprawdzić wykorzystując do tego polecenie:<strong> route</strong> i jak widać została dodana trasa 0.0.0.0, która cały ruch (bo wszystkie pakiety pasują do tego wpisu), kieruje poprzez interfejs wlan0 na adres 192.168.0.1</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image39.png" alt="image39" width="665" height="236" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">3. Adresy DNS dodajemy/zmieniamy poprzez edycję pliku /etc/resolf.conf, serwer DNS dodajemy za pomocą wpisu <strong>nameserver <adres_serwera_DNS></strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image40.png" alt="image40" width="659" height="527" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po wykonaniu tych wszystkich czynności uzyskamy dostęp do Internetu.</p>
<p style="text-align: left;"> </p>
<hr />
<p style="text-align: left;"> </p>
<p style="text-align: left;"><strong>Bibliografia:</strong></p>
<ol>
<li style="text-align: left;"><a href="http://www.wirelessdefence.org/Contents/LinuxWirelessCommands.htm">http://www.wirelessdefence.org/Contents/LinuxWirelessCommands.htm</a></li>
<li style="text-align: left;"><a href="http://hxr99.blogspot.com/2011/10/how-to-set-wireless-ad-hoc-in-linux.html">http://hxr99.blogspot.com/2011/10/how-to-set-wireless-ad-hoc-in-linux.html</a></li>
<li style="text-align: left;"><a href="http://www.linuxcommand.org/man_pages/iwconfig8.html">http://www.linuxcommand.org/man_pages/iwconfig8.html</a></li>
<li style="text-align: left;"><a href="http://linux.die.net/man/5/wpa_supplicant.conf">http://linux.die.net/man/5/wpa_supplicant.conf</a></li>
<li style="text-align: left;"><a href="http://linux.icydog.net/wpa.php">http://linux.icydog.net/wpa.php</a></li>
<li style="text-align: left;"><a href="http://www.pantz.org/software/wpa_supplicant/wirelesswpa2andlinux.html">http://www.pantz.org/software/wpa_supplicant/wirelesswpa2andlinux.html</a></li>
<li style="text-align: left;"><a href="http://www.nibyblog.pl/wszystkie-przydatne-komendy-wifi-w-linuksie-66.html">http://www.nibyblog.pl/wszystkie-przydatne-komendy-wifi-w-linuksie-66.html</a></li>
<li style="text-align: left;"><a href="http://www.cyberciti.biz/faq/howto-debian-ubutnu-set-default-gateway-ipaddress/">http://www.cyberciti.biz/faq/howto-debian-ubutnu-set-default-gateway-ipaddress/</a></li>
</ol></div><div class="K2FeedImage"><img src="http://slow7.pl/media/k2/items/cache/68b62085e41e8f225811766f8d5eb2bb_S.jpg" alt="WiFi a'la Linux" /></div><div class="K2FeedIntroText"><p style="text-align: left;">Artykuł jest uzupełnieniem wpisu <a href="http://slow7.pl/item/49-wifi-bez-tajemnic"><strong>WiFi bez tajemnic</strong></a> a mówiący o konfiguracji sieci bezprzewodowych lecz tym razem z punktu widzenia systemu Linux.</p>
</div><div class="K2FeedFullText">
<p style="text-align: left;"> </p>
<p style="text-align: left;">Konfiguracja związana z obsługą sieci WiFi w systemie Linux sprowadza się do wykorzystania kilku poleceń konsoli. Polecenia te to:</p>
<ul style="text-align: left;">
<li style="list-style-type: none;">
<ul>
<li style="list-style-type: none;">
<ul>
<li><strong>ifconfig</strong> – narzędzie służące do zmiany ustawień interfejsów sieciowych zainstalowanych w systemie,</li>
<li><strong>iwconfig</strong> – główne narzędzie służące do konfiguracji kart bezprzewodowych,</li>
<li><strong>iwlist</strong> – narzędzie informacyjne dostarcza nam dane na temat wykorzystywanego interfejsu,</li>
<li><strong>iwgetid</strong> – narzędzie informacyjne,</li>
<li><strong>iwevent</strong> – narzędzie, które dostarcza nam informacje generowane przez sterownik karty WiFi np. zmiana ustawień karty sieciowej.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="text-align: left;">Polecenie <strong>ifconfig</strong> wydane bez parametrów wyświetla listę wszystkich interfejsów.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image1.png" alt="image1" width="700" height="487" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Włączenie interfejsu następuje po wydaniu polecenia <strong>ifconfig <nazwa_interfejsu></strong> <strong>up</strong> natomiast jego wyłączenie po wydaniu <strong>ifconfig <nazwa_interfejsu></strong> <strong>down</strong> Jeśli podczas testowania poniższych komend, któreś z poleceń Ci nie zadziała spróbuj wyłączyć dany interfejs do, którego polecenie się odnosi. Również trzeba mieć na uwadze, że niektóre komendy będą działać tylko z określonymi urządzeniami. Więc bardzo często dojdzie do sytuacji w której otrzymasz informacje, że dane polecenie jest nieobsługiwane i nie może być wykonane.</p>
<p style="text-align: left;">Warto wiedzieć, że podczas wydawania poleceń nie musimy ich kończyć ponieważ gdy istnieje tylko jedyne dopasowanie do określonej komendy system uzna je jako napisane do końca. A dodatkowo komendy możemy dopełniać poprzez używanie klawisza TAB. Czyli np. polecenie <strong>iwlist wlan0 scannning </strong>(jako te poprawne) jest tożsame z poleceniem<strong> iwlist wlan0 scan </strong>ponieważ <strong>scan</strong> jest jedynym pasującym dopasowaniem do <strong>scannning</strong>. Powyższe zasady nie są jakąś ogólnie przyjętą wykładnią i mogą nie mieć zastosowania we wszystkich wersjach systemu Linux.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image2.png" alt="image2" width="700" height="112" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><span>Pierwszą grupą poleceń są komendy <strong>iwlist</strong>. </span>Polecenie <strong>iwlist</strong> używane jest do uzyskania informacji na temat podstawowych parametrów naszej karty bezprzewodowej wraz z niektórymi informacjami na temat dostępnych sieci bezprzewodowych. Polecenie <strong>iwlist</strong> dopełnia informacje uzyskane dzięki komendzie <strong>iwconfig</strong>.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image3.png" alt="image3" width="700" height="364" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Podstawowym poleceniem z którym będziemy mieli najczęściej do czynienia jest polecenie <strong>iwlist</strong> służące do wykrycia sieci bezprzewodowych. A więc by uzyskać listę wszystkich dostępnych sieci bezprzewodowych wydajemy polecenie <strong>iwlist <nazwa_interfejsu> scannning</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image4.png" alt="image4" width="700" height="487" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Wydanie polecenia <strong>iwlist <nazwa_interfejsu> channel</strong> wyświetli nam listę dostępnych częstotliwości i kanałów obsługiwanych przez kartę WiFi.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image5.png" alt="image5" width="700" height="595" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Wydanie polecenia <strong>iwlist <nazwa_interfejsu> frequency </strong>będzie skutkowało wynikiem podobnym do poprzedniego.</p>
<p style="text-align: left;">Komenda <strong>iwlist <nazwa_interfejsu> rate</strong> podaje dostępne prędkości transmisji, razem z obecnie używaną prędkością. Taki sam efekt można uzyskać wpisując polecenie <strong>iwlist <nazwa_interfejsu> bitrate</strong>.</p>
<p style="text-align: left;">Polecenie<strong> iwlist <nazwa_interfejsu> encryption </strong>powoduje wyświetlenie informacji na temat obecnie używanego klucza, trybie bezpieczeństwa – czy sposobach weryfikacji użytkownika.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image6.png" alt="image6" width="700" height="309" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Informację na temat użytych kluczy (rodzaj, długość) uzyskasz po wydaniu komendy <strong>iwlist <nazwa_interfejsu> keys</strong> a także <strong>iwlist <nazwa_interfejsu> wpakeys</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image7.png" alt="image7" width="700" height="206" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Podstawowym poleceniem służącym do konfiguracji bezprzewodowego interfejsu jest <strong>iwconfig</strong>.</p>
<p style="text-align: left;">Wydanie polecenia<strong> iwconfig <nazwa_interfejsu> mode master</strong> powoduje ustawienie karty w trybie master. Natomiast polecenie <strong>iwconfig <nazwa_interfejsu> mode monitor</strong> nakazuje karcie przejście w tryb nasłuch (tryb RFMON) umożliwiając tym samym sniffing (przechwytywanie) pakietów sieci 802.11. Jak widać na poniższym rysunku ustawienie karty w tryb <strong>master</strong> nie powiodło się natomiast włączenie trybu <strong>monitor</strong> przebiegło bez najmniejszych problemów.</p>
<p style="text-align: left;">Te dwa tryby działania kart WiFi są najbardziej problematyczne i niestety niewiele kart potrafi je obsłużyć. Listę kart obsługujących tryb <strong>RFMON</strong> znajdziesz tutaj: <a href="http://www.aircrack-ng.org/doku.php?id=compatibility_drivers">http://www.aircrack-ng.org/doku.php?id=compatibility_drivers</a> natomiast listę kart wspierające tryb <strong>master</strong> tutaj: <a>https://help.ubuntu.com/community/WifiDocs/MasterMode</a></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image8.png" alt="image8" width="700" height="302" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Inne tryby w które możemy przestawić kartę to domyślny tryb <strong>managed</strong> (tryb klienta)ustawiany za pomocą polecenia <strong>iwconfig <nazwa_interfejsu> mode manager </strong>czy ustawienie wymuszający na karcie włączenie trybu <strong>adhoc</strong> - <strong>iwconfig <nazwa_interfejsu> mode ad-hoc</strong></p>
<p style="text-align: left;">Przećwiczmy komendy <strong>iwconfig</strong> próbując uruchomić połączenie adhoc pomiędzy dwoma komputerami a także próbując zestawić połączenie z punktem dostępowym (AP).</p>
<p style="text-align: left;">Otwieramy terminal i uruchamiamy go w trybie root - <strong>sudo su</strong>. Przejście w ten tryb nastąpi po podaniu hasła.</p>
<p style="text-align: left;">Następnie wyłączamy interfejs bezprzewodowy - <strong>ifconfig <nazwa_interfejsu> down</strong> (nazwy interfejsów poznasz po wydaniu komendy <strong>ifconfig</strong>).</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image9.png" alt="image9" width="700" height="113" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">i przestawiamy naszą kartę do pracy w trybie adhoc - <strong>iwconfig <nazwa_interfejsu> mode ad-hoc</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image10.png" alt="image10" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Wybieramy kanał pracy naszej sieci - <strong>iwconfig <nazwa_interfejsu> channel 1</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image11.png" alt="image11" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /> </p>
<p style="text-align: left;">Ustawiamy nazwę tworzonej sieci bezprzewodowej - <strong>iwconfig <nazwa_interfejsu> essid <"<span>nazwa_sieci</span>"></strong> W naszym scenariuszu przyjęto nazwę sieci adhocTest.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image12.png" alt="image12" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">By zabezpieczyć naszą sieć możemy ustawić hasło - <strong>iwconfig <nazwa_interfejsu> key s:<<span>hasło> </span></strong><span>klucz jest ustawiany jako ciąg znaków ASCII. Możemy również zdecydować się na użycie 64-bitowego klucza </span>WEP - <strong>iwconfig <nazwa_interfejsu> key 11111111</strong> bądź wybrać klucz 128<span>-bitowy <strong>iwconfig <nazwa_interfejsu> key 1111-1111-1111-1111 </strong>By nie komplikować sobie życia, ponieważ tryb adhoc ustawia się najczęściej by komuś na szybko udostępnić połączenie internetowe lub przesłać określone pliki najlepiej wybrać <strong>iwconfig </strong></span><strong><nazwa_interfejsu> <span>key off</span></strong><span> by wyłączyć szyfrowanie WEP oraz <strong>iwconfig </strong></span><strong><nazwa_interfejsu> <span>key open</span></strong><span> by włączyć tryb otwarty.</span></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image13.png" alt="image13" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image14.png" alt="image14" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Aktywacja tak utworzonej sieci następuje po podniesieniu interfejsu WiFi - <strong>ifconfig <nazwa_interfejsu> up</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image15.png" alt="image15" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Ostatnim krokiem jest przypisanie adresu IP komputerowi na którym jest tworzona sieć, następuje to po wydaniu polecenia - <strong>ifconfig <nazwa_interfejsu> <adres_IP> netmask <adres_maski></strong> Komputerowi rozgłaszającemu sieć adhoc został przypisany adres IP 10.0.0.1</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image16.png" alt="image16" width="700" height="129" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Od tego momentu sieć powinna być dostępna i rozgłaszana, sprawdźmy to. Jak widać poniżej sieć jest widoczna a więc spróbujmy podłączyć się do niej. Proces podłączenia przebiega prawidłowo, następuje uzyskanie dostępu do sieci. Żeby było ciekawiej sieć adhoc jest tworzona na systemie Linux Kali natomiast klientem jest Windows 7.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image17.png" alt="image17" width="200" height="282" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Sprawdzenie dostępnych sieci możemy również wykonać z poziomu command line wydając polecenie <strong>netsh wlan show networks mode=bssid</strong> jak widać uzyskane parametry są zgodne z tymi, które wybraliśmy podczas tworzenia sieci (nazwa sieci, uwierzytelnienie czy wybrany kanał).</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image18.png" alt="image18" width="677" height="246" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Ostatnim krokiem jest przypisanie adresu IP zgodnego z adresacją sieci przyjętą podczas tworzenia sieci adhoc. W naszym scenariuszu adres IP może zostać wybrany z przedziału 10.0.0.2 do 10.0.0.254. Klientowi korzystającemu z Windows 7 zostaje przypisany adres IP 10.0.0.2</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image19.png" alt="image19" width="414" height="461" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po operacji przypisania adresu nie pozostaje nam nic innego jak tylko sprawdzenie poprawności komunikacji. Sprawdźmy czy uda nam się skomunikować z komputerem hosta sieci adhoc. Wysłanie pakietu ICMP (ping do 10.0.0.1) kończy się sukcesem.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image20.png" alt="image20" width="677" height="342" style="display: block; margin-left: auto; margin-right: auto;" /> </p>
<p style="text-align: left;">Również możliwa jest komunikacja z komputerem klientem. W tym przypadku uzyskujemy dostęp do folderów udostępnionych na maszynie z zainstalowanym Windows 7.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image21.png" alt="image21" width="700" height="511" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Znacznie częściej będziemy jednak łączyli się z punktami dostępowymi niż tworzyli sieć typu adhoc. A więc po niżej przedstawiam trzy możliwe scenariusz z jakimi będziemy mogli się spotkać.</p>
<ol style="text-align: left;">
<li style="list-style-type: none;"><ol>
<li style="list-style-type: none;"><ol>
<li>połączenie z siecią WiFi bez zabezpieczeń – sieć otwarta,</li>
<li>połączenie z siecią WiFi zabezpieczoną kluczem WEP,</li>
<li>oraz połączenie z siecią zabezpieczoną kluczem WEP2</li>
</ol></li>
</ol></li>
</ol>
<p style="text-align: left;">Pierwszym krokiem do ustanowienia połączenia z siecią bezprzewodową jest sprawdzenie nazwy szukanej sieci Wifi, czyli wykorzystujemy już znane nam polecanie <strong>iwlist <nazwa_interfejsu> scan</strong>.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image22.png" alt="image22" width="696" height="547" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Ustanowienia połączenia z AP następuje po wydaniu polecenia <strong>iwconfig <nazwa_interfejsu> essid <nazwa_sieci> </strong>W przedstawianym scenariuszu następuje połączenie z siecią bezprzewodową Temp za pomocą interfejsu wlan0. Jak widać sieć jest otwarta ponieważ nie podajemy żadnego klucza (uwidocznione jest to również na rysunku powyżej – sekcja: <strong>Encryption key: off</strong>).</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image23.png" alt="image23" width="686" height="114" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po połączeniu z siecią co obrazuje nam uruchomiona usługa zdarzeń – <strong>iwevent </strong>należy usyskać adres IP.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image24.png" alt="image24" width="672" height="212" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Adres ten możemy przypisać statycznie za pomocą polecenia<strong> ifconfig <nazwa_interfejsu> <adres_IP> netmask <adres_maski></strong> bądź skorzystać z DHCP. My decydujemy się na to drugie rozwiązanie a więc by uzyskać adres IP wydajemy polecenie <strong>dhclient <nazwa_interfejsu>.</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image25.png" alt="image25" width="711" height="275" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po wydaniu polecenia nasz host uzyskał dostęp do Internetu.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image26.png" alt="image26" width="700" height="221" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Drugim omawianym przypadkiem jest podłączenie do sieci, która jest zabezpieczona kluczem WEP. W naszym scenariuszu również dokonujemy podłączenia do sieci Temp przy czym hasło tej sieci stanowi klucz: 9999999999.</p>
<p style="text-align: left;"> <img src="http://slow7.pl/images/stories/linux/wifilinux/image27.png" alt="image27" width="418" height="307" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po wydaniu polecenia <strong>iwlist <nazwa_interfejsu> scan</strong> ukazuje się nam lista dostępnych sieci bezprzewodowych, jak widać sieć TEMP jest zabezpieczona – <strong>encryption key: on</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image28.png" alt="image28" width="670" height="461" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Podłączenia do sieci dokonujemy bardzo podobnie jak to było w przypadku sieci otwartej lecz dodajemy dodatkowy parametr <strong>key</strong>. Czyli w naszym przypadku polecenie będzie miało postać <strong>iwconfig <nazwa_interfejsu> essid <nazwa_sieci> key <hasło_sieci></strong>. W przypadku korzystania z klucza w formacie ASCI nasze polecenie przyjmie postać <strong>iwconfig <nazwa_interfejsu> essid <nazwa_sieci> key s:<hasło_sieci</strong></p>
<p style="text-align: left;">I na koniec przypisanie adresu IP do interfejsu by po chwili móc się cieszyć połączeniem z Internetem.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image29.png" alt="image29" width="668" height="346" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image30.png" alt="image30" width="668" height="143" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Ostatnią sytuacją jest scenariusz z którym będziemy spotykać się najczęściej czyli łączność z tą siecią w której zastosowano mechanizm WPA2. Niestety połączenie z siecią bezprzewodową, która korzysta z zabezpieczeń w standardach IEEE 802.1X oraz IEEE 802.11i wiąże się z instalacją tzw. wpa_supplicant. Ale wszystko po kolei.</p>
<p style="text-align: left;">Zaczynamy od instalacji pakietu wpasupplicant. W oknie terminalu wydajemy komendę <strong>sudo aptitude install wpasupplicant </strong>(dla wiersza poleceń) dla GUI - <strong>sudo aptitude install wpasupplicant wpagui</strong></p>
<p style="text-align: left;">Po poprawnej instalacji możemy przejść do zestawienia połączenia z siecią WiFi. Jak w poprzednich przypadkach wykrywamy dostępne na danym obszarze sieci bezprzewodowe. Siecią do której będziemy się podłączać jest tradycyjnie sieć Temp. Jak widać poniżej korzysta ona z zabezpieczenia opartego na WPA2.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image31.png" alt="image31" width="700" height="538" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Zaczynamy od utworzenia pliku konfiguracyjnego w którym to będą zapisane informacje niezbędne do uzyskania uwierzytelnienia. Plik ten tworzy się za pomocą komendy <strong>wpa_passphrase <nazwa_sieci> <hasło></strong>. Dodatkowo został użyty symbol przekierowania <strong>></strong>, który to spowoduje zapisanie wygenerowanych informacji do pliku wpa.conf (katalog użytkownika) Dozwolone jest również wydanie samego polecenia <strong>wpa_passphrase <nazwa_sieci> </strong>wtedy program czekana wprowadzenie hasła.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image32.png" alt="image32" width="700" height="425" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Nie pozostało nam nic innego jak użyć tak przygotowany plik do zestawienia połączenia z siecią bezprzewodową. Aplikacja wpa_supplicant korzysta z następujących przełączników:</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image33.png" alt="image33" width="700" height="785" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">By połączyć się z siecią WiFi musimy wydać polecenie: <strong>wpa_supplicant -D<wybrane_sterowniki> –i<interfejs> –c<ścieżka_do_pliku_conf></strong> czyli w naszym przypadku polecenie przyjmie postać - <strong>wpa_supplicant -Dwext –iwlan0 –c/root/wpa.conf</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image34.png" alt="image34" width="700" height="166" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Tradycyjnie już ostatnią czynnością jest uzyskanie adresu IP, by po jej wykonaniu</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image35.png" alt="image35" width="672" height="292" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">móc cieszyć się połączeniem z Internetem.</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image36.png" alt="image36" width="672" height="445" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Gdyby z jakiś powodów połączenie nie doszło do skutku by zresetować ustawienia należy posłużyć się komendami: <strong>ifconfig <interfejs> down</strong> (wyłączenie interfejsu sieciowego) oraz <strong>killall wpa_supplicant dhclient </strong>(wyłączenie aplikacji wpa_supplicant wraz z klientem DHCP).</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image37.png" alt="image37" width="668" height="121" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">By adresy IP przypisać statycznie musimy wykonać następujące czynności:</p>
<p style="text-align: left;">1. Przypisać adres IP do interfejsu sieciowego za pomocą polecenia <strong>ifconfig <nazwa_interfejsu> <adres_IP> netmask <adres_maski> </strong> - oczywiście adres musi być zgodny z przyjętą adresacją sieci</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image38.png" alt="image38" width="666" height="113" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">2. Ustalić adres bramy domyślnej za pomocą komendy:</p>
<p style="text-align: left;"><strong>route add default gw <adres_IP_bramy> <nazwa_interfejsu></strong></p>
<p style="text-align: left;">Poprawność dodania trasy do tablicy routingu możemy sprawdzić wykorzystując do tego polecenie:<strong> route</strong> i jak widać została dodana trasa 0.0.0.0, która cały ruch (bo wszystkie pakiety pasują do tego wpisu), kieruje poprzez interfejs wlan0 na adres 192.168.0.1</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image39.png" alt="image39" width="665" height="236" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">3. Adresy DNS dodajemy/zmieniamy poprzez edycję pliku /etc/resolf.conf, serwer DNS dodajemy za pomocą wpisu <strong>nameserver <adres_serwera_DNS></strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><img src="http://slow7.pl/images/stories/linux/wifilinux/image40.png" alt="image40" width="659" height="527" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">Po wykonaniu tych wszystkich czynności uzyskamy dostęp do Internetu.</p>
<p style="text-align: left;"> </p>
<hr />
<p style="text-align: left;"> </p>
<p style="text-align: left;"><strong>Bibliografia:</strong></p>
<ol>
<li style="text-align: left;"><a href="http://www.wirelessdefence.org/Contents/LinuxWirelessCommands.htm">http://www.wirelessdefence.org/Contents/LinuxWirelessCommands.htm</a></li>
<li style="text-align: left;"><a href="http://hxr99.blogspot.com/2011/10/how-to-set-wireless-ad-hoc-in-linux.html">http://hxr99.blogspot.com/2011/10/how-to-set-wireless-ad-hoc-in-linux.html</a></li>
<li style="text-align: left;"><a href="http://www.linuxcommand.org/man_pages/iwconfig8.html">http://www.linuxcommand.org/man_pages/iwconfig8.html</a></li>
<li style="text-align: left;"><a href="http://linux.die.net/man/5/wpa_supplicant.conf">http://linux.die.net/man/5/wpa_supplicant.conf</a></li>
<li style="text-align: left;"><a href="http://linux.icydog.net/wpa.php">http://linux.icydog.net/wpa.php</a></li>
<li style="text-align: left;"><a href="http://www.pantz.org/software/wpa_supplicant/wirelesswpa2andlinux.html">http://www.pantz.org/software/wpa_supplicant/wirelesswpa2andlinux.html</a></li>
<li style="text-align: left;"><a href="http://www.nibyblog.pl/wszystkie-przydatne-komendy-wifi-w-linuksie-66.html">http://www.nibyblog.pl/wszystkie-przydatne-komendy-wifi-w-linuksie-66.html</a></li>
<li style="text-align: left;"><a href="http://www.cyberciti.biz/faq/howto-debian-ubutnu-set-default-gateway-ipaddress/">http://www.cyberciti.biz/faq/howto-debian-ubutnu-set-default-gateway-ipaddress/</a></li>
</ol></div>