Лабораторные работы по операционным системам линукс

Лабораторная работа 1. Изучение базовых команд Linux.¶

Основные теоретические сведения¶

Цель: Первичное знакомство с командным интерпретатором. Изучение базовых команд операционной системы Linux.

Теоретическая часть:

Среди всех элементов операционной системы Linux самым важным, является командная строка (Терминал). Оболочка во многом определяет богатые возможности и гибкость операционной системы Linux. С помощью командной строки можно выполнять действия, которые были бы немыслимы при работе с графическим пользовательским интерфейсом. Независимо от того, KDE или GNOME, оказывается, что многие действия гораздо быстрее и эффективнее выполнить, пользуясь только командной строкой. Освоение Linux стоит начинать с изучения средств командной оболочки.

Файлы и ничего кроме файлов

Все, с чем Вы встретитесь в операционной системе Linux, — это файлы. Абсолютно все! Очевидно, что текстовый документ — это файл. Изображения, аудиоданные в формате МР3 и видеофрагменты — это несомненно файлы. Каталоги — это тоже файлы, содержащие информацию о других файлах. Дисковые устройства — это большие файлы. Сетевые соединения тоже файлы. Даже исполняемый процесс — это файл. С точки зрения операционной системы Linux файл представляет собой поток битов или байтов. Система не интересуется тем, что означает каждый байт. Это забота конкретных программ, выполняющихся в операционной системе Linux. Для операционной системы Linux и документ, и сетевое соединение всего лишь файлы. Как обрабатывать текстовый документ, знает редактор, а сетевое приложение умеет работать с сетевым соединением.

В отличие от Windows и МасOS в операционной системе Linux имена файлов чувствительны к регистру символов. В частности, Вы можете встретить в одном каталоге все три файла которые приведены ниже в качестве примера:

С точки зрения файловой операционной системы Linux — это различные имена файлов. Если вы попытаетесь создать файлы с этими же именами в Windows или МасOS, то вероятнее всего попытка увенчается провалом, и система предложит Вам выбрать другое имя для файла.

Чувствительность к регистру символов также означает, что при вводе команд они должны в точности совпадать с именами файлов, поддерживающих их. Так, например, удаляя файл с помощью команды rm, нельзя вводить RM, Rm или rM. Надо также следить за написанием имен, задаваемых в качестве параметров. Если вы захотите удалить файл «SIT.txt», а укажете имя Sit.txt, вы лишитесь совсем не того файла, с которым предполагали расстаться.

Список специальных символов которые не рекомендуется использовать в названиях файлов.

Групповые операции:

Предположим, что в одном из каталогов на вашем компьютере содержатся сто файлов с изображениями и два текстовых файла. Ваша задача удалить все файлы с изображениями за исключением двух текстовых файлов. Удалять файлы по одному — это утомительное занятие. В операционных системах Linux для автоматизации данного процесса можно применять символы групповых операций. Групповые операции задаются посредством звездочки (*), знака вопроса (?) и квадратных скобок ( [ ] ).

Пример использования групповых операций:

Групповая операция с применение » * » — отмечает любое (в том числе нулевое) количество любых символов.

Групповая операция с применение » ? «. Символ » ? » — соответствует одному произвольному символу.

Групповая операция с применение » [] «. Квадратные скобки позволяют задавать один символ из набора или символ, принадлежащий определенному диапазону.

Консольные команды:

  • $ pwd — определить текущий каталог.
  • $ cd [имя каталога] — осуществить переход в заданный каталог.
  • $ ls [имя каталога] — просмотреть список файлов и подкаталогов.
  • $ mkdir [имя каталога] — создать каталог с заданным именем.
  • $ cp — скопировать файл «имя файла 1» в файл «имя файла 2», например: cp first.txt copy1.txt.
  • $ mv — переименовать файл «имя файла 1» в файл «имя файла 2», например: mv first.txt orig.txt.
  • $ ln «имя файла» «имя ссылки» — создать жёсткую ссылку «имя ссылки» на файл «имя файла». Пример: ln orig.txt copy2.txt.
  • $ ln -s «имя файла» «имя ссылки» — создать символическую ссылку «имя ссылки» на файл «имя файла». Пример: ln -s orig.txt copy2.txt.
  • $ rm — удалить файл.
  • $ touch — создание файла.
  • $ man — получение справочной документации о выбранной команде.

