rhcsa_labs/labs_solution.md

1160 lines
48 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#### Решения лабораторных работ по видеокурсу Sander Van Vugt
*лабораторные работы начинаются в 3-й главы*
***
**Глава 3. Базовые инструменты для работы с файлами.**
1. Создать структуру каталогов `/tmp/files/pictures`, `/tmp/files/photos`, `/tmp/files/videos`
```bash
mkdir -p /tmp/files/pictures /tmp/files/photos /tmp/files/videos
```
2. Из папки `/etc` скопировать все файлы имена которых начинаются с `a`, `b` или `c` (лат.) в каталог `/tmp/files`
```bash
cp /etc/[a-c]* /tmp/files
```
3. Из `/tmp/files` переместить все файлы имена которых начинаются на `a` или `b` в `/tmp/files/photos`, а файлы, имена которых начинаются на `c` переместить в `/tmp/files/videos`
```bash
mv /tmp/files/[ab]* /tmp/files/photos
mv /tmp/files/c* /tmp/files/videos
```
4. Найти в папке `/etc` все файлы, размер которых меньше 1000 байт и скопировать их в `/tmp/files/pictures`
```bash
find /etc -type f -size -1000c -exec cp {} /tmp/files/pictures \;
```
5. В папке `/tmp/files` создать символьную ссылку на `/var`
```bash
cd /tmp/files
ln -s /var .
```
6. В папке `/tmp/files` создать сжатый архив директории `/home`
```bash
tar -zcvf home.tar.gz /home
```
7. Распаковать архив с относительными именами файлов в `/tmp/archive/`
```bash
mkdir /tmp/archive
tar -xvf home.tar.gz -C /tmp/archive
```
***
**Глава 4. Работа с текстовыми файлами.**
1. Используйте `head` и `tail` для отображения пятой строки в файле `/etc/passwd`
```bash
head -n 5 /etc/passwd | tail -n 1
```
2. Используйте `sed` для отображения пятой строки в файле `/etc/passwd`
```bash
sed -n 5p /etc/passwd
```
3. Используйте `awk` в конвейере, чтобы отфильтровать последний столбец в выводе `ps aux`
```bash
ps aux | awk '{ print $NF }'
```
4. Используйте `grep`, чтобы показать имена всех файлов в директории `/etc`, содержащих строки со словом `root`
```bash
grep '\<root\>' /etc/* 2>/dev/null
```
5. Показать все строки в файлах директории `/etc` состоящие из 3-х символов. Используйте `grep`
```bash
grep '^...$' /etc/* 2>/dev/null
```
6. Используйте `grep`, чтобы найти все файлы содержащие `alex`, но не `alexander`. Подсказка: создайте файл, в первой строке - `alex`, во второй `alexander`
```bash
cd
echo -e "alex\nalexander" > testfile
grep '\<alex\>' *
```
***
**Глава 5. Подключение к серверу RHEL.**
1. Из графической консоли перейдите в вирутальный терминал tty6.
```bash
sudo chvt 6
```
2. После выполнения 1-го задания авторизуйтесь как обычный пользователь и вернитесь в графический интерфейс, используя соответствующую команду.
```bash
chvt 1
```
3. Используя `ssh` подключитесь как `root` к `localhost`
```bash
ssh root@localhost
```
***
**Глава 6. Управление пользователями и группами.**
1. Настроить для всех новых пользователей: минимальная длина пароля - 6 символов, срок действия 90 дней.
```bash
vi /etc/login.defs
PASS_MIN_LEN 6
PASS_MAX_DAYS 90
```
2. В домашней директории всех новых пользователей создается пустой файл с именем `newfile`.
```bash
touch /etc/skel/newfile
```
3. Создать новых пользователей `anna`, `andrey`, `linda`, `lisa`.
```bash
useradd anna
useradd andrey
useradd linda
useradd lisa
```
4. Установить пароль для `anna` и `andrey` - `password`, для `linda` и `lisa` - пароль отключить.
```bash
passwd andrey
или
echo password | passwd --stdin anna
passwd linda -l
passwd lisa -l
```
5. Создать группы `profs`, `students` и назначить `anna` и `andrey` членами `profs`, а `linda` и `lisa` - членами группы `students`.
```bash
groupadd profs
groupadd students
usermod -aG profs anna
usermod -aG profs andrey
usermod -aG students linda
usermod -aG students lisa
```
***
**Главал 7. Права доступа к файлам.**
1. Запретить доступ другим пользователям (`others`) ко всем новым файлам пользователя Linda.
в файл `/home/linda/.bashrc` добавить значение `umask 007`
```bash
vi /home/linda/.bash_profile
```
2. Создать структуру общих каталогов `/data/profs`, `/data/students` со следующими разрешениями:
```bash
mkdir -p /data/profs /data/students
```
* члены групп имеют доступ на чтение и запись в эти директории, другие пользователи не имеют никаких разрешений;
```bash
chmod g+w,o-rx /data/profs/
chmod g+w,o-rx /data/students/
```
* члены групп могут редактировать все файлы создаваемые в этих директориях;
```bash
chmod g+s /data/profs/
chmod g+s /data/students/
```
* пользователи могут удалять только файлы , которые им принадлежат;
```bash
chmod +t /data/profs/
chmod +t /data/students/
```
* члены группы `profs` имеют доступ на чтение в `/data/students`
```bash
setfacl -m d:g:profs:rx /data/students/
```
* пользователь `anna` должна иметь возможность удалять файлы из директорий `/data/profs` и `/data/students`
```bash
chown anna /data/profs
chown anna /data/students
```
***
**Глава 8. Настройка сети.**
1. Назначить серверу статический IP адрес в текущей подсети.
*необходимо выяснить текущий IP*
```bash
ip a
```
если в строке с указанным адресом есть `global dynamic`, значит IP адрес получен от DHCP сервера.
*для изменения сетевых настроек можно использовать утилиты `nmcli` или `nmtui`. Или вручную внести изменения в конфигурационный файл соответствующего подключения в директории `/etc/sysconfig/network-scripts/`*
```bash
nmcli connection add type ethernet ifname ens18 ipv4.addresses 192.168.10.11/24 ipv4.gateway 192.168.10.9 ipv4.dns 8.8.8.8
nmcli connection show - чтобы увидеть название созданного подключения, пусть это будет ethernet-ens18
nmcli connection up ethernet-ens18 - после создания нового подключения, его необходимо активировать
```
2. Назначить дополнительный IP адрес 10.0.0.10/24 на тот же сетевой интерфейс.
*для решения этого задания можно использовать `nmcli` или `nmtui`*
```bash
nmcli connection modify ens18 +ipv4.addresses 10.0.0.10/24
```
3. Перезагрузить сервер и убедиться, что настройки сохранились.
***
**Глава 9. Управление процессами.**
1. Запустить команду `dd if=/dev/zero of=/dev/null`. Перевести запущенный процесс в фоновый режим.
```bash
dd if=/dev/zero of=/dev/null
Ctrl+Z
bg
```
2. Запустить предыдущую команду 3 раза в фоновом режиме.
```bash
dd if=/dev/zero of=/dev/null &
dd if=/dev/zero of=/dev/null &
dd if=/dev/zero of=/dev/null &
```
3. Используя `jobs` получить информацию о запущенных фоновых процессах.
```bash
[root@co1 ~]# jobs
[1] Запущен dd if=/dev/zero of=/dev/null &
[2] Запущен dd if=/dev/zero of=/dev/null &
[3]- Запущен dd if=/dev/zero of=/dev/null &
[4]+ Запущен dd if=/dev/zero of=/dev/null &
```
4. Из `top` изменить приоритет (`niceness`) одного из ранее запущенных `dd` на значение `-5`. Убедиться, что использование CPU этого процесса увеличилось.
```bash
top
r
```
5. Остановить все запущенные процессы `dd` из командной строки.
```bash
[root@co1 ~]# ps aux | grep '\<dd'
root 69261 51.6 0.0 7352 880 pts/1 R 15:29 0:24 dd if=/dev/zero of=/dev/null
root 69262 50.2 0.0 7352 912 pts/1 R 15:29 0:23 dd if=/dev/zero of=/dev/null
root 69263 49.2 0.0 7352 888 pts/1 R 15:29 0:23 dd if=/dev/zero of=/dev/null
root 69264 49.6 0.0 7352 992 pts/1 R 15:29 0:22 dd if=/dev/zero of=/dev/null
root 69266 0.0 0.0 12136 1100 pts/1 R+ 15:29 0:00 grep --color=auto \<dd
[root@co1 ~]# kill 69261 69262 69263 69264
```
или
```bash
killall dd
```
***
**Глава 10. Управление программным обеспечением.**
1. Убедитесь, что ваша система использует YUM репозиторий для установки основных пакетов ОС.
```bash
yum repolist
```
*в выводе должны быть перечислены используемые репозитории*
2. Найдите пакет, содержащий sepolicy, и установите его.
```bash
[user@host ~]$ yum provides sepolicy
Last metadata expiration check: 0:01:03 ago on Tue 31 Aug 2021 08:19:16 AM MSK.
policycoreutils-devel-2.9-14.el8.i686 : SELinux policy core policy devel utilities
Repo : baseos
Matched from:
Filename : /usr/bin/sepolicy
policycoreutils-devel-2.9-14.el8.x86_64 : SELinux policy core policy devel utilities
Repo : baseos
Matched from:
Filename : /usr/bin/sepolicy
[user@host ~]$ yum install policycoreutils-devel.x86_64
```
3. Установите предыдущую версию PHP.
```bash
[user@host ~]$ yum module list | grep php
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
```
```bash
sudo yum module install php:7.3
```
***при установке обязательно указать `module` - `yum MODULE install`***
4. Загрузите из репозитория пакет httpd не устанавливая, проверьте есть ли в этом пакете какие-либо скрипты.
```bash
yum --downloadonly httpd
rpm -qp --scripts httpd-2.4.37-39.module_el8.4.0+778+c970deab.x86_64.rpm
```
***
**Глава 11. Работа с systemd.**
1. Убедиться, что сервис `httpd` стартует автоматически при загрузке системы.
```bash
[user@host ~]$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/httpd.service.d
└─override.conf
Active: inactive (dead)
Docs: man:httpd.service(8)
```
`Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled;` - сервис не будет стартовать при загрузке системы
```bash
sudo systemctl enable --now httpd
```
2. Отредактировать конфигурацию таким образом, чтобы в случае сбоя, через 1 минуту сервис снова работал.
```bash
sudo systemctl edit httpd.service
```
содержимое файла
```bash
[httpd]
Restart=always
RestartSec=60s
```
```bash
sudo systemctl daemon-reload
sudo systemctl start httpd
```
***
**Глава 12. Планирование заданий.**
1. Убедиться, что `systemd timer`, который очищает временные файлы, активен.
```bash
[user@host ~]$ systemctl status systemd-tmpfiles-clean.timer
● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled)
Active: active (waiting) since Sun 2021-08-22 20:12:26 MSK; 1 weeks 4 days ago
Trigger: Fri 2021-09-03 20:36:07 MSK; 13h left
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
Aug 22 20:12:26 co1.rh systemd[1]: Started Daily Cleanup of Temporary Directories.
```
2. Запустить задание cron, которое выполнит команду `touch /tmp/cronfile` через 5 минут.
```bash
crottab -e
```
*установить значение минут +5 к текущему времени*
```bash
38 * * * * touch /tmp/cronfile
```
3. Используя `at` запланировать задание отключения компьютера сегодня в удобное время.
```bash
[user@host ~]$ systemctl status atd.service
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-08-22 20:12:36 MSK; 1 weeks 4 days ago
Main PID: 1143 (atd)
Tasks: 1 (limit: 11258)
Memory: 424.0K
CGroup: /system.slice/atd.service
└─1143 /usr/sbin/atd -f
Aug 22 20:12:36 co1.rh systemd[1]: Started Job spooling tools.
```
```bash
[user@host ~]$ sudo at 21:00
[sudo] password for da2001:
warning: commands will be executed using /bin/sh
at> poweroff
at> <EOT>
```
*для выхода из оболочки `at` нажать Ctrl+D*
*отменим задание*
```bash
[user@host ~]$ sudo atq
3 Fri Sep 3 21:00:00 2021 a root
[user@host ~]$ sudo atrm 3
```
***
**Глава 13. Настройка хранения логов.**
1. Убедитесь, что логи systemd сохраняются постоянно (persistently).
*убедимся, что служба запущена*
```bash
[user@host ~]$ systemctl status systemd-journald.service
● systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled)
Active: active (running) since Sun 2021-08-22 20:12:19 MSK; 1 weeks 4 days ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 586 (systemd-journal)
Status: "Processing requests..."
Tasks: 1 (limit: 11258)
Memory: 2.5M
CGroup: /system.slice/systemd-journald.service
└─586 /usr/lib/systemd/systemd-journald
Aug 22 20:12:19 co1.rh systemd-journald[586]: Journal started
Aug 22 20:12:19 co1.rh systemd-journald[586]: Runtime journal (/run/log/journal/75cfadef25be494698e02d31e421d7bf) is 8.0M, max 90.8M, 82.8M free.
```
*проверим настройки*
```bash
[user@host ~]$ cat /etc/systemd/journald.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
***
```
*в данном случае нас интересует только строка Storage, строки ниже не показаны. Значение `auto` говорит о том, что логи будут сохранятся в папку `/var/log/journal`, при условии, что папка существует. Убирать символ `#` в начале не нужно, т.к. значение auto используется по-умолчанию.*
```bash
[user@host ~]$ sudo mkdir /var/log/journal
[user@host ~]$ sudo systemctl restart systemd-journald.service
[user@host ~]$ sudo systemctl status systemd-journald
● systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled)
Active: active (running) since Fri 2021-09-03 09:20:40 MSK; 21s ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 156983 (systemd-journal)
Status: "Processing requests..."
Tasks: 1 (limit: 11258)
Memory: 1.2M
CGroup: /system.slice/systemd-journald.service
└─156983 /usr/lib/systemd/systemd-journald
Sep 03 09:20:40 co1.rh systemd-journald[156983]: Journal started
Sep 03 09:20:40 co1.rh systemd-journald[156983]: System journal (/var/log/journal/75cfadef25be494698e02d31e421d7bf) is 16.0M, max 999.0M, 982.9M free.
```
*теперь видно, что логи сохраняются в `/var/log/journal/75cfadef25be494698e02d31e421d7bf`*
2. Создать запись в rsyslog, при которой сохраняются все сообщения категории error и выше (severity - error) в `/var/log/error`
```bash
sudo vi /etc/rsyslog.d/error.conf
```
```bash
*.error /var/log/error
```
```bash
sudo systemctl restart rsyslog.service
```
3. Убедитесь, что `/var/log/error` архивируется ежемесячно, при этом 12 последних сообщений должны сохраниться перед архивацией.
*посмотрим настройки по-умолчанию для примера*
```bash
[user@host ~]$ cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may be also be configured here.
```
*настройку для отдельного сервиса или категории необходимо создать в новом файле в папке `/etc/logrotate.d`*
*посмотрим пример какого-нибудь файла из этой папки*
```bash
[user@host ~]$ cat /etc/logrotate.d/samba
/var/log/samba/log.* {
compress
dateext
maxage 365
rotate 99
notifempty
olddir /var/log/samba/old
missingok
copytruncate
}
```
*на основе настроек в `/etc/logrotate.conf` и `/etc/logrotate.d/samba` создадим новый конфиг для архивации логов error*
```bash
sudo vi /etc/logrotate.d/error
```
```bash
/var/log/error {
montly
rotate 12
create
}
```
***
**Глава 14. Управление хранилищем.**
*Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 10 ГБ.*
1. Создать основной раздел размером 1ГиБ. Отформатировать его в Ext4 и задать постоянную точку монтирования в `/mount/files`, используя его UUID.
```bash
sudo fdisk /dev/sdb
o - создать mbr (DOS) таблицу разделов
n - создать новый раздел
p - основной (primary) раздел
```
*номер раздела и первый сектор оставить как предлагает fdisk*
```bash
+1G - задать размер 1 Гб
w - записать изменения на диск и выйти
```
```bash
sudo mkfs.ext4 /dev/sdb1
sudo mkdir -p /mount/files
sudo blkid - покажет UUID всех разделов, скопировать UUID нужного
sudo vi /etc/fstab
```
*добавить строку*
```bash
UUID=3ffc186a-14c8-4fdf-807b-b1eba7b32346 /mount/files ext4 defaults 0 0
```
```bash
sudo mount -a
```
*если ошибок нет, значит монтирование прошло успешно*
2. Создать расширенный раздел, включающий все оставшееся дисковое пространство. В этом разделе создать раздел XFS размером 5OO МиБ с постоянной точкой монтирования в `/mount/xfs`, используя метку `myxfs`.
```bash
sudo fdisk /dev/sdb
n - создать новый раздел
e - создать расширенный (extended) раздел
```
*номер раздела и первый и последний сектор оставить как предлагает fdisk*
```bash
n - создать новый раздел
```
*fdisk сам предложит создать логический раздел с номером 5, соглашаемся и соглашаемся с первым сектором. Далее необходимо указать конец раздела*
```bash
+500M
w - записать изменения на диск и выйти
```
*посмотреть созданные разделы*
```bash
cat /proc/partitions
```
*создадим ФС и метку раздела*
```bash
sudo mkfs.xfs -L myxfs /dev/sdb5
```
*посмотреть заданную метку*
```bash
[user@host ~]$ ls /dev/disk/by-
by-id/ by-label/ by-partuuid/ by-path/ by-uuid/
[user@host ~]$ ls /dev/disk/by-label/
myxfs
```
*добавим монтирование по метке*
```bash
sudo mkdir -p /mount/xfs
sudo vi /etc/fstab
```
*добавим строку*
```bash
LABEL=myxfs /mount/xfs xfs defaults 0 0
```
*проверим правильность монтирования*
```bash
[user@host ~]$ sudo mount -a
[user@host ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 1000M 0 part [SWAP]
└─sda3 8:3 0 9.8G 0 part
└─cl-root 253:0 0 9.8G 0 lvm /
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 1G 0 part /mount/files
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 500M 0 part /mount/xfs
sr0 11:0 1 1024M 0 rom
```
3. Создать раздел подкачки 5OO МиБ и активировать его. После перезагрузки он должен быть доступен.
```bash
sudo umount /dev/sdb1 /dev/sdb5
sudo fdisk /dev/sdb
n - создать новый раздел
```
*fdisk сам предложит создать логический раздел с номером 6, соглашаемся и соглашаемся с первым сектором. Далее необходимо указать конец раздела*
```bash
+500M
t - изменить тип раздела
6 - указать тип какого раздела необходимо изменить
L - показать все возможные варианты
82 - необходим тип 82 Linux swap / Solaris
w - записать изменения на диск и выйти
```
*формат раздела как SWAP*
```bash
[user@host ~]$ sudo mkswap /dev/sdb6
Setting up swapspace version 1, size = 500 MiB (524283904 bytes)
no label, UUID=bdb56026-b883-41fc-a422-51492af8cbb5
```
*укажем точку монтирования*
```bash
sudo vi /etcfstab
```
*добавим*
```bash
UUID=bdb56026-b883-41fc-a422-51492af8cbb5 swap swap defaults 0 0
```
*активируем новый раздел подкачки*
```bash
[user@host ~]$ sudo mount -a
[user@host ~]$ free -m
total used free shared buff/cache available
Mem: 1817 539 753 2 524 1123
Swap: 999 0 999
[user@host ~]$ sudo swapon /dev/sdb6
[user@host ~]$ free -m
total used free shared buff/cache available
Mem: 1817 539 752 2 524 1123
Swap: 1499 0 1499
```
***
**Глава 15. Управление расширенным хранилищем.**
*Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 10 ГБ.*
1. Создать LVM том с именем `lvdb` размером 1 Гб, Также создать VG и PV, необходимые для этого LV.
*для создания нового LVM тома достаточно использовать существующие диски, необходимо лишь создать дополнительный раздел соответствующего объема*
*разметка диска*
```bash
sudo gdisk /dev/sdb
n - создать новый раздел
номер и начало раздела оставляем как предлагает программа
Last sector - указываем +1GiB
Тип раздела - 8e00
w - записать изменения на диск
```
```bash
[user@host ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 1000M 0 part [SWAP]
└─sda3 8:3 0 9.8G 0 part
└─cl-root 253:0 0 9.8G 0 lvm /
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 1G 0 part
sdc 8:32 0 10G 0 disk
sr0 11:0 1 1024M 0 rom
```
*создание LVM*
```bash
[user@host ~]$ sudo pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[user@host ~]$ sudo vgcreate vgdb /dev/sdb1
Volume group "vgdb" successfully created
[user@host ~]$ sudo lvcreate -n lvdb -l 100%FREE vgdb
Logical volume "lvdb" created.
[user@host ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 1000M 0 part [SWAP]
└─sda3 8:3 0 9.8G 0 part
└─cl-root 253:0 0 9.8G 0 lvm /
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 1G 0 part
└─vgdb-lvdb 253:1 0 1020M 0 lvm
sdc 8:32 0 10G 0 disk
sr0 11:0 1 1024M 0 rom
```
2. Отформатировать созданный LV в XFS и примонтировать на постоянной основе в папку `/mount/lvdb`
```bash
[user@host ~]$ sudo mkfs.xfs /dev/mapper/vgdb-lvdb
meta-data=/dev/mapper/vgdb-lvdb isize=512 agcount=4, agsize=65280 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=261120, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1566, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
```
```bash
[user@host ~]$ sudo mkdir /mount/lvdb
[user@host ~]$ sudo vi /etc/fstab
```
*добавим строку*
```bash
/dev/mapper/vgdb-lvdb /mount/lvdb xfs defaults 0 0
```
*проверим монтирование*
```bash
[user@host ~]$ sudo mount -a
```
3. Используя соответствующее решение, создать том с тонким выделением (thin provisioned volume) объёмом 10 Тб.
*для выполнения этого задания необходимо создать том VDO, т.к. именно он соответствует требованию тонкого выделения. VDO работает с целыми устройствами, поэтому для создания тома необходим отдельный диск.*
*для использования VDO, размер блочного устройства должен быть > 4 Гб.*
```bash
sudo yum install vdo kmod-kvdo
```
```bash
[user@host ~]$ sudo vdo create --name vdo1 --device /dev/sdc --vdoLogicalSize 10T
Creating VDO vdo1
The VDO volume can address 6 GB in 3 data slabs, each 2 GB.
It can grow to address at most 16 TB of physical storage in 8192 slabs.
If a larger maximum size might be needed, use bigger slabs.
Starting VDO vdo1
Starting compression on VDO vdo1
VDO instance 0 volume is ready at /dev/mapper/vdo1
```
*текущее задание не предполагает монтирование тома VDO, но необъодимо иметь ввиду, для монтирования подобного устройства, в файле `/etc/fstab` необходимо указать опции монтирования `x-systemd.requires=vdo.service`*
*увидеть созданный том*
```bash
vdostats --human-readable
```
4. Создать зашифрованный том LUKS объемом 1 ГБ с именем `secret`. Убедитесь, что том монтируется постоянно, но не автоматически в `/mount/secret`.
Создать соответствующий раздел на диске
```bash
[user@host ~]$ sudo parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart
Partition name? []? luks1
File system type? [ext2]?
Start? 1
End? 1GiB
(parted) p
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1074MB 1073MB ext2 luks1
(parted) q
Information: You may need to update /etc/fstab.
```
Создать зашифрованный раздел
```bash
[user@host ~]$ sudo cryptsetup luksFormat /dev/sdb1
```
*подтвердить заглавными YES*
*задать пароль доступа, при этом простой пароль система может не принять, в этом случае будет выведено сообщение*
Открыть раздел и задать ему имя, по которому раздел будет доступе в `/dev/mapper`
```bash
[user@host ~]$ sudo cryptsetup luksOpen /dev/sdb1 secret
```
```bash
[user@host ~]$ ls -l /dev/mapper/ | grep secret
lrwxrwxrwx. 1 root root 7 Sep 10 14:41 secret -> ../dm-3
```
Отформатировать раздел
*форматировать необходимо в разблокированном состоянии*
```bash
[user@host ~]$ sudo mkfs.xfs /dev/mapper/secret
meta-data=/dev/mapper/secret isize=512 agcount=4, agsize=64448 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=257792, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1566, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
```
Монтирование зашифрованного раздела
```bash
[user@host ~]$ sudo mkdir /mount/secret
[user@host ~]$ sudo vi /etc/fstab
```
*добавить строку*
```bash
/dev/mapper/secret /mount/secret xfs defaults 0 0
```
**добавление записи в fstab недостаточно, т.к. для монтирования устройство должно быть доступно**
*необходимо добавить конфигурационный файл в `/etc/crypttab`*
```bash
[user@host ~]$ sudo vi /etc/crypttab
```
*в файле необходимо указать:*
- название устройства, в нашем случае `secret`
- блочное устройство, на котором размещён зашифрованный раздел - `/dev/sdb2`
- параметр - нужно ли вводить пароль автоматически, `none` - не вводить пароль автоматически, требовать ввода от пользователя
*синтаксис конфиг. файла можно узнать в справке `man crypttab`*
```bash
secret /dev/sdb1 none
```
Для вступления изменений в силу, необходимо перезагрузить хост
```bash
[user@host ~]$ sudo reboot
```
***
**Глава 16. Управление ядром.**
1. Обновить версию ядра.
```bash
[user@host ~]$ sudo yum update kernel
```
2. Включить маршрутизацию IPv4 пакетов
*посмотрим текущую настройку*
```bash
[user@host ~]$ sysctl -a | grep forward
```
*нас интересует строка `net.ipv4.ip_forward = 0`*
*чтобы маршрутизация IPv4 пакетов осуществлялась после перезагрузки, необходимо добавить настройку в `/etc/sysctl.conf`*
```bash
[user@host ~]$ vi /etc/sysctl.conf
```
*добавить строку*
```bash
net.ipv4.ip_forward = 1
```
*изменения вступят в силу после перезагрузки.*
*для включения маршрутизации немедленно до перезагрузки*
```bash
[user@host ~]$ echo 1 > /proc/sys/net/ipv4/ip_forward
```
***
**Глава 17. Управление загрузкой ОС.**
1. Назначить режимом загрузки по-умолчанию - multi user target.
```bash
[user@host ~]$ sudo systemctl get-default
[sudo] password for da2001:
graphical.target
[user@host ~]$ sudo systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.
```
2. Изменить конфигурацию загрузки - удалить опции, скрывающие процесс загрузки ОС.
```bash
[user@host ~]$ sudo vi /etc/default/grub
```
*в строке*
```bash
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=212f6847-0853-46b0-9654-8b06b248f956 rd.lvm.lv=cl/root rhgb quiet"
```
*необходимо удалить `rhgb quiet`*
*далее, нужно обновить конфигурацию grub*
если система установлена на раздел mbr (bios), выполнить `sudo grub2-mkconfig -o /boot/grub2/grub.cfg`
если система установлена на раздел gpt (uefi), выполнить `sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cgf`
*узнать на какой раздел установлена система, можно посмотрев на метку диска в parted, gdisk или с помощью вывода*
```bash
[user@host ~]$ mount | grep '^/'
```
*усли в выводе будут строки, содержащие `efi` значит система установлена на gpt раздел*
***
**Глава 18. Устранение проблем.**
1. Сброс пароля root.
*на раннем этапе загрузки - при появлении меню grub, нажать `e`*
в строке `linux ($root)/...` в конце удалить `rhgb quiet` и добавить `rd.break`. Для загрузки нажать `Ctrl+x`
- Корневая ФС хоста смонтирована в папку `/sysroot` в режиме только чтение `ro`, необходимо перемонтировать её на запись
```bash
switch_root:/# mount -o rw,remount /sysroot
```
- Далее необходимо изменить корневую ФС на ФС хоста
```bash
switch_root:/# chroot /sysroot
```
- Изменить пароль root
*в интерактивном режиме - необходимо ввести новый пароль 2 раза (если основной язык хоста был русский, вместо предложения ввести новый пароль отобразятся "квадратики"*
```bash
sh-4.4# passwd
```
*или сразу записать новый пароль в конфиг. файл*
```bash
sh-4.4# echo new_password | passwd --stdin root
```
- Обновить контекст selinux
*в текущем режиме selinux не загружен, поэтому отслеживания изменения файлов не происходит. Если после внесения изменений в файл `passwd` попытаться загрузить систему, никто не сможет авторизоваться, т.к. файл был изменен, поэтому selinux его заблокирует. Необходимо создать файл, который инициирует обновление контекста selinux для всех файлов*
```bash
sh-4.4# touch /.autorelabel
```
- Дважды нажать `Ctrl+d` для перезагрузки
***
**Глава 19. Написание shel скриптов.**
1. Написать скрипт, принимающий аргумент. Если аргумент - "yes", скрипт должен выполнить команду `echo that's nice`, если аргумент - "no", скрипт должен выполнить команду `echo I'm sorry to hear that`. Во всех остальных случаях - `echo unknown argument provided`
- вариант 1 (if..elif..else..fi)
```bash
#!/bin/bash
# проверим, что аргумент присутствует
if [ -z $1 ]
then
echo you need provide an argument
exit 2
fi
# добавим регистронезависимость для аргумента
arg=$(echo $1 | tr [:upper:] [:lower:])
if [ $arg = yes ]
then
echo that\'s nice
elif [ "$arg" = "no" ]
then
echo "I'm sorry to hear that"
else
echo unknown argument provided
fi
```
- вариант 2 (case)
```bash
#!/bin/bash
# проверим, что аргумент присутствует
if [ -z $1 ]
then
echo you need provide an argument
exit 2
fi
# добавим регистронезависимость для аргумента
arg=$(echo $1 | tr [:upper:] [:lower:])
case $arg in
yes)
echo "that's nice"
;;
no)
echo "I'm sorry to hear that"
;;
*)
echo unknown argument provided
;;
esac
```
*не забыть сделать скрипт исполняемым `chmod +x script_name`*
***
**Глава 20. Настройка ssh.**
1. Настроить доступ с использованием ssh ключей для доступа на localhost
- создать пару ключей (pub, private)
```bash
[user@host ~]$ ssh-keygen
```
- передать ключи на сервер
```bash
[user@host ~]$ ssh-copy-id localhost
```
- проверить подключение
```bash
[user@host ~]$ ssh localhost
```
2. Настроить ssh таким образом, чтобы только пользователи linda и root имели возможность подключения
```bash
[user@host ~]$ sudo vi /etc/ssh/sshd_config
```
В секции `# Authentication:` добавить строку
```bash
AllowUsers linda root
```
перезагрузить службу ssh
```bash
[user@host ~]$ sudo systemctl restart sshd
```
***
**Глава 21. Настройка HTTP.**
1. Настроить Apache для отображения простой web страницы с текстом `Hello, world!`
```bash
[user@host ~]$ sudo yum install -y httpd
[sudo] password for da2001:
Last metadata expiration check: 3:38:53 ago on Thu 16 Sep 2021 04:45:34 AM MSK.
Package httpd-2.4.37-39.module_el8.4.0+778+c970deab.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[user@host ~]$ sudo systemctl enable --now httpd
[user@host ~]$ sudo vi /var/www/http/index.html
```
*вставить текст `Hello, world!`*
```bash
[user@host ~]$ curl localhost
Hello, world!
```
***
**Глава 22. Управление SELinux.**
1. Убедиться, что SELinux включен и работает в режиме enforcing.
```bash
[user@host ~]$ getenforce
Enforcing
```
*если значение будет `Permissive`, необходимо перевести в режим `enforced` командой `sudo setenforce enforced` или `sudo setenforce 1`*
*усли значение будет `desabled`, значит SELinux отключен полностью, необходимо изменить конфиг.файл*
```bash
sudo vi /etc/sysconfig/selinux
```
*установить значение*
```bash
SELINUX=enforcing
```
2. Некоторые файлы в `/etc` имеют неверную метку контекста. Необходимо это исправить.
```bash
[user@host ~]$ sudo restorecon -Rv /etc
[user@host ~]$ sudo reboot
```
***
**Глава 23. Управление межсетевым экраном.**
1. Настроить фаервол таким образом, чтобы службы ssh и Apache имели удалённый доступ.
```bash
[user@host ~]$ sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit collectd condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp galera ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell kube-apiserver ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rquotad rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
[user@host ~]$ sudo firewall-cmd --add-service=ssh
[sudo] password for da2001:
Warning: ALREADY_ENABLED: 'ssh' already in 'public'
success
[user@host ~]$ sudo firewall-cmd --add-service=http
success
[user@host ~]$ sudo firewall-cmd --add-service=http --permanent
success
[user@host ~]$ sudo firewall-cmd --add-service=https
success
[user@host ~]$ sudo firewall-cmd --add-service=https --permanent
success
[user@host ~]$ sudo reboot
```
***
**Глава 24. Автоматическая установка.**
1. Создать kickstart файл `my-ks.cfg`, убедиться, что его можно использовать для автоматической установки. Кроме этого необходимо учесть:
- установщик должен запросить пароль
- сетевое поключение будет доступно при загрузке
- имя компьютера будет `server10.example.com`
*после установки RHEL, в домашней директории root создается `kickstart.cfg`, его можно взять за основу*
```bash
[root@host ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
[root@host ~]# cp initial-setup-ks.cfg my-ks.cfg
```
- установщик должен запросить пароль
*в файле `my-ks.cfg` необходимо найти секцию `# Root password`, чтобы установщик запросил пароль, необходимо удалить данные из этой секции*
- сетевое поключение будет доступно при загрузке
*в файле `my-ks.cfg` в секции `# Network information`, проверить корректность данных для подключения к сети*
- имя компьютера будет `server10.example.com`
*в файле `my-ks.cfg` в секции `# Network information` привести строку к виду:*
`network --hostname=server10.example.com`
***
**Глава 25. Настройка даты и времени.**
1. Установить часовой пояс в соответствии с расположением.
```bash
[da2001@co1 ~]$ timedatectl set-timezone Europe/Moscow
```
2. Вручную установить время на 5 минут вперед.
```bash
[da2001@co1 ~]$ timedatectl
Local time: Ср 2021-09-22 16:46:37 MSK
Universal time: Ср 2021-09-22 13:46:37 UTC
RTC time: Ср 2021-09-22 13:46:38
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
[da2001@co1 ~]$ sudo timedatectl set-time 16:51
[da2001@co1 ~]$ timedatectl
Local time: Ср 2021-09-22 16:51:08 MSK
Universal time: Ср 2021-09-22 13:51:08 UTC
RTC time: Ср 2021-09-22 13:51:08
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
```
3. Убедиться, что синхронизация времени по NTP активна и работает.
```bash
[da2001@co1 ~]$ sudo timedatectl set-ntp yes
```
***