# OS Linux
## Занятие 2. Общие положения, терминал и системные утилиты. Домашнее задание.
>Выполнить первые 5 уровней https://overthewire.org/wargames/bandit/
Пароль bandit0:
bandit0
> ssh bandit0@bandit.labs.overthewire.org -p 2220
> ls
> cat readme

Пароль bandit1:
boJ9jbbUNNfktd78OOpsqOltutMc3MY1
>ls
>cat ./-

Пароль bandit2:
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9
>ls
>cat "spaces in this filename"

Пароль bandit3:
UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK
>ls -la
>cd inhere/
>ls -la
>cat ./.hidden

Пароль bandit4:
pIwrPrtPN36QITSp3EQaw936yaFoFgAB
>ls -la
>cd inhere/
>ls -la
>cat ./-file07

Пароль bandit5:
koReBOKuIDDepwhWk7jZC0RTdopnAYKh
>find . -type f -size -1034c -and -size +1032c
cat inhere/maybehere07/.file2

Пароль bandit6:
DXjZPULLxYr17uwoI01bNLQbtFemEgo7
>find / -type f -user bandit7 -group bandit6 -size -34c -and -size +32c 2>/dev/null
>cat /var/lib/dpkg/info/bandit7.password

Пароль bandit7:
HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs
>grep millionth data.txt

Пароль bandit8:
cvX2JJa4CFALtqS87jk27qwqGhBM9plV
>sort data.txt | uniq -u

Пароль bandit9:
UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR
>strings data.txt | grep '=='

Пароль bandit10:
truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk
>base64 -d data.txt

Пароль bandit11:
IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR
>tr 'A-Za-z' 'N-ZA-Mn-za-m' < data.txt

Пароль bandit12:
5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu
## Занятие 3. Домашнее задание.
>Настроить SSH подключение к Linux машине с помощью публичного ключа
Добавить еще один интерфейс на виртуальную машину (NAT) и настроить сеть для этого интерфейса по DHCP
Установить ПО для мониторинга сервера Linux
Генерируем пару ключей


Передаем на SSH сервер публичный ключ и затем подключаемся по ssh не вводя пароль

Добавляем в VBOX сетевой интерфейс, командой ip a выводим имя нового интерфейса и настраиваем его редактируя файл /etc/network/interfaces

Делаем рестарт(/etc/init.d/networking restart) и проверяем

Устанавливаем ПО для мониторинга сервера
Monitorix
>apt-get update
apt-get install monitorix
systemctl status monitorix

Запускаем веб интерфейс https://localhost:8080/monitorix