Задания к лабораторной работе¶

  • Откройте терминал.
  • Ознакомьтесь с возможностями команды pwd c помощью команды man:
  • Определите текущий каталог, в котором вы находитесь командой pwd:
  • Ознакомьтесь с возможностями команды cd c помощью команды man:
  • Перейдите в корневой каталог командой cd
  • Ознакомьтесь с возможностями команды ls c помощью команды man:
  • Просмотрите содержимое корневого каталога командой ls:
  • Сделайте копию экрана для использования в отчете по лабораторной работе .
  • Вернитесь в домашний каталог, используя команду cd без параметров:
  • Ознакомьтесь с возможностями команды mkdir c помощью команды man:
  • Создайте каталог «test», используя команду mkdir:
  • Перейдите в каталог «test», используя команду cd:
  • Просмотрите содержимое каталога, используя команду ls:
  • Создайте каталог «test2», используя команду mkdir:
  • Ознакомьтесь с возможностями команды touch c помощью команды man:
  • Создайте файл «text» в каталоге «test2» используя команду touch:
  • Ознакомьтесь с возможностями команды mv c помощью команды man:
  • Переименуйте файл «text» в «textSIT» используя команду mv
  • Ознакомьтесь с возможностями команды cp c помощью команды man:
  • Скопируйте файл «textSIT» в каталог «test2» под именем «copy.txt», используя команду cp:
  • Ознакомьтесь с возможностями команды ln c помощью команды man:
  • Создайте жесткую ссылку «link» на файл «copy.txt» используя команду ln:
  • Создайте символическую ссылку «simlink» на файл «copy.txt» используя команду ln:
  • Просмотрите результаты в текущем каталоге при помощи команды ls с аргументами la:
  • Сделайте копию экрана для использования в отчете по лабораторной работе .
  • Удалите созданные вами файлы и ссылки в лабораторной работе используя команду rm
  • Сделайте копию экрана для использования в отчете по лабораторной работе .
Читайте также:  Windows phone free browser

Вопросы к лабораторной работе¶

  1. Чем отличается вывод команд ls -F и ls -la?
  2. С помощью какой команды и как можно переместить файл в другой каталог?
  3. Какие действия вы совершаете, нажимая на кнопки «стрелка вверх» и «стрелка вниз»?
  4. Куда вы переходите, выполнив команду cd без параметров?
  5. Как посмотреть, какие еще параметры можно задать команде ls?
  6. Что такое «жесткая ссылка»?
  7. Что такое «символическая ссылка»?
  8. Как осуществить просмотр подкаталогов и их содержимого ?
  9. Как осуществить вывод содержимого каталога с запятыми в качестве разделителя?
  10. Как осуществить просмотр скрытых файлов в домашнем каталоге?
  11. Как осуществить создание нового каталога и необходимых подкаталогов рекурсивно?
  12. Как осуществить рекурсивное копирование всех файлов из одного каталога в другой?
  13. Как осуществить рекурсивное копирование всех файлов и подкаталогов из одного каталога в другой?
  14. Как рекурсивно удалить все файлы и подкаталоги в определенном каталоге?

Составьте отчет о выполнении лабораторной работы.

Включите в него копии экрана и ответы на вопросы лабораторной работы.

© Copyright 2016, Пантюхин Игорь Сергеевич, Университет ИТМО.

Источник

Лабораторная работа «Обучаемся настраивать сети в GNU/Linux»

Никто не любит длинные вступления, поэтому сразу к сути.
В данной импровизированной лаборатории я хотел бы осветить работу с сетями в GNU/Linux
и рассмотреть следующие темы:

  1. Изучаем vlan. Строим сеть между vm1, vm2 в одном vlan. Пингуем, ловим пакеты, изучаем заголовки.
  2. Разбиваем vm1 vm2 на разные vlan. Настраиваем intervlan routing с помощью R1.
  3. Iptables. Настраиваем маскарад. Имитируем выход во внешние сети.
  4. Iptables. Настраиваем port forwarding для сервисов на vm1 и v2, которые находятся за NAT.
  5. Iptables. Настраиваем security zones. Изучаем tcp сессии.

