Added missing solutions.

pull/1/head
Vladimir Protsenko 2 years ago
parent 8aaa376b0e
commit a54e2a3aec

@ -0,0 +1,212 @@
# Решения
### 1.
Создайте папку `projects` в корне системы с правами `rwx` для владельца, группы и других пользователей. Установите на неё `stickybit`.
```
sudo mkdir /projects -m 1777
```
### 2.
Работая от пользователя `stud` в папке `projects` создайте папку с вашим проектом. Проверьте, что владелец может записать файл в неё. Проверьте, что `mike` или `vera` могут прочитать содержимое, но не могу записать в неё.
```
mike@stud15:/projects$ tree
.
└── project_stud
└── main.c
1 directory, 1 file
mike@stud15:/projects$ cat project_stud/main.c
hello
mike@stud15:/projects$ touch project_stud/test
touch: cannot touch 'project_stud/test': Permission denied
```
### 3.
В `projects` создайте ещё одну папку с проектом `project2`. Дайте к ней доступ на чтение только пользователям из группы `best_project_team`. Создайте группу `best_project_team` в которую входит `mike` и `stud`. Перезайдите в аккаунт, чтоб применить изменения членства в группе. Проверьте, что доступа к папке у пользователя `vera` нет.
```
stud@stud15:~$ sudo groupadd best_project_team
stud@stud15:~$ sudo usermod -aG best_project_team mike
stud@stud15:~$ sudo usermod -aG best_project_team stud
stud@stud15:~$ mkdir /projects/project2
stud@stud15:~$ chmod 770 /projects/project2
stud@stud15:~$ chown stud:best_project_team /projects/project2
vera@stud15:~$ cat /projects/project2/testfile
```
### 4.
Создайте третью и четвёртую папки от пользователя `mike` и `vera` в `/projects` и сделайте их полностью приватными. Добавьте в каждую директорию по одному файлу. Проверьте может ли `mike` или vera посмотреть содержимое чужого приватного проекта.
```
root@stud15:~# su - vera
vera@stud15:/projects$ mkdir /projects/vera_project
vera@stud15:/projects$ chmod 700 /projects/vera_project/
vera@stud15:/projects$ echo "hello from vera" > /projects/vera_project/readme
root@stud15:~# su - mike
mike@stud15:/projects$ mkdir mike_project
mike@stud15:/projects$ chmod 700 mike_project/
mike@stud15:/projects/mike_project$ echo "hello from mike" > readme
mike@stud15:/projects/mike_project$ cat /projects/mike_project/readme
hello from mike
mike@stud15:/projects/mike_project$ cat /projects/vera_project/readme
cat: /projects/vera_project/readme: Permission denied
```
### 5.
Проверьте может ли mike удалить папку с чужим проектом? Может ли он удалить свою папку? Уберите stickybit у папки /projects. А теперь может ли mike удалить папку, созданную vera или stud? Влияет ли на возможность удаления наличие в папке файлов?
```bash
mike@stud15:/projects/mike_project$ rm -rf /projects/vera_project/
rm: cannot remove '/projects/vera_project/': Operation not permitted
mike@stud15:/projects/mike_project$ rm -rf /projects/mike_project/
mike@stud15:/projects$ ls -la
total 20
drwxrwxrwt 5 root root 4096 окт 1 17:59 .
drwxr-xr-x 21 root root 4096 окт 1 12:13 ..
drwxrwx--- 2 stud best_project_team 4096 окт 1 12:24 project2
drwxr-xr-x 2 stud stud 4096 окт 1 12:16 project_stud
drwx------ 2 vera vera 4096 окт 1 17:54 vera_project
# без файлов в директории vera_project
mike@stud15:~$ rm -rf /projects/vera_project/
mike@stud15:~$ ls -l /projects/
total 8
drwxrwx--- 2 stud best_project_team 4096 окт 1 12:24 project2
drwxr-xr-x 2 stud stud 4096 окт 1 12:16 project_stud
mike@stud15:~$ ls -l /projects/
```
### 6.
От `root` cоздайте ещё одну общую директорию `shared` в `/home/`. Создайте группу `shared_files` c большим значением идентификатора, например 70000, в которую входят `mike`, `vera` и `stud`. Поменяйте владельца `/home/shared` на `nobody`, а владельца-группу на `shared_files`. Установите полные права доступа для владельца и группы владельца. Все остальным запретите доступ к папке. Также установите бит `SGID`.
```bash
root@stud15:/home# mkdir /home/shared
root@stud15:/home# groupadd shared_files --gid 70000
root@stud15:/home# usermod -aG shared_files mike
root@stud15:/home# usermod -aG shared_files vera
root@stud15:/home# usermod -aG shared_files stud
root@stud15:/home# cat /etc/group | grep shared
shared_files:x:70000:stud,vera,mike
root@stud15:/home# ls -l | grep shared
drwxrws--- 2 nobody shared_files 4096 сен 9 16:43 shared
```
Создайте несколько файлов под разными аккаунтами в этой папке и проверьте, что они имеют владельца-группу shared_files.
```bash
root@stud15:/home# su --login mike --command "mkdir /home/shared/mike_data"
root@stud15:/home# su --login vera --command "mkdir /home/shared/vera_data"
root@stud15:/home# su --login stud --command "mkdir /home/shared/stud_data"
root@stud15:/home# ls -la shared/
total 20
drwxrws--- 5 nobody shared_files 4096 окт 1 18:26 .
drwxr-xr-x 13 root root 4096 сен 15 11:47 ..
-rw-r--r-- 1 stud shared_files 0 сен 9 16:42 1
-rw-r--r-- 1 mike shared_files 0 сен 9 16:42 2
-rw-rw-r-- 1 stud shared_files 0 сен 9 16:43 3
drwxr-sr-x 2 mike shared_files 4096 окт 1 18:25 mike_data
drwxr-sr-x 2 stud shared_files 4096 окт 1 18:26 stud_data
drwxr-sr-x 2 vera shared_files 4096 окт 1 18:26 vera_data
```
### 7.
Узнайте значение `umask` одноимённой командой. Создайте папку и файл c именем `test_$(umask)`. Выведите атрибуты файла. Измените umask одноимённой командой на `0002`. Повторите создание папки и файла и сравните атрибуты файлов, созданных с разными масками.
```bash
stud@stud15:/home/shared$ umask
0022
stud@stud15:/home/shared$ touch test_$(umask)
stud@stud15:/home/shared$ stat test_0022
File: test_0022
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1177656 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ stud) Gid: ( 1002/shared_files)
Access: 2022-10-01 18:28:21.509800524 +0400
Modify: 2022-10-01 18:28:21.509800524 +0400
Change: 2022-10-01 18:28:21.509800524 +0400
Birth: 2022-10-01 18:28:21.509800524 +0400
stud@stud15:/home/shared$ umask 0002
stud@stud15:/home/shared$ touch test_$(umask)
stud@stud15:/home/shared$ stat test_0002
File: test_0002
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1177657 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ stud) Gid: ( 1002/shared_files)
Access: 2022-10-01 18:28:45.002074124 +0400
Modify: 2022-10-01 18:28:45.002074124 +0400
Change: 2022-10-01 18:28:45.002074124 +0400
Birth: 2022-10-01 18:28:45.002074124 +0400
```
### 8.
Под `root` скопируйте `bash` `cp /bin/bash /bin/my_unsecure_bash` и установите атрибуты файла в значение `4755`. Значение 4 соответствует биту `SUID`. Посмотрите на результат командой `stat`. Создайте файл-скрипт `gen_file_root.sh` в папке `/tmp` от пользователя `mike` со следующим содержимым:
```bash
#!/bin/my_unsecure_bash -p
touch /tmp/root_$RANDOM
```
Сделайте его исполняемым для всех. Вызовите скрипт от пользователя `stud`. Обратите внимание на владельца созданного файла `/tmp/root_*`. Как на него повлиял `SUID`? Установите `SUID` на `gen_file_root.sh`, сгенерируйте новый файл. Есть ли изменения в поле владельца?
```
root@stud15:/tmp# stat /bin/my_unsecure_bash
File: /bin/my_unsecure_bash
Size: 1234376 Blocks: 2416 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1842926 Links: 1
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-09-09 15:07:30.407667000 +0400
Modify: 2022-09-09 15:04:36.207672558 +0400
Change: 2022-09-09 15:04:59.031671752 +0400
Birth: 2022-09-09 15:04:36.171672558 +0400
root@stud15:/tmp# chmod 777 /tmp/gen_file_root.sh
root@stud15:/tmp# su - stud
stud@stud15:~$ cd /tmp/
stud@stud15:/tmp$ ./gen_file_root.sh
stud@stud15:/tmp$ ./gen_file_root.sh
stud@stud15:/tmp$ ./gen_file_root.sh
stud@stud15:/tmp$ ls -l
total 16
-rwxrwxrwx 1 root root 51 окт 1 18:33 gen_file_root.sh
-rw-r--r-- 1 stud stud 33 окт 1 11:34 log
-rw-r--r-- 1 root stud 0 окт 1 18:39 root_29247
-rw-r--r-- 1 root stud 0 окт 1 18:39 root_32039
-rw-r--r-- 1 root stud 0 окт 1 18:39 root_9235
```
### 9.
В каталоге `/projects` cоздайте файл `test` в папках `1`, `2`, `3`. Поменяйте для папок атрибуты доступа для категории `other`: `r--`, `r-x`, `--x` соответственно. Зайдите под другого пользователя, который входит в категорию `other` и попробуйте найти файл с помощью `find`, начиная с каталога `/projects`. Попробуйте найти слово в содержимом файлов. Как влияют атрибуты на возможность поиска?
```
stud@stud15:/projects$ mkdir 1
stud@stud15:/projects$ mkdir 2
stud@stud15:/projects$ mkdir 3
stud@stud15:/projects$ chmod 704 1
stud@stud15:/projects$ chmod 705 2
You have new mail in /var/mail/stud
stud@stud15:/projects$ chmod 701 3
stud@stud15:/projects$ ls -l
total 20
drwx---r-- 2 stud stud 4096 окт 1 18:42 1
drwx---r-x 2 stud stud 4096 окт 1 18:42 2
drwx-----x 2 stud stud 4096 окт 1 18:42 3
stud@stud15:/projects$ echo "hello" > 1/message
stud@stud15:/projects$ echo "hello" > 2/message
stud@stud15:/projects$ echo "hello" > 3/message
root@stud15:/tmp# su - mike
mike@stud15:~$ cd /projects/
mike@stud15:/projects$ find . -name "message"
find: ./3: Permission denied
./2/message
./1/message
mike@stud15:/projects$ grep -r "hello" .
grep: ./3: Permission denied
./2/message:hello
grep: ./1/message: Permission denied
```
Команда `find` не смогла найти файл только для папки без доступа на чтение для `other`. Команда `grep` смогла найти строку только в папке с правами и на чтение и на исполнение.
# Справка
Конфигурационные файлы:
- /etc/login.defs
Команды:
- stat
- ls -l
- chmod
- chown
- umask

