Однойменна операційна система, що увібрала в себе останні досягнення в області вирішення проблем багатозадачності, керування файлами І взаємодією з користувачем

Вид материалаДокументы

Содержание


Каталог для тимчасового зберігання файлів
Звичайні файли
Символічні посилання –
1.1 Моніторинг використання файлової системи
1.2 Монтування та демонтування файлових систем
А команда
Таблиця 2. Файлові системи, що підтримуються стандартним ядром
1.3 Перевірка та відновлення файлових систем
2. Привілеї та групи.
3. Керування процесами.
4. Підключення нових користувачів
5. Резервне копіювання
0 відповідає копіюванню на рівні 0 (копіюються всі файли), а опція u
6. Робота в мережах.
7. Аналіз продуктивності системи
Подобный материал:
1   2   3   4




/var/adm

Облікові файли, журнали використання ресурсів

/var/log

Різноманітні системні журнальні файли

/var/spool

Буферні каталоги для принтерів, електронної пошти і т.і.

/var/tmp

Каталог для тимчасового зберігання файлів


/usr/ucb

Утиліти і програми BSD

/usr/local

Локальне програмне забезпечення

/usr/local/adm

Локальні облікові файли та файли реєстрації

/usr/local/bin

Локальні виконувані файли

/usr/local/etc

Локальні системні файли та файли конфігурації

/usr/local/lib

Локальні допоміжні файли

/usr/local/sbin

Локальні службові системні команди

/usr/local/src

