Завантажити Адміністрування Linux (CentOS). Типовий systemd.service. Управління systemd на віддаленій машині

Вітаю, колеги. Довгий часпроект NetSkills був присвячений виключно мережевим технологіям - Курс молодого бійця, Основи GNS, UNetLab. Однак від передплатників все частіше звучало питання: “А що ще має знати мережевий інженер чи системний адміністратор?” . Тут можна навести великий списоктехнологій/напрямків і в результаті зробити висновок, що знати лише мережі - недостатньо! Цілком очевидно, що для успішної кар'єри потрібно набагато більше. Тому було прийнято рішення розширити проект і спершу випустити курс "Linux для початківців".

Важлива деталь, викладач дівчина, яка зовсім недавно приєдналася до проекту NetSkills. Чому може навчити дівчина?Якщо ви зацікавилися, ласкаво просимо під кат.

Ціль курсу- Вивчити основи адміністрування операційних систем Linux. Матеріал здебільшого практичний і містить мінімальну кількість теорії. Курс підійде як для системних адміністраторів-початківців, які займаються налаштуванням серверів компанії, так і для мережевих інженерів, т.к. більша частина мережевого обладнанняпрацює під управлінням Linux (особливо якщо враховувати тенденцію імпортозаміщення), тому навички роботи з цією системою їм однозначно не завадять. Та й взагалі, кожен поважаючий себе ІТ-шник просто зобов'язаний володіти базовими навичками роботи з Linux системами. Цінність такого співробітника одразу зростає.

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

У план базового курсуувійшли такі теми:
1.Цілі вивчення операційної системи Linux, її основні переваги
2.Створення віртуальних машин.
3. Установка операційної системи CentOS.
4. Структура файлової системи Linux.
5.Основні команди, необхідні для роботи в консолі Linux(cd, ls, man, grep, find, cp, mv, rm тощо).
6.Налаштування мережі в CentOS. Утиліти Putty, WinSCP.
7.Основи безпеки. Заведення нових користувачів у системі.
8. Установка пакетів. Пакетний менеджер. Репозиторії.
9.Файловий менеджер mc, текстовий редактор nano та мережеві утиліти(ifconfig, nslookup, arp, telnet).
10.Налаштування шлюзу доступу до Інтернету. Iptables. NAT. DHCP.

Отже, навіщо вивчати лінукс та які його переваги?Вважаю, варто почати з визначення.
GNU/Linux – це сімейство unix-подібних операційних систем, що базуються на ядрі Linux. ОС з цього сімейства поширюються зазвичай безкоштовно як так званих дистрибутивів, що містять крім самої ОС ще й набір прикладного ПЗ (тобто по суті складання). Дистрибутивів Linux на сьогоднішній день існує величезна кількість, але майже всі вони є нащадками трьох основних дистрибутивів: Debian, Slackware та Red Hat. Докладніше про GNU/Linux та дистрибутиви можна прочитати і .

Можливо, у когось постало питання: чому GNU/Linux, а не просто Linux. Вся справа в тому, що Linux – це лише ядро, в той час як GNU/Linux – це операційна система. Однак, Linux'ом можна називати як ядро ​​так і ОС – і так буде правильно.

Умовно кажучи, ОС складається із двох частин: kernel spaceі user space. Kernel space це ядро, яке безпосередньо взаємодіє з пристроями в системі, обслуговує їх та здійснює налаштування. У нашому випадку – це ядро Linux, Розробка якого почалася в 1991 Лінусом Торвальдсом, що був на той момент студентом. Воно підтримує багатозадачність, динамічні бібліотеки, віртуальну пам'ять, відкладене завантаження, більшість мережевих протоколіві продуктивну системууправління пам'яттю та поширюється по ліцензії GNU GPL, тобто. вільно. Докладніше про саме ядро ​​та його «захоплюючу» систему нумерації версій можна дізнатися. Користувачі працюють у просторі user space (просторі додатків), а це у свою чергу файли. Взагалі кажучи, все в Linux'і представлено файлами - налаштування, програми, навіть процеси. Це дуже зручно при налаштуванні і коли намагаєшся з'ясувати чому все поламалося.

