Основи системного адміністрування

Якщо ви володієте користувацьким рахунком root на будь-якій Лінукс системі, вам необхідно знати, принаймні, ази системного адміністрування. На початку, це пов'язано з керуванням користувацькими рахунками, з умінням правильно вимкнути систему, тощо. Цей розділ ознайомить вас з цими першими кроками адміністрації Лінукс системи.

Користувачі і групи

Як все було згадано раніше у Розділі 8, ви не повинні за звичайних обставин реєструватись як користувач root, натомість створіть звичайного користувача для повсякденної роботи. Щоб створити нового користувача, ви можете використати або знаряддя надані Slackware, або зробити це вручну, відредагувавши файл /etc/passwd.

Надані скрипти

Найлегшим способом керування користувачами і групами, це з допомогою наданих скриптів і програм. Slackware включає такі знаряддя як adduser, ?userdel(8), chfn(1), chsh(1) і passwd(1) для роботи з користувачами. Такі команди як ?groupadd(8), ?groupdel(8) і ?groupmod(8) використовуються для управління групами. За виключенням chfn, chsh і passwd, ці програми повинні запускатися користувачем root і тому розміщені у каталозі /usr/sbin. Програми chfn, chsh і passwd можуть вживатися будь-ким і відповідно розміщені у /usr/bin.

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

# adduser
Login name for new user []: jellyd

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

Ви також можете надати назву користувача як аргумент команди adduser на командному рядку:

# adduser jellyd

Після отримання реєстраційного імені, adduser спитає користувацький ID (ідентифікаційний номер):

User ID ('UID') [ defaults to next available ]:

Користувацький ID, більш відомий як UID (user ID) є справжнім способом за яким встановлюються права користувача на системі. Кожний користувач, окрім root, має унікальний номер починаючи з 1000 Ви можете вибрати власний номер UID за умови, що він більший або дорівнює 0 або, ще краще, залиште це на розсуд adduser, яка автоматично призначить наступний вільний номер вашому користувачеві.

Initial group [users]:

Усі користувачі поміщаються у групу users за замовчуванням. Ви можете додати свого у відмінну групу, якщо впевнені у тому що робите. Група до якої ви призначите нового користувача повинна існувати, звичайно.

Additional groups (comma separated) []: sys,wheel

Останнє додало користувача до інших груп. Так, користувачі можуть знаходитись у декількох групах одночасно. Розбиття користувачів на групи надзвичайно зручно якщо ви хочете відокремити, наприклад, користувачів що мають доступ до файлів веб-сервера від користувачів із просто доступом до FTP. Група sys, вказана у прикладі вище, дозволяє користувачам програвати аудіо-файли, використовуючи внутрішню звукову картку, тоді як група wheel може згодитись у випадку якщо ми захочемо обмежити число користувачів які зможуть використовувати команду su. (В останньому випадку, необхідно відредагувати також файл /etc/login.defs.)

Home directory [/home/jellyd]:

Домашні каталоги користувачів типово знаходяться у каталозі /home, як ми вже знаємо. Якщо ви перемістили домашні каталоги користувачів у якийсь інший каталог (що іноді буває на дуже великих системах), тут ви можете вказати де саме буде знаходитись домашня директорія вашого користувача.

Shell [ /bin/bash ]

Bash, це стандартна оболонка у Лінуксі і більшість вибере саме її. Якщо ви або ваш новий користувач звикли до іншої оболонки і вона встановлена на системі, то тут ви можете вказати шлях до неї. Ви завжди в змозі пізніше поміняти оболонку користувача за допомогою програми chsh (дивіться наступні розділи).

Expiry date (YYYY-MM-DD) []:

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

New account will be created as follows:
---------------------------------------
Login name:         jellyd
UID:                [ Next available ]
Initial group:      users
Additional groups:  sys, wheel
Home directory:     /home/jellyd
Shell:              /bin/bash
Expiry date:        [ Never ]

Цей діалог перевіряє вірність інформації, яку ви ввели. Якщо ви помилились десь, можете притиснути Ctrl+C, щоб перервати програму до створення нового користувача, якщо все гаразд - притисніть Enter.

Creating new account...

Changing the user information for jellyd
Enter the new value, or press return for the default
        Full Name []: Jeremy
        Room Number []: Smith 130
        Work Phone []:
        Home Phone []:
        Other []:

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

Changing password for jellyd
Enter the new password (minimum of 5, maximum of 127 characters)
Please use a combination of upper and lower case letters and numbers.
New password:
Re-enter new password:
Password changed.

Account setup complete.

Останнім етапом буде встановлення гасла. Якщо рахунок належатиме іншій особі, ви можете встановити тимчасове гасло і повідомити пізніше користувача щоб він змінив своє гасло за допомогою програми passwd, розглянутої трохи нижче.