Вихідні тексти для програм каталогів /usr/local/*

/kernel

Файли необхідні для завантаження ядра


Для того щоб зрозуміти функціонування файлової системи UNIX необхідно знати сутність поняття “тип файла”, що використовується у UNIX системах. В більшості цих систем підтримується сім типів файлів:
  • звичайні файли
  • каталоги
  • файли байт-орієнтованих (символьних) пристроїв
  • файли блок-орієнтованих (блочних) пристроїв
  • сокети
  • іменовані канали (FIFO)
  • символьні посилання


В деяких системах не реалізовано підтримку таких типів файлів, як сокети або іменовані канали, а іноді не розділяють файли байт- та блок-орієнтованих пристроїв, поєднуючи їх в один тип файлів пристроїв.


Звичайні файли - це проста послідовність байтів. В UNIX не накладається обмежень на їх структуру. Текстові документи, виконувані програми, бібліотеки функцій та багато іншого – все це зберігається в звичайних файлах. До них можливий, як послідовний так і прямий доступ.

Каталоги – містять іменовані посилання на інші файли. Каталог створюється командою mkdir і видаляється (якщо пустий) командою rmdir.

Каталоги в яких є файли можуть видалятися командою rm –r.

Файли пристроїв – дозволяють UNIX-програмам взаємодіяти з апаратними засобами та периферійними пристроями системи. Драйвери пристроїв створюють стандартний комунікаційний інтерфейс, який для користувача виглядає як звичайний файл. Слід відрізняти файли пристроїв від драйверів пристроїв. Файли являють собою шлюзи через які драйверу передаються запити. Файли байт-орієнтованих пристроїв дозволяють зв’язаним з ними драйверам виконувати власну буферизацію введення-виведення. Файли блок-орієнтованих пристроїв обробляються драйверами, що виконують введення-виведення великими порціями (блоками) і завдання буферизації покладають на ядро.

Сокети – дозволяють виконувати інкапсуляцію між процесами, дозволяючи їм взаємодіяти, не підпадаючи під вплив іншиїх процесів. В UNIX підтримується декілька видів сокетів, використання яких в більшості випадків передбачає наявність мережі. Сокети локальні для конкретного комп’ютера. Звернення до них відбувається через файлову систему, а не через мережевий порт.

Іменовані канали – подібно сокетам, іменовані канали забезпечують взаємодію двох процесів, що виконуються на одній машині.

Символічні посилання – забезпечують можливість замість шляхового імені файла вказувати псевдонім.


Операційна система Free BSD зберігаючи загальну концепцію UNIX має деякі відмінності від стандартної структури розглянутої вище. Але це ніяк не впливає на методи адміністрування. Отже розглянемо наступні дії з файловою системою Free BSD:
  • моніторинг використання файлової системи
  • монтування та демонтування файлових систем
  • перевірка та відновлення файлових систем



1.1 Моніторинг використання файлової системи


Одна з концепцій UNIX-подібних файлових систем, незнайома користувачам Windows, полягає в ідеї “точок монтування” (mount point). У Windows кожному диску системи призначено им’я у вигляді літери (наприклад С: ), і кожен диск має незалежну файлову систему. В UNIX існує тільки одна загальносистемна структура каталогів, і всі диски монтуються як різноманітні точки в ній. Перевагою такої структури є легкість додавання дискового простору: достатньо підмонтувати новий диск або розділ до певної точки ієрархії. Недоліком є те, що в такій файловій системі складніше перемістити весь вміст одного диска на інший.

Команда df (disk free – вільний простір) – найпростіший спосіб отримання інформації про використання дискового простору. Ознайомлення з виведенням команди df є частиною щоденної перевірки стану системи.

Виведення команди df виглядає наступним чином:

Filesystem

1k-blocks

Used

Avail

Capaciti

Mounted on

/dev/ad0s1a

49583

28427

17190

62%

/

/dev/ad0s1f

4254901

1959405

1955104

50%

/usr

/dev/ad0s1e

19815

12058

6172

66%

/var

procfs

4

4

0

100%

/proc


Слід роз’яснити, що осначають ці написи. Спочатку слід вказати, що назви дисків у Free BSD мають таке написання: ad0, ad1, ad2, ad3 – що відповіає жорстким дискам підключеним відповідно до порядку HDD0, HDD1, HDD2, HDD3. Розділи називають слайсами (slice) – вони позначаються відповідно літерою s, а розділи Free BSD позначаються літерами відповідно за призначенням розділу:

а – кореневий розділ ( / )

b – розділ підкачки (swap)

c – звертається до всього диска в небезпечному режимі

d, e, f, g, h – для загального використання (розміщення каталогів)

Таким чином напис ad0s1a – означає диск HDD0 (primary master), перший слайс і розміщений в ньому кореневий каталог.

Відповідно ad0s1f – для розміщення каталога /usr , ad0s1e – розміщений каталог /var.


Команда du (disk usage – використання диска) – рекурсивно виводить розмір всіх каталогів, що знаходяться в поточному каталозі, або в каталозі вказаному в якості параметра. Параметр –d , що супроводжується числом задає глибину рекурсії. Наприклад:

# du –d 1 /home/

22572

/home/

9

/home/vova

31

/home/filip

1520

/home/alice

66211

/home/pasha



1.2 Монтування та демонтування файлових систем


Це питання наочно демонструє багатогранність UNIX-систем. Припустимо, що система заповнила один диск ( /dev/ad0 ) і адміністратор додає другий диск, як primary slave (HDD1). Система визначає його як /dev/ad1 . після розбиття диска на розділи і вказування мітки з’явиться одна або декілька файлових систем, які можна додати в будь-яку точку структури каталогів системи. Іншими словами всі каталоги системи можуть за бажанням адміністратора отримати певну, визначену адміністратором додаткову ємність. При цьому структура всієї системи залишиться незмінною.

Команда mount – призначена для монтування нової файлової системи.

Перед тим як монтувати файлову систему необхідно створити точку монтування. Наприклад ми маємо бажання розширити каталог /usr/home в якому знаходяться локальні каталоги користувачів.


Для створення точки монтування створюємо каталог /home командою mkdir /home. Тепер ми можемо монтувати розділ (розділ повинен бути створений до монтування).

Якщо монтується розділ ad1s1g – то команда виглядає так:

# mount /dev/ad1s1g /home

Якщо команда виконується без помилок, то новою файловою системою можна користуватися одразу після монтування. Перевірити це можна за допомогою команди df

Filesystem

1k-blocks

Used

Avail

Capaciti

Mounted on

/dev/ad0s1a

49583

28427

17190

62%

/

/dev/ad1s1g

39245453

3362491

32119340

12%

/home

/dev/ad0s1f

4254901

892410

3140012

22%

/usr

/dev/ad0s1e

19815

12058

6172

66%

/var

procfs

4

4

0

100%

/proc


Команда umount – призначена для демонтування файлової системи.

Якщо необхідно демонтувати файлову систему /home , яку ми перед цим монтували - цю дію можна виконати такою командою:

# umount /home

Такий самий результат можна отримати ввівши команду:

# umount /dev/ad1s1g
А команда

# umount -a

демонтує всі файлові системи крім кореневої.

Єдине обмеження, яке існує для виконання цієї команди – недозволяється знаходитись всередині файлової системи, яка демонтується. Для користувачів Windows це означає, що не можна видаляти папку всередині якої ви знаходитесь.

Операційні системи UNIX підтримують не тільки власні файлові системи, а й файлові системи інших ОС. Наприклад по замовчанню ОС Free BSD підтримує файлові системи вказані у таблиці 2.

Таблиця 2. Файлові системи, що підтримуються стандартним ядром


Файлова система

Назва

FFS

Швидка файлова система

MFS

Файлова система в пам’яті

NFS

Мережева файлова система

MSDOSFS

Файлова система MS-DOS

CD9660

Файлова система ISO-9660 (CD-ROM)

PROCFS

Файлова система процесів


Крім того є можливість включити в ядро системи підтримку інших фалових систем, наприклад NTFS (використовується у Windows) та Ext2FS (Linux).

Таким чином ОС Free BSD може працювати практично в усіма найбільш поширеними файловими системами, чого не можна стверджувати про ОС Windows, в якій не передбачено роботи з іншими, відмінними від базових файловими системами. Windows просто не бачить диски з іншими файловими системами.

Приклади монтування файлових систем у Free BSD:

# mount_msdos /dev/ad1s1 /mnt - монтування диска Windows98

( система MS-DOS)

# mount_ext2fa /dev/ad1s1 /mnt – монтування розділу Linux

# mount_cd9660 /dev/acd0c /cdrom – монтування CD-ROM

# mount /dev/fd0 /floppy – монтування флопі диска

# mount_msdos /dev/fd0 floppy – флопі з системою DOS

1.3 Перевірка та відновлення файлових систем


Файлова система UNIX напрочуд надійна і виконує значну роботу, долаючи будь-які збої та відмови апаратних засобів. Але існує ряд причин, що викликають пошкодження файлів та порушення їх цілісності. В таких випадках стане у пригоді спеціальна програма, що входить до складу практично всіх UNIX-систем - fsck (File System Consistency checK).

Ця програма схожа на Microsoft ScanDisk. Її основне завдання полягає в перевірці файлових систем та їх придатності до монтування. Такий режим має назву preen (чищення) і задається опцією –p. Крім того цей режим випавляє всі неузгодженості у файлових системах, що не відмічені як clean (чистий) коректним методом зупинки системи, тобто виправляє помилки, що виникають при некоректному виключенні системи.

Утиліта fsck виконується при кожному завантаженні системи, але її можна запустити з командного рядка для будь-якої змонтованої файлової системи. Для його необхідно перейти до однокористувацького режиму. Після запуску утиліти для одного чи декількох пристроїв командою :

fsck -p /dev/ad1s1g необхідно вийти з однокористувацького режиму командою exit і повернутися до звичайного стану системи.


2. Привілеї та групи.

Модель користувачів та прав доступу в більшості систем UNIX має один рівень. Існує тільки два типи користувачів: звичайний та суперкористувач, або root. Права доступу звичайних користувачів так чи інакше обмежують їх дії в системі. Користувач root – єдиний, хто звільнений від будь-яких обмежень. Інші моделі прав доступу, наприклад у Windows включають у себе більш складні моделі, що дозволяють забезпечити певні функції системи, такі як аутентифікація та процеси системного рівня. Слід відмітити, що система з складною системою прав доступу є менш захищеною, оскільки містить більше елементів, що піддіються збоям. В той же час прості моделі вимагають від адміністратора більшої вишуканості в роботі по налаштуванню прав доступу.

Кожний користувач у Free BSD має обмежені права доступу і постійне місце для роботи в системі – початковий каталог (home directory). Підвищити свій статус до рівня root дає можливість команда su. Вона запитує пароль root – який є найважливішою інформацією в будь-якій UNIX-системі. Отримання доступу з правами root дозволяє створювати, змінювати та знищувати абсолютно все, що містить система. При реєстрації в системі з правами root слід виявляти підвищену обережність. Для того, щоб запустити команду su необхідно належати до елітної групи, що називається wheel. Хоча Free BSD має тільки два типи користувачів – звичайний та root , група wheel дуже ефективно створює обмежене коло особливо довірених користувачів: тих, кому дозволено отримувати привілеї root. Використовуючи можливості команди su , можна покласти частину адміністративних завдань на інших користувачів.

Користувачів системи можна розділити на реальних людей, що підключаються до системи та псевдокористувачів, таких як bin , operator , daemon , nobody та ін. Псевдокористувачі необхідні системі для того, щоб керувати процесами. Справа в тому, що процеси, як і файли належать певним користувачам і при взаємодії з іншими процесами і файлами підкоряються обмеженням, що накладаються на них правами доступу. Якщо користувачем виступає root , тобто користувач з необмеженими правами, то система може стати менш захищеною в наслідок можливих помилок користувача. Тому більшість системних процесів запускається з правами доступу псевдокористувачів, а не користувача root.

Кожний користувач може належати до будь-якої групи в системі, включаючи персональні групи інших користувачів або групу wheel. Єдиним користувачем, що керує приналежністю користувачів до різних груп є root.

Як правило групи необхідні для того, щоб забезпечити декільком користувачам права доступу до набору файлів або процесів. Неприпустимо, щоб декілька користувачів мали один пароль та реєструвалися під одним іменем. Групи дозволяють їм володіти набором файлів та мати необхідні для роботи права доступу до них.

У всіх варіантах UNIX кожен файл або каталог належить і користувачу і групі. Але це не означає, що всі користувачі або члени групи мають однакові права доступу.

Розглянемо права доступу та володіння для набору файлів. Для отримання лістингу необхідно запустити команду ls з опціями -l (детальне виведення) та -a (виведення всіх файлів, з прихованими включно).

# ls -la /home/vova

total 3126

drwxr-xr-x

3 frank

users

512 May

12

.

drwxr-xr-x

52 root

users

9216 Mar

7

..

- rw -r--r--

1 bob

users

291090 Jan

23

1.bmp

- rw -rw-r--

1 bob

bob

2703 Dec

22

contents.phpl

- rw -r--r--

1 frank

users

3657 Jan

9

file.txt

- rw -r--r--

1 bob

users

92195 Sep

11

1.uu

drwxr-xr-x

2 root

users

512 Jan

2

files

drwxr-xr-x

12 root

wheel

1024 Feb

18

more-files


Розберемо, що означають ці написи. Рядок drwxr-xr-x задає режим доступу до файла. Для кожного різновиду користувачів – користувач (user), група (group) та інші (others) – існує набір бітів повноважень. Ці біти надають три види доступу – читання (read), запис (write) та виконання (execute). Сутність цих бітів для файлів наступна :
  • r – файл дозволено читати
  • w – файл можна модифікувати, видаляти та перейменовувати
  • x – файл можна виконувати

Тепер ми готові розшифрувати рядок, що задає режим доступу. Перший символ визначає каталог (d) або файл (-) , далі групи по три символи визначають права власника файла , права членів групи і права інших користувачів. Таким чином запис - rw - rw - r - - означає, що це файл, права власника rw- (читання і запис), права групи rw- (читання і запис), права інших користувачів r - - (тільки читання).

Права володіння файлами можна змінювати. Цю дію може виконувати суперкористувач root. Для зміни хазяїна файла використовується команда chown (change owner – змінити володаря):

# chown bob file.txt

Ця команда зміню ім’я хазяїна файла file.txt (але не групу) на bob. Раніше хазяїном цього файла був frank (дивись у таблиці прав доступу вище).

Команда chown може застосовуватись до каталогів:

# chown bob /home/frank

Наведена команда змінює право доступу до каталога з користувача frank на користувача bob, який тепер може створювати і видаляти файли в каталозі, навіть якщо вони йому не належать.

За допомогою команди chgrp можна змінити права володіння групи. Діє ця команда таким чином:

# chgrp users contents.phpl

Після цього права володіння файлом contents.phpl будуть належати групі users (раніше вони належали групі bob).

Змінювати права доступу до файлів і каталогів можна також за допомогою команди chmod ( change mode – змінити режим). Цю команду використовують двома способами: з числовим або символьним аргументом.

Найпростіший спосіб зміни прав доступу – встановлення трьохзначного числового коду. Кожна цифра визначає режим володіння: користувача, групи та всіх інших. Режим задає є двійкове число, кожен біт якого має певне значення. Значення бітів наведені в таблиці 3.


Таблиця 3. Значення бітів режимів прав доступу.

Біт

Значення

0

Немає доступу

1

Доступ на виконання

2

Доступ на запис

4

Доступ на читання


Таким чином режиму «читання та запис» відповідає число 110 (6),

режиму «читання та виконання» число 101 (5), «читання запис та виконання» число 111 (7).

Комбінація цифр формує трьохзначне число, що задає права доступу до файла. Наприклад:

755 – читання/запис/виконання для володаря, читання/виконання для групи і читання/виконання для інших

644 – читання/запис для володаря, тільки читання для групи і для інших

600 – читання/запис для володаря, для групи і для інших доступу немає


Застосування команди виглядає так:

# chmod 755 testscript.sh


Символічний метод легше запам’ятовується за рахунок використання символічних флагів, що задаються в якості аргумента команди. Символічні режими доступу задаються рядком символів. Перші символи вказують, чиї права змінюються u - володаря, g - групи, o – інших, a – всіх (встановлюється по замовчанню, якщо перший символ не задано).

Другий символ – вказує на вид зміни +, - , = , а третій – біти доступу.

Наприклад:

go+w - додає право на запис для групи та інших користувачів

+х - додає право на виконання для всіх

ugo=rw – встановлює всім права на читання та запис (таке саме значення має запис a=rw).

Таким чином, як бачимо Free BSD надає достатньо прості і дієві засоби керування та адміністрування правами доступу всіх категорій користувачів у вигляді простих і зрозумілих команд.


3. Керування процесами.

Процес – це абстракція, що використовується в UNIX для опису виконання програми. Це системний об’єкт через який можна контролювати звернення програми до пам’яті, процесора та ресурсів введення/виведення.

Системні та користувацькі процеси підкоряються однаковим правилам, внаслідок чого керування ними відбувається за допомогою одних і тих самих команд.

Процес складається з адресного простору та набору структур даних, що містяться в середині ядра. В структурах ядра зберігається різноманітна інформація про кожен процес. До найбільш важливих відомостей належать:
  • таблиця розподілу пам’яті процесу
  • поточний статус процесу (виконується, призупинений, неактивний)
  • пріоритет виконання процесу
  • інформація про ресурси, що використовуються процесом
  • маска сигналів процесу
  • ідентифікатор володаря процесу


Кожному новому процесу, що створений ядром, надається унікальний ідентифікатор – Process ID (PID). Ідентифікаційні номери надаються процесам в порядку їх створення. Коли номери закінчуються, ядро скидає лічильник в одиницю і знову починає надавати їх по порядку, пропускаючи ті ідентифікатори, що ще використовуються.

Коли система завантажується, ядро самостійно створює декілька процесів. Найбільш важливий з них – процес init , ідентифікатор якого завжди дорівнює 1. Програма init відповідає за виклик командного інтерпретатора для виконання стартових сценаріїв, якщо вони використовуються в системі. Всі процеси, крім тих, що створюються ядром, є потомками процесу init.

На рівні процесів існують запити на переривання, що мають назву сигналів. В UNIX визначено більше тридцяти різних сигналів. В таблиці 4 перелічено сигнали, що мають найбільше цікавити системного адміністратора.

Таблиця 4. Сигнали процесів

Ім’я

Опис

Реакція

Перехоп-люється

Блоку-ється

HUP

Відбій

Завершення

Так

Так

INT

Переривання

Завершення

Так

Так

QUIT

Вихід

Завершення

Так

Так

KILL

Знищення

Завершення

Ні

Ні

BUS

Помилка на шині

Завершення

Так

Так

SEGV

Помилка сегментації

Завершення

Так

Так

TERM

Програмне завершення

Завершення

Так

Так

STOP

Зупинка

Зупинка

Ні

Ні

TSTP

Сигнал зупинки з клавіатури

Зупинка

Так

Так

CONT

Продовження після зупинки

Ігнорується

Так

Ні

WINCH

Зміна вікна

Ігнорується

Так

Так

USR1

Визначається користувачем

Завершення

Так

Так

USR2

Визначається користувачем

Завершення

Так

Так


Багато сигналів призводять до завершення роботи процесу, а в деяких випадках при цьому ще виконується дамп оперативної пам’яті, який являє собою файл, що містить образ пам’яті процесу, його можна використовувати з метою аналізу та виправлення помилок.

Процеси, що виконуються можуть мати чотири стани:
  • виконання – процес можна виконувати
  • чекання – процес чекає виділення якого-небудь ресурсу
  • зомбі – процес намагається завершитися
  • зупинка – процес призупинений (не має дозволу на виконання)

Для поточного контролю процесів системний адміністратор використовує команду ps. За допомогою цієї команди можна отримати інформацію про ідентифікатори, приорітети, об’єм використаної пам’яті, час центрального процесора, поточний стан процесу та інше. Процеси-зомбі позначаються в лістингу як або . Команда може використовуватись з аргументом lax. При цьому вона видає інформацію скоріше за рахунок того, що не співставляє ідентифікатори процесів і імена користувачів. Крім того команда ps lax надає деяку додаткову корисну інформацію.

Також для контролю над процесами можна використовувати програму top , яка дає можливість робити не разовий знімок системи, а спостерігати все, що в ній відбувається регулярно через певні проміжки часу (по замовчанню кожні 10 секунд). Користувач root може запустити цю програму з опцією -q (top -q), щоб забезпечити їй максимально можливий пріоритет.

Іноді в системі можуть з’являтися некеровані процеси. Вони можуть бути двох типів:
  • користувацькі – що споживають занадто багато системних ресурсів
  • системні – що випадково починають себе некоректно поводити


У випадку появи в системі некерованих процесів їх зазвичай призупиняють на певний час сигналом STOP, з’ясовують причину і потім перезапускають сигналом CONT. Якщо ж є необхідність повністю зупинити виконання якого-небудь процесу – його «вбивають» сигналом KILL.


4. Підключення нових користувачів

Процес підключення нового користувача складається з декількох етапів.

Три з них визначаються системними вимогами, два пов’язані з формуванням середовища користувачів і ще декілька можуть знадобитися з метою адміністрування.

Обов’язкові етапи:
  • відредагувати файли passwd та shadow з метою створення реєстраційного запису користувача
  • встановити пароль для користувача
  • створити початковий каталог користувача

Користувацькі етапи:
  • скопіювати в початковий каталог користувача стандартні конфігураційні сценарії
  • встановити каталог електронної пошти та створити поштові псевдоніми

Адміністративні етапи:
  • додати запис нового користувача в файл /etc/group
  • встановити дискові квоти
  • перевірити правильність створення реєстраційного запису


Різні системи UNIX надають для виконання цих етапів різноманітні засоби автоматизації. В операційній системі Free BSD для виконання додавання користувачів та груп використовують сценарій adduser. Ця програма відрізняється від сценаріїв adduser або useradd які застосовуються в Linux, проте виконує ту саму задачу. Запустити сценарій adduser може тільки користувач root.

При першому запуску сценарій adduser налаштовує конфігураційний файл з набором значень по замовчанню. При наступному запуску можна скористатися опцією -s (silent – тихий), коли використовуються ці значення по замовчанню і програма запитує тільки основні дані про користувача.

Розглянемо приклад сеансу роботи adduser.

# adduser -s

Use option ”–silent” if you don’t want to see warning and questions.

Check /etc/shells

Check /etc/master.passwd

Check /etc/group

Enter your default shell: csh date ksh no sh tcsh [ksh]:

Your default shell is: ksh -> /usr/local/bin/ksh

Enter your default HOME partition: [/home] :

Copy dotfiles from : /usr/share/skel no [/usr/share/skel] :

Send message from file : /ets/adduser.message no [/ets/adduser.message] :

Use password-based authentication (y/n) [y] : y

Enable account password at creation (y/n) [y] : y

Use an empty password (y/n) [n] : n


Ok, let’s go.

Don’t worry about mistakes. I will give you the chance later to

correct any input.

Enter username [a-z 0-9 - ] : vov

Enter full name [ ] : Vov user

Enter shell csh date ksh no sh tcsh [ksh] :

Enter home directory (full path) [ /home/vov ] :

Uid [1005] :

Enter login class : default [ ] :

Login group vov [vov] :

Login group is “ vov “ . Invite vov into other groups : quest no [no] :

Use password-based authentication (y/n) [y] : y

Use an empty password (y/n) [n] : n

Enter password [ ] :

Enter password again [ ] :

Enable account password at creation (y/n) [y] : y


Name : vov

Password : ****

Fullname : Vov user

Uid : 1005

Gid : 1005 (vov)

Class :

Groups : vov

HOME : /home/vov

Shell : /usr/local/bin/ksh

OK? (y/n) [y] :

Added user “ vov ”

Send message to “ vov “ and : no root second_mail_address [no] :


Vov user,

Your account “ vov “ created.

Have fun!


See also chpass(1), finger(1), passwd(1)

Add anything to default message (y/n) [n] :

Send message (y/n) [y] : n

Copy files from /usr/share/skel to /home/vov

Add another user? (y/n) [y] : n

Goodbye!


Натискання клавіші Enter після кожного запиту встановлює значення по замовчанню – воно вказано в дужках. В деяких випадках значення вибирається із списку. Якщо список містить значення no, то воно забороняє всі інші можливості.

Видалення користувача виконується достатньо просто. Для цього використовується команда rmuser, аргументом якої є ім’я користувача.

Приклад сеансу роботи rmuser.

# rmuser vov

Matching password entry :

vov : IRBplrE/nkDQo : 1008 : 1008 : : 0 : Vov

user : /home/vov : bin/csh

Is this the entry you wish to remove? y

Remove user’s home directory ( /home/vov ) ? y

Updating password file, updating data bases, done.

Updating group file : (removing group vov - - personal group is empty)

done.

Removing user’s home directory ( /home/vov ) : done.

Removing files belonging to vov from /tmp : done.

Removing files belonging to vov from /var/tmp : done.

Removing files belonging to vov from /var/tmp/vi.recover : done.


Отже, як видно з лістингу – видалення користувача відбувається швидко і дуже просто. Слід тільки відмітити, що при видаленні користувача права володіння його файлами продовжують належати UID (User ID), який залишається в системі.


5. Резервне копіювання

В більшості випадків інформація, що зберігається на комп’ютерах коштує дорожче за самі комп’ютери. Це твердження справедливе, звичайно, для комп’ютерів, що виконують свої прямі функції, а не слугують примітивною розвагою для школярів. Існує багато причин з яких інформація може бути пошкоджена або втрачена: помилки програмного забезпечення, апаратні збої, непрофесійні дії персоналу і т.і. Відновлення інформації дуже не проста задача і її виконання потребує великих затрат як грошей так і часу.

Набагато кращим рішенням в цьому випадку є відновлення даних з резервних копій, які були створені раніше. Готуйтесь до гіршого і воно ніколи не настане – так виглядає закон Мерфі. Обережність – це ціна, яку доводиться платити за безпеку. Важливість резервного копіювання немає необхідності доводити. Слід тільки звернути увагу на те, що процедура ця вимагає немало часу і затрат.

В системах UNIX існує стара, перевірена часом утиліта dump, яка призначена для створення резервних копій. Програма дозволяє створювати «інкрементні» резервні копії, коли в перший раз створюється копіювання всієї системи, а потім копіюються тільки змінені або нові файли. Це дозволяє економити час та місце на носіях.

Для створення резервної копії необхідно використовувати який-небудь зовнішній носій, який можна монтувати і виконувати копіювання. Якщо в якості зовнішнього носія використовується пристрій IDE то його монтувати не має потреби, оскільки команда dump записує інформацію безпосередньо на цей пристрій і не потребує монтування файлової системи.

Наступна команда виконує повне резервне копіювання файлової системи /home

# dump -0u -f /dev/ad2 /home


Опція 0 відповідає копіюванню на рівні 0 (копіюються всі файли), а опція u вказує на запис у файл /etc/dumpdates. Цей файл має текстовий формат необхідний утиліті dump для того, щоб при «інкрементному» копіюванні встановити які файли потребують збереження.

Після цього можна виконувати «інкрементне» копіювання використовуючи той самий синтаксис, але з більш високим номером рівня dump:

# dump -1u -f /dev/ad2 /home


Рівні dump дозволяють копіювати тільки ті файли, які змінилися з моменту копіювання на більш низькому рівні. Чим нижчий рівень, тим більше файлів копіюється. Рівень 0 завжди відповідає глобальному копіюванню всіх файлів.

При відновленні даних використовується утиліта restore. Вона може виконуватись в інтерактивному та не інтерактивному режимах. Інтерактивний режим використовується для визначених файлів, наприклад для випадково видалених. Для цього переходять у відповідний каталог і запускають програму restore в інтерактивному режимі:

# restore -if /dev/ad2

В оболонці програми підтримується набор команд, що дозволяють переміщуватись по каталогам, переглядати файли і додавати їх до списку. Після того як список файлів на відновлення готовий його відновлюють командою extract.

Відновити всі файли можна за допомогою не інтерактивного відновлення:

# restore -rf /dev/ad2


Команди dump та restore мають багато особливостей, що розширюють їх можливості. Дуже гарний посібник з використання цих команд наведений в [6].

Займатися резервним копіюванням є достатньо нудним заняттям. Тому не дивно, що створювати резервні копії можуть лише одиниці. Крім того підтримувати резервне копіювання іноді немає сенсу з фінансової точки зору. На щастя існує альтернативне рішення. Цим рішенням є створення дзеркального сервера. Дзеркальний сервер являє собою ще один сервер, завданням якого є щоденна синхронізація файлів з основним сервером (тобто повне клонування). Якщо з основним сервером щось трапиться – його замінить дзеркальний. В системах UNIX цю задачу може виконувати спеціальна утиліта CVSup.

Розглянемо, що необхідно для налаштування CVSup. Нехай необхідно створити дзеркальні копії чотирьох каталогів /home, /usr/local/www, /var/mail, /etc. В дійсності необхідно дублювати більше даних, але для прикладу буде достатньо. Спочатку необхідно настроїти основний каталог, який вказує демону cvsupd, які дані пересилати клієнтам, тобто дзеркальній машині (демонами у Free BSD називають сервіси). Маючи повноваження root, необхідно дати наступні команди:

# cd /usr/local/etc

# mkdir -p cvsup/sup

# cd cvsup/sup

# mkdir home www mail etc

Потім в кожному з чотирьох нових підкаталогів необхідно створити два файли: .cvs та releases. Ці файли описують «набір» для сервера cvsupd та вмикають його обслуговування. В підкаталозі home необхідно створити файл home.cvs з наступними рядками:

upgrade home

rsymlinc *

У файлі releases необхідно розмістити наступне:

home list=home.cvs prefix=/

Ті самі дії необхідно виконати для інших підкаталогів, змінюючи лише ім’я файла .cvs та відповідне посилання на нього. Після цього необхідно запустити сервер cvsupd:

# cvsupd -b /usr/local/etc/cvsup -C 1 -1 /dev/stdout


Тепер переходимо до дзеркальної машини. В каталозі /etc необхідно створити файл mirror-supfile, або з будь-яким іншим. Приклад вмісту цього файлу:

*default host=server1.hostname.com

*default delete use-rel-suffix

*default compress

*default preserve

*default base=/usr

*default release=home

home

*default base=/usr/local

*default release=www

www

*default base=/var

*default release=mail

mail

*default base=/usr

*default release=etc

etc


В цьому лістингу server1.hostname.com відповідає імені хосту основного сервера.

Після створення файла mirror-supfile все готово для запуску першого сеансу. Для запуску процесу CVSup використовується команда:

# cvsup -L 2 /ets/mirror-supfile

На екрані буде відображатися процес копіювання файлів. Перший сеанс буде достатньо довгим, адже копіюється великий об’єм інформації, однак всі наступні сеанси будуть швидкими та ефективними.

Не дивлячись на те, що створення дзеркального сервера є достатньо ефективним засобом забезпечення безпеки даних, слід пам’ятати, що такий спосіб не є повною заміною інкрементного резервного копіювання. Це рішення підходить для адміністраторів, яким не потрібний аудит системи, контроль версій або зовнішні архіви. При використанні корпоративного сервера це рішення не є найкращим і без резервного копіювання на зовнішні носії тут не обійтись.


6. Робота в мережах.

Були часи, коли існували два типи операційних систем – спеціально створені для роботи в мережах і такі, що не підтримують мережу взагалі.

До перших відносились в основному UNIX-подібні системи для мейнфреймів, наприклад AIX, IRIX, Digital UNIX, BSDI, а також спеціалізовані системи типу Novell NetWare та VMS. Друга категорія включала в себе операційні системи для персональних користувацьких машин, такі як Windows та Mac OS.

Зараз картина докорінно змінилася. В наші дні надійність та мережеві функції персональних систем перевищують по можливостям більшість старих операційних систем класу мейнфреймів. Mac OS з архітектурою Free BSD, Windows XP / Windows7 є платформами фундаментальним принципом яких є робота в мережі.

Що стосується Free BSD, то ця система як і більшість UNIX-систем з самого початку спроектована як мережева платформа.

Ми не будемо розглядати в рамках цієї роботи принципи функціонування комп’ютерних мереж. Розглянемо конкретні дії по адмініструванню роботи в мережі під управлінням Free BSD.

Як відомо кожен комп’ютер має IP-адресу, призначену для однозначної ідентифікації його в мережі. Хоча в загальному випадку IP-адреса – це скоріше логічний опис місця знаходження, достатнє для того, щоб маршрутизатори змогли визначити, де в мережі знаходиться передавальна та приймальна машина.

Визначити IP-адресу будь-якої з мережевих карт, а також інших мережевих інтерфейсів можна за допомогою утиліти ifconfig. Опція -a дозволяє вивести список всіх мережевих пристроїв в системі, а також їх доступність в даний момент часу. Для зміни IP-адреси, зв’язаної з мережевою карткою, необхідно виконати команду:

# ifconfig fxp1 64.41.131.103

де 64.41.131.103 – нова адреса, а fxp1 – інтерфейс, якому вона призначається. Таке визначення IP-адреси, без вказування мережевої маски, призводить до того, що значення маски та широкомовної адреси система призначить за замовчуванням, причому виконає це для мережі класу А (маска 255.0.0.0 і broadcast 64.255.255.255).

Команда ifconfig дозволяє також вводити і мережеву маску. Це виконується за допомогою ключового слова netmask, причому значення маски можна вказувати в звичайній формі, в шістнадцятірковій нотації, або у вигляді символічного імені, визначеного у файлі /ets/networks, наприклад:

# ifconfig fxp1 64.41.131.103 netmask 255.255.255.0

# ifconfig fxp1 64.41.131.103 netmask 0xffffff00

# ifconfig fxp1 64.41.131.103 netmask your-netmask


Існує декілька спеціальних IP-адрес, які є дуже важливими. По-перше це адреса мережі, в якій один або декілька останніх байтів дорівнюють нулю, наприклад 64.41.131.0. Ця адреса належить до всієї мережі 64.41.131 і як правило, використовується при настроюванні маршрутизаторів. Ще більш важливою є адреса, у якої останній байт дорівнює 255. Це так звана широкомовна адреса. Наприклад адреса 64.41.131.255 відноситься до всіх комп’ютерів з мережі 64.41.131.

IP-адреса призначена комп’ютеру в мережі може бути в будь-який момент змінена на іншу. Що ж стосується самого нижнього рівня стека протоколів TCP/IP, то на ньому IP-адреса взагалі ніякої ролі не грає. На нижньому мереженому рівні мають значення тільки так звані фізичні адреси, відомі як MAC-адреси (Media Access Controler). Кожен мережевий пристрій має унікальну MAC-адресу. В світі не існує двох однакових карт з однаковими фізичними адресами. Однак на практиці все дещо складніше.

Не існує механізму маршрутизації, який здатний працювати з MAC-адресами, але є механізм, що працює з IP-адресами. Для переводу однієї адреси в іншу використовується ARP (Address Resolution Protocol) – протокол перетворення адрес. Для цього програма, що обробляє пересилання звертається до спеціальної таблиці відповідності IP- та MAC-адрес, яка називається ARP-кеш.

Протокол ARP є прозорим для прикладних програм і стеку протоколів TCP/IP. Однак існують ситуації, коли адміністратор мережі повинен вручну працювати з ARP-кешем. Вміст кеша можна перевірити за допомогою команди arp –a :

# arp -a

w001.sjc-ca.dsl.cnc.net (64.41.131.1) at 0:0:c5:7c:7:f0 (ethernet)

w013.sjc-ca.dsl.cnc.net (64.41.131.13) at 0:30:65:a4:9a:5e (ethernet)

w063.sjc-ca.dsl.cnc.net (64.41.131.63) at ff:ff:ff:ff:ff:ff permanent (ethernet)


Записи в кеші зберігаються певний час, після чого кеш автоматично оновлюється. Але іноді доводиться виконувати очищення кеша вручну, наприклад, коли відбувається заміна або встановлення нової мережевої картки. Видаляти такі записи можна тотально для всього кеша, або вибірково:

# arp -d w001.sjc-ca.dsl.cnc.net - по імені запису

# arp -d 64.41.131.13 - по IP-адресі

# arp -d -a - для всього кеша


Однією з найголовніших навичок налаштування мережі є конфігурування маршрутизаторів. Для цього дуже важливо розуміти роботу маршрутизатора. Будь-який маршрутизатор працює з таблицею маршрутизації, яка являє собою набір правил, відповідно до яких пакети з визначеними IP-адресами перенаправляються на наступний маршрутизатор.

Дуже часто термін маршрутизатор замінюють його синонімом шлюз.

В традиційному розумінні шлюз – це граничний пристрій, через який локальний трафік перенаправляється в глобальну мережу. Тобто шлюз є своєрідним перехідним з’єднувачем між локальною та глобальною мережами і на своєму рівні дійсно є маршрутизатором.

Визначити шлюз в ifconfig неможливо, оскільки адреса шлюзу не прив’язана до конкретного мережевого інтерфейсу. Для налаштування шлюзу в UNIX-системах є команда route. Але перед тим як перейти до налаштувань необхідно переглянути поточні налаштування за допомогою команди netstat -rn:

# netstat -rn

Routing tables

Internet:

Destination Gateway Flags Refs Use Netif Expire

default 64.41.131.103 UGSc 1 1 fxp0

. . .


На перший погляд здається, що адреса шлюзу вже налаштована. Але в дійсності слід знати, що команда route не контролює коректність налаштувань і можливі два варіанти : або мережа з цими налаштуваннями працює правильно, або не працює зовсім (другий варіант найбільш імовірний).

Процес встановлення маршруту по замовчанню складається з двох обов’язкових кроків: видалення запису про існуючий маршрут і додавання запису про новий. Ці дії виконуються за допомогою двох ключових слів – delete та add:

# route delete default

delete net default

# route add default 64.2.43.1

add net default: gateway 64.2.43.1


Встановлення імені комп’ютера – hostname – завдання дуже просте. Воно вирішується за допомогою команди hostname з єдиним параметром – повним доменним іменем комп’ютера :

# hostname vov.somewhere.com


Та сама команда дозволяє визначити поточне ім’я комп’ютера, причому як у повній (з доменною частиною), так і в короткій (тільки ім’я хосту) формі:

# hostname

vov.somewhere.com

# hostname -s

vov


Таким чином ми ознайомились з набором інструментів, що дозволяють налаштувати на системі Free BSD IP-адресу, мережеву маску, ім’я хоста та маршрут по замовчанню. На завершення розгляду налаштувань мережі не можна обійти стороною, ще одну корисну команду – ping, яка є програмною утилітою, призначеною для перегляду статистики обміну пакетами між хостами. В якості параметра команди можна вказати, як адресу відділеного комп’ютера, так і його ім’я:

# ping 64.41.131.103

# ping vov

Припинити виконання програми можна натисканням комбінації Ctrl+C.


7. Аналіз продуктивності системи

Однією з фундаментальних відмінностей між системами на основі Windows та системами UNIX, є управління процесами. Системи Windows дозволяє керувати в дуже обмеженому сенсі лише визначеними процесами рівня додатків. Навіть таблицю процесів ми бачимо лише в екстремальних ситуаціях. При цьому, натиснувши комбінацію Ctrl+Alt+Del ми можемо отримати список запущених процесів, які при бажанні можна припинити. На цьому власно кажучи і закінчуються всі можливості Windows, адже із списку навіть не ясно, що робить кожен з процесів на даний час. Free BSD дозволяє отримати повну інформацію про кожен процес, а також дозволяє перезапустити процес, змінити його пріоритет, передати йому будь-який сигнал переривання і т.і. Саме головне - система дозволяє з’ясувати, який з процесів викликає проблеми. Таким чином сутність UNIX-систем полягає в тому, що адміністратор має можливість налаштувати все, що робить система та змінити її роботу в необхідну сторону.

Почнемо з моніторингу системи. Найпростішою утилітою моніторингу є програма top. Її назва залишилася від старих часів, коли ця програма виводила список десяти основних процесів в порядку зменшення споживання ресурсів (top – верхівка). На даний час ця програма відображає всі запущені процеси незалежно від їх стану. Після запуску утиліта відображає інформацію про стан системи, яка оновлюється щосекунди.


Під час моніторингу системи може виникати необхідність втручання в хід процесів. Наприклад деякий процес забирає дуже багато ресурсів, або є некерованим. В цьому випадку адміністратор може скористатися можливістю перервати процес, який вийшов з під контролю, або змінити його пріоритет.

Перервати виконання процесу можна командою kill. Для цього під час виконання програми top необхідно натиснути клавішу k і програма виведе запрошення kill. Цій команді необхідно ввести ідентифікатор процесу, який буде перервано. Оскільки адміністратор володіє правами root – процес буде перервано миттєво. Слід зазначити, що таким чином можна перервати тільки нескладні процеси. В загальному випадку для цього використовують утиліту kill, яка є окремою програмою і діє більш ефективно. Запуск утиліти відбувається з вказуванням ідентифікатора процесу:

# kill 12553

Утиліта kill дозволяє використовувати додаткові опції, що розширюють її використання. Найбільш важливі опції (сигнали) наведені в таблиці 5:

Таблиця 5 . Сигнали kill

Сигнал

Символічне ім’я і значення

1

HUP – від’єднання (переривання та перезапуск)

2

INT – переривання

3

QUIT – вихід

6

ABRT – аварійне завершення

9

KILL – сигнал завершення, який неможна ігнорувати

14

ALRM – тривога

15

TERM – коректне завершення процесу



Формат команди дозволяє вказувати номер сигналу або його символічне ім’я:

# kill -9 12553 (зупиняє будь-який процес незалежно від його стану)

# kill -HUP 12553 (перериває та перезапускає процес)

Перший сигнал називають super-kill , його використовують лише тоді, коли сигнал kill-TERM не дав бажаного результату. Другий сигнал зазвичай використовують для перезапуску процесу з метою, щоб вступили в дію зміни, внесені в конфігураційні файли.

Існують також інші засоби впливу на процеси. Одним з них є зміна пріоритету процесу. Цю дію виконують за допомогою команди renice, яка змінює пріоритетність (рівень nice) будь-якого поточного процесу.

Пріоритетність процесу являє собою ціле число в діапазоні від -20 до 20.

Найвищим пріоритетом володіють процеси із значенням -20, найнижчим – із значенням 20. Тобто чим більше число – тим нижчий пріоритет.

Звичайні користувачі (не root) можуть тільки знижувати пріоритет, тобто збільшувати число nice. Для зміни пріоритету на значення 10 використовують наступний формат команди:

# renice -10 1442

Перед значенням пріоритету ставиться риска. Для того щоб вказати від’ємний пріоритет необхідно поставити риску і мінус:

# renice --10 1442

Встановити рівень пріоритету на етапі запуску процесу можна командою nice поставивши її перед ім’ям процесу, що запускається і вказавши рівень:

# nice 10 ps

Таким чином, процес ps запускається з рівнем пріоритетності 10.


Після того як ми навчилися керувати процесами в ручному режимі, розглянемо як можна запускати процеси автоматично, без втручання користувачів. Автоматизація завдань дозволяє виконувати такі задачі, як перевірка захисту, оновлення стану системи, очищення log-файлів та багато іншого. В деяких операційних системах планувальниками є окремі додатки, але перевагою UNIX-систем є те, що планувальник є «демоном», який здатен запустити будь-яку програму командного рядка відповідно до встановленого графіка.

Як і у багатьох системах UNIX, планувальник Free BSD має назву cron. Демон cron виконується постійноі перевіряє свої вхідні файли кожну хвилину. Цей процес не вимагає перезапуску, він автоматично щохвилини перечитує зміни, що відбуваються в системі.

Існує глобальний файл crontab (/ets/crontab) і каталог (/var/cron/tabs), в якому користувачі можуть створювати свої власні файли crontab. Маючи права root, неважко редагувати файл /ets/crontab, додаючи в нього будь-які значення. Однак цього краще уникати і залишити його незмінним, краще створити особистий файл користувача root в каталозі /var/cron/tabs.

Оскільки файл crontab розташовується в центральному каталозі /var/cron/tabs з правами доступу 0600, механізм захисту дозволяє користувачам створювати свої файли, ніяк не впливаючи на чужі. Цей механізм реалізує програма crontab:

# crontab -e

Якщо ви, як root бажаєте відредагувати файл crontab іншого користувача з іменем Vov, застосовується такий запис:

# crontab -e -u Vov

Файл crontab в своєму складі містить три рядки коментарів, які не обробляються, а потім слідує завдання з вказанням дати і часу виконання, наприклад:
  1. 3 1,15 * * cat ~vov/faq.txt | mail -s “FAQ Auto-Post mylist@testsystem.com

В цьому завданні передбачено пересилання текстового файлу на адресу списку розсилки. Воно запускається о 03:00 в перший і п’ятнадцятий день кожного місяця. Завдання містить п’ять полів, що визначають час виконання завдання, а потім саме завдання. Поля розділені пробілами. Порядок полів і їх допустимі значення наведені в таблиці 6.

Таблиця 6. Поля дати і часу у файлі crontab

Поле

Допустиме значення

Minute (хвилини)

0-59

Hour (години)

0-23

Day of month (число місяця)

1-31

Month (місяць)

1-12

Day of week (день тижня)

0-7


Символ зірочка ( * ) вказує на всі можливі значення поля. Детальну інформацію про форматування команд запуску завдань можна отримати на сторінці довідки man(5) crontab.

Отже демон cron якнайкраще підходить для періодичного виконання завдань. Але іноді є необхідність запустити завдання один раз. Для цього в файл crontab додають запис crontab –u , який видаляє завдання після його виконання. Існує і більш зручний спосіб – програма at.

Фактично, at – це набір команд:

at – запуск завдань

atq – відображення черги завдань

atrm – видалення завдань з черги

В будь-якому випадку одразу за командою at вказується час виконання, а потім завдання. Час виконання має інтуїтивно зрозумілий вигляд:

at 10pm – запускається о10 годині вечора (22-00)

at 8:00am May 15 - запуск о 8-00 ранку 15 травня

at midnight Jan 2011 – запускається на першій секунді 2011 року


Для перегляду стану черги завдань використовують команду atq:

# atq

Date Owner Queue Job#

23:00:00 01/28/11 root c 2

Відмінити виконання завдання можна за допомогою команди atrm:

# atrm 2

За виконання команд at відповідає команда atrun, яка запускається кожні п’ять хвилин і читає чергу завдань всіх користувачів.