Дистрибутиви Linux розповсюджуються в основному за ліцензією GNU General Public License – ліцензії на вільне програмне забезпечення. Мета GNU GPL - надати користувачеві права копіювати, модифікувати та розповсюджувати (у тому числі на комерційній основі) програми, а також гарантувати, що і користувачі всіх похідних програм отримають перелічені вище права.

Крім вище зазначених незаперечних плюсів даної ОС, вона має ще ряд особливостей:
1.Безпека
2.Продуктивність
3.Надійність
4.Масштабованість
5.Апаратна сумісність
6.Не потрібно імпортозаміщення
7.Зарплата Linux адміністраторів вища, ніж у звичайних адміністраторів

Завдяки вище перерахованим особливостям, Linux набув широкого поширення і використовується в багатьох сферах: критичні послуги(швидкісні поїзди в Японії, CERN, системи контролю повітряного трафіку), соціальні мережі, пошукові послуги, а також у мобільних телефонах, планшетах, ПК, банкоматах та автомобільній електроніці.

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

Ми можемо:
1.Налаштувати програмний маршрутизатор/шлюз доступу до Інтернету з функціями міжмережевого екранута DHCP сервера
2.Обмежити доступ користувачів до мережі Інтернет за допомогою proxy сервера
3.Організувати поштовий сервердля корпоративної пошти
4.Створити веб сервер для корпоративного сайту та внутрішніх веб ресурсів
6.Налаштувати первинний та вторинний DNSсервера
7.Розгорнути файловий сервер
8.Збирати резервні копіїз інших серверів
9.Розгорнути сервер логування для збору подій з інших серверів

Таку схему ми і розвертатимемо в рамках цього курсу.

Вважаю, на цьому перший урок можна закінчити.

Вартість курсу: 10000 руб.
Опис курсу:

Будь-який системний адміністратор мріє про надійну операційній системі. Освойте CentOS – дистрибутив Linux корпоративного класу, відомий своєю стабільністю!

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

Вивчіть найнадійнішу безкоштовну ОС та станьте фахівцем із серверних технологій!

В результаті навчання ви навчитеся:

  • Здійснювати встановлення та розгортання Linux CentOS
  • Працювати з файловою системою Linux
  • Керувати обліковими записами та правами доступу
  • Методам роботи з командними оболонками та основ створення сценаріїв
  • Основ адміністрування стека TCP/IP та базовим інструментамдля роботи з мережею
Програма курсу "Адміністрування Linux":
  1. Введення в Linux
  2. Файлова система
    Кореневий каталог, точка монтування, домашній каталогтипи файлів. Звичайні файли. Каталоги. Файли пристроїв. Команди. Навігація по файловій системі: команди cd, pushd, popd, pwd. Створення, видалення та копіювання файлів. Команди touch, rm, cp. Операції із каталогами. Команди mkdirта rmdir.
  3. Облікові записи
    Поняття облікового запису та аутентифікації. Файли /etc/passwd та /etc/group, /etc/shadow та /etc/gshadow. Обліковий запис root. Паролі у Linux. Команди login, su, newgrp, passwd, gpasswd, chage.
  4. Права доступу
    Розподіл прав доступу до Linux. Читання. Запис. Виконання. Особливості прав каталогів. Призначення прав доступу. Команди chmod, chown, chgrp. Sticky bit.
  5. Робота з файлами
    Виведення інформації із файлів на екран консолі. Команди cat, tac, more, less, head, tail, od. Перенаправлення виводу. Концепція stdin, stdout, stderr. Канали. Оператори | і<, >, >>. Фільтрування інформації. Регулярні вирази. Команда grep. Архівування. Утиліти tar та gzip.
  6. Процеси в Linux
    Ідентифікатори процесів. Демони. Команда ps. Права доступу до процесів. Реальний та ефективний ідентифікатори. Біти SUID та SGID. Управління процесами. сигнали. Команди nice, nohup, kill, killall.
  7. Командні оболонки
    Огляд командних оболонок. Командна оболонка bash. Багатозадачність у консолі. Управління завданнями. Змінні середовища Midnight commander. для Bash.
  8. Планування завдань
    Робота з дисковими накопичувачами. Демон cron. Команди at, crontab, mount.
  9. Текстові редактори vi, Emacs
  10. Рівні ініціалізації SVR4
    Процес init. рівні ініціалізації. Файл /etc/inittab. Каталог /etc/rc.d.
  11. Система X Window
    Демон X. Запуск X. Скрипт startx. 5-й рівень ініціалізації.
  12. Мережеве адміністрування Linux
    Мережева модель OSI. Протоколи IP, UDP, TCP, ICMP. Iptables
