System operacyjny UNIX
laboratorium

  • Celem laboratorium jest zapoznanie się z podstawami pracy w systemie operacyjnym UNIX zarówno od strony użytkownika końcowego, jak i od strony administratora.
  • Podczas zajęć wykorzystywany będzie SO SUN Solaris 8 zgodny z SO UNIX SVR4, zainstalowany na stacjach roboczych firmy SUN z procesoramiUltraSPARC.
  • UWAGA !!!

    Stacje robocze, na których wykonywane są ćwiczenia podłączone są do segmentu sieci komputerowej, o numerze 194.29.145.0 stanowiącej fragment Internetu. Tego typu konfiguracja daje możliwość pracy w warunkach zbliżonych do rzeczywistości. Należy jednak pamiętać, że nie uprawnia to do wykonywania czynności w jakikolwiek sposób naruszających:

  • prywatność innych osób i instytucji,
  • bezpieczeństwo sieci komputerowej.
    1. 1.Sesja użytkownika
      2.Instalacja SO Solaris
      3.Konfiguracja SO Solaris

    Wstęp

    W celu przygotowania stacji roboczych do ćwiczeń wykonano następujące czynności:
    • zainstalowano system operacyjny
    • zainstalowano łaty (patch'e) systemowe
    • dokonano wstępnej konfiguracji systemu do komunikacji w sieci komputerowej

    Tryby pracy systemu

    W systemie Solaris istnieje 8 trybów pracy:

    0 zamykanie systemu w celu dostępu do boot PROM'u
    s, S tryb administracyjny; uruchamiane są podstawowe składniki systemu
    1 tryb administracyjny "single-user"; montowane są wszystkie systemy plików
    2 tryb "multiuser"; uruchomione są wszystkie elementy systemu z wyjątkiem demonów odpowiedzialnych za dzielenie plików (NFS, CIFS) i centralne zarządzanie systemem
    3 tryb domyślny; uruchomione są wszystkie elementy systemu
    4 tryb niezaimplementowany
    5 zamykanie systemu i odłączanie zasilania
    6 sprowadzanie systemu do trybu "0", a następnie do trybu domyślnego (reboot)
    Do zmiany trybu pracy systemu służy polecenie: # init -n
    (man init)
    gdzie "n" oznacza symbol trybu pracy zgodnie z powyższą tabelą.
    W przypadku sytuacji awaryjnych system można uruchomić w trybie administracyjnym "s" z poziomu boot PROM'u sprowadzając system do trybu "0", a następnie wydając polecenie: ok boot -s Najprostszym sprawdzeniem bieżącego trybu systemu jest wydanie polecenia: # who -r
    (man who)

    Zadania do wykonania:

      należy wprowadzić system w poszczególne tryby pracy za pomocą polecenia "init" i zaobserwować zachodzące zmiany wykorzystując polecenia:
    # ps -ef
    (man ps)
    
    wyświetlając na ekranie informację o uruchomionych procesach,
    # mount
    (man mount)
    wyświetlając na ekranie informację o zamontowanych systemach plików oraz # who -r Wyniki można poleceń można zachować w plikach, np.:
    # cd /var/tmp
    # who -r > init-3
    # echo "===============================" >> init-3 
    # ps -ef >> init-3
    # echo "===============================" >> init-3 
    # mount >> init-3 
    
    należy wprowadzić system w tryb administracyjny z poziomu boot PROM'u i zaobserwować różnice w sposobie realizacji polecenia przez system.

    Uruchamianie i zamykanie systemu

    Podstawową czynnością związaną z administracją systemem jest jego uruchamianie i zamykanie. Sposób realizacji tych czynności jest niezwykle istotny ze względu na bezpieczeństwo samego systemu i danych w nim przetwarzanych. Uruchamianie systemu albo jego zatrzymywanie należy przeprowadzać w następującej kolejności: Uruchamianie systemu:
      uruchomić urządzenia peryferyjne
      uruchomić jednostkę centralną
      uruchomić system operacyjny, chyba że system uruchamia się automatycznie

    Zamykanie systemu:
      powiadomić użytkowników
      zamknąć system operacyjny
      wyłączyć jednostkę centralną
      wyłączyć urządzenia peryferyjne
    Standardowym poleceniem służącym do zamykania systemu operacyjnego jest polecenie "shutdown" (man shutdown). Wykonuje ono te same czynności co polecenie "init", przy czym dodatkowo umożliwia:
      powiadamianie użytkowników
      opóźnienie zamknięcia systemu o ściśle określony przedział czasu

    W sytuacjach awaryjnych stosuje się bardziej radykalne i jednocześnie "brutalne" metody zamykania: # halt
    i przeładowania systemu: # reboot

    Zadania do wykonania:

      należy wykonać operacje zamknięcia i przeładowania systemu wszystkimi możliwymi, opisanymi wyżej sposobami: init + poweroff, shutdown, halt, reboot.

    Skrypty startowe

    Proces uruchamiania systemu operacyjnego UNIX składa się z kilku etapów w zależności od konkretnej implementacji. Zazwyczaj ostatnim etapem tego procesu jest wykonanie ściśle określonej grupy skryptów odpowiedzialnych za uzyskanie pożądanej funkcjonalności systemu. Sposób podziału skryptów na grupy związany jest bezpośrednio z trybami pracy systemu operacyjnego.
    Kontrolę nad tą fazą uruchamiania systemu oraz nad przechodzeniem systemu z jednego trybu pracy do drugiego sprawuje specjalny proces uruchamiany jako pierwszy. Proces ten działa na podstawie konfiguracji zapisanej w pliku /etc/inittab, którego zawartość modyfikuje się stosunkowo rzadko poprzestając na konfiguracji domyślnej producenta. W pliku tym zadeklarowany jest domyślny tryb pracy oraz sposób postępowania m.in. w takich sytuacjach jak zmiana trybu pracy na inny.
    W przypadku przejścia systemu z jednego trybu do drugiego wykonywane są grupy skryptów zgromadzone w katalogach o następującym wzorcu nazwy: /etc/rcN.d
    gdzie N jest symbolem danego trybu pracy.
    Obsługą uruchamiania skryptów zajmują się skrypty /sbin/rcN
    Wszystkie skrypty znajdujące się w katalogach /etc/rcN.d mają ściśle określony wzorzec nazwy w postaci: [KS]##nazwa
    gdzie ## to liczba dwucyfrowa, a nazwa to dowolny ciąg znaków oznaczający funkcję danego skryptu. Skrypty wykonywane są w kolejności alfabetycznej, czyli w pierwszym rzędzie są to skrypty zaczynające się na literę "K", a potem skrypty zaczynające się na literę "S". Wewnątrz obu grup kolejność uruchamiania wyznaczana jest na podstawie dwucyfrowej liczby (np. 03 przed 25), a następnie na podstawie kolejności alfabetycznej ciągu znaków tworzących pozostałą część nazwy skryptu.
    Skrypty, których nazwy rozpoczynają się literą "K" uruchamiane są z parametrem "stop", np.:
    K01nfs.serwer stop
    Natomiast skrypty, których nazwy rozpoczynają się literą "S" uruchamiane są z parametrem "start", np.: S88sendmail start
    Taki algorytm daje możliwość prostego kształtowania funkcjonalności danego trybu pracy systemu poprzez zamykanie pewnych usług i uruchamianie innych.
    Na koniec należy zaznaczyć, że wszystkie skrypty startowe zazwyczaj gromadzone są w katalogu: /etc/init.d, natomiast skrypty w katalogach /etc/rcN.d są zazwyczaj linkami twardymi (hard links) do skryptów z katalogu /etc/init.d. Można się o tym łatwo przekonać porównując wynik polecenia: # ls -i wykonanego w katalogach /etc/rcN.d i katalogu /etc/init.d.

    Podczas wprowadzania zmian w systemie operacyjnym związanych np. z instalacją dodatkowej usługi lub zmianą funkcjonalności systemu na ogół poprawki dokonuje się w postaci własnych skryptów startowych, których umiejscowienie i nazewnictwo musi być zgodne z powyższym mechanizmem.
    Jeżeli zachodzi potrzeba tymczasowego wyłączenia jakiejś usługi albo zmiany jej konfiguracji nie ma konieczności przeładowania całej maszyny. Wystarczy w takim przypadku uruchomić odpowiedni skrypt z opcją "stop", a następnie z opcją "start", np.
    # /etc/init.d/dtlogin stop
    i # /etc/init.d/dtlogin start
    W przypadku konieczności trwałego wyłączenia jakiejś usługi, tak aby nie uruchamiała się podczas startowania systemu operacyjnego należy albo usunąć plik z odpowiedniego katalogu, albo zmienić jego nazwę, tak aby nie była ona zgodna z ustalonym schematem. Tego typu operacje należy wykonać wtedy, gdy ze względów bezpieczeństwa nie można dopuścić do uruchamiania się niektórych zainstalowanych w systemie usług.

    Zadania do wykonania:

    należy obejrzeć pliki i katalogi:
    /etc/inittab
    /usr/sbin/rcN
    /etc/init.d
    /etc/rcN.d
    
      należy sprawdzić powiązania między skryptami w katalogu /etc/init.d a skryptami w katalogach /etc/rcN.d, używając polecenia "ls -i"
      należy zmienić jeden ze skryptów startowych, np. dopisując do niego polecenie "echo" wyświetlające jakiś charakterystyczny napis (UWAGA: zalecane jest wykonanie kopii skryptu przed zmianą), a następnie przeładować maszynę i zaobserwować reakcję na zmianę
      należy w katalogu /etc/init.d utworzyć własny skrypt, np. wyświetlający nazwę skryptu i utworzyć do niego linki twarde w wybranych katalogach /etc/rcN.d według opisanego wcześniej schemat, a następnie a) przeładować maszynę i b) zmieniać tryb pracy systemu obserwując w obu przypadkach reakcję na zmiany

    przykład skryptu /etc/init.d/moj_skrypt:

    #!/bin/sh
    
    echo Uruchomiono skrypt $0
    
    tworzenie linków twardych:
    # cd /etc/rc1.d
    # ln ../init.d/moj_skrypt S99moj_skrypt
    # cd ../rc2.d
    # ln ../init.d/moj_skrypt K99moj_skrypt
    # cd ../rc3.d
    # ln ../init.d/moj_skrypt S99moj_skrypt
    
    należy zmienić nazwę pliku /etc/rc2.d/S97dtlogin na /etc/init.d/_S97dtlogin i przeładować maszynę obserwując zmiany w systemie

    Demon usług internetowych

    Skrypty opisane powyżej służą do uruchamiania procesów stałych. Natomiast, w systemie istnieje możliwość uruchamiania usług na żądanie, np. telnet, ftp, itp. Obsługą tego typu usług, zazwyczaj internetowych zajmuje się demon o nazwie "inetd". Demon ten uruchamiany jest podczas wykonywania skryptu startowego "inetsvc". Konfiguracja demona zapisana jest w pliku /etc/inetd.conf. Linie w pliku konfiguracyjnym zaczynające się znakiem "#" są traktowane jako komentarze. W celu całkowitego i trwałego wyłączenia należy zakomentować odpowiednią linię w pliku /etc/init.d/inetsvc. Jeżeli zachodzi potrzeba wyłączenia jedynie części usług wystarczy zakomentować stosowne linie w pliku konfiguracyjnym. W celu chwilowego wyłączenia demona inetd wystarczy zakończyć jego pracę poleceniem "kill", a w celu zmuszenia go do przeładowania się, co jest równoznaczne z ponownym przeczytaniem konfiguracji, np. po zmianach należy w poleceniu "kill" zastosować opcję "-HUP". Jeżeli usługi obsługiwane przez demon "inetd" nie są konieczne w systemie, to ze względów bezpieczeństwa należy zablokować uruchamianie się tego demona.

    Zadania do wykonania:

      należy zablokować jedną z usług, np. telnet i przeładować demona inetd
      należy zakończyć pracę demona inetd poleceniem kill, a następnie uruchomić go z "linii komendy"

    Partycjonowanie dysków

    Do partycjonowania dysków twardych służy polecenie format. Każdy dysk można podzielić teoretycznie na 8 partycji. Wynika to stąd, że tablica partycji wchodząca w skład etykiety (label, VTOC) dysku zawiera 8 pozycji. Każda pozycja zawiera numer pierwszego cylindra partycji oraz rozmiar partycji w cylindrach. Zwyczajowo druga partycja przeznaczona jest na opis całego dysku, dlatego w rzeczywistości dysk można podzielić nie na 8 ale na 7 partycji.

    Zadania do wykonania

  • Na początku ćwiczenia należy zapoznać się z poleceniem "format" przez przeczytanie dokumentacji (man format) oraz próbę użycia polecenia. Wszystkie opcje w poleceniu format mają stosunkowo dobrze dobrane nazwy co zdecydowanie ułatwia pracę. Jednak w przypadku jakichkolwiek wątpliwości należy zwrócić się do prowadzącego. Niewłaściwe użycie niektórych opcji może oznaczać konieczność reinstalacji systemu.
  • należy sprawdzić bieżący podział dysku na partycje; w poleceniu format trzeba wybrać dysk (w laboratorium prawie zawsze będzie tylko jeden dysk do wyboru); następnie trzeba wybrać opcje partition-> print;
  • należy wykonać próbę modyfikacji partycji na dysku lokalnym; zadanie polega na podziale partycji zamontowanej jako "/data" na dwie części; do identyfikacji partycji należy użyć polecenia "mount" albo "df -k"; przed dokonaniem podziału należy bezwzględnie odmontować modyfikowaną partycję poleceniem:
  • # umount /data
    następnie w poleceniu "format" trzeba wybrać opcje partition->modify; dalej jako podstawę partycjonowania należy wybrać bieżącą tablicę partycji i wykonać jej modyfikację; podczas modyfikacji należy pozostawić aktywne partycje dysku bez zmian; tablica partycji zostanie zapisana dopiero w momencie zatwierdzenia wszystkich zmian; po zatwierdzeniu zmian należy zakończyć polecenie "format" i uruchomić je ponownie w celu sprawdzenia czy wykonane modyfikacje zostały zapamiętane;

    Zakładanie systemu plików

    Do zakładania systemu plików służy polecenie "newfs"
    Należy zapoznać się dokumentacją do polecenia (man newfs). Przed wykonaniem zadania głównego należy zastosować polecenie w stosunku do partycji aktywnyc, np.: # newfs -N /dev/rdsk/c0t0d0s0
    Opcja "-N" oznacza że polecenie jedynie "pokaże" w jaki sposób zostanie założony system plików na wskazanej partycji. Opcja ta używana jest w przypadkach awaryjnych.

    Zadanie do wykonania

      należy utworzyć na nowo powstałych partycjach systemy plików

    Montowanie systemu plików

    W systemie operacyjnym UNIX wyróżnia się kilka metod montowania systemu plików. Podstawowym sposobem jest montowanie z użyciem polecenia "mount". Polecenie to bywa stosowane przez administratorów systemu głównie podczas testów lub diagnostyki systemu. W przypadku montowania systemów plików podczas uruchamiania systemu polecenie mount wykonywane jest przez skrypty startowe. W takim przypadku sposób montowania poszczególnych systemów plików zapisany jest w pliku /etc/vfstab, w przypadku systemu Solaris albo w pliku o podobnej nazwie w innych systemach.

    >W ramach ćwiczenia należy dokonać próby ręcznego montowania nowo utworzonych partycji, a następnie zmodyfikować plik /etc/vfstab, tak aby podczas uruchamiania komputera partycje te montowały się automatycznie. Wcześniej należy ustalić i ewentualnie utworzyć (mkdir) katalogi będące miejscem montowania nowych partycji.

    Zadania do wykonania dla chętnych

    • należy przenieść "root filesystem" na inną partycję
    • należy zmienić rozmiar partycji zawierającej "root filesystem"

    4.Administracja SO Solaris

    konta użytkowników

  • zasady konstrukcji kont użytkowników
  • Posiadanie konta w systemie operacyjnym oznacza prawo korzystania z zasobów systemowych na zasadach określonych przez administratora systemu.
    W celu założenia konta dla danego użytkownika należy wpisać do odpowiednich baz ściśle określone informacje.
    Standardowo bazy użytkowników przechowywane są w specjalnie do tego celu stworzonych plikach: /etc/passwd:

    • nazwa użytkownika (loginname)
    • identyfikator użytkownika (id)
    • identyfikator grupy użytkownika (gid)
    • opis konta (gcos)
    • ścieżka do katalogu domowego (homedir)
    • ścieżka do procesora poleceń (loginshell)
    /etc/shadow:
    • nazwa użytkownika
    • zakodowane hasło
    • data zmiany hasła (liczba dni od 1 stycznia 1970)
    • minimalna częstotliwość zmiany hasła (dni)
    • maksymalny okres ważności hasła (dni)
    • liczba dni przed wygaśnięciem ważności hasła (wysyłanie ostrzeżeń)
    • dopuszczalna liczba dni braku aktywności konta
    • data ważności konta (liczba dni od 1 stycznia 1970)
    /etc/group:
    • nazwa grupy
    • hasło dostępu
    • numer grupy (gid)
    • lista członków

    administrowanie kontami użytkowników

    Do administracji kontami użytkowników służą polecenia:

    • useradd, usermod, userdel
    • groupadd, grupmod, groupdel
    • passwd
    • vi

    inicjacja katalogów domowych użytkowników

    • lokalne katalogi statyczne
      Jedną z metod inicjowania katalogów domowych użytkowników jest zapisanie w pliku /etc/passwd ścieżki do fizycznej lokalizacji odpowiedniego katalogu.
    • katalogi dynamicznie montowane
    Zalecaną metodą inicjowania katalogów jest metoda oparta o dynamiczne montowanie katalogów za pomocą automount'era. W systemie automount'er skonfigurowany jest domyślnie i jedyne co należy zrobić to zapisać mapę montowania katalogów domowych w pliku /etc/auto_home.
    Zasad działania tego typu mechanizmu montowania polega na tym, że pod wskazaną nazwę system montuje zadeklarowany katalog w tedy i tylko wtedy gdy zachodzi taka potrzeba. Jeżeli zasób nie jest wykorzystywany przez ściśle określony czas (timeout), system odmontowuje katalog.
    Aby zapoznać się ze szczegółami należy przeczytać instrukcję do automount'era:
    man automount

    Zadania do wykonania:

    • Należy zapoznać się z powyższymi plikami.
    • Jakie są prawa dostępu do tych plików?
    • Dlaczego informacje o kontach zostały rozdzielone na dwa pliki: passwd i shadow?
    • Należy założyć przy pomocy poleceń systemowych kilka kont użytkowników należących do dwóch różnych grup.
    • Posługując się poleceniem passwd zmodyfikować różne parametry kont.
    • Należy założyć konto użytkownika używając polecenia vi.
    • Wszystkie konta użytkowników należy założyć z wykorzystaniem katalogów dynamicznie montowanych.

    prawa dostępu do plików

    Do zarządzania prawami dostępu do plików służą polecenia: chown, chgrp, chmod oraz umask.
    • ustawianie praw dostępu do katalogów domowych
      • Prawa dostępu do katalogów domowych ustawiane są najczęściej w następujący sposób:
      • właścicielem katalogu jest właściciel konta,
      • grupa katalogu to na ogół grupa do której należy właściciel katalogu,
      • prawa dostępu ograniczają się do praw "rwx" dla właściciela katalogu oraz ewentualnie prawo "x" (execute) dla grupy i innych użytkowników.
      Natomiast, maska (umask) praw dostępu ustawiana jest domyślnie na "022" ale w celu zwiększenia bezpieczeństwa można ja ustawić na "077".
      • testowanie różnych konfiguracji praw dostępu

      Zadania do wykonania:

    • należy sprawdzić prawa dostępu do kont domowych użytkowników
    • ustawiając różne prawa dostępu dla jednego z kont domowych należy przetestować możliwości dostępu innych użytkowników do katalogu domowego tego użytkownika
    • jak zablokować dostęp do pliku, katalogu dla konkretnej grupy użytkowników
    • należy utworzyć w katalogu domowym wybranego użytkownika katalog "WWW", a w nim plik "index.html"; należy ustawić tak prawa dostępu do odpowiednich katalogów i plików aby inni użytkownicy mogli czytać plik index.html, natomiast aby nie mieli dostępu do innych części katalogu domowego (typowa sytuacji stosowana podczas tworzenia własnej strony domowej www)
      należy utworzyć plik jako konkretny użytkownik, w tym root, a następnie ustawiając rózne prawa dostępu, w tym suid oraz sgid wykonać kopie tego pliku z poziomu innego, zwykłego użytkownika dla różnych wartości umask
    • należy utworzyć w dowolnym miejscu systemu plików (najlepiej w katalogu przechowującym katalogi domowe) katalog z takimi prawami dostępu, aby:
    • członkowie grupy, do której należy ten katalog mogli w nim tworzyć własne pliki
    • aby pliki te automatycznie były przypisywane do tej samej grupy co katalog nadrzędny
    • grupa katalogu nie jest podstawową grupą dla użytkowników do niej należących
    • jak należy ustawić parametr umask dla członków grupy uprawnionej do pisania w tym katalogu, aby pliki tworzone przez jednego członka grupy w tym właśnie katalogu mogły być edytowane przez pozostałych członków grupy

    skrypty startowe i zmienne środowiskowe

  • skrypty startowe centralne
  • skrypty startowe użytkowników
  • Zadania do wykonania:

  • należy dla wybranego procesora poleceń (zsh, bash, ksh) ustawić wszystkie możliwe skrypty startowe centralne i indywidualne i sprawdzić kolejność ich wykonania
  • należy sprawdzić jakie zmienne środowiskowe ustawiane są domyślnie dla użytkowników, a następnie należy ustawić własne zmienne
  • należy zadeklarować dwie zmienne środowiskowe w następujący sposób:
  • % ZMIENNA1=WARTOSC1
    % export ZMIENNA1
    % ZMIENNA2=WARTOSC2
    
    następnie należy wykonać polecenia set oraz printenv;
    następnie w tym samym oknie terminala uruchomić kolejny, ten sam co bierżący procesor poleceń i ponownie wykonać te same polecenia; czy są, a jeżeli tak to jakie różnice między wynikami pierwszej i drugiej sekwencji tych poleceń?
    jakie są ewentualne przyczyny tych różnic?

    prawa dostępu do usług systemowych

    Należy zapoznać się z formatem plików konfiguracyjnych crontab'a (man crontab).
    /etc/cron.d
    crontab
    

    Zadania do wykonania:

  • Należy zadeklarować cykliczne wykonywanie dowolnego polecenia.
  • logi systemowe

    Logi systemowe składowane są standardowo w plikach /var/adm/messages oraz /var/log/syslog. Logi te są automatycznie łamane co pewien okres czasu za pomocą skryptu /usr/lib/newsyslog.
  • /etc/syslog.conf
  • Plik /etc/syslog.conf służy do deklarowania sposobu obsługi logów systemowych.
    /usr/lib/newsyslog

    Zadania do wykonania:

  • należy zmodyfikować plik /etc/syslog.conf, aby wszystkie logi zapisywane były dodatkowo w jednym pliku
  • należy tak zmodyfikować skrypt /usr/lib/newsyslog aby logi systemowe nie były automatycznie kasowane, natomiast aby były opatrywane datą zamknięcia w nazwie logu (np. messages.20021204:1520), następnie kompresowane i przenoszone do wcześniej utworzonego archiwum
  • należy za pomocą usługi cron ustawić wysyłanie do logów systemowych własnych komunikatów (polecenie: logger)
  • instalacja oprogramowania

    • instalacja kompilatora gcc
    • instalacja innych wybranych pakietów