Вибір гасла: Ще раз наголошуємо важливість вибору складнішого гасла для ваших користувачів. Це значно ускладнює підбір гасел у випадку гакерської атаки. Намагайтесь не вживати слів які легко знайти у словнику, вживайте літери як нижнього, такі і верхнього регістру, перемежовуйте рядок гасла числами і спеціальними знаками, такими як @, #, $, %, (), тощо. Одночасно, намагайтесь не забути власного гасла.

Шодо усунення користувачів, цього добитись досить легко. Лише запустіть userdel із назвою користувача, чий рахунок буде скасовано. Ви повинні впевнитись, що користувач не знаходиться на даний момент у системі (комадою w(1) або who(1)) і що жоден процес не запущено від імені цього користувача (використайте ?ps(1) для цього). Також запам'ятайте, що як тільки ви видалили користувача, вся інформація про нього зникне також.

# userdel jellyd

Ця команда видалить набридливого jellyd з системи, а саме: інформація про нього зникне з таких файлів як /etc/passwd, /etc/shadow і /etc/group, але не знищується домашній каталог jellyd.

Якщо ви хотіли видалити домашній каталог користувача, то скористалися би наступної команди:

# userdel -r jellyd

Тимчасова заборона користувацького рахунку описано у наступному розділі про гасла, оскільки ця дія вимагає також зміни гасла користувача Зміна користувацької інформації розглянуто у Розділі 12.1.3.

Програми створення і усунення груп є досить простими. groupadd лишень додасть рядок з назвою групи і унікальним ID до файлу /etc/group, тоді як groupdel, навпаки, видалить вказану їй групу. Решта залишається на ваш россуд, чи відредагувати після цього /etc/group і додати користувачів до новостворених груп. Як приклад, щоб створити групу під назвою cvs, ми повинні виконати:

# groupadd cvs

І щоб видалити її:

# groupdel cvs

Заміна гасел

Програма passwd відповідає за заміну гасел шляхом редагування файла /etc/shadow. Останній утримує всі системні гасла у зашифрованому форматі. Щоб поміняти ваше власне гасло, ви повинні видати команду:

# passwd
Changing password for chris
Old password:
Enter the new password (minumum of 5, maximum of 127 characters)
Please use a combination of upper and lower case letters and numbers.
New password:

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

Користувач root може також змінити гасло іншого користувача:

# passwd ted 

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

Якщо в цьому виникне потреба, ви також можете тимчасово внеможливити користувацький рахунок і дозволити його пізніше. Обидві операції здійснюються завдяки passwd. Щоб заборонити реєстрацію певному користувачеві, виконайте як root:

# passwd -l david

Ключ -l є скороченням від (lock). Остання дія поміняє гасло david-а на щось таке що ніколи не співпаде з жодним зашифрованим значенням. Щоб відновити користувачеві можливість реєструватися вам необхідно виконати:

# passwd -u david

Ключ -u є відповідним скороченням для (unlock). Ця команда відновить можливість david-а реєструватись на вашій системі. Блокування користувацького рахунку буває необхідним, особливо на машинах що надають SSH або FTP доступ, якщо користувач не поводиться згідно з правилами, встановленими на системі.

Зміна користувацької інформації

Дві речі які користувач може завжди поміняти - це оболонку і інформацію для програми finger(1). У Slackware ви можете використати chsh (change shell) і chfn (change finger) для цього.

Ви можете вибрати будь-яку облонку зі списку у ?/etc/shells(5). Для більшості користувачів /bin/bash буде саме тим що їм потрібно, інші, можливо, звикли до іншої оболонки. Якщо додаткова оболонка встановлена на вашій системі і шлях до неї вказано у /etc/shells, ви можете зробити її стандартною для себе за допомогою chsh:

$ chsh
Password:
Changing the login shell for chris
Enter the new value, or press return for the default
        Login Shell [/bin/bash]:

Користувач root може також поміняти оболонку іншого користувача, якщо запустить chsh з аргументом у вигляді імені цього користувача.

Інформація для finger є довільними даними, такими як ваше справжнє ім'я, номер телефону і номер кімнати. Останні можна поміняти завдяки chfn. Як і очікується, root може також поміняти finger інформацію іншого користувача.

Користувачі і групи класичним способом

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