@ -48,7 +48,7 @@ $ sudo systemctl status nginx
``` ```
### 6. ### 6.
``` ```bash
$ cat /etc/nginx/nginx.conf $ cat /etc/nginx/nginx.conf
user www-data; user www-data;
worker_processes auto; worker_processes auto;

@ -0,0 +1,132 @@
# Решения
Для проверки расписания вы можете использовать сайт https://crontab.guru/, https://cronheatmap.com и аналоги.
### 0.
Проверьте наличие команд cron и at в системе. Установите их в случае отсутствия.
```bash
sudo apt install cron at
```
### 1.
Выведите документацию crontab и cron.
```bash
man crontab
man cron
```
### 2.
Создайте cron расписание для выполнения скрипта или к:
``` bash
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>
# 1. дважды в день: в 5 утра и в 5 вечера,
0 5,17 * * * /sbin/script.sh
# 2. в 3:15 каждый день,
15 15 * * * /sbin/script.sh
# 3. в 8 вечера каждую неделю,
0 20 * * 1 /sbin/script.sh
# 4. по понедельникам в 20:00,
0 20 * * 1 /sbin/script.sh
# 5. в 20:00 по понедельникам и по субботам,
0 20 * * 1,6 /sbin/script.sh
# 6. каждую минуту,
* * * * * /sbin/script.sh
# 7. каждые 10 минут,
*/10 * * * * /sbin/script.sh
# 8. каждые 15 минут по субботам и понедельникам,
*/15 * * * 1,6 /sbin/script.sh
# 9. каждую минуту в марте, июне, сентябре и декабре,
* * * 3,6,9,12 /sbin/script.sh
# 10. 20 января в 8 вечера,
0 20 20 1 * /sbin/script.sh
# 11. ежедневное выполнение скрипта в 8 вечера каждый второй месяц,
0 20 * */2 * /sbin/script.sh
# 12. *в первое воскресенье каждого месяца,
0 0 * * 0 [ $(date +%d) -le 07 ] && /script/script.sh
# 13. каждые три часа,
0 */3 * * * /sbin/script.sh
# 14. дважды, каждую субботу и понедельник,
0 0 * * 1,6 /sbin/script.sh
# 15. *каждые 30 секунд,
* * * * * /sbin/script.sh
* * * * * sleep 30; /sbin/script.sh
# 16. каждый день в летний период,
0 0 * 6,7,8 * /sbin/script.sh
# 17. для рассылки поздравлений с новым годом,
0 0 1 1 * /sbin/happy_new_year_mail.sh
# 18. ежедневного удаления неиспользуемых пакетов в системе,
0 1 * * * apt autoremove
# 19. перезапуска системы в 0 часов 0 минут,
0 0 * * * shutdown -h 0
# 20. для очистки всех попыток сбоя входа в систему ежедневно в 1:00,
0 1 * * * /sbin/clear_auth_errors.sh
# 21. ежедневной проверки и загрузки новых системных пакетов,
0 0 * * * apt update
# 22. ежедневного обновления пакетов системы,
0 0 * * * apt upgrade -y
# 23. ежедневное резервное копирование всех папок пользователей в 5 утра.
0 5 * * * tar -zcf /var/backups/home.tgz /home/
```
### 3.
Создайте задание в котором отчёты cron будут отправляться вам на внешний почтовый ящик.
```
MAILTO=logs@myoffice.org
```
### 4.
Установите пользовательский сrontab.
```
sudo echo "stud" >> /etc/cron.allow
crontab -e
```
### 5.
Настройте выполнение исполняемого файла script.sh из `/usr/sbin/` каждую среду, модифицировав `PATH` в cron задании.
```bash
PATH=/opt/cmake/bin:$PATH
0 0 * * 3 /usr/sbin/script.sh
```
### 6.
Пользуясь полномочиями суперпользователя, запретите пользователю mike выполнять команду at.
```
sudo echo "mike" >> /etc/at.deny
```
### 7.
Запланируйте командой at:
``` bash
# 1. выполнение скрипта сегодня в 9 часов,
at 21:00 script.sh
# 2. перезагрузку через 2 часа,
sudo at now + 2 hours reboot
# 3. выполнение команды через 100 лет.
at now + 100 years script.sh
```
# Справка
Релевантные файлы:
- /etc/cron.allow
- /etc/cron.deny
- /var/spool/cron/crontabs
- /var/spool/cron/atjobs
- /var/spool/cron/atspool
- /proc/loadavg
- /var/run/utmp
- /etc/at.allow
- /etc/at.deny
Релевантные команды:
- cron
- at
- crontab

