You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

212 lines
12 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Решения
### 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