rhcsa_labs/labs_solution.md

663 lines
25 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
```
***