## Занятие 4. Практическая работа_1. Настройка сети в Linux (на примере Ubuntu)
- [ ] Научиться настраивать сеть.
Вариант 1 - через графический интерфейс.
Settings -> Network -> Wired -> IPv4
Вариант 2 - через конфигурационные файлы /etc/network/interfaces (/etc/network/interfases.d/*)
/etc/resolv.conf - DNS серверы
или в некоторых ОС, например, Ubuntu с версии 17.10
/etc/netplan/01-network-manager-all.yaml
- [ ] Изучить настройки и конфигурационные файлы.
- [ ] Настроить проводную сеть.
>sudo passwd root
(файл конфигурации sudo - /etc/sudoers и файлы в каталоге /etc/sudoers.d)
Чтобы не набирать каждый раз sudo можно набрать
>sudo su
Чтобы выяснить имя интерфейса набираем
>ls /sys/class/net/
Видим 2 интерфейса lo и ens33.
Можно отредактировать конфигурационный файл
>nano 01-network-manager-all.yaml
А также можно произвести настройки командой netplan set, что более безопасно.
Настройка динамического получения IP адреса выполняется командой
>netplan set ethernets.ens33.dhcp4=true
Затем применяем новые настройки командой
>netplan try или netplan apply
Проверяем что IP адрес получен по DHCP

В результате выполнения команды netplan set ethernets.ens33.dhcp4=true создается файл 70-netplan-set.yaml
Чтобы настроить статический IP адрес отредактируем его следующим образом

Команда netplan get выводит следующий результат:

Применяем изменения командой netplan try
и проверяем настройку статического IP адреса

Если сетевые настройки задаются через файлы /etc/network/interfaces (/etc/network/interfases.d/*)
(/etc/resolv.conf)
пример /etc/network/interfaces:
```
auto lo #интерфейс для loopback интерфейса
iface lo inet loopback #аналог Localhost
allow-hotplug ens33 #автоматически выполнять перезапуск интерфейса при его падении
auto ens33 #поднимать интерфейс автоматически при старте системы
#iface ens33 inet dhcp #получить адрес по DHCP
iface ens33 inet static #статический адрес
address 192.168.84.17 #IP адрес
netmask 255.255.255.0 #маска
network 192.168.84.0 #задаём адрес сети
broadcast 192.168.84.255 #задаём адрес для широковещательной рассылки
gateway 192.168.84.2 #шлюз
dns-nameserver 8.8.8.8 #задаём адреса DNS-серверов ```
```
а также если в /etc/netplan/*.yaml указана программа-обработчик networkd, а не NetworkManager,
то после изменения этих конфигурационных файлов необходимо перезагрузить сетевую службу командой
>sudo /etc/init.d/networking restart
Устанавливаем пакеты, содержащие ifconfig traceroute
>apt install net-tools traceroute
Проверяем настройку через ifconfig ens33

Назначим еще один IP адрес интерфейсу ens33
>ip address add 192.168.84.18/24 dev ens33

Удалим первый IP адрес
>ip address del 192.168.84.17/24 dev ens33

- [ ] Выполнить практическую работу по команде ip a .
https://hackmd.io/@IgorLitvin/SklxGVyXt

Изменяем и проверяем статус интерфейса

Добавляем маршрут к сети 192.168.3.0 и пингуем хост из этой сети

- [ ] Научиться работать с командой traceroute.
https://hackmd.io/@IgorLitvin/B11mb8JXK

## Занятие 4. Практическая работа_2. Настройка и конфигурация Linux-систем и прав доступа на базе Debian 11.
Добавляем пользователя user в группу sudo

для этого редактируем /etc/sudoers

подключаем в VBOX новый диск

создаем новый раздел на диске программой fdisk

форматируем диск командой
>sudo mkfs.ext4 /dev/sdc

монтируем диск командой
>sudo mount /dev/sdc /home/data

Чтобы диск автоматически монтировался при загрузке редактируем /etc/fstab добавляя в него строку /dev/sdc /home/data/ ext4 defaults 0 0

Другой способ монтирования это создание файла в каталоге /etc/systemd/systеm
Ниже приведен пример файла home-30GB.mount для монтирования диска /dev/sdb в каталог /home/30GB

Чтобы монтирование происходило автоматически при загрузке надо выполнить коману
>sudo systemctl enable home-30GB.mount

После перезагрузки проверяем что диски /dev/sdb и /dev/sdc автоматически примонтировались.

>Создать новую группу “CYB”.
Создать папку “23” в директории “Data”.
Назначить на данную папку “23” группу “CYB”.
Назначить права доступа таким образом на директорию “Data”, чтобы результат работы команды ls был отрицательным, пояснить вывод команды ls.

Если на каталог отсутствует право Read, то посмотреть его содержимое командой ls нельзя. Но если есть право X (eXecute), то можно перейти в этот каталог, а также, при наличии соттветствующих прав на вложенный каталог, перейти во вложенный каталог и просмотреть его содержимое.

>Создать нового пользователя.(sudo adduser test)
Назначить пароль.(sudo passwd test)
Включить нового пользователя в группу “mirea”(sudo usermod -aG mirea test)
Убедиться, что в домашнем каталоге создана директория с новым пользователем.(ls /home)
Залогиниться новым пользователем в Linux(su test).

>Установить SSH-сервер (сменить стандартный порт на любой другой) продемонстрировать подключение с linux на linux.
https://hackmd.io/@IgorLitvin/Hkz5b78MY



>Подключиться из Windows на виртуальную машинку Linux по SSH с помощью PuTTY
https://hackmd.io/@IgorLitvin/BJm5SfIMK

## Занятие 6. Управление сервисами. Практическая работа_3
Устанавливаем samba:
>sudo apt-get update
>sudo apt-get install -y samba samba-client
Создаем резервную копию файла конфигурации Samba:
>sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
Создаем директорию, к которой все пользователи будут иметь общий доступ:
>sudo mkdir -p /samba/public
Изменим режим доступа :
>cd /samba
sudo chmod -R 0755 public
Создадим каталог к которому будет иметь доступ ограниченное число пользователей:
>sudo mkdir /samba/private
Создадим группу пользователей, которые будут иметь доступ к приватным данным:
>sudo groupadd smbgrp
Создадим пользователей с помощью команды useradd:
>sudo useradd user1
Добавим созданных пользователей в группу:
>sudo usermod -aG smbgrp user1
Изменим группу, которой принадлежит приватная директория:
>sudo chgrp smbgrp /samba/private
Зададим пароль, с помощью которого пользователь будет подключаться к каталогу:
>sudo smbpasswd -a user1
Отредактируем файл конфигурации SMB:
>sudo nano /etc/samba/smb.conf
внеся в него следующие строки
```
[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
wins support = no
dns proxy = no
[public]
path = /samba/public
guest ok = yes
force user = nobody
browsable = yes
writable = yes
[private]
path = /samba/private
valid users = @smbgrp
guest ok = no
browsable = yes
writable = yes
```
Чтобы изменения вступили в силу надо перезапустить сервис:
>sudo service smbd restart

для подключения к папке private требуется аутентификация

Далее нужно настроить firewall, открыв порты, которые использует SAMBA.
Разрешим только подключения из локального диапазона IP-адресов:
>iptables -A INPUT -p tcp -m tcp --dport 445 –s 192.168.10.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 139 –s 192.168.10.0/24 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 137 -s 192.168.10.0/24 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 138 –s 192.168.10.0/24 -j ACCEPT
Теперь необходимо сделать так, чтобы указанные выше правила фаервола iptables были сохранены после перезагрузки машины. Для это установим пакет iptables-persistent:
>apt-get install iptables-persistent
После установки откроется окно с предложением последовать запомнить текущие правила iptables для IPv4 и IPv6. Подтвердите это действие.

Проверить актуальные правила iptables можно командой:
>iptables -L
В выводе команды должны увидеть ранее добавленные разрешающие политики (Accept).
Запретить остальные соединения можно коммандами:
>iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
## Занятие 8. Bash-scripts и автоматизация сервисов.
### Домашнее задание
- Создать bash-скрипт для присвоения всем файлам и папкам в текущей директории - одинаковых прав (текущий пользователь владелец имеет права RWX, остальные r--)
- Настроить скрипт - как сервис с автозапуском
- Настроить скрипт - для запуска каждый день в 14.00
- Разработка скриптов для реализаций разных стратегий резервного копирования (полная, дифференциальная/инкрементальная)


>touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Проверяем и перезапускаем:
>systemctl daemon-reload
systemctl start test-script.service
systemctl status test-script.service
Добавляем в автозагрузку:
>systemctl enable test-script.service
Настраиваем автозапуск:
>crontab -e

Скрипт для полного резервного копирования
```#!/bin/bash
#Daily backup script
#Create some needed variable
day=$(date +%F)
Folder="/root/bash/"
File="/home/data/Backup/$day.tar.gz"
#Backup Server Configuration
tar cpzf $File $Folder
#Remove backup files older than 90 days
find /home/data/Backup/* -mtime +90 -exec rm {} \;
```