1362 lines
53 KiB
Markdown
1362 lines
53 KiB
Markdown
|
#### Решения лабораторных работ по видеокурсу Sander Van Vugt
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### top
|
|||
|
*лабораторные работы начинаются в 3-й главы*
|
|||
|
|
|||
|
3. [Базовые инструменты для работы с файлами.](#chapter3)
|
|||
|
4. [Работа с текстовыми файлами.](#chapter4)
|
|||
|
5. [Подключение к серверу RHEL.](#chapter5)
|
|||
|
6. [Управление пользователями и группами.](#chapter6)
|
|||
|
7. [Права доступа к файлам.](#chapter7)
|
|||
|
8. [Настройка сети.](#chapter8)
|
|||
|
9. [Управление процессами.](#chapter9)
|
|||
|
10. [Управление программным обеспечением.](#chapter10)
|
|||
|
11. [Работа с systemd.](#chapter11)
|
|||
|
12. [Планирование заданий.](#chapter12)
|
|||
|
13. [Настройка хранения логов.](#chapter13)
|
|||
|
14. [Управление хранилищем.](#chapter14)
|
|||
|
15. [Управление расширенным хранилищем.](#chapter15)
|
|||
|
16. [Управление ядром.](#chapter16)
|
|||
|
17. [Управление загрузкой ОС.](#chapter17)
|
|||
|
18. [Устранение проблем.](#chapter18)
|
|||
|
19. [Написание shel скриптов.](#Chapter19)
|
|||
|
20. [Настройка ssh.](#chapter20)
|
|||
|
21. [Настройка HTTP.](#chapter21)
|
|||
|
22. [Управление SELinux.](#chapter22)
|
|||
|
23. [Управление межсетевым экраном.](#chapter23)
|
|||
|
24. [Автоматическая установка.](#chapter24)
|
|||
|
25. [Настройка даты и времени.](#chapter25)
|
|||
|
26. [Доступ к удалённым ФС.](#chapter26)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter3
|
|||
|
**Базовые инструменты для работы с файлами.**
|
|||
|
|
|||
|
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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter4
|
|||
|
**Работа с текстовыми файлами.**
|
|||
|
|
|||
|
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\>' *
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter5
|
|||
|
**Подключение к серверу RHEL.**
|
|||
|
|
|||
|
1. Из графической консоли перейдите в вирутальный терминал tty6.
|
|||
|
```bash
|
|||
|
sudo chvt 6
|
|||
|
```
|
|||
|
|
|||
|
2. После выполнения 1-го задания авторизуйтесь как обычный пользователь и вернитесь в графический интерфейс, используя соответствующую команду.
|
|||
|
```bash
|
|||
|
chvt 1
|
|||
|
```
|
|||
|
|
|||
|
3. Используя `ssh` подключитесь как `root` к `localhost`
|
|||
|
```bash
|
|||
|
ssh root@localhost
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter6
|
|||
|
**Управление пользователями и группами.**
|
|||
|
|
|||
|
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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter7
|
|||
|
**Права доступа к файлам.**
|
|||
|
|
|||
|
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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter8
|
|||
|
**Настройка сети.**
|
|||
|
|
|||
|
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. Перезагрузить сервер и убедиться, что настройки сохранились.
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter9
|
|||
|
**Управление процессами.**
|
|||
|
|
|||
|
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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter10
|
|||
|
**Управление программным обеспечением.**
|
|||
|
|
|||
|
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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter11
|
|||
|
**Работа с 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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter12
|
|||
|
**Планирование заданий.**
|
|||
|
|
|||
|
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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter13
|
|||
|
**Настройка хранения логов.**
|
|||
|
|
|||
|
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
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter14
|
|||
|
**Управление хранилищем.**
|
|||
|
|
|||
|
*Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter15
|
|||
|
**Управление расширенным хранилищем.**
|
|||
|
|
|||
|
*Для выполнения этой лабораторной работы необходимо создать дополнительный жёсткий диск в вашей виртуальной машине размером 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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter16
|
|||
|
**Управление ядром.**
|
|||
|
|
|||
|
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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter17
|
|||
|
**Управление загрузкой ОС.**
|
|||
|
|
|||
|
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 раздел*
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter18
|
|||
|
**Устранение проблем.**
|
|||
|
|
|||
|
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` для перезагрузки
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### 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)
|
|||
|
```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`*
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter20
|
|||
|
**Настройка 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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter21
|
|||
|
**Настройка 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!
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter22
|
|||
|
**Управление 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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter23
|
|||
|
**Управление межсетевым экраном.**
|
|||
|
|
|||
|
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
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter24
|
|||
|
**Автоматическая установка.**
|
|||
|
|
|||
|
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`
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter25
|
|||
|
**Настройка даты и времени.**
|
|||
|
|
|||
|
1. Установить часовой пояс в соответствии с расположением.
|
|||
|
```bash
|
|||
|
[user@host ~]$ timedatectl set-timezone Europe/Moscow
|
|||
|
```
|
|||
|
|
|||
|
2. Вручную установить время на 5 минут вперед.
|
|||
|
```bash
|
|||
|
[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
|
|||
|
```
|
|||
|
|
|||
|
3. Убедиться, что синхронизация времени по NTP активна и работает.
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo timedatectl set-ntp yes
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
###### Chapter26
|
|||
|
**Доступ к удалённым ФС.**
|
|||
|
***Сервер - 192.168.10.10, Клиент - 192.168.10.11***
|
|||
|
|
|||
|
1. На своём IPA сервере установить hostname `labipa.example.com`.
|
|||
|
```bash
|
|||
|
[da2001@server1 ~]$ sudo hostnamectl set-hostname labipa.example.com
|
|||
|
```
|
|||
|
|
|||
|
2. Настроить на IPA сервере доступ для чтения/записи к двум папкам:
|
|||
|
- `home/ldap`
|
|||
|
- `/data`
|
|||
|
```bash
|
|||
|
[da2001@labipa ~]$ sudo mkdir /data /home/ldap
|
|||
|
[da2001@labipa ~]$ sudo vi /etc/exports
|
|||
|
```
|
|||
|
*добавить строки*
|
|||
|
```bash
|
|||
|
/data *(rw)
|
|||
|
/home/ldap *(rw)
|
|||
|
```
|
|||
|
*затем необходимо запустить NFS сервер*
|
|||
|
```bash
|
|||
|
[da2001@labipa ~]$ sudo systemctl enable --now nfs-server.service
|
|||
|
```
|
|||
|
*также необходимо добавить сервисы в фаервол*
|
|||
|
```bash
|
|||
|
[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
|
|||
|
```
|
|||
|
|
|||
|
*на клиенте необходимо проверить доступные сетевые папки для монтирования*
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo showmount -e 192.168.10.10
|
|||
|
Export list for 192.168.10.10:
|
|||
|
/home/ldap *
|
|||
|
/data *
|
|||
|
```
|
|||
|
|
|||
|
3. В папке `/home/ldap` должны создаваться поддиректории с именами LDAP пользователей.
|
|||
|
*для выполнения этого задания необходимо использовать `autofs`*
|
|||
|
*!Настройку необходимо выполнять на клиенте!*
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo yum install autofs -y
|
|||
|
```
|
|||
|
*выполним настройку*
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo vi /etc/auto.master
|
|||
|
```
|
|||
|
*добавить строку*
|
|||
|
```bash
|
|||
|
/home/ldap /etc/auto.ldap
|
|||
|
```
|
|||
|
*добавим путь к папке*
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo vi /etc/auto.ldap
|
|||
|
```
|
|||
|
*втавим строку*
|
|||
|
```bash
|
|||
|
* -rw 192.168.10.10:/home/ldap/&
|
|||
|
```
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo systemctl restart autofs
|
|||
|
```
|
|||
|
4. Домашние директории LDAP пользователей доступны по NFS по пути `/home/ldap/username`. Необходимо настроить их автоматическое монтирование.
|
|||
|
***выполнено в предыдущем пункте***
|
|||
|
|
|||
|
5. Настроить NFS клиент для автоматического монтирования `192.168.10.10:/data`.
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo mkdir /files
|
|||
|
```
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo vi /etc/auto.master
|
|||
|
```
|
|||
|
*добавить строку*
|
|||
|
```bash
|
|||
|
/files /etc/auto.files
|
|||
|
```
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo vi /etc/auto.files
|
|||
|
```
|
|||
|
*добавить строку*
|
|||
|
```bash
|
|||
|
data -rw 192.168.10.10:/data
|
|||
|
```
|
|||
|
```bash
|
|||
|
[user@host ~]$ sudo systemctl restart autofs
|
|||
|
```
|
|||
|
|
|||
|
[вверх](#top)
|
|||
|
|
|||
|
***
|