Данное
пособие было написано Козловым Михаилом для себя т.к. работаю с довольно
большим количеством совершенно разных технологий, постоянно все вылетает из
головы, выкладываю в общедоступный доступ на своем сайте http://snakeproject.ru/
Это не
подробная книга-учебник, больше краткий учебник-справочник по администрированию
самой ОС.
Здесь мало
теории и минимум объяснений (ну не люблю ит-художественный жанр), руководство
больше основано на примерах и выводе команд.
Многое из
этого учебника является моими статьями или частями статей за разные годы на
сайте. (Устал уже каждый раз искать, что надо, слишком много информации
скопилось)
Все примеры
работы будут показаны на примере ОС Centos 7 (на дворе
2018 год, декабрь)
Предполагается,
что вы умеете пользоваться базовыми командами cd, ls, cat и
банально хоть одним редактором типа vi\vim\nano по вкусу.
Читали хоть
немного или смотрели видео по linux и хоть чуть-чуть имеете представление
об ОС
Процесс
установки опускаем, там все довольно тривиально, единственно пару слов о
разбивке жесткого диска:
Можно
оставить разбивку по умолчанию, или сделать нечто подобное:
Допустим у
тестовой виртуальной машины диск 20 гигабайт и 2 гигабайта памяти
/boot - файлы загрузчика - 300 мегабайт
/ - корень файловой системы - 15 гигабайт
swap - раздел подкачки (т.н. виртуальной
памяти) - 1 гигабайт (1\2 памяти)
/home - раздел домашних директорий для
файлов пользователя - все остальное
Файловую
систему для корня ставим предлагаемую xfs или ext4
Под boot раньше т\исторически отдавалось
предпочтение ext2, но это в
данном случае не имеет значения
Оглавление:
1. Примеры работы с железом
2. Процесс загрузки ОС Linux и загрузчики
3. Управление службами systemd
4. Логи в systemd
5. Работа с жестким диском
6. Управление ПО
7. Сеть и брандмауэр
8. Пользователи, группы, права, файлы, поиск,
ssh
9. Процессы
10. Планировщик заданий cron
11. Репозитории ПО
12. Логи
1.
Примеры работы с железом
Поработаем с
виртуальной файловой системой, менеджер устройств в ОС называется Udev
udev - это система, которая автоматически
отображает устройства, которые подключены к жестким дискам, USB-накопителям и
т. д., и создаст запись в файловой системе dev.
Посмотрим на фрагмент вывода файлов
устройств
Буква в начале
"b" - блочное устройство (отправляет\принимает данные блоками данных)
Буква в
начале "c" - символьное устройство (отправляет\принимает данные
потоками данных)
По сути
упрощенно, файлы устройств - указатели на драйверы
ls -lh /dev/
...
crw------- 1 root root 10, 235 Dec 6 14:44 autofs
drwxr-xr-x 2 root root 160 Dec 6 14:44 block
drwxr-xr-x 2 root root 80 Dec 6 14:44 bsg
crw------- 1 root root 10, 234 Dec 6 14:44 btrfs-control
lrwxrwxrwx 1 root root 3 Dec 6 14:44 cdrom -> sr0
drwxr-xr-x 2 root root 80 Dec 6 14:44 centos
drwxr-xr-x 2 root root 2.6K Dec 6 14:44 char
crw------- 1 root root 5,
1 Dec 6 14:44 console
lrwxrwxrwx 1 root root 11 Dec 6 14:44 core -> /proc/kcore
drwxr-xr-x 6 root root 140 Dec 6 14:44 cpu
crw------- 1 root root 10,
61 Dec 6 14:44 cpu_dma_latency
crw------- 1 root root 10,
62 Dec 6 14:44 crash
drwxr-xr-x 5 root root 100 Dec 6 14:44 disk
brw-rw---- 1 root disk 253,
0 Dec 6 14:44 dm-0
brw-rw---- 1 root disk 253,
1 Dec 6 14:44 dm
...
Мой диск sda, на котором есть разделы
sda1 и sda2
ls -lh /dev/sda*
brw-rw---- 1 root disk 8, 0 Dec 6 14:44 /dev/sda
brw-rw---- 1 root disk 8, 1 Dec 6 14:44 /dev/sda1
brw-rw---- 1 root disk 8, 2 Dec 6 14:44 /dev/sda2
sysfs – содержит информацию об устройствах
В выоде мы
видим блочные устройства, шины другую
информацию о устройствах
ls -l /sys/
drwxr-xr-x 2
root root 0 Dec 6 15:25 block
drwxr-xr-x 30
root root 0 Dec 6 15:25 bus
drwxr-xr-x 4
root root 0 Dec 6 15:25 dev
drwxr-xr-x 13
root root 0 Dec 6 15:25 devices
drwxr-xr-x 6
root root 0 Dec 6 15:25 firmware
drwxr-xr-x 5
root root 0 Dec 6 15:25 fs
drwxr-xr-x 10
root root 0 Dec 6 15:25 kernel
Пример вывода mac адреса сетевой
карточки с именем enp0s3
cat /sys/class/net/enp0s3/address
08:00:27:1a:87:29
Procfs – содержит информацию о процессах системы
На пример
информация о процессоре
/proc/cpuinfo
Или файловой
системе и точках монтирования
/proc/mounts
В /proc/sys/ находятся изменяемые параметры
ls -l /proc/sys/
dr-xr-xr-x 1 root root 0 Dec 6 15:34 dev
dr-xr-xr-x 1 root root 0 Dec 6 14:44 fs
dr-xr-xr-x 1 root root 0 Dec 6 14:44 kernel
dr-xr-xr-x 1 root root 0 Dec 6 14:44 net
dr-xr-xr-x 1 root root 0 Dec 6 15:34 user
dr-xr-xr-x 1 root root 0 Dec 6 14:52 vm
Примеры:
Разрешить ip-форвардинг пакетов
(сделать роутер проще говоря)
cat /proc/sys/net/ipv4/ip_forward
1
Изменить количество единовременно
открытых файлов
cat /proc/sys/fs/file-max
681737
Надо
учитывать, что эти параметры будут работать только до перезагрузки
Утилита lsmod – информация модулей
ядра
lsmod
Module
Size Used by
vfat
17461 0
fat
65950 1 vfat
iosf_mbi
14990 0
Удалим модуль
[root@localhost
~]# rmmod vfat
Он исчез из вывода
[root@localhost
~]# lsmod | grep vfat
Добавим, «жесткое» добавление не
пройдет
[root@localhost ~]# insmod vfat
insmod: ERROR: could not load module vfat: No such
file or directory
Добавим «мягко»
[root@localhost
~]# modprobe vfat
Снова появился
[root@localhost
~]# lsmod | grep vfat
vfat
17461 0
fat
65950 1 vfat
Установим утилиту для работы с usb
yum -y
install usbutils
Подключаем флешку, и видим ее в выводе:
lsusb
Bus 001 Device 002: ID 3456:1211 Transcend Usb Device
8 GB
В директории /dev появилось устройство sdb
udevadm info -a /dev/sdb
Создам папку, куда подмонтирую флешку
mkdir /media/usb1
Монтирую ее (на флешке файловая
система fat32)
mount -t vfat /dev/sdb1 /media/usb1
Размонтирование
umount /media/usb1
Утилита udevadm дает управление
Вывести справку
man udevadm
udevadm --help
Мониторинг событий сообщений ядра
системы
udevadm
monitor --property –kernel
Попробуйте вставить\выдернуть флешку
или диск, вы увидите события ядра
KERNEL[4672.481546] change
/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/block/sr0
(block)
ACTION=change
DEVNAME=/dev/sr0
DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/block/sr0
DEVTYPE=disk
DISK_MEDIA_CHANGE=1
MAJOR=11
MINOR=0
SEQNUM=1729
SUBSYSTEM=block
2.
Процесс загрузки ОС Linux и загрузчики
Упрощенная схема загрузки компьютера
и ОС
1. BIOS\UEFI – запускает ОС с носителя
2.
MBR\GPT – содержит загрузчик
3.
LILO\GRUB – загрузчик ядра ОС
4. Ядро Linux – конфигурирует все процессы и
запускает init
5.
Init – пользовательская среда
Пару примеров решения задач с
загрузчиком GRUB
1 - Апгрейд ядра
Узнать текущую версию ядра:
uname -rs
Linux 3.10.0-862.el7.x86_64
Установим репозиторий (http://elrepo.org/tiki/tiki-index.php):
rpm --import
https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
Посмотреть доступную версию ядра и
заголовков:
yum --disablerepo="*"
--enablerepo="elrepo-kernel" list available
Установить версию
из репозитория:
yum --enablerepo=elrepo-kernel install kernel-ml
yum install --enablerepo=elrepo-kernel
kernel-ml-{firmware,headers,devel}
Смотрим, версия должна быть прописана
в
/boot/grub2/grub.cfg
Смотрим, какое ядро загружется по
умолчанию:
cat
/etc/default/grub
Видим:
GRUB_DEFAULT=saved
Это значит, что будет загружена
последняя сохраненная версия
Меняем на:
GRUB_DEFAULT=0
Это значит, что будет по умолчанию
использоваться первое ядро, находящееся в списке Grub
И применяем команду обновления
конфигурации:
grub2-mkconfig -o /boot/grub2/grub.cfg
Перезагружаемся
reboot
Проверяем версию ядра
uname -r
4.19.7-1.el7.elrepo.x86_64
Список пакетов ядра
rpm -qa |
grep '^kernel-[0-9]'
kernel-3.10.0-862.el7.x86_64
kernel-3.10.0-862.11.6.el7.x86_64
kernel-3.10.0-862.14.4.el7.x86_64
Удаляем ненужные пакеты
yum remove kernel-3.10.0-862.11.6.el7.x86_64
kernel-3.10.0-862.14.4.el7.x86_64
И проверяем, чтоб лишние версии
исчезли из списка в:
/boot/grub2/grub.cfg
2 - Установка таймера загрузчика
Изменяем таймер в секундах:
vi /etc/default/grub
GRUB_TIMEOUT=2
grub2-mkconfig -o /boot/grub2/grub.cfg
Перезагружаемся
reboot
3.
Управление службами systemd
У systemd объектом действий является юнит
.service - службы
.device - точки монтирования
.mount - устройства
.socket - сокеты
/usr/lib/systemd - содержит юниты по умолчанию
/etc/systemd - содержит управляемые юниты
(редактируемые)
Вывести их список юнитов:
systemctl list-units
В т.ч.
выключенных:
systemctl list-units --all
Вывести
список файлов юнитов:
systemctl list-unit-files
Вывести содержимое
файла юнита:
systemctl cat network.service
Вывести
список зависимостей юнита:
systemctl list-dependencies network
Пример старта, остановки,
перезагрузки, перечитывания файлов службы:
systemctl start network.service
systemctl restart network.service
systemctl stop network
systemctl reload network
Включение и выключение службы в
автозагрузку:
systemctl enable network.service
systemctl disable network.service
По сути
создает и удаляет симлинк отсюда:
/etc/systemd/system/multi-user.target.wants/
Состояние
службы:
systemctl status network.service
Проверка
включения:
systemctl is-enabled network
Linux Centos имеет 7 уровней запуска (3й по умолчанию)
0 -
poweroff.target Выключение и выключение питания
1 - rescue.target Однопользовательский режим
2,3,4 - multi-user.target
Настройка неграфической многопользовательской оболочки
5 -
graphical.target Настройка графической многопользовательской оболочки
6 -
reboot.target Выключение и перезагрузка системы
Команда показывает, что мы находимся
на 3ем уровни загрузки
runlevel
N 3
multi-user.target говорит о том,
что мы находимся на 3ем уровни загрузки
systemctl list-units --type=target
UNIT
LOAD ACTIVE SUB DESCRIPTION
local-fs.target
loaded active active Local File Systems
multi-user.target
loaded active active Multi-User System
network-online.target loaded active active Network is
Online
network.target
loaded active active Network
Перейти на другой уровень (например
уровень 1 - rescue.target)
telinit 1
systemctl isolate rescue.target
Изменить уровень запуска по умолчанию
systemctl set-default -f multi-user.target
4.
Логи в systemd
Время логгируемых событий указывается
универсальное (UTC) или местное
Вывести список доступных часовых
поясов:
timedatectl list-timezones
Установка часового пояса из списка
выше:
timedatectl set-timezone Europe/Moscow
Проверка:
timedatectl status
Вывод логов
journalctl
Вывод логов с момента последней
загрузки
journalctl -b
Вывести список пережних загрузок
journalctl --list-boots
Вывод логов загрузки с id 0
journalctl -b 0
Вывод логов с определенного времени
journalctl --since "2018-08-10 09:10:00"
Вывод логов определенного сервиса
journalctl -u crond.service
Вывод логов определенного сервиса с
определенного времени
journalctl -u crond.service --since "2018-08-10
09:10:00"
Вывод логов определенного бинаря
journalctl /usr/sbin/crond
Вывод логов только ошибок с момента
последней загрузки
journalctl -p err -b
После -p указываем
0 - emerg
1 - alert
2 - crit
3 - err
4 - warning
5 - notice
6 - info
7 - debug
Вывод логов определенного pid
journalctl _PID=9791
Вывод логов определенной учетки
id -u root
journalctl _UID=0
journalctl -F _UID
Вывод списка пользователей, у которых
имеются записи в логах
journalctl -f
Мануал по
фильтрам
man systemd.journal-fields
Ротация логов
Осуществляется с помощью опций:
−−vacuum-size
Устанавливает
предельный размер для хранимых на диске логов
По
превышению старые файлы будут автоматические удалены
Пример
journalctl --vacuum-size=1G
−−vacuum-time
Устанавливает
срок хранения
По истечении
они файлы будут автоматически удалены
Пример
journalctl --vacuum-time=1years
5.
Работа с жестким диском
Основные
директории:
/ - корневая
файловая система
/boot – загрузочный раздел
/root – домашняя директория
суперпользователя
/home – домашние директории пользователей
/etc – конфигурационные файлы
/var – часто изменяющиеся файлы
/usr – ПО и библиотеки
/tmp – временные файлы
Swap – подкачка, виртуальная память, не монтируется
Перед дальнейшими действиями
подключил к машине еще один диск на 2 гигабайта, определился как sdb
ls -l
/dev/sdb
brw-rw---- 1 root disk 8, 16 Dec 7 09:59 /dev/sdb
Вывести информацию о дисках (в выводе
оба наших диска)
fdisk -l
Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304
sectors
Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216
sectors
Выбрать диск для работы (утилита fdisk)
fdisk /dev/sdb
Вывести справку по командам
m
Для начала на пустом диске надо
создать таблицу разметки
g – GPT таблица
o – DOS таблица
Создать новый раздел (extended или primary (возможно создание до 4х))
W – записать изменения на диск
Command (m
for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select
(default p): p
Partition
number (1-4, default 1):
First sector
(2048-4194303, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303,
default 4194303):
Using default value 4194303
Partition 1 of type Linux and of size 2 GiB is set
Command (m
for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Выйти
q
Варианты форматирования созданной
партиции (mkfs)
mkfs.ext4
/dev/sdb1
mkfs.ext3 /dev/sdb1
mkfs.ext2 /dev/sdb1
mkfs.fat /dev/sdb1
mkfs.msdos /dev/sdb1
mkfs.xfs /dev/sdb1
mkfs.vfat /dev/sdb1
Подмонтируем созданную партицию
mkdir /mount
cat /etc/fstab
…
/dev/sdb1 /mount ext4 defaults 0 0
mount /dev/sdb1
Отмонтируем и удалим партицию
umount /dev/sdb1
fdisk /dev/sdb
Command (m
for help): d
Selected partition 1
Partition 1 is deleted
Утилита
для работы с партициями (parted)
parted
Справка
help
Выбрать диск для работы
select /dev/sdb
Создать метку (msdos или gpt)
mklabel msdos
Создать партицию ext4 размером 2ГБ первичную
mkpart
artition type? primary/extended? primary
File system type? [ext4]?
Start? 1
End? 2000
Вывод информации после создания
(parted)
print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number
Start End Size
Type File system Flags
1
1049kB 2000MB
1999MB primary ext4
Выход
quit
Форматирование партиции,
mkfs.ext4 /dev/sdb1
parted
Изменяем размер партиции (из прошлого
вывода Number - 1)
select /dev/sdb
(parted)
resizepart
Partition number? 1
End? [2000MB]?
1000
Warning: Shrinking a partition can cause data loss,
are you sure you want to continue?
Yes/No? Yes
Удаление партиции
rm 1
Попытка восстановления партиции
rescue
Start? 1
End? 10000
print
Number
Start End Size
Type File system Flags
1 1049kB
2000MB 1999MB primary
ext4
Выход
q
6.
Управление ПО
Yum представляет собой
консольный менеджер RPM пакетов.
помощь:
yum help
вывести список пакетов из
репозиториев:
yum list
вывести по определенным совпадениям:
yum list 'vim*'
поиск пакета по совпадениям:
yum search vim
установка пакета (для примера vsftpd):
yum install vsftpd
удаление
пакета:
yum remove vsftpd
обновление пакета:
yum update vsftpd
откатиться к предыдущей версии
пакета:
yum downgrade vsftpd
обновить все пакеты:
yum update
вывести установленные пакеты:
yum list installed
проверить, установлен ли пакет:
yum list installed 'vim*'
вывести информацию о пакете:
yum info vim
вывести список зависимостей пакета:
yum deplist vim
проверить доступные обновления:
yum check-update
вывести список подключенных
репозиториев:
yum repolist
вывести список транзакций(историю):
yum history list
вывести информацию по транзакции:
yum history info 5
откатить
транзакцию:
yum history undo 5
логи yum:
cat /var/log/yum.log
Управление
rpm пакетами
Установка пакета:
rpm -ihv
"имя_пакета"
Удаление пакета:
rpm -e
"имя_пакета"
Обновление пакета:
rpm -U
"имя_пакета"
Поиск в установленных пакетов:
rpm -qa |
grep "имя_пакета"
Вывести информацию о пакете:
rpm -qi
"имя_пакета"
Список файлов, входящих в пакет:
rpm -ql
"имя_пакета"
Вывести список всех пакетов:
rpm -qa |
grep more
7.
Сеть и брандмауэр
Базовые сетевые настройки
Добавить машрут по умолчанию:
route add
default gw 10.10.0.1
Добавить статический маршрут:
route add -net 192.168.1.0 netmask 255.255.255.0 gw
10.10.0.1
Определить маршрут по умолчанию:
vi
/etc/sysconfig/network
GATEWAY=10.0.2.1
Перезагружаем сервис, проверяем
service
network restart
ip route
show
default via 10.0.2.1 dev enp0s3 proto dhcp metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src
10.0.2.4 metric 100
Укажем dns сервера:
vi /etc/resolv.conf
nameserver 10.0.2.1
nameserver 8.8.8.8
service networking restart
Отключить SELINUX
vi /etc/sysconfig/selinux
SELINUX=disabled
reboot
Статический адрес на интерфейс (мой
интерфейс определился как enp0s3):
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
Вариант статики:
TYPE=Ethernet
NM_CONTROLLED=no
BOOTPROTO=static
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=10.0.2.4
NETMASK=255.255.255.0
GATEWAY=10.0.2.1
DNS1=8.8.8.8
DNS2=10.0.2.1
Вариант dhcp:
TYPE=Ethernet
BOOTPROTO=DHCP
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
где:
DEVICE=<name>
физическое устройство
BOOTPROTO=<none|bootp|dhcp> протокол
ONBOOT=<yes|no> включение устройства в
автозагрузку
IPADDR=<address> IP адрес
GATEWAY=<address> IP адрес шлюза
NETMASK=<mask> маска сети
И перезагружаем:
systemctl
restart network.service
Установить ifconfig (по умолчанию его
не обнаружил в 7й версии):
yum install
net-tools
ifconfig
Разрешить маршрутизацию пакетов:
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
Установить iptables, запустить и
добавить в автозагрузку выключить firewalld:
systemctl stop firewalld && systemctl disable
firewalld
yum -y install iptables-services
systemctl start iptables.service && systemctl
enable iptables.service
Выводим список правил:
iptables -L
-v -n
Очистить все правила из всех цепочек
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t
mangle -X
Разрешаем уже установленные
соединения:
iptables -A INPUT --match state --state ESTABLISHED,RELATED
-j ACCEPT
Петлевой интерфейс, разрешаем
хождение траффика:
iptables --append INPUT -i lo -j ACCEPT
Пинги
разрешаем всем:
iptables -A INPUT --protocol icmp --icmp-type any -j
ACCEPT
Протокол ssh разрешаем подключение из
сети 10.0.2.0/24:
iptables -A INPUT -p tcp -s 10.0.2.0/24 --dport 22 -j
ACCEPT
Политика по умолчанию все
блокировать, что не подходит под правила:
iptables
--policy INPUT DROP
Теперь увидим количесиво пакетов,
совпавших с правилами:
iptables -L INPUT -v --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target
prot opt in out source
destination
1 118 8720 ACCEPT
all -- any
any anywhere anywhere state RELATED,ESTABLISHED
2 0 0 ACCEPT
all -- lo
any anywhere anywhere
3 0 0 ACCEPT
icmp -- any any
anywhere anywhere icmp any
4 1 44 ACCEPT
tcp -- any
any 10.0.2.0/24 anywhere
tcp dpt:ssh
Удалить правило можно по указанию
цепочки и номеру:
iptables -D
INPUT 3
Сохранить правила в iptables после
перезагрузки можно так:
1. Сохранить правила iptables в файл:
/sbin/iptables-save
> /root/iptables
2. Загрузить правила iptables из
файла:
/sbin/iptables-restore
< /root/iptables
3. Добавить правила в автозагрузку:
vi /etc/rc.d/rc.local
/sbin/iptables-restore < /root/iptables
4. Настройки
iptables:
vi /etc/sysconfig/iptables-config
IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"
Немного
о теории и примеры iptables
Очень кратко
рассмотрим основы бранмауэра iptables
Он встроен в
ядро Linux и имеет 3 основные
цепочки правил:
INPUT - обрабатывает входящие пакеты
FORWARD - обрабатывает транзитные соединения
OUTPUT - обрабатывает исходящие пакеты
Две дополнительные цепочки:
PREROUTING - обрабатывает пакеты перед
обработкой iptables
POSTROUTING - обрабатывает все проходящие пакеты
после прохождения цепочки FORWARD
5 таблиц (используются для различных
действий над пакетами):
RAW - используется для работы с "сырыми"
пакетами(еще не прошедшими обработку)
MANGLE - используется для модификации
пакетов
NAT - используется для NAT(когда сервер используется в
качестве маршрутизатора)
FILTER - основная таблица фильтрации
пакетов
Возможные варианты действий:
ACCEPT - разрешить прохождение пакета далее
по цепочке
DROP - отбросить пакет
REJECT - отбросить пакет, отправить
сообщении отправителю об отклонении пакета
LOG - записать запись о пакете в файл лога
Основные действия:
-A -
добавить правило в цепочку
-С -
проверить все правила
-D - удалить
правило
-I -
вставить правило с нужным номером
-L - вывести
все правила в текущей цепочке
-S - вывести
все правила
-F -
очистить все правила
-N - создать
цепочку
-X - удалить
цепочку
-P -
установить действие по умолчанию
Дополнительные опции:
-p - протокол
( tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh )
-s - ip
адрес отправителя пакета
-d - ip
адрес получателя пакета
-i - входной
сетевой интерфейс
-o -
исходящий сетевой интерфейс
-j - выбрать
действие при совпадении с правилом
Общий формат правила:
iptables -t
<таблица> <действие> <цепочка> <доп_опции>
Установка iptables:
yum install
iptables
Примеры вывода првил с номерами,
количеством пакетов и байт, ip адресов:
iptables -L
iptables -L
INPUT -v
iptables -L INPUT -v --line-numbers
iptables -L INPUT
-v -n
Очистить (примеры):
iptables -F input
iptables -F
iptables -t nat -F
iptables -t
mangle -F
Правила(Политики по умолчанию) по
умолчанию(примеры):
iptables -p INPUT DROP
iptables -p OUTPUT ACCEPT
iptables -p FORWARD ACCEPT
iptables --policy INPUT DROP
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Пример блокировки определенного ip
(входящие и исходящие):
iptables -A INPUT -s 1.1.1.1 -j DROP
iptables -A OUTPUT -s 1.1.1.1 -j DROP
Пример
блокировки подсети:
iptables -A INPUT -s 1.1.1.0/24 -j DROP
iptables -A INPUT -s 1.1.1.0/255.255.255.0 -j DROP
Блокировка определенного
протокола(ssh) для этой сети:
iptables -A INPUT -p tcp --dport ssh -s 1.1.1.0/24 -j
DROP
8.
Пользователи, группы, права, файлы, поиск, ssh
Список пользователей хранится в:
/etc/passwd
формат:
account:password:uid:gid:gecos:directory:shell
account — имя пользователя
password — зашифрованный пароль пользователя
UID — идентификационный номер
пользователя
GID — идентификационный номер основной
группы пользователя
GECOS — необязательный параметр для доп.
информации
directory — $HOME - домашний каталог пользователя
shell — оболочка пользователя (чаще всего
/bin/bash)
Файл хранящий зашифрованные пароли:
/etc/shadow
Для того, чтоб пользователь мог иметь
права root, добавим его в группу root
usermod -a -G root user
passwd user
Или изначально создайте его в этой
группе
useradd -g 0 user
Из под пользователя перейти под
суперпользователя или другого указанного пользователя можно с помощью su:
Единственное условие - знать пароль
root
su root
Создадим
пользователя
useradd -m -g users -G games,audio -s /bin/bash
newuser -p 123456
useradd -m -g [основная группа] -G [дополнительные группы] -s [оболочка] [имя пользователя] -p [пароль]
-m - создаст
домашний каталог - /home/[имя пользователя]
-g - имя или
номер основной группы пользователя
-G - список
дополнительных групп (необязательно)
-s - задает
командную оболочку
-p - задает
пароль
Информация о пользователе
id user
Зададим пароль
passwd newuser
Удалить пользователя, -r удалит каталог
пользователя
userdel -r newuser
Группы хранятся в файле:
/etc/group
Информаия о группах указанного
пользователя
groups user
Создание новой группы
groupadd newgroup
Заводим пользователя в группу
gpasswd -a user newgroup
Выводим пользователя из группы
gpasswd -d user newgroup
Удаление
группы
groupdel newgroup
Доступ
по протоколу ssh для пользователя
Указываем порт, адрес, закрываем
доступ root, разрешаем пользователям\группам
vi /etc/ssh/sshd_config
Port 22
ListenAddress 10.0.2.4
PermitRootLogin no
AllowUsers newuser, user
AllowGroups users
Добавить пользователя в разрешенную
группу
usermod -a -G users user2
Рестартуем
ssh сервис
systemctl list-units | grep ssh
sshd.service
systemctl restart sshd.service
Подключаемся
в формате - ssh user@host
Права
доступа
Посмотрим права на файл:
ls -l /var/log/messages
-rw-r----- 1 root adm 154 Dec 7 03:27 /var/log/messages
Символы -rw-r----- поделим условно на 4 группы: -|rw-|r--|---
Первая группа - один символ,
определяет тип файла
- — обычный файл
d — каталог
b
— файл блочного устройства
c
— файл символьного устройства
s — сокет (socket)
p
— именованный канал (pipe)
l — символическая ссылка (link)
Три остальные группы по три символа (rwx) указывают на права
доступа к файлу
1я группа -
владелец файла
2я группа -
группа пользователей
3я группа -
все остальные пользователи системы
r - чтение
w - запись
x - исполнение
Изменение
прав на файлы и каталоги: утиоита chmod
Формат: chmod <категория> <действие>
<права> <имя файла>
Категория:
u -
пользователь - владелец
g - группа - владелец
o - пользователи, не входящие в
группу-владельца данного файла
a - все пользователи
Действие:
либо + добавить право
либо – удалить право
либо = заменить право
Набор прав:
r - чтение
w - запись
x – выполнение
Числовое представление:
0 --- нет прав
1 --x выполнение
2 -w- запись
3 -wx запись + выполнение
4 r-- чтение
5 r-x чтение + выполнение
6 rw- чтение + запись
7 rwx все права
Примеры:
chmod g+x file
chmod go-rw file
chmod ugo+rwx file
chmod 660 file - равносильно chmod ug+rw file
chmod +rw file - равносильно chmod a+rw file
chmod -R 660 /dir - задать права доступа для каталога и содержимого
Смена владельца или группы владельцев
Указать владельца
chown user file
Указать
группу
chgrp user file - равносильно chown :user file
Указать владельца на каталог и
рекурсивно вложенные подкаталоги и файлы
chown -R user /dir
Указать группу на каталог и
рекурсивно вложенные подкаталоги и файлы
chgrp -R user /dir - равносильно chown -R :user /dir
Указать владельца и группу на файл
chown user:user file
Указать владельца и группу рекурсивно
на каталог
chown -R user:user /dir
Файлы
Вывод содержимого папки, -l - информация о правах,
размер
ls
ls /home/user/
ls -l /root/
Перейти в папку
cd /root/
cd ../
В какой директории я нахожусь?
pwd
Удалить файлы, -r - рекурсивно файлы и
папки, -rf - еще и без подтверждения
rm /home/user/file
rm -r /home/user/
rm -rf /home/user/
Удалить папку
rmdir /home/user/dir
Перемещение
файлов
mv file_name newfile_name
Копирование
файлов, -r - папок
cp file_name newfile_name
cp -r /etc /etc_bak
Создать папку, папки рекурсивно
mkdir /data
mkdir -p /data/f1/f2/f3
Создание ссылок, -s - сиволические (аналог
- ярлык)
(после
удаления оригинала, ссылка останется, нужно удалить вручную)
ln -s /data/f1 /data/f1s
Создать файл
/data/f1_file
Свободное
место на диске
df
Опция -h (human-readable)
df -h
Размер указанного
диска\раздела(слайса)
df -h /dev/sda1
Размер
файлов\папок на диске
du /etc
Опция -h
(human-readable)
du -h /etc
Без рекурсивного обхода папок, -s (summarize)
du -sh /etc
Поиск
Утилита
поиска - find
Ключи:
-name — искать по имени файла
-type — указать тип для поиска: f=файл,
d=каталог, l=ссылка (link), p=канал (pipe), s=сокет
-user — по пользователю - владельцу: имя
пользователя или его UID
-group — по группе - владельцу: группа
пользователя или ее GID
-size — размер
-ctime — время последнего изменения
владельца или прав доступа к файлу (в днях)
-cmin — время последнего изменения
владельца или прав доступа к файлу (в минутах)
-mtime — время последнего изменения файла
(в днях)
-mmin — время последнего изменения файла
(в минутах)
-delete — удалит все найденные файлы
-print - выведет все найденные файлы
-exec command {} \; — выполнение команды над найденными
файлами
-ok — перед выполнением команды указанной в -exec, выдаёт
запрос
-maxdepth — максимальный уровень вложенности
для поиска. «-maxdepth 0» ограничивает поиск текущим каталогом
Поиск файлов, начинающихся с
"new" начиная с корневого каталога
find / -name
'new*'
Поиск файлов, начинающихся с
"new" в двух указанных директориях
find /usr/local/man /opt/local/man -name 'my*'
Поиск файлов в каталоге /var/log,
изменённых в течение последних 5 минут
find
/var/log -mmin -5 -print
Поиск файлов в каталоге /var/log,
изменённых в течение последних суток
find
/var/log -mtime +1 -print
Поиск с максимальной глубиной
каталогов - 1
find /etc -maxdepth 1 -name "*.conf"
Поиск по несовпадению шаблона
find /etc
-not -name "*.conf"
Поиск по совпадению и несовпадению
find /etc -name "*.d" -not -name
"*.conf"
Поиск по размеру, в данном случаем
между 30 и 300 мегабайт
find / -size +30M -size -300M
Поиск
пыстых файлов
find / -type
f -empty
Поиск пустых директорий
find / -type
d -empty
Вывод найденных файлов
find /tmp -type f -name "test*" -print
Удаление найденных файлов
find /tmp -type f -name "test*" -delete
Передача найденных файлов команде
find
/var/log -exec ls -ld {} \;
Передача найденных файлов на удаление
find /tmp
-type f -name "test*" -exec rm -f {} \;
Утилиты
поиска grep и egrep
Поиск слова user в файле
(регистрозависмый поиск)
grep user
/etc/passwd
Поиск слова user в файле
(регистронезависмый поиск)
grep -i
"User" /etc/passwd
Поиск строки, начинающейся в строке с
user
grep
"^user" /etc/passwd
Поиск слова user, начинается с
указанных символов
grep
"^[uU]ser" /etc/passwd
Поиск слова user, начинается с любого
символа
grep
"^.ser" /etc/passwd
Регулярное выражение
grep
"x:[0-1]...:1000" /etc/passwd
Регулярное выражение
grep
"x:[0-1]*:1000" /etc/passwd
Регулярное выражение
grep -r
"^.ser" /etc/
Поиск рекурсивно по всем файлам в указанном
каталоге
grep -h -r "^.ser" /etc/
Вывод
номера строки
grep -n "[uU]ser" /etc/passwd
Подсветка
grep --color "[uU]ser" /etc/passwd
Поиск по 2м вариантам
egrep -w "[uU]ser|[rR]oot" /etc/passwd
9.
Процессы
Запустить процесс в фоновом режиме
можно с помощью амперсанда - &:
(в данном
примере в фоне запустится sleep на 900 секунд)
sleep 900 &
Посмотреть выполняющиеся в фоне
процессы:
jobs
Вернуто процесс из фонового режима (1
- номер из вывода jobs):
fg 1
Остановить процесс:
ctrl + z
Запустить процесс (1 - номер из
вывода jobs):
bg 1
Справка по ps(снимок процессов):
man ps
Вывести все процессы всех
пользователей:
ps -aux
Вывести процессы с фильтрацией по
критерию (пример
спящие):
ps -aux | grep sleep
Остановить процесс:
kill "id процесса"
Остановить все процессы по названию:
killall sleep
Вывести дерево процессов:
pstree
pgrep просматривает активные процессы в системе и выдает идентификаторы
процессов:
man pgrep
Вывести id процесса ssh:
pgrep ssh
Добавить в вывод имя процесса:
pgrep ssh -l
поиск процессов и уничтожение по
имени:
pkill ssh
Просмотр сетевых соединений вместе с PID процесса
lsof -i
Процессы в реальном времени
(клавиша k дает возможность убить процесс,
уровень 15 - мягкое завершение, 9 - жесткое)
top
Поиск пятерки топ ресурсоемких
процессов по MEM
ps -auxf | sort -nr -k 4 | head -5
Поиск пятерки топ ресурсоемких
процессов по CPU
ps -auxf | sort -nr -k 3 | head -5
Мониторинг
сетевой активности iftop:
Установка
yum -y install epel-release
yum -y install iftop
В интерактивном режиме отображает
траффик, может отображать порты
Вывод
справки по командам - нажать ?
Выйти из
справки по командам - нажать ?
N - преобразование в тип сервиса
S -
показать порт источника
D -
показать порт назначения
iftop
В
выводе top
или w,
вверху мы можем видеть строку типа:
load averages: 7.06, 6.95,
6.94
load average — среднее значение загрузки системы
Усредненные величины за последние 1, 5, 15 минут
Упрощенно
объясняя, число в load averages - кол-во процессов в ожидании
исполнения
Т.е.
простаивающие в очереди из-за нехватки ресурсов
Очень упрощенно и грубо по поводу
кол-ва ядер и процессоров:
Средняя
нагрузка 2.00 (на двухпроцессорном
компьютере по одному ядру на процессор)
Эквивалентна
по показателю средней нагрузке 1.00
(на однопроцессорном компьютере с одним ядром)
В данном
примере 2.00 и 1.00 говорят нам об использовании 100% всех имеющихся ресурсов
Хотя это
очень грубый пример, 2 ядра одного
процессора не равны двум процессорам
Увеличение
кол-ва ядер на пример на 1 не даст 100% прироста производительности
Но в общем:
100% на одноядерной системе отображается
как 1.00
100% на двухъядерной системе отображается
как 2.00
и т.д.
К примеру у нашей машины один
процессор и 8 ядер:
cat /proc/cpuinfo
...
processor
: 1
cpu cores
: 8
...
Для нее показатель является нормой,
перегруз отсутствует, есть небольшой запас:
load averages: 7.06, 6.95,
6.94
А тут мы наблюдаем уже перегруз, хоть
и не очень сильный:
load averages:
9.00, 8.35, 8.42
10.
Планировщик заданий cron
Планирощик cron служит для автоматизации выполнения
задач.
Файл
конфигурации системных заданий находится в /etc/crontab
Имеет
следующий синтаксис:
- - - - -
| | | | |
| | | |
----- День недели (0 - 7) (Воскресенье =0 или =7)
| | |
------- Месяц (1 - 12)
| |
--------- День (1 - 31)
|
----------- Час (0 - 23)
-------------
Минута (0 - 59)
т.е. на примере это выглядит так:
30 20 * * *
- каждый день в 20:30
05 20 * * 5
- каждую пятницу в 20:05
10 12 * *
1-5 - в будни в 12:10
05,25 * * *
* - в 5 и 25 минут каждого часа
*/20 * * * *
- каждые 20 минут
Папка
системных задач находится по пути: /etc/cron.d/
Мануал cron вызывается как man cron
crontab -l выведет список существующих заданий
пользователя.
crontab -e откроет на редактирование crontab файл пользователя.
Пример программы:
55 23 * *
* root /root/script.sh > /dev/null
Второй
параметр - имя из под которого запускается программа, в данном примере - root
Третий
параметр - скрипт.
Можно не только запускать скрипты, но
и давать стандартные команды консоли:
55 23 *
* * root
reboot
Управление доступом к планировщику
пользователям системы прописывается тут:
/etc/cron.deny
/etc/cron.allow
В файл вносится имя пользователя
(один логин на строку).
cron.allow имеет приоритет над cron.deny, если логин прописан в обоих, доступ
будет открыт.
Пример
из под учетной записи user
Вывести список заданий:
crontab -l
Создать задание:
crontab -e
Файл с заданиями появится в, пример:
cat /var/spool/cron/user
55
3
* * *
root /home/user/script.sh >
/dev/null
11.
Репозитории ПО
Добавить репозиторий в CentOS возможно с помощью
следующих способов
1.
Установить rpm пакет с информацией о репозитории
2. Добавить
секцию [repository] в /etc/yum.conf
3. Создать .repo файл в папке /etc/yum.repos.d
Достаточно в файле .repo указать:
[repository]
name=RepositoryName
baseurl=RepositoryUrl
Пример
вывода стандартного файла репозиториев:
cat /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of
existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Где:
name - имя репозитория (возможно указать любое)
baseurl - ссылка на репозиторий в виде http, ftp, file ссылок
enabled - 1 - репозиторий включен, 0 - репозиторий отключен
mirrorlist - возможно указать ссылку на список адресов
gpgcheck - 1- проверять GPG подпись пакетов репозитория, 0 - не
проверять
gpgkey - ссылка на GPG ключ репозитория
Установка epel-release (Extra Packages for Enterprise
Linux)
yum -y install epel-release
Появится файл
cat /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch
- Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch
- Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
Обновление
репозиториев
Обновление
кэша пакетов происходит каждый раз при любом действие с yum
(выводе
списка доступных репозиториев\списка пакетов и т.п.)
Удаление
репозиториев
Установить утилиты работы с
репозиториями
yum -y install yum-utils
Вывести список активных репозиториев
yum repolist
Где:
repo id - id репозитория
reponame - имя репозитория
status - кол-во пакетов
Удаление репозитория (пример - mariadb (repo id из предыдущего вывода))
yum-config-manager --disable mariadb
Очистить кэш
yum
yum clean all
Пересоздать
кэш yum
yum makecache
12.
Логи
Файлы
логов находятся в директории /var/log
Рассмотрим некоторые из них
/var/log/messages -
включает в себя множество записей типа cron, почты, ядра, и многих других
/var/log/dmesg -
включает в себя сообщения ядра в т.ч. процесса загрузки
/var/log/maillog -
включает в себя сообщения электронной почты
/var/log/boot.log -
включает в себя сообщения о загрузке системы
/var/log/lastlog -
включает в себя сообщения последней сессии пользователей (используйте утилиту lastlog)
/var/log/cron -
включает в себя сообщения сервиса cron
/var/log/yum.log -
включает в себя сообщения пакетного менеджера yum
/var/log/secure -
включает в себя сообщения аутентификации\авторизации в т.ч. ssh
Logrotate для ротации размера логов
Обновим пакеты
yum update -y
Установим утилиту
yum -y install logrotate
Файл конфигурации по умолчанию,
допфайлы будут лежать в директории /etc/logrotate.d
cat /etc/logrotate.conf
weekly
rotate 4
create
dateext
include /etc/logrotate.d
/var/log/wtmp {
monthly
create 0664
root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600
root utmp
rotate 1
}
Синтаксис описания лога
путь_к_файлу_логов
{
опции
}
Временные триггеры, когда выполнять
могут быть такими
hourly - раз в час
daily - раз в день
weekly - раз в неделю
monthly - раз в месяц
yearly - раз в год
Возможные опции
rotate - сколько хранить копий старых логов
create - создать пустой файл лога после
ротации старого файл лога
dateext - добавить дату ротации в названии
старого лога
size - размер файла лога для ротации
compress - сжимать файл лога
delaycompress - не сжимать последний и
предпоследний файл лога
maxage - ротация журналов по возрасту
mail - почтовые оповещение по окончании
ротации
postrotate\endscript -
выполнить команды\скрипты по окончании ротации
Создадим файл
/etc/logrotate.d/all_logs.conf
/var/log/*.log {
daily
rotate 2
size 5M
compress
dateext
create
0644 root root
postrotate
service rsyslog restart
endscript
}
Провести проверку без самого
выполнения
logrotate -d /etc/logrotate.d/all_logs.conf
Запустить
ротацию
logrotate -fv /etc/logrotate.d/all_logs.conf
Logrotate и cron
По умолчанию
при установке logrotate создается файл crontab внутри /etc/cron.daily с именем
logrotate
Пример ручного добавления в нужное
время в планировщик (можно указать главный конфигурационный файл)
crontab -e
10 6 * * * /usr/sbin/logrotate -f
/etc/logrotate.d/all_logs.conf
Журналирование
событий - journald
Хранит сообщения в оперативной памяти
Уровни
журналирования
0 - emergency
1 - alert
2 - critical
3 - error
4 - warning
5 - notice
6 - info
7 - debug
Утилита
управления
journalctl
Просмотр сообщений определенного уровня
journalctl -p 4
Просмотр сообщений определенного
сервиса (юнита)
journalctl -u network.service
Главный конфигурационный файл
/etc/systemd/journald.conf
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
Включить хранение данных журнала на
диске
[Journal]
Storage=persistent
Рестартуем
службу
service systemd-journald restart
Журнал появится в директории на диске
/var/log/journal/
Сколько занимает журнал на диске
journalctl --disk-usage
Archived and active journals take up 16.0M on disk.
Установить максимальный размер
журнала
journalctl --vacuum-size=1G
Vacuuming done, freed 0B of archived journals on disk.
Установить временной промежуток
хранения журнала
journalctl --vacuum-time=1months
Vacuuming done, freed 0B of archived journals on disk.