@ -3,7 +3,7 @@
Для проверки расписания вы можете использовать сайт https://crontab.guru/, https://cronheatmap.com и аналоги. Для проверки расписания вы можете использовать сайт https://crontab.guru/, https://cronheatmap.com и аналоги.
### 0. ### 0.
Проверьте наличие команд cron и at в систем. Установите их в случае отсутствия. Проверьте наличие команд cron и at в системе. Установите их в случае отсутствия.
### 1. ### 1.
Выведите документацию crontab и cron. Выведите документацию crontab и cron.

@ -0,0 +1,46 @@
# Решения
Исправьте проблемы настройки сети в виртуальных машинах `troublesome-X-task[1-5]`. В каждой машине 1 проблема после исправления которой работает команда `ping yandex.com`. Шлюз по умолчанию для машины в каждом задании - 192.168.1.1 в сети 192.168.1.0/24. Всего 5 заданий. Используйте механизм снимков и команду rollback в proxmox интерфейсе, чтобы откатывать машину в первоначальное состояние.
### 1. Не активирован и не запущен systemd-networkd
```
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
```
### 2. В настройках не указан шлюз по умолчанию
```
sudo "echo Gateway=192.168.1.1 >> /etc/systemd/network/ens18.network"
sudo networkctl reload
```
### 3. В настройках systemd-resolved не указан DNS
```
sudo "echo DNS=1.1.1.1 >> /etc/systemd/resolved.conf"
sudo systemctl restart systemd-resolved
```
### 4. Машина находится в другой сети по отношению к шлюзу
```
sudo sed 's/172\.16/192\.168/' -i /etc/systemd/network/ens18.network
sudo networkctl reload
```
### 5. На сетевом интерфейсе установлен MAC-дубликат шлюза
Установите родной mac `permaddr`:
```
sudo "ip link set address $(ip link show ens18 | grep permaddr | awk '{ print $6 }') dev ens18"
```
### 6. Неверные права папки .ssh пользователя mike
В 6ом задании `troublesome-X-task6` вам требуется отладить команду `ssh localhost -l mike`, запущенную от пользователя stud. Команда должна отработать без ввода пароля.
```
sudo chmod 0700 /home/mike/.ssh
```
Также желательно исправить группу-владельца:
```
sudo chown mike:mike /home/mike/.ssh
```
Loading…
Cancel
Save