rhcsa_labs/van_vugt/labs_solution.md

53 KiB
Raw Blame History

Решения лабораторных работ по видеокурсу Sander Van Vugt


top

лабораторные работы начинаются в 3-й главы

  1. Базовые инструменты для работы с файлами.
  2. Работа с текстовыми файлами.
  3. Подключение к серверу RHEL.
  4. Управление пользователями и группами.
  5. Права доступа к файлам.
  6. Настройка сети.
  7. Управление процессами.
  8. Управление программным обеспечением.
  9. Работа с systemd.
  10. Планирование заданий.
  11. Настройка хранения логов.
  12. Управление хранилищем.
  13. Управление расширенным хранилищем.
  14. Управление ядром.
  15. Управление загрузкой ОС.
  16. Устранение проблем.
  17. Написание shel скриптов.
  18. Настройка ssh.
  19. Настройка HTTP.
  20. Управление SELinux.
  21. Управление межсетевым экраном.
  22. Автоматическая установка.
  23. Настройка даты и времени.
  24. Доступ к удалённым ФС.

Chapter3

Базовые инструменты для работы с файлами.

  1. Создать структуру каталогов /tmp/files/pictures, /tmp/files/photos, /tmp/files/videos
mkdir -p /tmp/files/pictures /tmp/files/photos /tmp/files/videos
  1. Из папки /etc скопировать все файлы имена которых начинаются с a, b или c (лат.) в каталог /tmp/files
cp /etc/[a-c]* /tmp/files
  1. Из /tmp/files переместить все файлы имена которых начинаются на a или b в /tmp/files/photos, а файлы, имена которых начинаются на c переместить в /tmp/files/videos
mv /tmp/files/[ab]* /tmp/files/photos
mv /tmp/files/c* /tmp/files/videos
  1. Найти в папке /etc все файлы, размер которых меньше 1000 байт и скопировать их в /tmp/files/pictures
find /etc -type f -size -1000c -exec cp {} /tmp/files/pictures \;
  1. В папке /tmp/files создать символьную ссылку на /var
cd /tmp/files
ln -s /var .
  1. В папке /tmp/files создать сжатый архив директории /home
tar -zcvf home.tar.gz /home
  1. Распаковать архив с относительными именами файлов в /tmp/archive/
mkdir /tmp/archive
tar -xvf home.tar.gz -C /tmp/archive

вверх


Chapter4

Работа с текстовыми файлами.

  1. Используйте head и tail для отображения пятой строки в файле /etc/passwd
head -n 5 /etc/passwd | tail -n 1
  1. Используйте sed для отображения пятой строки в файле /etc/passwd
sed -n 5p /etc/passwd
  1. Используйте awk в конвейере, чтобы отфильтровать последний столбец в выводе ps aux
ps aux | awk '{ print $NF }'
  1. Используйте grep, чтобы показать имена всех файлов в директории /etc, содержащих строки со словом root