Завантажити:

Я розповім про початкових налаштуванняхсистеми CentOS, які підвищують безпеку та зручність роботи з сервером. Зазначу, що у 7-й версії системи відбулися деякі зміни порівняно з попередніми версіями.

Ще раз звертаю увагу, що дані налаштування я роблю на віртуальний сервер. Якщо у вас є залізний сервер, то рекомендується виконати ще деякі налаштування, про які я тут не згадую. До них відноситься, наприклад, налаштування та перевірка стійкості до відмови при виході одного з дисків. Вимкнення регулярної перевіркимасиву mdadm та ін.

Початкове налаштування CentOS 7

Отже, у нас є: # uname -a Linux zeroxzed.ru 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Насамперед оновимо базову систему:

# yum update

Для зручності адміністрування, я завжди встановлюю Midnight Commander, або просто mc:

# yum install mc

І відразу ж для нього вмикаю підсвічування синтаксису всіх файлів, які не позначені явно у файлі /usr/share/mc/syntax/Syntaxсинтаксисом для sh та bash скриптів. Цей універсальний синтаксис нормально підходить для конфігураційних файлів, з якими найчастіше доводиться працювати на сервері Перезаписуємо файл unknown.syntax. Саме цей шаблон буде застосовуватися до файлів .conf і .cf, оскільки до них явно не прив'язано жодного синтаксису.

# cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax

# ifconfig

І побачите відповідь:

Bash: ifconfig: command not found

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

Замість ifconfig у CentOS 7 тепер утиліта ip. Я не розумію, навіщо пиляти окремі програмидля керування мережними налаштуваннями, якщо ifconfig і так чудово справляється із завданням. До того ж мені завжди подобалося, що в різних дистрибутивахлінукс все приблизно однакове. За допомогою ifconfig можна налаштувати мережу не тільки в linux, а й у freebsd. Це зручно. А коли у кожному дистрибутиві свій інструмент це незручно. Так що пропоную встановити звичний ifconfig.

Зробимо це:

# yum install net-tools

Тепер щоб у нас працювали команди nslookup або, наприклад, host необхідно встановити пакет bind-utils. Якщо цього не зробити, то на команду:

#nslookup

Буде висновок:

Bash: nslookup: command not found

Так що встановлюємо bind-utils:

# yum install bind-utils

Вимикаємо SELinux. Його використання та налаштування окрема розмова. Зараз я не займатимуся цим. Отже відключаємо:

# mcedit /etc/sysconfig/selinux

змінюємо значення
SELINUX=disabled
Щоб зміни набули чинності, перезавантажуємося:

# reboot

Можна без перезавантаження застосувати вимкнення SElinux:

# setenforce 0

Вказуємо мережеві параметри

Не використовуйте одночасно обидва демони синхронізації часу - chrony і ntp. Виберіть якийсь один. Особисто я не бачу в них різниці, сам найчастіше ставлю звичний ntp.

Додавання репозиторіїв

Для інсталяції різного софту необхідно. Найбільш популярні це EPEL та rpmforge, тому додамо їх. Спершу ставимо EPEL. З ним все просто, він додається зі стандартного репозиторію:

# yum install epel-release

Встановлюємо rpmforge:

# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt # yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1 .el7.rf.x86_64.rpm

# yum install http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

Налаштування зберігання історії у bash_history

