rhcsa_labs/labs_solution.md

397 lines
15 KiB
Markdown
Raw Normal View History

2021-09-01 09:11:00 +03:00
#### Решения лабораторных работ по видеокурсу Sander Van Vugt
***
**Глава 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
2021-09-01 09:11:00 +03:00
```
```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
```
***
2021-09-01 13:31:57 +03:00
**Глава 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
```
2021-09-01 13:42:22 +03:00
2021-09-01 13:31:57 +03:00
содержимое файла
2021-09-01 13:31:57 +03:00
```bash
[httpd]
Restart=always
RestartSec=60s
```
```bash
sudo systemctl daemon-reload
sudo systemctl start httpd
```
***
2021-09-03 07:38:43 +03:00
**Глава 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
```
***