Для початку ми додамо нового користувача до файлів ?/etc/passwd(5), ?/etc/shadow(5) і ?/etc/group(5). Файл passwd утримує певну інформацію про користувачів вашої системи, але (як не дивно) не містить їхніх гасел. Гасла з /etc/passwd вилучено вже давно з міркувань безпеки. Файл passwd повинен мати дозвіл на читання всіма користувачами, одночасно, ви не хотіли б щоб шифровані гасла бути прочитаними всіма, це може призвести до спроб розшифрування. Саме тому гасла зберігаються у файлі /etc/shadow, який є читаємим лише користувачем root. В /etc/passwd ви знайдете лише "x" замість гасел. Файл /etc/group перераховує всі групи і хто в них знаходиться.

Ви можете використати команду vipw для безпечного редагування /etc/passwd і vigr, відповідно, для /etc/group. Використайте vipw -s для безпечного редагування /etc/shadow. Під "безпечним" мається на увазі що ніхто не в змозі буде змінити файл під час вашого редагування.

Давайте роздивимось /etc/passwd і як додати нового користувача. Типовий рядок passwd може виглядати так:

chris:x:1000:100:Chris Lumens,Room 2,,:/home/chris:/bin/bash

Кожний рядок відповідає окремому користувачеві. Інформацію, що міститься у рядках, можна поділити на окремі поля, розділені двокрапкою, з наступним змістом, по-порядку: назва корисувача, його гасло ("x", оскільки воно зберігається у /etc/shadow), ID користувача, ID групи, необов'азкова інформація для finger, розділена комами, домашній каталог, оболонка яка використовується. Щоб добавити нового користувача, введіть новий рядок з відповідною інформацією.

Дані які ви вводите у /etc/passwd повинні відповідати певним вимогам, інакше користувач не в змозі буде зареєструватись на системі. Перш за все, впевніться що поле гасла містить "x" і обидва, користувацький ID і ID групи не повторюються у інших користувачів і груп. Ви можете ввести 100, що відповідає групі "users" у Slackware. Це повинен бути номер групи а не її назва. Важливо щоб група, якій належить користувач, знаходилась серед переліку в /etc/group. Внесіть дійсний домашній каталог користувача (ви можете його створити пізніше, не забудьте поміняти дозволи). І в останньому полі - шлях до оболонки що повинен співпадати з одним з перечислених у /etc/shells.

Тепер ми дізнаємось як додавати нове значення у /etc/shadow файл. Типовий рядок виглядає так:

chris:$1$w9bsw/N9$uwLr2bRER6YyBS.CAEp7R.:11055:0:99999:7:::

Знову ж таки, кожний рядок відповідає одному користувачеві, поля інформації розмежовані двокрапкою. У полях внесені наступні дані, по порядку: назва користувача, зашифроване гасло, скільки днів від Epoch (1 Січня 1970 року) відколи останній раз гасло було заміненим, скільки днів до того як гасло може бути заміненим, кількість днів після яких гасло повинно бути заміненим, кількість днів до закінчення дії гасла як користувача буде повідомлено, кількість днів після закінчення дії гасла коли користувацький рахунок буде унеможливлено, кількість днів від Epoch, коли користувацький рахунок буде скасовано, і, накінець, зарезарвоване поле.

Я ви бачите, більшість полів містять інформацію про закінчення дії користувацького рахунку. Якщо немає потреби у систематичному оновленні гасла або у закіченні строку дії користувацького рахунку, вам потрібно заповнити лише деякі поля спеціальної інформації. Для нового користувача, ви можете внести довільне випадкове значення у поле гасла, але уникаючи двокрапки. Можете не хвилюватися щодо гасла, вам всерівно доведеться поміняти його. Залиште поле з кількістю днів відколи гасло останній раз було змінено порожнім. Введіть значення 0:99999:7, так само як у прикладі рядка shadow вище. Решту полів залиште також порожніми.

Щодо редагування /etc/group. За замовчуванням, нові користувачі додаються до групи "users" на Slackware. Однак, якщо ви хочете створити нові групи і додати користувачів до них, цього досить легко добитись шляхом редагування /etc/group. Типовий рядок виглядатиме так:

cvs::102:chris,logan,david,root

Ви знайдете чотири поля: назва групи, гасло, ID, користувачі, включені у цю групу, розділені комою. Щоб сворити нову групу, додайте ще оди рядок до /etc/group з відповідною інформацією. Ви можете пропустити поле гасла, як показано у прикладі. Гасла груп практично не використовуються. Наступний раз як користувачі зараєструються з системою, вони знайдуть себе доданими до ще однієї групи при виконанні команди groups(1).

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

Тепер вам потрібно скористатися командою passwd для встановлення гасел ваших нових користувачів. Останнім кроком буде створити домашні каталоги користувачів так як вони вказані у /etc/passwd і за допомогою chown поміняти користувача і групу цих каталогів.

Скасування користувача можна здійснити просто видаливши відмовідні рядки з /etc/passwd, /etc/shadow і його назву з /etc/group. Ви додатково можете усунути його домашній каталог, поштовий буфер (mail spool) і завдання crontab, акщо такі існують.