Корисним буде внести деякі зміни до стандартного механізму збереження історії команд. Він часто рятує, коли треба згадати одну з раніше введених команд. Стандартні установки мають деякі обмеження, які незручні. Ось їх список:

  1. За промовчанням зберігаються лише останні 1000 команд. Якщо їх буде більше, то старіші будуть видалятися та замінюватись новими.
  2. Не вказано дати виконання команд, лише їх список у порядку виконання.
  3. Файл зі списком команд оновлюється після завершення сесії. При паралельних сесіях частина команд може бути втрачена.
  4. Зберігаються всі команди, хоча у зберіганні деяких немає сенсу.

Список останніх виконаних команд зберігається в домашньої директоріїкористувача у файлі .bash_history(На початку крапка). Його можна відкрити будь-яким редактором та подивитися. Для зручнішого виведення списку можна ввести в консолі команду:

# history

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

# Історія | grep yum

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

Export HISTSIZE=10000 export HISTTIMEFORMAT="%h %d %H:%M:%S " PROMPT_COMMAND="history -a" export HISTIGNORE="ls:ll:history:w:htop"

Перший параметр збільшує розмір файлу до 10 000 рядків. Можна зробити і більше, хоча зазвичай вистачає такого розміру. Другий параметр вказує, що необхідно зберігати дату та час виконання команди. Третій рядок змушує відразу після виконання команди зберігати її в історію. В останньому рядку ми створюємо список винятків для тих команд, запис яких не потрібно в історію. Я навів приклад самого простого списку. Можете доповнити його на власний розсуд.

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

# source ~/.bashrc

Автоматичне оновлення системи

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

Для автоматичної перевіркионовлень нам допоможе утиліта yum-cron. Ставиться вона традиційно через yum із стандартного репозиторію.

# yum install yum-cron

Після встановлення створюється автоматичне завданняна виконання утиліти в /etc/cron.dailyі /etc/cron.hourly. За замовчуванням утиліта завантажує знайдені оновлення, але не застосовує їх. Натомість адміністратору на локальний Поштова скринька root надсилається повідомлення про оновлення. Далі ви вже в ручному режимізаходьте і вирішуєте, встановлювати оновлення чи ні у зручний для вас час. Мені такий режим роботи бачиться найзручнішим, тому я не змінюю ці налаштування.

Файли конфігурації yum-cron знаходяться за адресою /etc/yum/yum-cron.confі yum-cron-hourly.conf. Вони непогано прокоментовані, тож у докладні роз'ясненняне потребують. Звертаю увагу на розділ , де можна вказати параметри надсилання повідомлень. За замовчуванням стоїть надсилання пошти через локальний хост. Тут можна змінити параметри та надсилати повідомлення через сторонній поштовий сервер. Але натомість особисто я волію глобально для всього сервера налаштувати пересилання локальної пошти root на зовнішню поштову скриньку через авторизацію на іншому smtp сервері.

Відключаємо флуд повідомлень у /var/log/messages

У дефолтній установці системи CentOS 7 весь ваш системний лог /var/log/messagesчерез деякий час роботи сервера буде забито наступними записами.

Oct 16 14:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 14:01:01 xs-files systemd: Starting user-0.slice. Oct 16 14:01:01 xs-files systemd: Started Session 14440 user root. Oct 16 14:01:01 xs-files systemd: Starting Session 14440 user root. Oct 16 14:01:01 xs-files systemd: Removed slice user-0.slice. Oct 16 14:01:01 xs-files systemd: Stopping user-0.slice. Oct 16 15:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 15:01:01 xs-files systemd: Starting user-0.slice. Oct 16 15:01:01 xs-files systemd: Started Session 14441 user root. Oct 16 15:01:01 xs-files systemd: Starting Session 14441 user root. Oct 16 15:01:01 xs-files systemd: Started Session 14442 user root. Oct 16 15:01:01 xs-files systemd: Starting Session 14442 user root. Oct 16 15:01:01 xs-files systemd: Removed slice user-0.slice. 16 жовтня 15:01:01 xs-files systemd: Stopping user-0.slice. Oct 16 16:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 16:01:01 xs-files systemd: Starting user-0.slice. Oct 16 16:01:01 xs-files systemd: Started Session 14443 user root. Oct 16 16:01:01 xs-files systemd: Starting Session 14443 user root. Oct 16 16:01:01 xs-files systemd: Removed slice user-0.slice.