grep '\<root\>' /etc/* 2>/dev/null
  1. Показать все строки в файлах директории /etc состоящие из 3-х символов. Используйте grep
grep '^...$' /etc/* 2>/dev/null
  1. Используйте grep, чтобы найти все файлы содержащие alex, но не alexander. Подсказка: создайте файл, в первой строке - alex, во второй alexander
cd
echo -e "alex\nalexander" > testfile
grep '\<alex\>' *

вверх


Chapter5

Подключение к серверу RHEL.

  1. Из графической консоли перейдите в вирутальный терминал tty6.
sudo chvt 6
  1. После выполнения 1-го задания авторизуйтесь как обычный пользователь и вернитесь в графический интерфейс, используя соответствующую команду.
chvt 1
  1. Используя ssh подключитесь как root к localhost
ssh root@localhost

вверх


Chapter6

Управление пользователями и группами.

  1. Настроить для всех новых пользователей: минимальная длина пароля - 6 символов, срок действия 90 дней.
vi /etc/login.defs

PASS_MIN_LEN    6
PASS_MAX_DAYS   90
  1. В домашней директории всех новых пользователей создается пустой файл с именем newfile.
touch /etc/skel/newfile
  1. Создать новых пользователей anna, andrey, linda, lisa.
useradd anna
useradd andrey
useradd linda
useradd lisa
  1. Установить пароль для anna и andrey - password, для linda и lisa - пароль отключить.
passwd andrey
    или
echo password | passwd --stdin anna

passwd linda -l
passwd lisa -l
  1. Создать группы profs, students и назначить anna и andrey членами profs, а linda и lisa - членами группы students.
groupadd profs
groupadd students

usermod -aG profs anna
usermod -aG profs andrey
usermod -aG students linda
usermod -aG students lisa

вверх


Chapter7

Права доступа к файлам.

  1. Запретить доступ другим пользователям (others) ко всем новым файлам пользователя Linda. в файл /home/linda/.bashrc добавить значение umask 007
vi /home/linda/.bash_profile
  1. Создать структуру общих каталогов /data/profs, /data/students со следующими разрешениями:
mkdir -p /data/profs /data/students
  • члены групп имеют доступ на чтение и запись в эти директории, другие пользователи не имеют никаких разрешений;
chmod g+w,o-rx /data/profs/
chmod g+w,o-rx /data/students/
  • члены групп могут редактировать все файлы создаваемые в этих директориях;
chmod g+s /data/profs/
chmod g+s /data/students/
  • пользователи могут удалять только файлы , которые им принадлежат;
chmod +t /data/profs/
chmod +t /data/students/
  • члены группы profs имеют доступ на чтение в /data/students
setfacl -m d:g:profs:rx /data/students/
  • пользователь anna должна иметь возможность удалять файлы из директорий /data/profs и /data/students
chown anna /data/profs
chown anna /data/students

вверх


Chapter8

Настройка сети.

  1. Назначить серверу статический IP адрес в текущей подсети. необходимо выяснить текущий IP
ip a

если в строке с указанным адресом есть global dynamic, значит IP адрес получен от DHCP сервера. для изменения сетевых настроек можно использовать утилиты nmcli или nmtui. Или вручную внести изменения в конфигурационный файл соответствующего подключения в директории /etc/sysconfig/network-scripts/

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 - после создания нового подключения, его необходимо активировать
  1. Назначить дополнительный IP адрес 10.0.0.10/24 на тот же сетевой интерфейс. для решения этого задания можно использовать nmcli или nmtui
nmcli connection modify ens18 +ipv4.addresses 10.0.0.10/24
  1. Перезагрузить сервер и убедиться, что настройки сохранились.

вверх


Chapter9

Управление процессами.

  1. Запустить команду dd if=/dev/zero of=/dev/null. Перевести запущенный процесс в фоновый режим.
dd if=/dev/zero of=/dev/null
Ctrl+Z
bg
  1. Запустить предыдущую команду 3 раза в фоновом режиме.
dd if=/dev/zero of=/dev/null &
dd if=/dev/zero of=/dev/null &
dd if=/dev/zero of=/dev/null &
  1. Используя jobs получить информацию о запущенных фоновых процессах.
[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 &
  1. Из top изменить приоритет (niceness) одного из ранее запущенных dd на значение -5. Убедиться, что использование CPU этого процесса увеличилось.
top
r
  1. Остановить все запущенные процессы dd из командной строки.
[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

или

killall dd

вверх


Chapter10

Управление программным обеспечением.

  1. Убедитесь, что ваша система использует YUM репозиторий для установки основных пакетов ОС.
yum repolist

в выводе должны быть перечислены используемые репозитории

  1. Найдите пакет, содержащий sepolicy, и установите его.
[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 
  1. Установите предыдущую версию PHP.
[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
sudo yum module install php:7.3

при установке обязательно указать module - yum MODULE install

  1. Загрузите из репозитория пакет httpd не устанавливая, проверьте есть ли в этом пакете какие-либо скрипты.
yum --downloadonly httpd
rpm -qp --scripts httpd-2.4.37-39.module_el8.4.0+778+c970deab.x86_64.rpm

вверх


Chapter11

Работа с systemd.

  1. Убедиться, что сервис httpd стартует автоматически при загрузке системы.
[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; - сервис не будет стартовать при загрузке системы

sudo systemctl enable --now httpd
  1. Отредактировать конфигурацию таким образом, чтобы в случае сбоя, через 1 минуту сервис снова работал.
sudo systemctl edit httpd.service

содержимое файла

[httpd]
Restart=always
RestartSec=60s

sudo systemctl daemon-reload
sudo systemctl start httpd

вверх


Chapter12

Планирование заданий.

  1. Убедиться, что systemd timer, который очищает временные файлы, активен.
[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.
  1. Запустить задание cron, которое выполнит команду touch /tmp/cronfile через 5 минут.
crottab -e

установить значение минут +5 к текущему времени

38 * * * * touch /tmp/cronfile
  1. Используя at запланировать задание отключения компьютера сегодня в удобное время.
[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.

[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
отменим задание

[user@host ~]$ sudo atq
3  Fri Sep  3 21:00:00 2021 a root
[user@host ~]$ sudo atrm 3

вверх


Chapter13

Настройка хранения логов.

  1. Убедитесь, что логи systemd сохраняются постоянно (persistently). убедимся, что служба запущена
[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.

проверим настройки

[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 используется по-умолчанию.

[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

  1. Создать запись в rsyslog, при которой сохраняются все сообщения категории error и выше (severity - error) в /var/log/error
sudo vi /etc/rsyslog.d/error.conf
*.error           /var/log/error
sudo systemctl restart rsyslog.service
  1. Убедитесь, что /var/log/error архивируется ежемесячно, при этом 12 последних сообщений должны сохраниться перед архивацией. посмотрим настройки по-умолчанию для примера
[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
посмотрим пример какого-нибудь файла из этой папки

[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

sudo vi /etc/logrotate.d/error
/var/log/error {
        montly
        rotate 12
        create
}

вверх


Chapter14

Управление хранилищем.

Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 10 ГБ.

  1. Создать основной раздел размером 1ГиБ. Отформатировать его в Ext4 и задать постоянную точку монтирования в /mount/files, используя его UUID.
sudo fdisk /dev/sdb
o - создать mbr (DOS) таблицу разделов
n - создать новый раздел
p - основной (primary) раздел

номер раздела и первый сектор оставить как предлагает fdisk

+1G - задать размер 1 Гб
w - записать изменения на диск и выйти
sudo mkfs.ext4 /dev/sdb1
sudo mkdir -p /mount/files
sudo blkid - покажет UUID всех разделов, скопировать UUID нужного
sudo vi /etc/fstab

добавить строку

UUID=3ffc186a-14c8-4fdf-807b-b1eba7b32346       /mount/files    ext4    defaults        0 0
sudo mount -a

если ошибок нет, значит монтирование прошло успешно

  1. Создать расширенный раздел, включающий все оставшееся дисковое пространство. В этом разделе создать раздел XFS размером 5OO МиБ с постоянной точкой монтирования в /mount/xfs, используя метку myxfs.
sudo fdisk /dev/sdb
n - создать новый раздел
e - создать расширенный (extended) раздел

номер раздела и первый и последний сектор оставить как предлагает fdisk

n - создать новый раздел

fdisk сам предложит создать логический раздел с номером 5, соглашаемся и соглашаемся с первым сектором. Далее необходимо указать конец раздела

+500M
w - записать изменения на диск и выйти

посмотреть созданные разделы

cat /proc/partitions

создадим ФС и метку раздела

sudo mkfs.xfs -L myxfs /dev/sdb5

посмотреть заданную метку

[user@host ~]$ ls /dev/disk/by-
by-id/       by-label/    by-partuuid/ by-path/     by-uuid/     
[user@host ~]$ ls /dev/disk/by-label/
myxfs

добавим монтирование по метке

sudo mkdir -p /mount/xfs
sudo vi /etc/fstab

добавим строку

LABEL=myxfs     /mount/xfs      xfs     defaults        0 0

проверим правильность монтирования

[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  
  1. Создать раздел подкачки 5OO МиБ и активировать его. После перезагрузки он должен быть доступен.
sudo umount /dev/sdb1 /dev/sdb5
sudo fdisk /dev/sdb
n - создать новый раздел

fdisk сам предложит создать логический раздел с номером 6, соглашаемся и соглашаемся с первым сектором. Далее необходимо указать конец раздела

+500M
t - изменить тип раздела
6 - указать тип какого раздела необходимо изменить
L - показать все возможные варианты
82 - необходим тип 82 Linux swap / Solaris
w - записать изменения на диск и выйти

формат раздела как SWAP

[user@host ~]$ sudo mkswap /dev/sdb6
Setting up swapspace version 1, size = 500 MiB (524283904 bytes)
no label, UUID=bdb56026-b883-41fc-a422-51492af8cbb5

укажем точку монтирования

sudo vi /etcfstab

добавим

UUID=bdb56026-b883-41fc-a422-51492af8cbb5       swap    swap    defaults        0 0

активируем новый раздел подкачки

[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

вверх


Chapter15

Управление расширенным хранилищем.

Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 10 ГБ.

  1. Создать LVM том с именем lvdb размером 1 Гб, Также создать VG и PV, необходимые для этого LV. для создания нового LVM тома достаточно использовать существующие диски, необходимо лишь создать дополнительный раздел соответствующего объема разметка диска
sudo gdisk /dev/sdb
n - создать новый раздел
номер и начало раздела оставляем как предлагает программа
Last sector - указываем +1GiB
Тип раздела - 8e00
w - записать изменения на диск
[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

[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  
  1. Отформатировать созданный LV в XFS и примонтировать на постоянной основе в папку /mount/lvdb
[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.
[user@host ~]$ sudo mkdir /mount/lvdb
[user@host ~]$ sudo vi /etc/fstab

добавим строку

/dev/mapper/vgdb-lvdb   /mount/lvdb     xfs defaults    0 0

проверим монтирование

[user@host ~]$ sudo mount -a
  1. Используя соответствующее решение, создать том с тонким выделением (thin provisioned volume) объёмом 10 Тб. для выполнения этого задания необходимо создать том VDO, т.к. именно он соответствует требованию тонкого выделения. VDO работает с целыми устройствами, поэтому для создания тома необходим отдельный диск. для использования VDO, размер блочного устройства должен быть > 4 Гб.
sudo yum install vdo kmod-kvdo
[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 увидеть созданный том

vdostats --human-readable
  1. Создать зашифрованный том LUKS объемом 1 ГБ с именем secret. Убедитесь, что том монтируется постоянно, но не автоматически в /mount/secret.
    Создать соответствующий раздел на диске
[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.

Создать зашифрованный раздел

[user@host ~]$ sudo cryptsetup luksFormat /dev/sdb1

подтвердить заглавными YES
задать пароль доступа, при этом простой пароль система может не принять, в этом случае будет выведено сообщение

Открыть раздел и задать ему имя, по которому раздел будет доступе в /dev/mapper

[user@host ~]$ sudo cryptsetup luksOpen /dev/sdb1 secret
[user@host ~]$ ls -l /dev/mapper/ | grep secret
lrwxrwxrwx. 1 root root       7 Sep 10 14:41 secret -> ../dm-3

Отформатировать раздел форматировать необходимо в разблокированном состоянии

[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

Монтирование зашифрованного раздела

[user@host ~]$ sudo mkdir /mount/secret
[user@host ~]$ sudo vi /etc/fstab

добавить строку

/dev/mapper/secret      /mount/secret     xfs     defaults    0 0

добавление записи в fstab недостаточно, т.к. для монтирования устройство должно быть доступно необходимо добавить конфигурационный файл в /etc/crypttab

[user@host ~]$ sudo vi /etc/crypttab

в файле необходимо указать:

  • название устройства, в нашем случае secret
  • блочное устройство, на котором размещён зашифрованный раздел - /dev/sdb2
  • параметр - нужно ли вводить пароль автоматически, none - не вводить пароль автоматически, требовать ввода от пользователя синтаксис конфиг. файла можно узнать в справке man crypttab
secret  /dev/sdb1   none

Для вступления изменений в силу, необходимо перезагрузить хост

[user@host ~]$ sudo reboot

вверх


Chapter16

Управление ядром.

  1. Обновить версию ядра.
[user@host ~]$ sudo yum update kernel
  1. Включить маршрутизацию IPv4 пакетов посмотрим текущую настройку
[user@host ~]$ sysctl -a | grep forward

нас интересует строка net.ipv4.ip_forward = 0
чтобы маршрутизация IPv4 пакетов осуществлялась после перезагрузки, необходимо добавить настройку в /etc/sysctl.conf

[user@host ~]$ vi /etc/sysctl.conf

добавить строку

net.ipv4.ip_forward = 1

изменения вступят в силу после перезагрузки.
для включения маршрутизации немедленно до перезагрузки

[user@host ~]$ echo 1 > /proc/sys/net/ipv4/ip_forward

вверх


Chapter17

Управление загрузкой ОС.

  1. Назначить режимом загрузки по-умолчанию - multi user target.
[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.
  1. Изменить конфигурацию загрузки - удалить опции, скрывающие процесс загрузки ОС.
[user@host ~]$ sudo vi /etc/default/grub

в строке

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 или с помощью вывода

[user@host ~]$ mount | grep '^/'

усли в выводе будут строки, содержащие efi значит система установлена на gpt раздел

вверх


Chapter18

Устранение проблем.

  1. Сброс пароля root.
    на раннем этапе загрузки - при появлении меню grub, нажать e
    в строке linux ($root)/... в конце удалить rhgb quiet и добавить rd.break. Для загрузки нажать Ctrl+x
  • Корневая ФС хоста смонтирована в папку /sysroot в режиме только чтение ro, необходимо перемонтировать её на запись
switch_root:/# mount -o rw,remount /sysroot
  • Далее необходимо изменить корневую ФС на ФС хоста
switch_root:/# chroot /sysroot
  • Изменить пароль root
    в интерактивном режиме - необходимо ввести новый пароль 2 раза (если основной язык хоста был русский, вместо предложения ввести новый пароль отобразятся "квадратики"
sh-4.4# passwd

или сразу записать новый пароль в конфиг. файл

sh-4.4# echo new_password | passwd --stdin root
  • Обновить контекст selinux
    в текущем режиме selinux не загружен, поэтому отслеживания изменения файлов не происходит. Если после внесения изменений в файл passwd попытаться загрузить систему, никто не сможет авторизоваться, т.к. файл был изменен, поэтому selinux его заблокирует. Необходимо создать файл, который инициирует обновление контекста selinux для всех файлов
sh-4.4# touch /.autorelabel
  • Дважды нажать Ctrl+d для перезагрузки

вверх


Chapter19

Написание shel скриптов.

  1. Написать скрипт, принимающий аргумент. Если аргумент - "yes", скрипт должен выполнить команду echo that's nice, если аргумент - "no", скрипт должен выполнить команду echo I'm sorry to hear that. Во всех остальных случаях - echo unknown argument provided
  • вариант 1 (if..elif..else..fi)
#!/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)
#!/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

вверх


Chapter20

Настройка ssh.

  1. Настроить доступ с использованием ssh ключей для доступа на localhost
  • создать пару ключей (pub, private)
[user@host ~]$ ssh-keygen
  • передать ключи на сервер
[user@host ~]$ ssh-copy-id localhost
  • проверить подключение
[user@host ~]$ ssh localhost
  1. Настроить ssh таким образом, чтобы только пользователи linda и root имели возможность подключения
[user@host ~]$ sudo vi /etc/ssh/sshd_config

В секции # Authentication: добавить строку

AllowUsers linda root

перезагрузить службу ssh

[user@host ~]$ sudo systemctl restart sshd

вверх


Chapter21

Настройка HTTP.

  1. Настроить Apache для отображения простой web страницы с текстом Hello, world!
[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!

[user@host ~]$ curl localhost
Hello, world!

вверх


Chapter22

Управление SELinux.

  1. Убедиться, что SELinux включен и работает в режиме enforcing.
[user@host ~]$ getenforce 
Enforcing

если значение будет Permissive, необходимо перевести в режим enforced командой sudo setenforce enforced или sudo setenforce 1
усли значение будет desabled, значит SELinux отключен полностью, необходимо изменить конфиг.файл

sudo vi /etc/sysconfig/selinux

установить значение

SELINUX=enforcing
  1. Некоторые файлы в /etc имеют неверную метку контекста. Необходимо это исправить.
[user@host ~]$ sudo restorecon -Rv /etc
[user@host ~]$ sudo reboot

вверх


Chapter23

Управление межсетевым экраном.

  1. Настроить фаервол таким образом, чтобы службы ssh и Apache имели удалённый доступ.
[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

вверх


Chapter24

Автоматическая установка.

  1. Создать kickstart файл my-ks.cfg, убедиться, что его можно использовать для автоматической установки. Кроме этого необходимо учесть:
  • установщик должен запросить пароль
  • сетевое поключение будет доступно при загрузке
  • имя компьютера будет server10.example.com

после установки RHEL, в домашней директории root создается kickstart.cfg, его можно взять за основу

[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

вверх


Chapter25

Настройка даты и времени.

  1. Установить часовой пояс в соответствии с расположением.
[user@host ~]$ timedatectl set-timezone Europe/Moscow 
  1. Вручную установить время на 5 минут вперед.
[user@host ~]$ 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
[user@host ~]$ sudo timedatectl set-time 16:51
[user@host ~]$ 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
  1. Убедиться, что синхронизация времени по NTP активна и работает.
[user@host ~]$ sudo timedatectl set-ntp yes

вверх


Chapter26

Доступ к удалённым ФС.
Сервер - 192.168.10.10, Клиент - 192.168.10.11

  1. На своём IPA сервере установить hostname labipa.example.com.
[da2001@server1 ~]$ sudo hostnamectl set-hostname labipa.example.com
  1. Настроить на IPA сервере доступ для чтения/записи к двум папкам:
    • home/ldap
    • /data
[da2001@labipa ~]$ sudo mkdir /data /home/ldap
[da2001@labipa ~]$ sudo vi /etc/exports

добавить строки

/data   *(rw)
/home/ldap      *(rw)

затем необходимо запустить NFS сервер

[da2001@labipa ~]$ sudo systemctl enable --now nfs-server.service

также необходимо добавить сервисы в фаервол

[da2001@labipa ~]$ sudo firewall-cmd --add-service=nfs
success
[da2001@labipa ~]$ sudo firewall-cmd --add-service=mountd 
success
[da2001@labipa ~]$ sudo firewall-cmd --add-service=rpc-bind
success
[da2001@labipa ~]$ sudo firewall-cmd --add-service=nfs --permanent 
success
[da2001@labipa ~]$ sudo firewall-cmd --add-service=mountd --permanent 
success
[da2001@labipa ~]$ sudo firewall-cmd --add-service=rpc-bind --permanent 
success

на клиенте необходимо проверить доступные сетевые папки для монтирования

[user@host ~]$ sudo showmount -e 192.168.10.10
Export list for 192.168.10.10:
/home/ldap *
/data      *
  1. В папке /home/ldap должны создаваться поддиректории с именами LDAP пользователей. для выполнения этого задания необходимо использовать autofs
    !Настройку необходимо выполнять на клиенте!
[user@host ~]$ sudo yum install autofs -y

выполним настройку

[user@host ~]$ sudo vi /etc/auto.master

добавить строку

/home/ldap      /etc/auto.ldap

добавим путь к папке

[user@host ~]$ sudo vi /etc/auto.ldap

втавим строку

*       -rw     192.168.10.10:/home/ldap/&
[user@host ~]$ sudo systemctl restart autofs
  1. Домашние директории LDAP пользователей доступны по NFS по пути /home/ldap/username. Необходимо настроить их автоматическое монтирование. выполнено в предыдущем пункте

  2. Настроить NFS клиент для автоматического монтирования 192.168.10.10:/data.

[user@host ~]$ sudo mkdir /files
[user@host ~]$ sudo vi /etc/auto.master

добавить строку

/files      /etc/auto.files
[user@host ~]$ sudo vi /etc/auto.files

добавить строку

data    -rw     192.168.10.10:/data
[user@host ~]$ sudo systemctl restart autofs

вверх