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.

12 KiB

Решения

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? Влияет ли на возможность удаления наличие в папке файлов?

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.

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.

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. Повторите создание папки и файла и сравните атрибуты файлов, созданных с разными масками.

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 со следующим содержимым:

#!/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 создайте файл 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