Жодної практичної користі вони не несуть, тому відключимо їх. Для цього створимо окреме правило для rsyslog, де перерахуємо всі шаблони повідомлень, які вирізатимемо. Розмістимо це правило в окремому файлі /etc/rsyslog.d/ignore-systemd-session-slice.conf.

# cd /etc/rsyslog.d && mcedit ignore-systemd-session-slice.conf if $programname == "systemd" and ($msg contains "Starting Session" або $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" або $msg contains "Removed session" or $msg contains "Removed slice User Slice of" або $msg contains "Stopping User Slice of" ) then stop

Зберігаємо файл та перезапускаємо rsyslog для застосування налаштувань.

# systemctl restart rsyslog

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

Установка iftop, atop, htop, lsof CentOS 7

І насамкінець додамо кілька корисних утиліт, які можуть стати в нагоді в процесі експлуатації сервера.

iftop показує в режимі реального часу завантаження мережного інтерфейсу, може запускатися з різними ключами, не зупинятимуся на цьому детально, в інтернеті є інформація на цю тему. Ставимо:

# yum install iftop

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

# yum -y install htop # yum -y install atop

Ось як виглядає htop:

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

# yum install wget bzip2 traceroute gdisk

На цьому маю все. Базове налаштування CentOS 7 закінчено, можна приступати до встановлення та налаштування основного функціоналу.

Налаштування системної пошти

На завершення налаштування сервера CentOS 7 зробимо так, щоб пошта, адресована локальному root, відправлялася через зовнішній поштовий сервер на обрану поштову скриньку. Якщо цього не зробити, то вона локально складатиметься у файл /var/spool/mail/root. А там може бути важлива і корисна інформація. Налаштуємо її відправлення до ящика системного адміністратора.

Докладно про це я розповів в окремій статті. Тут коротко лише команди та швидке налаштування. Ставимо необхідні пакети:

# yum install mailx cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain

Малюємо приблизно такий конфіг для postfix.

Cat /etc/postfix/main.cf ## DEFAULT CONFIG BEGIN ###################### queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix inet_interfaces = localhost inet_protocols = all unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/aliases alias debugger_command = PATH =/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/ newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.10.1/samples readme_directory = /usr/share/ doc/postfix-2.10.1/README_FILES ## DEFAULT CONFIG END ###################### # Ім'я сервера, яке виводить команда hostname myhostname = centos7-test. xs.local # Тут за логікою потрібно залишати лише домен, але в даному випадку краще залишити повне ім'ясервера, щоб у полі відправник # фігурувало повне ім'я сервера, так зручніше розбирати службові повідомлення mydomain = centos7-test.xs.local mydestination = $ myhostname myorigin = $ mydomain # Адреса сервера, через який надсилатимемо пошту relayhost = mailsrv.mymail.ru :25 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_security_level =

Створюємо файл з інформацією про ім'я користувача та пароль для авторизації.

# mcedit /etc/postfix/sasl_passwd mailsrv.mymail.ru:25 [email protected]:password

Створюємо файл db.

# postmap /etc/postfix/sasl_passwd

Тепер можна перезапустити postfix та перевірити роботу.

# systemctl restart postfix

До стандартного аліасу для root в /etc/aliases, додайте зовнішню адресу, куди буде дублюватися пошта, адресована root. Для цього редагуємо вказаний файл, змінюючи останній рядок.

#root: marc

Root: root, [email protected]

Оновлюємо базу сертифікатів:

# newaliases

Відправимо листа через консоль локальному руту:

# df -h | mail -s "Disk usage" root

Лист має піти на зовнішню скриньку. На цьому налаштування локальної пошти закінчено. Тепер усі листи, адресовані локальному root, наприклад звіти від cron, будуть дублюватися на зовнішню поштову скриньку, причому з відправкою через нормальний поштовий сервер. Тож листи нормально доставлятимуться, не потрапляючи до спаму (хоча не обов'язково, є ще евристичні фільтри).

Висновок

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

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

  1. , або тільки підключення centosдо моніторингу шляхом встановлення на нього агента.
  2. В окремій рубриці автора