Аналогічно, для усунення групи, видаліть відповідний рядок з /etc/group.

Вимкнення системи

Дуже важливо щоб ви правильно вимикали свою систему. Часте вимикання комп'ютеру завдяки кнопки живлення може спричинити до пошкодження файлової системи.

Якщо ви користуєтесь журнальованими файловими системами, такими як ext3 або reiserfs, це частково захистить вас під пошкодження даних, пов'язаних з невірним вимкненням або втратою живлення. Також перевірка файлової системи під час завантаження значно скоротиться у часі, порівняно з ext2. Але навіть журнальована файлова система не є приводом неправильної зупинки системи.

Slackware надає декілька способів вимкнення комп'ютеру. Першим з них буде з допомогою програми ?shutdown(8), поширеної також серед інших дистрибутивів. Ця програма дозволяє вимкнути або рестартувати машину у вказаний час, попереджуючи всіх користувачів що знаходяться на системі про це.

Найпростіше використання shutdown для негайного вимкнення комп'ютеру є:

# shutdown -h now

У цьому випадку користувачі отримають срандартне повідомлення про вимкнення системи, "now" (тепер) вказує час коли ми хочемо вимкнути комп'ютер і -h означає "halt" (команда зупинки). Наведена команда не є надто дружелюбною для системи з багатьма активними користувачами, але згодиться для домашньої робочої станції. На багатокористувацькій системі, можливо кращим варіантом був би:

# shutdown -h +60 "The system is going down in 1 hour\!"

Останнє вимкне систему через годину (60 хвилин) з повідомленням яке ви вкажете. Важливі системи повинні планувати час простою заздалегідь і попереджувати користувачім всіма можливими способами (поштою, електронною дошкою об'яв, ?/etc/motd(5), тощо).

Щоб рестартувати машину, поміняйте прапорець -h на -r (reboot):

# shutdown -r now

Команда shutdown візьме декілька додаткових опцій про які ви можете дізнатися зі сторінки посібника ?shutdown(8).

Наступним способом вимкнути або перезалагодити машину будуть беспосередньо команди ?halt(8), ?poweroff(8) і ?reboot(8). Останні дві являються лише символічними посиланнями на /sbin/halt. Всі вони негайно виконують ту дію на яку вказує їхня назва. Просто виконайте на командному рядку:

# halt
# reboot

Більш безпосереднім способом перезавантажити або вимкнути систему буде якщо звернутися прямо до init(8) (попередні команди саме це і роблять у підгрунтті). Команда ?telinit(8) (зверніть увагу на одну англійську літеру "л" замість двох) дозволяє нам вказати програмі init у який робочий рівень нас помістити. Останнє запустить скрипт, відповідний даному робочому рівню (робочі рівні розглянуто у Розділі 4.1.3.2). Це, в свою чергу, зупинить або розпочне необхідні для даного робочого рівня процеси. Даний спосіб дійсний також для рестарту і вимкнення комп'юреру, оскільки останні теж розглядаються init як робочі рівні. Тож:

# telinit 0

Пішле систему у робочій рівень 0, тобто вимкне комп'ютер, зупиняючи всі процеси і розмонтовуючи файлову систему. Це цілком чинний спосіб припинення роботи.

Наступна команда перезавантажить комп'ютер:

# telinit 6

Для цікавих, під час переходу у робочий рівень 0 або 6, використовуючи shutdown, halt, reboot, тощо, буде виконано /etc/rc.d/rc.6. (/etc/rc.d/rc.0 - це лише символічне посилання на rc.6.) Ви можете змінювати цей скрипт, при необхідності, щоб відповідав вашим вимогам, але ретельно перевірте ваші зміни.

Накінець, останнім способом звичайним користувачам рестартувати машину, за умови що вони мають фізичний доступ до клавіатури, є комбінація клавіш Ctrl+Alt+Delete (трипальцевий салют). У підгрунтті виконується shutdown команда. Якщо ви знаходитесь у віконному середовищі X, ця комбінація клавіш може не працювати. У такому випадку ви можете зупинити спочатку X з допомогою Ctrl+Alt+Backspace або перейти до однієї з тесктових консолей завдяки Ctrl+Alt+F(1-6).

Як адміністратор, ви можете, звичайно, внеможливити комбінацію 'Ctrl+Alt+Delete, недоречну для серверної системи, наприклад, якщо закоментуєте рядок

ca::ctrlaltdel:/sbin/shutdown -t5 -r now

у /etc/inittab. Також загляньте у сторінку посібника inittab(5) для додаткових аспектів завантаження і припинення роботи системи.