З.Ы. все люди ошибаются, я открыт для ваших комментариев, если я написал какую-то глупость, готов ее исправить!

Дано: локальная сеть, состоящая из VM1,VM2. Роутер R1 (тоже виртуальная машина), веб сервер S1.
Скачать готовую виртуалку для этой лабораторки можно с яндекс диска
Т.к. я попытался подать данную статью как урок, то по большей части я не пишу команды текстом, а делаю скриншот, чтобы их вбивали своими руками. Это помогает лучше разобраться и быстрее запомнить. Я вполне понимаю что это неудобно, но я решил выбрать такой подход.

Для остальных 3-х настройки аналогичны.

I. Изучаем vlan. Строим сеть между vm1, vm2 в одном vlan. Пингуем, ловим пакеты, изучаем заголовки.

Запускаем vm1 и vm2 и смотрим интерфейсы в нашей системе командой (сокращенно ip a)

ip link add — добавить устройство
link eth0 — соединить с ФИЗИЧЕСКИМ адаптером eth0
name eth0.100 — имя устройства в списке. Это имя можно выбрать любым, но для собственного удобства мы выбрали имя физического интерфейса и номер vlan. так то точно не запутаемся
type vlan — тип создаваемого интерфейса. Оно работает с 8021q — тип vlan
id 100 — собственно сам id vlan

Теперь присвоим этому интерфейсу ip адрес:

короткий вид записи:

И выполним включение интерфейса командой:

Подведем итог: мы создали на 2 машинах в 1 локальной сети 2 тегированных интерфейса в 100-том vlan-е и проверили связность между ними.

Проверяем, что все это не ложь и провокация! Запустим на VM1 слушателя и постучимся на него с VM2 и проснифаем траффик.
1. на VM1 запустим
nohup nc -lvp 3000 &
tcpdump -n host 10.10.10.20 -i eth0 -e

Читайте также:  Ftb launcher windows 10 как пользоваться

2. на VM2 запустим
nc 10.10.10.10 3000

Видим в заголовках канального уровня vlan 100. Значит пакеты по сети реально ходят с тегами и это не выдумки матушки гусыни.

II. Разбиваем vm1 vm2 на разные vlan. Настраиваем intervlan routing с помощью R1.

Теперь переходим к пункту №2 — разобьем эти 2 виртуалки на разные vlan и настроим роутер.
На VM1:
добавить интерфейс eth0.200 c тегом 200 и присвоить ему адрес 192.168.0.2
на VM2:
добавить интерфейс eth0.300 c тегом 300 и присвоить ему адрес 172.16.0.2
(Самостоятельно)

