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