#### Решения лабораторных работ по видеокурсу 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 '\' /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 '\' * ``` *** **Глава 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 '\ poweroff at> ``` *для выхода из оболочки `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 /var/log/error { montly rotate 12 create } ``` ***