====== LPIC-1 Exam 102 ======
Exam Objectives Version: Version 4.0
Exam Codes: 102-400 or LX0-104 (these exams are identical; passing either exam will count as the 102 exam toward your LPIC-1)
About Objective Weights: Each objective is assigned a weighting value. The weights indicate the relative importance of each objective on the exam. Objectives with higher weights will be covered in the exam with more questions.
[[https://www.lpi.org/our-certifications/exam-102-objectives|LPIC-1 Exam 102 objectives]]
Эта страница является кратким конспектом лекций Кирилла Семаева [[https://www.youtube.com/playlist?list=PLmxB7JSpraieH3aScuPs7h77cSEQvPi2A|LPIC-1 (exam 102) или "Базовые навыки по администрированию Linux"]]
====== Topic 105: Shells, Scripting and Data Management ======
===== 105.1 Customize and use the shell environment =====
Weight: 4
Description: Candidates should be able to customize shell environments to meet users’ needs. Candidates should be able to modify global and user profiles.
Key Knowledge Areas:
* Set environment variables (e.g. PATH) at login or when spawning a new shell
* Write Bash functions for frequently used sequences of commands
* Maintain skeleton directories for new user accounts
* Set command search path with the proper directory
The following is a partial list of the used files, terms and utilities:
* source
* /etc/bash.bashrc
* /etc/profile
* env
* export
* set
* unset
* ~/.bash_profile
* ~/.bash_login
* ~/.profile
* ~/.bashrc
* ~/.bash_logout
* function
* alias
* lists
* ''/etc/profile'' - файл глобальных настроек профиля. Читает нижестоящие файлы/каталоги:
* ''/etc/bash.bashrc'' (или ''/etc/bashrc'') - загрузка псевдонимов и функций (для неинтерактивного фхода)
* ''/etc/profile.d/*.sh'' - папка скриптов
* По порядку: ''~/.bash_profile'', ''~/.bash_login'', ''~/.bash_logout'', ''~/.bash_profile'' -> ''~/.bashrc'' - личные настройки пользователя.
''/etc/skel'' - набор файлов, копирующихся в новый профиль пользователя.
https://youtu.be/T6ZLxDm8C3w
# Псевдонимы - аналоги команд с разными ключами
alias ls='ls --color=auto'
# Функция - код, вызываемый короткой комадой
function whattime() {
echo "It's $(date +%R) o'clock"
}
Изменения файла ''.bashrc'' или аналогичного применяются после запуска новой оболочки. Можно либо перелогиниться, либо запустить ''bash'' ещё раз.
https://youtu.be/wCQqwFupaUc
Добавление аргументов к функции (про позиционные параметры $1, $2 и т. д. $0 - имя функции)\\
https://youtu.be/-FKG3WGB6dw
# вывести все переменные и функции
set
# вывести переменные среды
env
# Обычные переменные существуют только в рамках текущей сессии
weather="The weather is fine"
# Сделать из обычной переменной переменную среды (действует в текущей и в дочерних сессиях)
export weather
# Убрать переменную
unset weather
# Чтобы переменная работала постоянно, надо её добавить в .profile или аналогичные
# PATH - места, где система ищет исполняемые файлы, чтобы не указывать полного имени при запуске.
# Добавить папку:
PATH=$PATH:/home/user/exec
https://youtu.be/vuONh8G8FGs
===== 105.2 Customize or write simple scripts =====
Weight: 4
Description: Candidates should be able to customize existing scripts, or write simple new Bash scripts.
Key Knowledge Areas:
* Use standard sh syntax (loops, tests)
* Use command substitution
* Test return values for success or failure or other information provided by a command
* Perform conditional mailing to the superuser
* Correctly select the script interpreter through the shebang (#!) line
* Manage the location, ownership, execution and suid-rights of scripts
Terms and Utilities:
* for
* while
* test
* if
* read
* seq
* exec
''test'' - проверка файлов, числовых и строковых значений и т. д. На выходе даёт 0 (true) или не 0 (false), сохраняющееся в переменной ''$?''.
test 5 -gt 2
[ 5 -gt 2 ] # как вариант
echo $?
1 # нет, 5 не больше 2
[ "text" = "text2" ] # равны ли строки
test -x file.txt # есть ли права на выполнение
[ -e /home/user ] # существует ли домашний каталог user
Подстановка команд работает по принципу функций, результат работы команды является аргументом или значением переменной.
X = $(ls -a)
# или
X = `ls -a`
Условия и циклы
#!/bin/bash
echo "How are you?"
read VALUE
if [ $VALUE = "fine" ]
then
echo "Great!"
else
echo "It's a pity..."
fi
# Цикл FOR
for x in 1 3 7
# for x in `seq 3 8`
do
echo $x
done
# Цикл WHILE
x=1
while [ $x -le 5 ]
do
echo $x
x=$(($x+1))
done
echo "Type everything or type STOP to stop"
x="start"
while [ $x != "STOP" ]
do
read x
echo $x
done
===== 105.3 SQL data management =====
Weight: 2
Description: Candidates should be able to query databases and manipulate data using basic SQL commands. This objective includes performing queries involving joining of 2 tables and/or subselects.
Key Knowledge Areas:
* Use of basic SQL commands
* Perform basic data manipulation
Terms and Utilities:
* insert
* update
* select
* delete
* from
* where
* group by
* order by
* join
-- Создать БД
CREATE DATABASE cars;
-- Переключиться на эту базу
USE cars;
-- Создать таблицы new и used со столбцами с соотв. типами данных
CREATE TABLE new (brand VARCHAR(10), model VARCHAR(10), year YEAR, price INT);
CREATE TABLE used (brand VARCHAR(10), model VARCHAR(10), year YEAR, price INT);
-- Показать имеющиеся таблицы в БД
SHOW TABLES;
-- Свойства таблицы new
DESCRIBE new;
-- Импорт из файла
-- Файл (разделитель TAB):
Ford Focus 2011 500000
Lada Granta 2015 350000
Hyundai Getz 2010 270000
-- Включить возможность импорта с локальной машины от рута
mysql --local-infile=1 -u root
-- Выбрать базу
USE cars;
-- Импорт
LOAD DATA LOCAL INFILE "new.txt" INTO TABLE new;
-- Посмотреть данные таблицы
SELECT * FROM new;
-- Вставить строку в таблицу (здесь без цены, вместо неё будет NULL)
INSERT INTO new (brand, model, year) VALUES ('Mercedes','Benz','2006')
-- Выбор
SELECT model FROM new;
SELECT * FROM new WHERE brand="Lada" AND year="2015";
-- Удалить строки, где модель Getz
DELETE FROM new WHERE model='Getz'
-- Редактировать: сделать модель Solaris у всех Hyundai
UPDATE new SET model='Solaris' WHERE model='Hyundai';
-- Объединение: вывод информации из нескольких таблиц с условием
SELECT * FROM new JOIN used ON new.brand = used.brand
-- Сортировка по цене
SELECT * FROM new ORDER BY price;
-- Группировка
SELECT * FROM new GROUP BY brand;
====== Topic 106: User Interfaces and Desktops ======
===== 106.1 Install and configure X11 =====
Weight: 2
Description: Candidates should be able to install and configure X11.
Key Knowledge Areas:
* Verify that the video card and monitor are supported by an X server
* Awareness of the X font server
* Basic understanding and knowledge of the X Window configuration file
Terms and Utilities:
* /etc/X11/xorg.conf
* xhost
* DISPLAY
* xwininfo
* xdpyinfo
* X
X Window System - стандартная графическая подсистема для отрисовки и перемещения окон и взаимодействия с устройствами ввода, база для графических сред (KDE, Gnome и прочие). X11 позволяет подключаться к себе, т. е., выводить изображение на удалённый монитор, причём, монитор в данном случае считается "сервером", а комп с x11 - "клиентом".
sudo apt install xorg # установить X11 (в Ubuntu)
sudo X -configure # создать конфигурационный файл
cat /var/log/Xorg.0.log # логи
startx # запустить X11
exit # выйти
less xorg.conf.new # см. конфиг
# Section "serverLayout" - что есть в наличии: экран, клавиатура, мышь и т. д.
# Section "Files" - пути к шрифтам. Раньше, когда отрисовка шрифтов была ресурсоёмкой, существовали X Font Servers,
# т. е., вместо пути были IP-адреса этого сервера
Конфигурационный файл X11 лежит стандартно в ''/etc/X11'', но в современных дистрибутивах может быть по-другому, например, в Убунте конфиги лежат в ''/etc/share/X11/xorg.conf.d/''.
xwininfo # вывод информации об окне
xdpyinfo # вывод информации об X-сервере в целом
Приложение "терминал" в графическом интерфейсе - это не настоящая консоль, а её эмулятор (команда ''tty'' выдаёт /dev/pts/0, т. е., псевдотерминал). Реальную консоль можно вызвать с помощью ''Ctrl+Alt+F1'' (/dev/tty1). C F1 по F6 - это консоли, а на седьмой консоли ''Ctrl+Alt+F7'' уже висит сам графический интерфейс (стандартное положение GUI для многих дистрибутивов).
# В GUI переменная монитора показывает, что он локальный и нулевой
echo $DISPLAY
:0
# Если перейти в реальную консоль и запустить там startx и терминал (Ctrl+Alt+t), то дисплей будет другим
echo $DISPLAY
:1.0
# Если в этой консоли поменять значение $DISPLAY на 0, то запускаемые программы будут отображаться на нулевом дисплее
export DISPLAY=:0.0
firefox # отобразится на нулевом дисплее.
# Если закрыть X11, то firefox на нулевом дисплее тоже схлопнется.
xhost +192.168.1.99 # разрешить удалённым приложениям использовать этот монитор
DISPLAY=192.168.1.88:0.0 # на машине 192.168.1.99 использовать монитор 0 компа 192.168.1.88
===== 106.2 Setup a display manager =====
Weight: 1
Description: Candidates should be able to describe the basic features and configuration of the LightDM display manager. This objective covers awareness of the display managers XDM (X Display Manger), GDM (Gnome Display Manager) and KDM (KDE Display Manager).
Key Knowledge Areas:
* Basic configuration of LightDM
* Turn the display manager on or off
* Change the display manager greeting
* Awareness of XDM, KDM and GDM
Terms and Utilities:
* lightdm
* /etc/lightdm/
Display manager - это окно входа в систему (не оболочка).
# Установить
apt install gdm # kdm xdm
# Настройки хранятся в
cat /etc/X11/default-display-manager
/usr/sbin/gdm
# Можно отредактировать файл default-display-manager непосредственно, но удобнее запустить
dpkg-reconfigure kdm # можно написать любой установленный, окно выбора всё равно одно и то же
# Отключить, добавив в runlevel уровень 2 в соотв. файлах
vi /etc/init/kdm.conf
vi /etc/init/gdm.conf
# с xdm по-другому
sudo update-rc.d -f xdm remove
===== 106.3 Accessibility =====
Weight: 1
Description: Demonstrate knowledge and awareness of accessibility technologies.
Key Knowledge Areas:
* Basic knowledge of keyboard accessibility settings (AccessX)
* Basic knowledge of visual settings and themes
* Basic knowledge of assistive technology (ATs)
Terms and Utilities:
* Sticky/Repeat Keys
* Slow/Bounce/Toggle Keys
* Mouse Keys
* High Contrast/Large Print Desktop Themes
* Screen Reader
* Braille Display
* Screen Magnifier
* On-Screen Keyboard
* Gestures (used at login, for example GDM)
* Orca
* GOK
* emacspeak
====== Topic 107: Administrative Tasks ======
===== 107.1 Manage user and group accounts and related system files =====
Weight: 5
Description: Candidates should be able to add, remove, suspend and change user accounts.
Key Knowledge Areas:
* Add, modify and remove users and groups
* Manage user/group info in password/group databases
* Create and manage special purpose and limited accounts
Terms and Utilities:
* /etc/passwd
* /etc/shadow
* /etc/group
* /etc/skel/
* chage
* getent
* groupadd
* groupdel
* groupmod
* passwd
* useradd
* userdel
* usermod
Стандартные файлы:
* ''/etc/passwd'' - имя_пользователя:пароль:UID:GID:сведения:домашняя_папка:оболочка
* ''/etc/group'' - имя_группы:пароль:GID:члены_группы
Пароль группы - редко используемая возможность, он спрашивается, если пользователь меняет членство в группе или если группе с паролем даны права на папку.
Стандартные файлы плохи тем, что к ним имеют доступ все, и пароли, несмотря на то, что они зашифрованы, уязвимы. Для защиты придумали теневые файлы (в стандартных идёт ссылка "x" вместо реального зашифрованного пароля).
* ''/etc/shadow'' - имя_пользователя : пароль : время_после_смены_пароля : мин_срок_действия_пароля : макс._срок_действия_пароля : срок_предупреждения : время_работы_с_истёкшим_паролем : срок_для блокировки_пароля
* ''/etc/gshadow'' - имя_группы:пароль:GID:члены_группы
''useradd'' - добавить пользователя\\
''usermod'' - изменить учётную запись пользователя\\
''userdel'' - удалить пользователя\\
''groupadd'' - добавить группу\\
''groupmod'' - изменить группу\\
''groupdel'' - удалить группу\\
''chage'' - не путать с ''change''. ''chage'' - это "изменить возраст": срок действия пароля/учётки и т. д.\\
''getent'' - вывод значений из текстовых баз данных ( group, gshadow, hosts, netgroup, networks, passwd и т. д.)
chage -l username # посмотреть свойства учётки username
chage -E 2020-08-05 username # учётка истекает 5 авг 2020
chage -E -1 username # снять ограничение срока действия учётки
getent passwd username # вывод строки с username из /etc/passwd
===== 107.2 Automate system administration tasks by scheduling jobs =====
Weight: 4
Description: Candidates should be able to use cron or anacron to run jobs at regular intervals and to use at to run jobs at a specific time.
Key Knowledge Areas:
* Manage cron and at jobs
* Configure user access to cron and at services
* Configure anacron
Terms and Utilities:
* /etc/cron.{d,daily,hourly,monthly,weekly}/
* /etc/at.deny
* /etc/at.allow
* /etc/crontab
* /etc/cron.allow
* /etc/cron.deny
* /var/spool/cron/
* crontab
* at
* atq
* atrm
* anacron
* /etc/anacrontab
# Пользовательский cron
crontab -e
# вывести
crontab -l
# Пользовательский крон хранится как файл /var/spool/cron/
''/etc/cron.deny'' - список тех, кому запрещён доступ к крону. Остальные могут пользоваться.\\
''/etc/cron.allow'' - ТОЛЬКО ЭТИ пользователи могут пользоваться кроном, остальным запрещено. Если файл пустой, то крон разрешен только для root.\\
Если пользователь есть в обоих списках, то разрешение имеет больший приоритет, чем запрет.
==== anacron ====
''/etc/anacron'' - асинхронный планировщик, умеет запускать пропущенные задания. Полезен, когда нужно выполнять задания на нерегулярно работающем компьютере. Синтаксис отличается от стандартного крона.
# интервал (дни), задержка запуска (мин), имя, команда
1 5 cron.daily run-parts --report /etc/cron.daily
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
Самый мелкий интервал - 1 день. ''@monthly'' - переменная "каждый месяц", т. к. в месяцах разное кол-во дней. Anacron проверяет, когда последний раз запускалась задача с этим именем (файлы в ''/var/spool/anacron''), и если интервал превышает заданный, то после указанной задержки задача запускается. Задержка нужна, чтобы всё не стартовало одновременно.
В каталогах ''/etc/cron.{daily,monthly,weekly}'' есть файл ''0anacron'', что указывает на то, что анакрон имеет приоритет и выполняется в первую очередь. Когда в системе есть анакрон, то ежедневные, еженедельные и ежемесячные задания начинают выполняться анакроном, а не кроном, что исключает двойное выполнение задач. Так в Debian/Ubuntu. В некоторых дистрибутивах наоборот - крон имеет больший приоритет.
==== at ====
Планировщик разовых задач. Стандартно в комплект не входит, нужно ставить отдельно - ''sudo apt install at''.
at 15:00 # в 15 ч
at now +20 minute # через 20 мин
at 21:30 03/15/2020 # в 21:30 15 марта 2020
at 21:30 tomorrow # в 21:30 завтра
# после нажатия на Enter нужно ввести путь к файлу
atq # вывести список существующих задач
atrm 1 # удалить задачу №1
У at также есть возможность создать файлы ''/etc/at.deny'' и ''/etc/at.allow'' по аналогии с кроном.
===== 107.3 Localisation and internationalisation =====
Weight: 3
Description: Candidates should be able to localize a system in a different language than English. As well, an understanding of why LANG=C is useful when scripting.
Key Knowledge Areas:
* Configure locale settings and environment variables
* Configure timezone settings and environment variables
Terms and Utilities:
* /etc/timezone
* /etc/localtime
* /usr/share/zoneinfo/
* LC_*
* LC_ALL
* LANG
* TZ
* /usr/bin/locale
* tzselect
* timedatectl
* date
* iconv
* UTF-8
* ISO-8859
* ASCII
* Unicode
''$LANG'' - основная настройка языка\\
''LC_ALL'' - перезапись всех языковых настроек\\
''locale'' - вывод текущих настроек\\
''LANG=C'' - стандартная кодировка
Некоторые кодировки:\\
ASCII - 128 основных символов\\
ISO-8859 - большинство латинских символов\\
Windows-1251 - кириллические символы\\
UTF-8 - юникод
iconv - конвертер кодировок
iconv --list # вывод всех поддерживаемых кодировок
iconv -f UTF-8 -t ASCII /etc/fstab
==== Дата, часовой пояс ====
# установить время 21 мая 1995 г, 19:45
sudo date 052119451995
# выбор часового пояса
tzselect
# посмотреть текущий часовой пояс
cat /etc/timezone
# список зон
ls /usr/share/zoneinfo
# Если сделать символическую ссылку из /usr/share/zoneinfo в /etc/localtime,
# то это также установит соответственный часовой пояс
sudo ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
# декодировать файл зоны для просмотра в человеческом виде
zdump /etc/localtime
# ещё один способ (Ubuntu)
sudo dpkg-reconfigure tzdata
====== Topic 108: Essential System Services ======
===== 108.1 Maintain system time =====
Weight: 3
Description: Candidates should be able to properly maintain the system time and synchronize the clock via NTP.
Key Knowledge Areas:
* Set the system date and time
* Set the hardware clock to the correct time in UTC
* Configure the correct timezone
* Basic NTP configuration
* Knowledge of using the pool.ntp.org service
* Awareness of the ntpq command
Terms and Utilities:
* /usr/share/zoneinfo/
* /etc/timezone
* /etc/localtime
* /etc/ntp.conf
* date
* hwclock
* ntpd
* ntpdate
* pool.ntp.org
//Аппаратное время// - время часов на материнской плате. При запуске это время передаётся //системному времени//.\\
Команда ''date'' выводит системное время, ''sudo hwclock'' - аппаратное.
После двукратного "подведения стрелок" аппаратных часов создаётся файл ''/etc/adjtime'', где отражается расхождение аппаратных часов с точным временем, после чего можно командой ''sudo hwclock --adjust'' подвести аппаратные часы, не указывая точного времени, т. к. поправка уже известна.
# Задать аппаратное время
sudo hwclock --set --date="01/01/2021 13:45"
# Синхронизировать аппаратные часы с системными
sudo hwclock -w
# Использовать локальное время вместо UTC (в /etc/adjtime будет LOCAL)
sudo hwclock --localtime -w
# Вернуть UTC
sudo hwclock -u -w
==== NTP ====
https://www.ntppool.org/ru/use.html\\
https://www.ntppool.org/zone/ru
# Синхронизировать часы с пулом
sudo ntpdate 2.ru.pool.ntp.org
# Раньше нужно было создавать задачу в кроне для синхронизации часов командой ntpdate,
# сейчас можно использовать демон ntpd (он может быть и сервером точного времени).
sudo apt install ntp
vi /etc/ntp.conf # внести туда нужные пулы/сервера по необходимости
sudo systemctl restart ntp
ntpq -pn # статистика
После установки ntpd команда ntpdate работать уже не будет, выдавая сообщение "the NTP socket is in use".
===== 108.2 System logging =====
Weight: 3
Description: Candidates should be able to configure the syslog daemon. This objective also includes configuring the logging daemon to send log output to a central log server or accept log output as a central log server. Use of the systemd journal subsystem is covered. Also, awareness of rsyslog and syslog-ng as alternative logging systems is included.
Key Knowledge Areas:
* Configuration of the syslog daemon
* Understanding of standard facilities, priorities and actions
* Configuration of logrotate
* Awareness of rsyslog and syslog-ng
Terms and Utilities:
* syslog.conf
* syslogd
* klogd
* /var/log/
* logger
* logrotate
* /etc/logrotate.conf
* /etc/logrotate.d/
* journalctl
* /etc/systemd/journald.conf
* /var/log/journal/
Формат конфигурации syslog - "источник.приоритет назначение". Чистый syslog сейчас почти не используется, есть более современные варианты, например, rsyslog.
# Критические события ядра
kern.crit /var/log/kernel
# все информационные события (и более серьёзные), кроме mail, authpriv и cron
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# "-" перед путём значит, что кэш журнала держится в памяти и периодически сбрасывается на диск.
# Часть журналов может потеряться при внезапном отказе системы, но это сильно ускоряет работу.
mail.* -/var/log/maillog
# Все пользователи получат сообщение о чрезвычайном событии
*.emerg *
# Отправлять пользовательские логи на удалённый сервер
user.* @192.168.1.77
После изменений нужно перезапустить/перечесть syslog - ''sudo service syslog reload''.
Чтобы сервер мог принимать логи с удалёной машины, нужно в файле ''/etc/sysconfig/syslog'' добавить опцию ''-r'' в ''SYSLOGD OPTIONS''.
# Создать событие
logger -p user.warn "Don't touch the red button!"
==== Ротация логов ====
klogd - демон записи логов ядра (в современных системах логи ядра пишутся по-другому). Перехватывает все сообщения, относящиеся к ядру.
# klogd в урезанном виде в современных системах входит в состав busybox-syslogd
apt install busybox-syslogd
# сообщения ядра выгрузить в файл
klogd -o -f kernel.log
logrotate - очистка/архивация логов. Общий файл конфигурации - ''/etc/logrotate.conf'', отдельные файлы для разных сервисов кладутся в ''/etc/logrotate.d''.
/var/log/ufw.log # с каким файлом/файлами работаем
{
rotate 4 # хранить 4 файла
weekly # ротация еженедельно
missingok # В случае отсутствия файла журнала перейти к обработке следующего, не выдавая сообщения об ошибке
notifempty # нет ротации, если лог пустой
compress # сжимать
delaycompress # сжимать не сразу, а 2-й архив (здесь - недельной давности)
sharedscripts # выполнять скрипт 1 раз, даже если логов несколько (например, /var/log/*.log)
postrotate # скрипт после ротации
[ -x /usr/lib/rsyslog/rsyslog-rotate ] && /usr/lib/rsyslog/rsyslog-rotate || true
endscript # конец скрипта
}
==== journald ====
Система журналирования systemd, используемая в большинстве современных ОС Linux.\\
Хранение данных в файлах ''/run/log/journal'' (в памяти), ''/var/log/journal''. Логи бинарные, поэтому просто так в консоли их посмотреть нельзя.
Уровни событий:\\
0 - EMERG\\
1 - ALERT\\
2 - CRIT\\
3 - ERR\\
4 - WARNING\\
5 - NOTICE\\
6 - INFO\\
7 - DEBUG
Файл настроек - ''/etc/systemd/journald.conf''.
journalctl -b # показать все события с момента загрузки
journalctl --since 15:30 --until 15:35:15 # показать за интервал
journalctl --since yesterday --until now
journalctl -u networking.service # события службы сети
journalctl -k # события ядра
journalctl -p err -b # только ошибки с момента загрузки
journalctl -n 20 # последние 20
journalctl -f # в реальном времени
journalctl --disk-usage # сколько места занимает на диске
journalctl --vacuum-size=5G # занимать максимально 5 ГБ
journalctl --vacuum-time=1years # хранить максимум 1 год
systemd-journal-remote --url https://host:port # забирать логи с удалённой машины
systemd-journal-upload --url https://host:port # выгружать логи на удалённую машину
==== rsyslog ====
Быстрый сервис обработки логов, принимающий информацию из разных источников и отдающий по разным путям назначения. По сравнению с syslog у rsyslog есть мощная фильтрация и поддержка протокола TCP. Конфигурация - ''/etc/rsyslog.conf'', доп. конфиги - ''/etc/rsyslog.d/*.conf''.
==== syslog-ng ====
Ещё одна мощная альтернатива syslog, может работать как централизованный сервер сбора логов, но также и как локальный демон. На Убунте, чтобы использовать syslog-ng, надо сказать journald, чтобы он пересылал логи туда (удалить journald невозможно, т. к. он является частью системы инициализации systemd).
apt install syslog-ng
# файл конфигурации
vi /etc/syslog-ng/syslog-ng.conf
https://www.ekzorchik.ru/2013/03/ubuntu-12-syslog-zyxel-keenetic-lite-logs/\\
https://manpages.ylsoftware.com/ru/syslog-ng.conf.5.html
===== 108.3 Mail Transfer Agent (MTA) basics =====
Weight: 3
Description: Candidates should be aware of the commonly available MTA programs and be able to perform basic forward and alias configuration on a client host. Other configuration files are not covered.
Key Knowledge Areas:
* Create e-mail aliases
* Configure e-mail forwarding
* Knowledge of commonly available MTA programs (postfix, sendmail, qmail, exim) (no configuration)
Terms and Utilities:
* ~/.forward
* sendmail emulation layer commands
* newaliases
* mail
* mailq
* postfix
* sendmail
* exim
* qmail
* sendmail - один из старейших почтовых серверов, сложен в настройке
* qmail - более безопасный аналог sendmail
* exim - рассчитан на постоянное подключение к интернету, несложен в настройке
* postfix - легковесный и простой в настройке
Все используют более-менее один и тот же синтаксис sendmail.
# mailutils - утилиты для работы с почтой
sudo apt install mailutils
# /etc/aliases (в postfix) - псевдонимы в формате "псевдоним: реальный получатель"
postmaster: root
# применение изменений псевдонимов
sudo newaliases
# написать письмо постмастеру
mail postmaster
Cc:
Subject: Test 1
Body text
Body text
# Ctrl+d, чтобы отправить письмо
# прочесть сообщение
mail # затем выбрать номер
d # удалить сообщение
q # выйти
Файл ''~/.forward'' - для пересылки. Содержит логин пользователя, на который будет идти почтовая переадресация.
sendmail emulation layer commands - если написать ''man sendmail'' без установленного sendmail, то покажется справка по совместимым командам.
''mailq'' - очередь. [[https://val-khmyrov.blogspot.com/2012/10/postfix.html|Удаление писем из очереди postfix]]
===== 108.4 Manage printers and printing =====
Weight: 2
Description: Candidates should be able to manage print queues and user print jobs using CUPS and the LPD compatibility interface.
Key Knowledge Areas:
* Basic CUPS configuration (for local and remote printers)
* Manage user print queues
* Troubleshoot general printing problems
* Add and remove jobs from configured printer queues
Terms and Utilities:
* CUPS configuration files, tools and utilities
* /etc/cups/
* lpd legacy interface (lpr, lprm, lpq)
На десктопах CUPS предустановлен, на сервере нужно ставить:
apt install cups
systemctl start cups
systemctl enabled cups
Веб-интерфейс изначально настроен на адрес localhost:631 (пускает только с самого сервера).
# Разрешить удалённый вход на веб-интерфейс
cupsctl --remote-any
echo "ServerAlias *" >> /etc/cups/cupsd.conf # С любого имени
systemctl restart cups
# Добавить админа (здесь: пользователь cupsadmin)
usermod -aG lpadmin cupsadmin
[[https://www.youtube.com/watch?v=nhlnT6JGAbc|Управление печатью. Базовая настройка]]\\
[[https://www.youtube.com/watch?v=hHfRs_2uKgY|Управление печатью. Очереди и задания печати.]]
====== Topic 109: Networking Fundamentals ======
===== 109.1 Fundamentals of internet protocols =====
Weight: 4
Description: Candidates should demonstrate a proper understanding of TCP/IP network fundamentals.
Key Knowledge Areas:
* Demonstrate an understanding of network masks and CIDR notation
* Knowledge of the differences between private and public “dotted quad” IP addresses
* Knowledge about common TCP and UDP ports and services (20, 21, 22, 23, 25, 53, 80, 110, 123, 139, 143, 161, 162, 389, 443, 465, 514, 636, 993, 995)
* Knowledge about the differences and major features of UDP, TCP and ICMP
* Knowledge of the major differences between IPv4 and IPv6
* Knowledge of the basic features of IPv6
Terms and Utilities:
* /etc/services
* IPv4, IPv6
* Subnetting
* TCP, UDP, ICMP
===== 109.2 Basic network configuration =====
Weight: 4
Description: Candidates should be able to view, change and verify configuration settings on client hosts.
Key Knowledge Areas:
* Manually and automatically configure network interfaces
* Basic TCP/IP host configuration
* Setting a default route
Terms and Utilities:
* /etc/hostname
* /etc/hosts
* /etc/nsswitch.conf
* ifconfig
* ifup
* ifdown
* ip
* route
* ping
''/etc/hostname'' - имя узла\\
''/etc/hosts'' - БД имён и IP-адресов
''/etc/resolv.conf'' - настройки DNS. Напрямую редактировать нельзя, для этого есть файлы ''/etc/resolvconf/resolv.conf.d/{head,base,tail}''.\\
# Применить изменения в resolv.conf
sudo resolvconf -u
''/etc/nsswitch.conf'' - настройки NSS (Name Service Switch, какие поставщики услуг имен должны использоваться для каждого типа поиска - имён хостов, паролей и т. д.).
sudo ifdown eth0 # выкл сетевуху
sudo ifup eth0 # вкл сетевуху
# поменять IP-адрес (временно, т. к. в /etc/network/interfaces ничего не меняется)
sudo ifconfig eth0 192.168.0.111
sudo ifconfig eth0 netmask 255.255.0.0 # изменить маску подсети
sudo ifconfig eth0 hw ether # изменить мак-адрес
route # список маршрутов
sudo route del default # удалить маршрут по умолчанию
sudo route add default gw 192.168.1.254 # прописать маршрут по умолчанию
ip addr # показать IP-адреса
sudo ip link set eth0 down # выкл
sudo ip link set eth0 up # вкл
sudo ip -4 address flush eth0 # удалить адрес IPv4
sudo ip address add 192.168.1.10/24 eth0 # добавить адрес
===== 109.3 Basic network troubleshooting =====
Weight: 4
Description: Candidates should be able to troubleshoot networking issues on client hosts.
Key Knowledge Areas:
* Manually and automatically configure network interfaces and routing tables to include adding, starting, stopping, restarting, deleting or reconfiguring network interfaces
* Change, view, or configure the routing table and correct an improperly set default route manually
* Debug problems associated with the network configuration
Terms and Utilities:
* ifconfig
* ip
* ifup
* ifdown
* route
* host
* hostname
* dig
* netstat
* ping
* ping6
* traceroute
* traceroute6
* tracepath
* tracepath6
* netcat
host - запрос напрямую на DNS-сервер\\
dig - запрос на DNS-сервер (более подробно)\\
traceroute, tracepath - отобразить маршрут до указанного адреса\\
netstat - вывод информации о сети\\
netcat (алиас - nc) - установка соединений
netstat -tu # TCP- и UDP-порты
netstat -ntu # без DNS-имён
netstat -ntup # + PID процессов
netstat -s # статистика пакетов
netstat -r # аналог команды route
nc -v www.yandex.ru 443 # подключиться к порту 443 (как telnet)
nc -lvp 50000 # слушать порт 50000
nc -vnz -w 1 192.168.1.10 50-500 # просканировать порты с 50 по 500
===== 109.4 Configure client side DNS =====
Weight: 2
Description: Candidates should be able to configure DNS on a client host.
Key Knowledge Areas:
* Query remote DNS servers
* Configure local name resolution and use remote DNS servers
* Modify the order in which name resolution is done
Terms and Utilities:
* /etc/hosts
* /etc/resolv.conf
* /etc/nsswitch.conf
* host
* dig
* getent
getent - вывод значений из текстовых баз данных ( group, gshadow, hosts, netgroup, networks, passwd и т. д.)
getent hosts
getent hosts ya.ru
====== Topic 110: Security ======
===== 110.1 Perform security administration tasks =====
Weight: 3
Description: Candidates should know how to review system configuration to ensure host security in accordance with local security policies.
Key Knowledge Areas:
* Audit a system to find files with the suid/sgid bit set
* Set or change user passwords and password aging information
* Being able to use nmap and netstat to discover open ports on a system
* Set up limits on user logins, processes and memory usage
* Determine which users have logged in to the system or are currently logged in
* Basic sudo configuration and usage
Terms and Utilities:
* find
* passwd
* fuser
* lsof
* nmap
* chage
* netstat
* sudo
* /etc/sudoers
* su
* usermod
* ulimit
* who, w, last
==== Поиск файлов с повышенными правами ====
# поиск файлов с рутовым SUID
sudo find / -user root -perm -u+s # либо -perm +4000
# поиск файлов с рутовым SGID
sudo find / -group root -perm -g+s # либо -perm +2000
# поиск файлов с SUID или SGID
sudo find / -perm /u+s,g+s
# поиск файлов с SUID и SGID
sudo find / -perm -u+s,g+s
==== Ограничения учётки ====
sudo usermod -L # заблокировать учётку
sudo usermod -U # разблокировать
sudo mkhomedir_helper # создать домашний каталог, если его нет
sudo chage -l # список сроков действия
sudo chage # мастер настройки сроков действия учётки и пароля
# /etc/login.defs - значения по умолчанию
ulimit -a # список ограничений (макс. кол-во процессов, размер файла и т. д.)
ulimit -f 0 # установить лимит размера файла в 0 (создать файл не получится)
# ulimit действует только в рамках текущей сессии
# /etc/security/limits.conf - постоянные ограничения
==== Поиск открытых портов ====
netstat -tuna
# apt install nmap -y
nmap 192.168.1.222
# lsof - list of open files, но умеет показывать и открытые порты, довольно подробно
sudo lsof -i
# поиск файлов, занятых процессом dnsmasq
sudo lsof -c dnsmasq
# поиск процессов, использующих 53 порт
sudo lsof -i:53
# fuser - поиск процессов, которые используют файлы и сокеты
fuser -v . # найти процессы в текущем каталоге
fuser -v 53/tcp # найти процессы, использующие TCP-порт 53
==== su, sudo ====
# переход в учётку root, набирая ЕГО пароль
su
# Чтобы постоянно не переходить
su -c 'vi /etc/resolv.conf'
# выполнение с повыш. привилегиями (если есть на это право), набирая СВОЙ пароль
sudo vi /etc/resolv.conf
# права работать с sudo - в /etc/sudoers, руками его править не рекомендуется
sudo visudo # безопасное редактирование /etc/sudoers
# Вид строк
root ALL=(ALL:ALL) ALL
# root может с любого узла=(от имени любого пользователя:или любой группы) выполнять любую команду
sudo -s # переход в режим root, как su, но домашний каталог (cd ~) остаётся пользовательским
# после su домашний каталог меняется на /root (хотя автоматического перехода туда не происходит)
https://www.8host.com/blog/redaktirovanie-fajla-sudoers-v-ubuntu-i-centos/\\
[[https://wiki.archlinux.org/title/Sudo_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)]]
==== Статус пользователей в системе ====
# кто вошёл в систему
w # вариант 1
15:43:31 up 7 days, 9 min, 1 user, load average: 0.06, 0.13, 0.16
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/0 10.1.2.129 Mon11 0.00s 0.17s 0.00s w
who # вариант 2
user pts/0 2022-09-19 11:04 (10.1.2.129)
who -b # время загрузки системы
who -qH # логины тех, кто вошёл в систему
who -aH # вся информация
users # кто вошёл в систему одной строкой
last # список входов в систему
last reboot # список загрузок системы
sudo lastb # список неудачных входов в систему
===== 110.2 Setup host security =====
Weight: 3
Description: Candidates should know how to set up a basic level of host security.
Key Knowledge Areas:
* Awareness of shadow passwords and how they work
* Turn off network services not in use
* Understand the role of TCP wrappers
Terms and Utilities:
* /etc/nologin
* /etc/passwd
* /etc/shadow
* /etc/xinetd.d/
* /etc/xinetd.conf
* /etc/inetd.d/
* /etc/inetd.conf
* /etc/inittab
* /etc/init.d/
* /etc/hosts.allow
* /etc/hosts.deny
# Если создать файл /etc/nologin, то в систему не сможет войти никто, кроме root
# Перед этим надо 10 раз подумать, т. к. в большинстве современных ОС вход под root отключен
sudo touch /etc/nologin
nmap localhost # список сетевых служб
# Остановить службу
sudo /etc/unut.d/ssh stop # или
sudo service stop ssh # или
sudo systemctl stop ssh # вариант с systemd
# выключить службу
sudo systemctl disable ssh
# до systemd нужно было смотреть runlevel в файле /etc/inittab, а потом выключать службу примерно так:
chkconfig --level 5 sshd off
===== Обработка сетевых запросов =====
Суперсервер - процесс, управляющий всеми остальными процессами (inetd). Inetd слушает сокеты, и при необходимости запускает другие демоны для обработки запросов. Это экономит ресурсы, т. к. не нужно запускать сразу все демоны.\\
Конф. файл - ''/etc/inetd.conf''. Синтаксис:
service-name - имя службы
socket-type - тип сокета, например, stream или dgram
protocol - TCP, UDP И т. д.
{wait/nowait}[/max-child[/max-connections-per-ip-per-minute]] - ждать/не ждать, макс. кол-во экземпляров, соединений в минуту
user - от чьего имени работает демон
server-program - путь к демону
server-program-arguments - аргументы
В каталог ''/etc/inetd.d'' (нужно создать, если его нет) можно добавить конфигурации для отдельных служб. Inetd устарел и не используется, замена - xinetd, обладающий рядом преимуществ.
''/etc/hosts.allow'' - перечень узлов, которым разрешено подключаться к службам системы\\
''/etc/hosts.deny'' - узлы, которым запрещено.\\
Логика та же, что и у cron.allow/deny - у allow приоритет.
===== 110.3 Securing data with encryption =====
Weight: 3
Description: The candidate should be able to use public key techniques to secure data and communication.
Key Knowledge Areas:
* Perform basic OpenSSH 2 client configuration and usage
* Understand the role of OpenSSH 2 server host keys
* Perform basic GnuPG configuration, usage and revocation
* Understand SSH port tunnels (including X11 tunnels)
Terms and Utilities:
* ssh
* ssh-keygen
* ssh-agent
* ssh-add
* ~/.ssh/id_rsa and id_rsa.pub
* ~/.ssh/id_dsa and id_dsa.pub
* /etc/ssh/ssh_host_rsa_key and ssh_host_rsa_key.pub
* /etc/ssh/ssh_host_dsa_key and ssh_host_dsa_key.pub
* ~/.ssh/authorized_keys
* ssh_known_hosts
* gpg
* ~/.gnupg/
Шифрование с открытым ключом - генерируется 2 ключа: открытый (им данные шифруются, его можно дать кому угодно), и закрытый (им данные расшифровываются).
При подключении к какому-либо серверу по ssh первый раз выдаётся вопрос, продолжать ли подключение к узлу с таким-то отпечатком ([[https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%BE%D0%BA_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0|fingerprint]] - хэш открытого ключа). Если ответить утвердительно, открытый ключ удалённого сервера будет помещён в файл ''~/.ssh/known_hosts''.
Этот открытый ключ будет доверенным только для текущего пользователя. Чтобы добавить открытый ключ для системы в целом, нужно скопировать ключ в файл ''/etc/ssh/ssh_known_hosts''.
RSA - криптоалгоритм с открытым ключом для подписи и шифрования.\\
DSA - криптоалгоритм с открытым ключом только для подписи.
# подключиться по ssh с именем user
ssh user@192.168.1.9
# создать пару ключей
ssh-keygen
# передать открытый ключ на удалённый сервер
ssh-copy-id -i .ssh/id_rsa.pub user@192.168.1.9
# Открытый ключ копируется в файл .ssh/authorized_keys
# Если при создании ключей была задана парольная фраза, то при подключении будет спрашивать её, а не пароль
# Чтобы запомнить парольную фразу, нужен ssh-agent
ssh-agent bash # запустить bash от агента
ssh-add .ssh/id_rsa # добавить закрытый ключ в агент
# сгенерировать ключи для машины в целом (srv_rsa и srv_rsa.pub)
sudo ssh-keygen -f /etc/ssh/srv_rsa
==== Туннели SSH ====
# Подключение по localport через ssh_server на any_server:remoteport
ssh ssh_server -NL localport:any_server:remoteport
ssh 192.168.1.9 -NL 12345:87.250.250.242:80
# Теперь, если на локальной машине обратиться к http://localhost:12345, то откроется ya.ru
# Возможность запускать приложения на удалённом сервере, чтобы они отображались локально
# На сервере должен быть GUI
ssh -X 192.168.1.9
nautilus # Проводник сервера покажется локально
# копирование файла по ssh
scp file.txt admin@192.168.1.9:/home/admin
==== Шифрование файлов ====
gpg --gen-key
# после генерации в папке .gnupg образуются 2 ключа: secring.gpg и pubring.gpg
gpg --list-key # вывести список ключей
gpg --export > gpg.pub # экспорт открытого ключа
scp gpg.pub admin@192.168.1.9:/home/admin # копировать ключ на удалённый сервер
# на удалённом сервере
gpg --import gpg.pub
gpg --out file.enc --recipient 'Petya Mokin' --encrypt file.txt
# Далее перекинуть file.enc на локальный сервер с закрытым ключом
# на локальном сервере
gpg --out file.txt --decrypt file.enc