rhcsa_labs/labs_solution.md

20 KiB
Raw Blame History

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

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


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

  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

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

  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\>' *

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

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

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

  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

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

  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

Глава 8. Настройка сети.

  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. Перезагрузить сервер и убедиться, что настройки сохранились.

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

  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

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

  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

Глава 11. Работа с 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

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

  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

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

  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

/var/log/error {
        montly
        rotate 12
        create
}