Проверяем связность. Пингуем с роутера 192.168.0.2 и 172.16.0.2. (Кстати говоря вот тут была небольшая проблема, т.к. я ошибся в настройке eth0.300 на VM2.

Итак, мы получили связность между VM1,R1 и VM2,R1. Попробуем связать VM1,VM2 через R1.
Для того чтобы наш Router получил возможность форвардить пакеты между интерфейсам нужно разрешить ему это. Необходимо раскомментировать директиву net.ipv4.ip_forward = 1 в файле /etc/sysctl.conf и применить изменения командой sysctl -p.

А теперь самое главное. Нужно настроить маршрутизацию. Есть 3 распространенных способа это сделать:
1. указать маршрут по умолчанию. т.е. мы не знаем где у нас находится destination ip, поэтому все пакеты не принадлежащие локальной сети шлем на роутер.
2. указать шлюз для конкретной подсети. Это нужно делать если сети доступны за разными маршрутизаторами.
3. указать интерфейс, за которым находится тот кто примет пакет. Такая ситуация у меня возникала, например при необходимости в ЦОДе смаршрутизировать подсеть. Т.е. Была виртуалка-роутер на внешний адрес которой датацентр статически маршрутизировал выделенную мне подсеть. Тогда я просто указал что ip адеса этой подсети находятся на одним из торчащих внутрь интерфейсов роутера. Пакеты слались в этот интерфейс и принимались на той стороне виртуалками, которым и были назначены эти белые адреса. т.е. в данной ситуации указывать шлюз было совершенно необязательно.
посмотрим список маршрутов на VM1:

добавим маршрут к подсети 172.16.0.0/24:

via — значит через кого. т.е. отправляем пакеты хосту 192.168.0.1, он разберется.
Просматривая таблицу маршрутизации принимается следующее решение:
1. Кому предназначен данный пакет? хосту 172.16.0.2
2. Кому отправить пакет 172.16.0.2? хосту 192.168.0.1
3. Что мы знаем о хосте 192.168.0.1? он directly connected. Эта подсеть наша. формируем на канальном уровне mac адрес источника, mac адрес хоста 192.168.0.1, ip источника — 192.168.0.2, ip адрес назначение 172.16.0.2, и отправляем через интерфейс eth0.200. Как говорил автор подкаста «сетей для самых маленьких», дальшейшая судьба пакета нас не волнует.
Попробуем пропинговать шлюз соседнего vlan:

Получим один и тот же результат. И в итоге теперь VM1 свободно пингует VM2. Ура!

Подведем итог: Мы научились выполнять маршрутизацию между 2 vlan с помощью linux-роутера.

III. Iptables. Настраиваем маскарад. Имитируем выход во внешние сети.

Добавляем некий публичный сервер S1. на нем я поставлю apache2 (apt install apache2) и буду имитрировать веб-сервер в интернете. Тогда как наши VM1,VM2 — приватные машинки, которые находятся за роутером. Роутер вторым интерфейсом смотрит в импровизированный интернет.
Добавим 2-й интерфейс для R1 — eth1 и уже без VLAN настроим ему ip адрес 8.8.8.100, а на S1 — 8.8.8.8

Если вы повторяете за мной в том числе и настройку VBOX, не забудьте добавить в br1 обе сетевые карты и на S1 и на R1. Bridge интерфейс в системе можно создать командой
.
Но вообще сделать всю лабу можно сделать и на одном любом интерфейсе ничего не создавая.
Я акцентирую разделение для того чтобы имитировать bridge = как бы коммутатор.

После настройки S1, R1 проверяем связность — выполним ping 8.8.8.8 — с R1 он должен работать. При этом если мы будем пинговать с VM2, то пинга не будет.

Потому что S1 не знает о сети 172.16.0.0. добавим наш R1 как шлюз по умолчанию для S1:

Кроме того, если мы будем пинговать сервак с VM1 то он вообще скажет что сеть недоступна.

Исправим это прописав gateway:

Теперь все 4 машинки прекрасно пингуют друг друга. Но так быть не должно. Серые адреса не должны выходить в интернет! И та сеть, куда смотрит вторым интерфейсом R1, не должна знать где находятся адреса 172.16.*.*, 192.168.*.*.
Удалим deafult gw с S1:

Подведем итог: мы научились прописывать маршруты до необходимых нам сетей, а также узнали как «прятать» серые адреса за маршрутизатором, выпуская «наружу» весь трафик только через один белый адрес.

Настало время поговорить о NAT. NAT (от англ. Network Address Translation — «преобразование сетевых адресов») — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. Также имеет названия IP Masquerading, Network Masquerading и Native Address Translation. Мы рассмотрим маскарадинг. это SourceNAT (SNAT) && DestinationNAT (DNAT).
Что нам от NAT вообще нужно? А нужно нам, чтобы исходящий в сторону S1 пакет получал в качестве source ip адрес маршрутизатора, а когда возвращался обратно — получал адресом назначения вновь адрес виртуалки.

Читайте также:  Количество логических процессоров windows

Настроим маскарад для подсети 17.16.0.0/24 — выполним на роутере команду:

Я не буду расписывать подробно как работают iptables, т.к. это много и много буков и эта статья явно не для этого. Вот очень неплохая статья на изучение.
Обращу только внимание на ! -d 172.16.0.0/24 : зачем это нужно. Это нужно для того чтобы хосты из подсети 172.16.0.0/24, которые потенциально могли бы находиться за маршрутизатором (например удаленные vpn клиенты) не попадали бы под действие этого правила.
Посмотреть полученный результат можно командой iptables-save

Итак, чего мы достигли? Мы настроили маскарад для VM2. Это значит что когда она будет стучаться к S1, то S1 увидит адрес не VM2, а адрес роутера! Парочка пруфов:

Ядро в зависимости от направления пакета обрабатывает его и подставляет правильные ip адреса. А вот если мы сделаем то же самое с VM1, то S1 увидит серые адреса. и просто не ответит на данный запрос. Посмотрите на это самостоятельно. Напомню, что GW на S1 необходимо удалить.

Подведм итог: Мы скрыли наши серые сети и выпустили хосты за роутер, подменив ip адеса источников на адрес роутера. И в другую сторону — мы научились пробрасывать определенный порт определнной виртуалки «наружу» и смогли подключиться к серому адресу виртуалки VM1 из «публичной» сети с сервера S1.

IV. Iptables. Настраиваем port forwarding для сервисов на vm1 и v2, которые находятся за NAT

Сымитируем, что S1 — некий клиент из интернета и он хочет подключиться к VM1 (тот клиент, до которого нет ни маршрута, ни настроен маскарад). Пусть это будет попытка подлючиться по ssh. SSH по дефолту висит на 22 порту, но если у нас таких серваков будет больше 1, то как быть? Вообще по-хорошему чтобы избавиться от самых простых сканеров сети, ssh нужно всегда убирать с 22 порта. Воспользуемся портом 30022, например, чтобы обратиться по ssh к VM1.

Как это работает?
S1 отправляет пакет (s.ip=S1.ip, d.ip=R1.ip; s.port=N, d.port=30022) который прилетает на R1.
R1 Просматривает iptables и применяет правило DNAT, и формирует пакет (по нашему правилу): (s.ip=S1.ip, d.ip=VM1.ip; s.port=N, d.port=22)
Просматривает таблицу маршрутизации и отправляет пакет vm1 через интерфейс eth0.200.

VM1 в свою очередь принимает пакет, получает data, и формирует ответ: (s.ip=VM1.ip, d.ip=S1.ip; s.port=22, d.port=N).
R1 принимает пакет и восстанавливает исходный s.ip к которому изначально обратился s1:
(s.ip=R1.ip, d.ip=S1.ip; s.port=22, d.port=N)

Достичь этого можно следующим образом:

Подведм итог: мы научились предоставлять доступ к сервисам, расположенным на виртуальных машинах за неким роутером (иначе можно сказать — к виртуалкам за NAT’ом — что как раз чаще всего и нужно)

V. Iptables. Настраиваем security zones. Изучаем tcp сессии.

И последнее, что я хотел бы рассмотреть в данном занятии — tcp сессии и направление установки этих сессий. Так, например, рассмотрим 2 сегмента: серверный и клиентский. Клиент, например, должен иметь возможность «сходить» в серверный сегмент к контроллеру домена. А вот контроллеру домена делать на клиентской машине нечего. Таких примеров можно придумать множество и ситуации почему из одного сегмента сети в другой ходить можно а наоборот нет — тоже. Зачем же может это понадобиться? Например у нас есть веб сервер, который «смотрит» в интернет и им «завладел» злоумышленник. С этого сервера он вполне может попробовать постучаться в корпоративную сеть. Однако, если запретить устанавливать сессии из этого сегмента — этого не произойдет. Т.е. мы по крайней мере усложняем злоумышленнику жизнь. Давайте добавим правило, которое запретит ходить VM2 к VM1, а VM1 к VM2 — можно.

Почему так происходит? В момент установления TCP сессии прилетает пакет TCP SYN (на него отвечается SYN ACK, а потом ACK и сессия считается установленной). первое правило которое мы записали (c NEW) разрешает форвардить пакеты TCP SYN из сети 192.168.0.0 в 172.16.0.0.
Когда второй участник отвечает на этот и любой последубщий пакет, то попадает под действие 2 правила об установленных сессиях и такие пакеты из сети 172.16.0.0 проходят. А вот если он сам попробует установить сессию (или просто пингануть) то не попадет по 1,2 правило, а попадет под 3-е, которое дропнет этот пакет. Voila!

Подведем итог: Мы научились управлять направлениями установки tcp сессий для контроля направления трафика между зонами безопасности.

Источник

Оцените статью