# Linux Basics Модуль Занятие 5 ## Настройка и конфигурация файловых систем Linux и прав доступа на базе Debian 11 В этой работе будет происходить настройка машин Debian 11 с конфигурацией файловой системы (монтирование дисков к древу, а также изменение доступа к каталогам) вместе с настройкой SSH сервера. ### Об идеологии хранения файлов в операционных системах Идеология хранения данных строится на том, что для разных устройств хранения можно создавать разные файловые системы (это позволяет более эффективно использовать разные типы устройств хранения в зависимости от их плюсов и минусов). Кроме того, для того, чтобы отделять чисто пользовательские данные от системных, также может использоваться разделение физического диска на виртуальные разделы (partitions). Для разделов доступно создание разных файловых систем. По итогу получается, что пространство памяти устройства хранения может быть поделено на сегменты, каждый из которых сформатирован под свою собственную файловую систему. В ОС Windows каждый раздел обозначается заглавной буквой английского алфавита (и обращение к древу файловой системы на этом разделе происходит через эту букву). В дистрибутивах Linux ситуация немного отличается - все разделы и диски доступны в каталоге /dev, отвечающем за все устройсва, которыми управляет Linux. Все устройства и разделы представлены "блочными устройствами", организующими интерфейс взаимодействия программ с хранилищами вне зависимости от типа хранилища. Но для того, чтобы обратиться к папкам, которые находятся на этих носителях, нужно предварительно произвести монтирование раздела. Самое интересное заключается в том, что монтирование разделов хранилища можно произвести к любому каталогу в древе каталогов. Более того, разные разделы могут быть подмонтированы под разные директории, хранящиеся в двух отдаленных друг от друга концах древа котологов. Поэтому команда ls не дает описание физической структуры каталогов - того, на каких именно устройствах хранения расположены файлы и вложенные каталоги. Но зато Linux организует виртуальное файловове дерево, которое позволяет дотянуться до любого файла (в пределах прав доступа), вне зависимости от того, на каком хранилище он находится. Задачи этой работы включают подключение и настройку в Linux работы новых виртуальных дисков, а также сохранение информации о монтировании для восстановления древа каталогов после перезагрузки. 1. Установка Debian 11 Установим Debian 11 на VMWare и сразу после установки и настройки пользователей сделаем снимок операционной системы (при запущенной машине нужно нажать на значок часов с плюсом на верхней панели). ![](https://i.imgur.com/OTe9VCi.png) После взятия снимка у нас будет возможность вернуться на прошлое состояние системы, благодаря чему не придется с нуля переустанаваливать виртуальную машину при ошибке (обращение к окну - часы с гаечным ключом на верхней панели). ![](https://i.imgur.com/xHMAl07.png) 2. Добавление прав доступа Добавим права доступа для созданного пользователя. Контроль за правами происходит в файле /etc/sudoers. Используя права root, откроем его и пропишем в конец следующую строку ``` user ALL=(ALL:ALL) ALL ``` ![](https://i.imgur.com/WvRpWMz.png) ![](https://i.imgur.com/1fiZecm.png) 3. Добавление новых HDD Создадим два новых виртуальных диска небольшого размера (виртуальные диски представляют собой файлы, пути к которым даются виртуальной машине в качестве нового устройства). VMWare позволяет легко добавить дополнительные виртуальные диски к виртуальной машине. 3.1 Открыть окно настроек виртуальной машины и нажать кнопку Add... внизу ![](https://i.imgur.com/7bmFXOI.png) 3.2 Выбрать Hard Disk ![](https://i.imgur.com/sQ5X6f8.png) 3.3 Выбрать рекомендуемый тип диска (SCSI) ![](https://i.imgur.com/UaMoonv.png) 3.4 Выбрать тип используемого диска. Для виртуальной машины можно создать новый виртуальный диск или подключить уже существующий виртуальный или физический диски. Создадим новый виртуальный диск. ![](https://i.imgur.com/gmJhLTv.png) 3.5 Выбор размера и типа диска. Дополнительно можно разрешить VMWare делить виртуальный диск на несколько файлов. ![](https://i.imgur.com/gTWjdpe.png) 3.6 Выбор расположения диска ![](https://i.imgur.com/8A327wR.png) 4. Посмотрим на добавленные диски. Linux уже по умолчанию добавляет диски в виде блочных устройств, но никак не организует их внутреннюю структуру. Мы можем использовать команду `fdisk -l` чтобы посмотреть все подключенные диски, их размер и разбиение на разделы. Вывод этой команды также показывает пространство, которое было выделено при создании машины (диск /dev/sda). Это пространство уже разбито на разделы, один из разделов помечен как загрузочный, и с него происходит загрузка ядра операционной системы. ![](https://i.imgur.com/qLYLdXq.png) 5. Создадим папки, к которым нужно произвести монтирование новых дисков ![](https://i.imgur.com/t6ruHf0.png) 6. Произведем первичную настройку дисков. Перед монтированием следует создать разделы на подключенных дисках. Для этого нам нужно добавить раздел через fdisk. При использовании команды с именем диска будет открыт текстовый интерфейс утилиты, который позволяет работать с разделами на дисках. Выполнение операций происходит с помощью букв. Буква *m* выдаст справку обо всех других буквах. Нашей задачей является создание нового раздела. Делается это с помощью буквы *n*. Далее утилита предлагает выбрать тип раздела (мы будем создавать 1 раздел на диске, поэтому можно выбрать начальный раздел, или букву *p*), а также индексы начала и конца раздела (оставляем по умолчанию). После следует сохранить выполненные изменения через букву *w* ![](https://i.imgur.com/kO3XM1R.png) 7. Посмотрим на полученные изменения. Используется команда `lsblk` ![](https://i.imgur.com/UJbfase.png) Как видно, у диска sdb появился новых раздел sdb1 Информацию о разделе мы также увидим при использовании команды `fdisk -l` ![](https://i.imgur.com/EeFrWjY.png) 8. Повторим 6 пункт для диска второго добавленного диска ![](https://i.imgur.com/lspSb8O.png) 9. Теперь отформатируем разделы на дисках. Для этого нужно создать на диске новую файловую систему (делается командой `mkdf -t type /path`), где - type - тип файловой системы - path - путь к разделу ![](https://i.imgur.com/LJ0YNTF.png) ![](https://i.imgur.com/jjGzSQu.png) 10. Теперь произведем монтирование разделов к древу каталогов. Монтирование делается с помощью команды mount, которая принимает набор опций, устройство или раздел, которые надо монтировать и путь к каталогу, в который будет произведено монтирование. Т.к. одна из файловых систем должна быть доступна только на чтение, опцией для одной из команд монтирование станет *-r* ![](https://i.imgur.com/hpvb1ux.png) ![](https://i.imgur.com/C7dzChm.png) 11. Проверим итоговые настройки ![](https://i.imgur.com/wTGjh7z.png) Мы можем видеть, что mountpoint для добавленных разделов поставлена папками /Data и /bigData. 12. Теперь проверим возможность изменения данных в разделе, подключенном только для чтения ![](https://i.imgur.com/nDhW2c1.png) 13. Создадим папку в /Data и примонтируем к ней папку /bigData. Для этого используется утилита *mount* с дополнительной опцией *--bind* ``` mount --bind /path1 /path2 ``` ![](https://i.imgur.com/orwoLBn.png) 14. Добавим группу PT и создадим нового пользователя, которому будет запрещено взаимодействие со всем носителем, кроме отдельной папки. Также проверим, что папка для нового пользователя создана ![](https://i.imgur.com/sUrjhA8.png) ![](https://i.imgur.com/6wGkhRe.png) ![](https://i.imgur.com/0NhuFYq.png) 15. Создадим в папке /Data еще одну папку, которая будет принадлежать группе PT и к которой сможет получать доступ созданный пользователь ![](https://i.imgur.com/S5iB2CW.png) ![](https://i.imgur.com/qUxKWTp.png) 16. Изменим права доступа к /Data так, чтобы другие пользователи не могли просматривать каталог, но не распространим правило на подкаталоги ![](https://i.imgur.com/fqX2oKf.png) 17. Теперь новый пользователь сможет обращаться к папке внутри /Data, но не сможет посмотреть саму папку /Data ![](https://i.imgur.com/xSFNGVu.png) 18. Установим SSH сервер 18.1 Произведем установку нужных пакетов, если раньше она не была произведена ``` sudo apt install ssh ``` 18.2 Откроем файл /etc/ssh/sshd_config, отвечающий за настройки сервера SSH. В нем нужно изменить порт (отличный от 22), тип прослушиваемых адресов (поставить inet, отвечающий за адреса IPv4), отключить вход в root, а также включить вход по публичным ключам ![](https://i.imgur.com/BLLLrpy.png) 18.3 После установки всех значений можно перезагрузить сервис sshd, отвечающий за сервер SSH ``` sudo systemctl restart sshd sudo systemctl status sshd ``` ![](https://i.imgur.com/TD61h18.png) 18.4 Теперь зайдем в Linux под другим пользователем и сгенерируем его публичный и приватный ключи ``` ssh-keygen ``` ![](https://i.imgur.com/23Yki7C.png) 18.5 Теперь переместим публичный ключ на сервер SSH ``` ssh-copy-id -i ~/.ssh/id_rsa.pub -p 54321 user1@debian1 ``` ![](https://i.imgur.com/o1dyBTy.png) 18.6 Перемещаем ключ на хостовую операционную систему и открываем ключ в PuTTygen, позволяющем преобразовать ключ в читаемый PuTTy вид ![](https://i.imgur.com/bMp9dJ7.png) ![](https://i.imgur.com/AgUelfq.png) ![](https://i.imgur.com/ZNjjthL.png) 18.7 Теперь открывает PuTTy, отдаем ему приватный ключ и используем для входа IP-адрес сервера и установленный ранее порт ![](https://i.imgur.com/BXwCtGs.png) ![](https://i.imgur.com/bGOybO4.png) ![](https://i.imgur.com/Q6W3Ie1.png) После нажатия *Open* запустится SSH-сессия. Нужно будет ввести кодовую фразу для расшифровки приватного ключа. ![](https://i.imgur.com/6F7i2b9.png) Теперь можем проверить, есть ли у пользователя доступ к папкам на сервер ![](https://i.imgur.com/6dMrAn1.png) Также нам нужно отключить вход по паролю, т.к. публичный ключ уже перенесен на сервер. Заходим в root-а и открываем конфигурационный файл sshd. ![](https://i.imgur.com/pY9lOOe.png) В нем нужно отключить вход по паролю (вход по публичным ключам останется). После перезапускаем сервис и проверям его работу. ![](https://i.imgur.com/yGG0GYw.png) 19. Сохранение настроек Произведенные действия с монтированием разделов не сохранятся при перезапуске сервера. Нам нужно прописать информацию о монтированных разделах в файл /etc/fstab, отвечающий за монтирование всех разделов хранилищ. Записи в файле fstab выглядят следующим образом: <хранилище> <точка монтирования> <тип ФС> <настройки монтирования> <проверка устройства и бит копирования> Для того, чтобы сохранить монтирование после перезагрузки, нам нужно узнать UUID разделов, после чего можно будет прописать их настройки в fstab. Узнать UUID можно с помощью команды blkid ![](https://i.imgur.com/7G7qo8M.png) Эти данные можно использовать, чтобы построить записи для монтирования при перезагрузке ![](https://i.imgur.com/hOW8CbJ.png) Опция defaults производит настройку по умолчанию Опция ro оставляет режим доступа до раздела только для чтения Теперь перезагружаемся и проверяем, что все работает ![](https://i.imgur.com/ddb28DU.png) Монтирование не пропало, а второй пользователь также не имеет доступа до всего раздела, примонтированного в /Data.