1. Практика
Задачи:
- Подключиться к облачной инфраструктуре.
- Убедиться в наличии доступных сетей.
- Создать виртуальную машину.
- Настройка правил безопасности.
- Узнать адрес виртуальной машины.
- Подключиться к ВМ по ssh
- Установить пакет vim
- Пройти обучение работе с vim.
- Выполнить базовые действия с файлами и папками.
- Установить пакет wget.
- Научиться работать с переменными окружения.
- Создать нового пользователя и подключиться к нему. Поменять shell у пользователя.
- Изучить работу с текстом в Bash.
1. Подключиться к облачной инфраструктуре.
Необходимо перейти по ссылке https://cloud.resds.ru. Для подключения использовать домен AD, а также учётную запись пользователя, используемую для подключения к WiFi СПбГУТ
Для выполнения практических занятий необходимо переключиться на проект {username}.dev.
2. Убедиться в наличии доступных сетей.
Открыть: проект -> сеть -> сети, и убедиться, что там есть сеть external-net (рис. 2)
3. Сгенерировать ключевую пару.
4. Создать виртуальную машину.
В открывшемся окне (рис. 6), во вкладке подробности ввести имя инстанса и нажать Следующая > внизу страницы.
В следующем меню (Источник) выбрать источник – образ, указать размер тома данных, выбрать удаление диска при удалении инстанса, выбрать необходимый вам образ из доступных (например Ubuntu-server-20.04:docker), и нажать справа от него стрелку вверх (рис. 7)
В следующем меню (тип инстанса) определить объем выделяемых виртуальной машине вычислительных ресурсов. Для этого нужно выбрать один из предопределённых типов инстансов (например small), и нажать справа от него стрелку вверх (рис. 8).
В меню сети выбрать нужную вам сеть, к которой будет подключена виртуальная машина (наличие сети было проверено в п.1). Если в инфраструктуре доступна только одна сеть, она будет выбрана автоматически, и выбирать ничего не нужно. (рис. 9)
Затем перейти к меню Ключевая пара, выбрать созданную ключевую пару, и нажать справа от неё стрелку вверх. (рис. 10)
После выполнения всех действий - нажать справа снизу кнопку «запустить инстанс» для создания и запуска виртуальной машины.
5. Настройка правил безопасности.
В открывшемся меню добавить правило для входящего трафика (рис. 12)
В открывшемся меню добавления правил (рис. 13), добавить правило для порта 80(tcp) Для этого выбрать: Правило: «Настраиваемое правило TCP» Направление: Входящий трафик Порт: 80 Формат записи подключаемого диапазона адресов: CIDR Сам подключаемый диапазон адресов: 0.0.0.0/0 Последняя запись означает разрешение подключения с любого адреса
После заполнения всех полей нажать кнопку «Добавить» в правом нижнем углу.
Тоже самое необходимо сделать для всех остальных портов.
6. Узнать адрес виртуальной машины.
7. Подключиться к ВМ по ssh
Linux
Для подключения в большинстве дистрибутивов уже установлены SSH-агенты и для подключения используя ключ достаточно добавить его в агент.
Для этого нужно выполнить команду, где pemkey.pem, это файл полученный вами на 3 пункте данной инструкции
ssh-add pemkey.pem
Для подключения в данном случае в терминале достаточно ввести команду:
ssh cloudadmin@172.17.5.1
адрес 172.17.5.1 необходимо заменить на ваш адрес полученный из пункта 6 инструкции
Windows 10 OpenSSH
В Windows 10 c версии 1809 включен пакет OpenSSH, проверить это можно с помощью команды (выполняется с правами администратора):
Дальнейшие действия выполняются в PowerShell
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'
Если SSH клиент отсутствует (State: Not Present), его можно установить:
Add-WindowsCapability -Online -Name OpenSSH.Client*
Далее необходимо включить SSH-агент:
Start-Service ssh-agent
Добавить ключ можно с помощью команды:
ssh-add "C:\Users\{username}\.ssh\id_rsa"
username - имя вашего пользователя в системе
Теперь вы можете подключиться используя команду:
ssh cloudadmin@172.17.5.1
адрес 172.17.5.1 необходимо заменить на ваш адрес полученный из пункта 6 инструкции
8. Установка пакета VIM
Для установки, удаления, обновления пакетов в Ubuntu используется утилита apt
. В процессе установки/обновления/удаления пакетов нужно будет подтвердить установку новых версий, нажав y. Или же использовать флаг -y. Необходимо установить пакет vim, в котором содержится необходимое обучающее руководство.
sudo apt install -y vim
9. Пройти обучение работе с vim
Ввести в консоли следующую команду, для запуска интерактивного обучающего курса по работе с VIM:
vimtutor ru
Пройти интерактивный курс до конца.
Задание 10. Работа с файловой системой.
- Создать директорию task01. Перейти в неё.
mkdir task01
cd task01
- Создать в домашнем каталоге текстовый файл user при помощи текстового редактора
vi
, и заполнить его произвольными символами.
vi user
- Скопировать файл
user
в новый файл с именемroot
.
cp user root
- Посмотреть права доступа на файлы можно с помощью команды:
ls -l
- Задать владельца root и группу root на файл root. (sudo позволяет выполнять команды от
root
; ввести пароль в диалоговом окне, при этом символы отображаться не будут; пароль -labpass1!
)
sudo chown root:root root
- Переименовать (т.е. переместить с новым именем) файл
user
в файлlock
.
mv user lock
- На файл root поставить доступ на чтение и запись группе и владельцу остальным только на чтение.
sudo chmod 664 root
- На файл lock поставить доступ на чтение владельцу, группе и остальным пользователям убрать доступ на чтение запись и исполнение.
chmod 600 lock
- Вывести содержимое файла root в терминал.
cat root
- Отредактировать файл root случайным образом и вывести его содержимое в консоль.
sudo vi root
cat root
- Удалить каталог task01.
cd
sudo rm -rf task01
Задание 11. Установка пакетов.
Для установки, удаления, обновления пакетов в Ubuntu используется утилита apt
.
В процессе установки/обновления/удаления пакетов нужно будет подтвердить установку новых версий, нажав y
. Или же использовать флаг -y
.
Для установки/удаления пакетов существуют команды:
sudo apt install -y package_name
sudo apt remove -y package_name
В качестве примера необходимо установить программу для скачивания файлов по web-протоколам - wget
.
sudo apt install wget
Можно проверить версию установленного пакета:
wget –-version
Задание 12. Создание пользователей.
Создать нового пользователя newuser с паролем newpass1!
. Сделать его администратором.
sudo adduser newuser
sudo passwd newuser # Ввести пароль newpass1!, при этом пароль отображаться не будет
sudo usermod -aG sudo newuser # Добавить пользователя newuser в группу sudo, что даст ему права на исполнение команд с sudo
Для того чтобы выполнять команды от имени пользователя newuser
, необходимо сменить текущее окружение на окружение пользователя newuser командой - su
. При этом нужно будет ввести пароль пользователя newuser
.
su - newuser
Имя пользователя изменилось с labuser
на newuser
. Также, имя пользователя хранится в переменной окружения $USER
. Просмотреть значение переменной можно с помощью команды echo
.
echo $USER
Чтобы узнать, в каких группах состоит текущий пользователь, используется команда groups
. В данном случае это должны быть группы newuser
и sudo
.
groups
Для выхода из оболочки используется команда exit
. При этом выход идет в оболочку, запущенную пользователем labuser
.
exit
Теперь нужно сменить оболочку, запускаемую по умолчанию при входе пользователя newuser
. Чтобы узнать список доступных в системе оболочек, используется следующая команда:
cat /etc/shells
Сейчас должна быть запущена оболочка /bin/bash
. Чтобы узнать, какая оболочка запущена сейчас, можно вывести на экран значение переменной $0
.
echo $0
Чтобы просто запустить оболочку, достаточно просто набрать путь к ней. Запустить оболочку - sh
, и вывести на экран переменную - $0
. После выйти обратно в bash
.
/bin/sh
echo $0
exit
Чтобы сменить оболочку по умолчанию для пользователя, можно отредактировать файл /etc/passwd
, либо можно использовать утилиту usermod
. Необходимо посмотреть, какая оболочка сейчас является оболочкой по умолчанию для пользователя newuser
, сменить её на /bin/sh
, и проверить изменения.
sudo grep newuser /etc/passwd # grep - программа для поиска по тексту. В данном случае, выведет все строки, содержащие newuser.
sudo usermod --shell /bin/sh newuser
sudo grep newuser /etc/passwd # Данная команда произведет поиск по файлу
# /etc/passwd, и отобразит в консоли все
# строки, в которых присутствует слово
# newuser. В этой же строке будет указано,
# какая оболочка используется данным
# пользователем
Теперь необходимо переключиться в режим работы от имени пользователя newuser
, и проверить, какая оболочка используется. После выйти из этого режима, и удалить пользователя.
su - newuser
echo $0
exit
sudo userdel -r newuser # флаг r используется, когда вы хотите удалить также домашний каталог пользователя.
Задание 13. Работа с текстом в bash.
Для практики нужно воспользоваться текстовым файлом, специально созданным для выполнения задания - таблица подключений OpenVPN, состоящая из имени клиента, IP адреса, MAC адреса устройства и внешнего IP, с которого клиент подключился. Необходимо загрузить файл, воспользовавшись специальной утилитой curl:
sudo apt install curl -y
cd ~
curl -L -o clients.txt https://pastebin.com/raw/cEYa64Cz
Вывести содержимое файла в консоль (Тут для удобства можно пользоваться встроенными в консоль горячими клавишами: Ctrl+L - Очистить содержимое консоли, Shift+PgUp - Прокрутить консоль вверх, Shift+PgDn - Прокрутить консоль вниз).
cat ~/clients.txt
Для того чтобы вывести строки, содержащие подстроку, можно использовать grep. Необходимо вывести информацию о клиенте под номером 24 (grep - регистрозависимый, Client24 начинается с заглавной буквы).
grep Client24 ~/clients.txt
В результате исполнения команды должна быть выведена одна строка. Если было несколько строк, содержащих подстроку Client24, то в результате выведется несколько строк. Далее необходимо ввести команду:
grep Client2 ~/clients.txt
Необходимо попробовать понять, сколько будет выведено строк и почему именно они.
Помимо обычных строк grep поддерживает также регулярные выражения. При этом регулярные выражения должны экранироваться символом . С помощью регулярных выражений можно задать абсолютно любой паттерн. Относительно простой - вывести всех клиентов, имя которых заканчивается на 4. Точка в выражении означает любой символ.
grep Client\.4 ~/clients.txt
grep также умеет работать с пайплайном (вертикальная черта). С помощью пайплайна можно передавать вывод от одной программы другой, по принципу конвейера. Например, можно вывести текст через cat, и передать этот вывод на вход команды grep, для его обработки этой командой.
cat ~/clients.txt | grep Client\.4
Пайплайнов может быть несколько. Так, например, воспользовавшись программой AWK можно вывести только имя клиента и его внешний адрес - то есть первый и четвертый столбцы. (Внимание на пробел в двойных кавычках между номерами столбцов. Это разделитель, который будет между столбцами в конечном результате. Пробел можно заменить на любой другой символ, например, на дефис -, или символ табуляции \t. Можно попробовать это сделать)
Awk - это полноценный язык обработки текстовой информации с синтаксисом, напоминающим синтаксис языка C. Он обладает довольно широким набором возможностей, однако, мы рассмотрим лишь некоторые из них -- наиболее употребимые в сценариях командной оболочки. Awk "разбивает" каждую строку на отдельные поля. По-умолчанию, поля -- это последовательности символов, отделенные друг от друга пробелами, однако имеется возможность назначения других символов, в качестве разделителя полей. Awk анализирует и обрабатывает каждое поле в отдельности. Это делает его идеальным инструментом для работы со структурированными текстовыми файлами, осбенно с таблицами.
cat ~/clients.txt | grep Client\.4 | awk ‘{print $1” “$4}’
AWK также поддерживает функции в своем синтаксисе. Например, чтобы вывести имя клиента и MAC, при этом чтобы MAC печатался заглавными буквами, нужно использовать следующую конструкцию.
cat ~/clients.txt | grep Client\.4 | awk ‘{print $1” “toupper($3)}’
Далее необходимо вывести MAC адрес, чтобы он был разделён не двоеточиями, а дефисами, тогда можно воспользоваться sed. Нужно лишь задать параметры для замены. После этого результат можно вывести не в консоль, а в новый файл (набирать в одну строку):
Sed - это неинтерактивный строчный редактор. Он принимает текст либо с устройства stdin, либо из текстового файла, выполняет некоторые операции над строками и затем выводит результат на устройство stdout или в файл. Как правило, в сценариях, sed используется в конвейерной обработке данных, совместно с другими командами и утилитами.
cat ~/clients.txt | grep Client\.4 | awk ‘{print $1” “toupper($3)}’ | sed -r ‘s/:/-/g’ > newfile.txt
Задание 14. Тренировка работы с grep
Устанавливаем пакет, git
для работы с git репозиториями:
sudo apt install -y git
Копируем репозиторий с GitHub и устанавливаем тренажер:
git clone https://github.com/learnbyexample/TUI-apps.git
cd TUI-apps/GrepExercises
sudo apt install -y python3 python3-pip python3-venv
python3 -m venv textual_apps
cd textual_apps
source bin/activate
pip install grepexercises
Запускаем тренажер
grepexercises
Задание 15. Тренировка работы с sed
Переходим :
cd ../sedexercises
python3 -m venv textual_apps
cd textual_apps
source bin/activate
pip install sedexercises
Запускаем тренажер
sedexercises
Задание 16. Тренировка работы с awk
Переходим :
cd ../awkexercises
python3 -m venv textual_apps
cd textual_apps
source bin/activate
pip install awkexercises
Запускаем тренажер
awkexercises