Сборочное окружение и доступ к нему
Представление. FrBrGeorge и ALT Linux Team (в частности FrBrGeorge и ALT Linux Team ☺)
О чём не будет рассказано в лекциях, но что необходимо тем не менее знать / уметь:
Как администрировать свою Linux-систему
Как ставить/удалять/обновлять пакеты
Как эти пакеты называются в разных дистрибутивах
Как настраивать какие-то службы
- …
Как работать с редактором vim
Как работать в консольном текстовом редакторе
Что такое командная строка и как в ней работать
Где найти и как запустить эмулятор терминала ☺
Терминал как управляющее устройство (Ctrl+C, Ctrl+S и т. п.)
Опыт работы с (произвольной) командной строкой
Знакомство с bash / zsh
Управление процессами в Linux (kill)
Как программировать на Си
предполагается, что как-то вы это умеете ☺
Как работать с Git
Базовые команды git
Как сопровождать простой публичный репозиторий
Использование SSH
Командная строка и эмулятор терминала.
- Сеанс работы
- Удалённый доступ как получение полноценной командной строки
- Проблема защиты учётных данных
Асимметричное шифрование: закрытый и открытый ключ
- Суть асимметричного шифрования
- Use cases: электронная подпись и и шифрация
- Что можно и что нельзя делать с открытым и закрытым ключами
Отпечатки (простой и VisualHostkey)
Проблема первоначального обмена ключами
Чтобы подключиться к удалённому компьютеру по SSH, необходимо зашифровать данные его (компьютера) открытым ключом, т. н. HostKey, а он (и только он!) их расшифрует. Однако HostKey у нас ещё нет…
100% надёжный канал для передачи HostKey
Посылаем запрос на HostKey
Получаем HostKey и верим ему
Шифруем данные с помощью HostKey
Удалённый компьютер дешифрует данные с помощью HostKeyPrivate
Отпечаток ключа FingerPrint опубликован в надёжном месте (например, администратор прислал фото)
Посылаем запрос на HostKey
Получаем какой-то HostKey
Вычисляем отпечаток, сравниваем его с опубликованным FingerPrint (хоть вручную), и только тогда ему верим
Шифруем данные с помощью HostKey
Удалённый компьютер дешифрует данные с помощью HostKeyPrivate
- Канал скомпрометирован, но мы ему верим без сравнения отпечатков
Посылаем запрос на HostKey
- Атакующий перехватывает запрос
Атакующий сам посылает запрос на HostKey
Атакующий получает HostKey
Атакующий в ответ на наш запрос возвращает нам свой HostKeyFAKE
Получаем HostKeyFAKE и верим ему
Шифруем данные с помощью HostKeyFAKE
Атакующий перехватывает данные, дешифрует их с помощью HostKeyFAKEPrivate (возможно, даже подменяет данные)
Атакующий шифрует данные с помощью HostKey
Удалённый компьютер дешифрует данные с помощью HostKeyPrivate
MITM-атака в российской классике
Secure Shell
- SSH: изготовление персонального ключа и вход по ключу
- SSH: запароленный ключ и агент для хранения распароленного ключа
Использование SSH:
- Создание пары:
1 user@linuxprac$ ssh-keygen 2 Generating public/private rsa key pair. 3 Enter file in which to save the key (/home/user/.ssh/id_rsa): 4 Enter passphrase (empty for no passphrase): 5 Enter same passphrase again: 6 Your identification has been saved in /home/user/.ssh/id_rsa 7 Your public key has been saved in /home/user/.ssh/id_rsa.pub 8 The key fingerprint is: 9 SHA256:UAOdsJDbNSaGT2lJ0uC/ZeUeISrKVxECRPYksOmNFiY george@linuxprac.box.office.basealt.ru 10 The key's randomart image is: 11 +---[RSA 3072]----+ 12 |.+*.**=*o. | 13 | + =o+O+*. | 14 |Eo oB++..o | 15 |+ + ..o+ + . | 16 | + .. + S o | 17 |.. . o + . . | 18 | o . . . | 19 | . | 20 | | 21 +----[SHA256]-----+ 22
- Запуск агента
- Короткий вариант:
Это равносильно запуску ssh-agent и копипасте всего его вывода в командную строку
1 user@linuxprac$ ssh-agent 2 SSH_AUTH_SOCK=/tmp/.private/user/ssh-XXXXXXB7s3Hb/agent.3822; export SSH_AUTH_SOCK; 3 SSH_AGENT_PID=3823; export SSH_AGENT_PID; 4 echo Agent pid 3823; 5 user@linuxprac$ SSH_AUTH_SOCK=/tmp/.private/user/ssh-XXXXXXB7s3Hb/agent.3822; export SSH_AUTH_SOCK; 6 user@linuxprac$ SSH_AGENT_PID=3823; export SSH_AGENT_PID; 7 user@linuxprac$ echo Agent pid 3823 8 Agent pid 3823 9
Добавление ключа (-l показывает отпечаток, а -L — весь открытый ключ)
1 user@linuxprac$ ssh-add -l 2 The agent has no identities. 3 user@linuxprac$ ssh-add 4 Enter passphrase for /home/user/.ssh/id_rsa: 5 Identity added: /home/user/.ssh/id_rsa (george@linuxprac.box.office.basealt.ru) 6 user@linuxprac$ ssh-add -l 7 3072 SHA256:UAOdsJDbNSaGT2lJ0uC/ZeUeISrKVxECRPYksOmNFiY george@linuxprac.box.office.basealt.ru (RSA) 8 user@linuxprac$ ssh-add -L 9 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5ZpCaF+DvI/Gw4rqc+UHf4g7STSuyS1IUr9doseJWBVNra5fPTZsRTNFGQV+aoVJF4iLOzQSypiWFpKG2bjG9n05VkSGfME62lE9U8x0UPrmtbNfUWE56e4QxmKqq6ielB2zn94brQ8+vWe1Fx2NyPr0XiX0uyp48scVo1G8tkdRQWeIQf8y2q6RFLWBG0kJnuSd5AabmyUbo/lWMG40+TQGwr2+A5YXUTWgovsFVtIoqo7tpv4ZXrcKA/BVAFUbJwZS4F+sY0W2AtcVjB5RZotjtmVoClVacxpJagK0FUpmLz/MopAELsbDPG4E4CvqsurPrlSxqeIW25rLfXHWfCl7cUhsRcWl7TiDNE/T1t0nQiK1iC/SaSI2wld28uRIfF+kEbbLICozFC1aXehpzwoRNQafTKwixkkI+LioEio1WxS6KPDiT+mcH93IGtH4U6QnEDbOMIZ4xXzdaM54chYgcOl387eU9Rv14c9b68GzZVSBBbFYpykQ6bCJ43FU= george@linuxprac.box.office.basealt.ru 10
- Копирование ключа на удалённый хост в качестве разрешённого для аутентификации
1 user@linuxprac$ ssh user@remote.host.ip 2 user@remote.host.ip's password: 3 4 user@linuxprac$ ssh-copy-id user@remote.host.ip 5 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed 6 /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys 7 user@remote.host.ip's password: 8 9 Number of key(s) added: 1 10 11 Now try logging into the machine, with: "ssh 'remote.host.ip'" 12 and check to make sure that only the key(s) you wanted were added. 13
- «Беспарольный» логин (пароль, точнее, passphrase от ключа, уже один раз введён при добавлении ключа в агент)
1 user@linuxprac$ ssh remote.host.ip 2 Last login: Fri Sep 10 17:35:50 2021 from 193.43.10.248 3 user@remote$ tail -1 .ssh/authorized_keys 4 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5ZpCaF+DvI/Gw4rqc+UHf4g7STSuyS1IUr9doseJWBVNra5fPTZsRTNFGQV+aoVJF4iLOzQSypiWFpKG2bjG9n05VkSGfME62lE9U8x0UPrmtbNfUWE56e4QxmKqq6ielB2zn94brQ8+vWe1Fx2NyPr0XiX0uyp48scVo1G8tkdRQWeIQf8y2q6RFLWBG0kJnuSd5AabmyUbo/lWMG40+TQGwr2+A5YXUTWgovsFVtIoqo7tpv4ZXrcKA/BVAFUbJwZS4F+sY0W2AtcVjB5RZotjtmVoClVacxpJagK0FUpmLz/MopAELsbDPG4E4CvqsurPrlSxqeIW25rLfXHWfCl7cUhsRcWl7TiDNE/T1t0nQiK1iC/SaSI2wld28uRIfF+kEbbLICozFC1aXehpzwoRNQafTKwixkkI+LioEio1WxS6KPDiT+mcH93IGtH4U6QnEDbOMIZ4xXzdaM54chYgcOl387eU9Rv14c9b68GzZVSBBbFYpykQ6bCJ43FU= user@linuxprac.box.office.basealt.ru 5
Скрипт ssh-copy-id просто логинится на удалённый хост и дописывает ключ в конец файла .ssh/authorized_keys
Стадии разработки приложения
Приложение:
Разработка
Исходный код, документация, мультимедиа
Сборка программного продукта
Тестирование и отладка
- Деплоймент
Локальный тестовый деплоймент
- Репозиторий и доставка
- Установка и развёртывание
- Сопровождение
Значком отмечены области, которые мы так или иначе затронем
Цикл разработки
(«Для самых маленьких»):
- Редактирование
- Сборка и подготовка к запуску
- Тестирование и запуск
Редактирование
Текстовый редактор для программирования — это:
синтаксис
рецепты сборки
многофайловые проекты и связи между файлами
инфоподдержка
- отладчик
- рецепты деплоймента
- чёрт в ступе…
Мы ограничимся только , для остального будем использовать внешние инструменты
⇒ Сборочное окружение:
- Компилятор и компоновщик
Дополнительные библиотеки или модули (для запуска)
- Сборочные варианты библиотек и include-файлы (т. н. devel-версии)
- Текстовый редактор
- VCS
- Обработка непрограммных компонентов (i18n, мультимедиа и т. п.)
- Оркестрация сборки сложного проектa (make, ninja, cmake, meson и т. п.)
- Парсер библиотек и бинарников и прочие информационные утилиты
- Отладчик, трассировщик выполнения, профайлер и иные средства диагностики
(возможно) инструменты пакетирования и деплоймента
- …
В классическом Linux-дистрибутиве эти инструменты не обязаны присутствовать «из коробки» — их надо устанавливать из т. н. пакетов.
- Это материал целого курса, увы.
(если успеем) GIT
Базовый сайт: Pro GIT
VCS:
- Хранение
- Версионирвание
- Совместная разработка
DVCS:
- ∄ единого места хранения
- с точки зрения протокола взаимодействия, так-то оно может и быть
Общие понятия (не все):
- Репозиторий
- Локальная копия
- Репозиторий для публикации
- Рабочая копия
- Коммит как срез состояния репозитория на опередённый момент
- Обязательное описание коммита (commit message)
Цикл работы
клонирование (git clone)
(повторно и далее) Синхронизация (git pull = git fetch + git merge)
- Изменение
Отметка файлов для коммита (git add)
Коммит (git commit)
- Переход к 2. или 3.
Публикация (git push)
Свойства GIT:
Хранение всех версий исходников
Хранение полного репозитория в локальной копии
Отслеживание процесса разработки в виде орграфа (нам пока нужен только линейный)
- ⇒ понятие «ветка», «слияние веток» и т. п.
Доступ к сборочной среде
Варианты сборочного окружения:
- Собственный компьютер с каким-то Linux (см начало лекции)
Собственный компьютер с дистрибутивом ALT (инструкция)
Виртуалка с тем или другим (например, Virtualbox или WSL2)
- Аккаунт на прак-виртуалке
- пишите в tg-личку заявку о выделении аккаунта
Понадобится владение ssh
Понадобится владение консольным текстовым редактором (есть, конечно же, vim, а также nano, mc и micro
- Всё остальное уже настроено!
Д/З
- Обеспечить (себе) доступ к Linux-системе, которую можно устанавливать произвольное ПО из репозитория (см. выше).
Завести публичный git-репозиторий и зарегистрировать его в качестве комментария к этому issue
GIT заводится где угодно, лишь бы было опубликовано и мне можно было сделать git clone (GitHub, GitLab, факультетский GitLab для студентов, любой иной способ):
- Скорее всего вам понадобится сгенерировать и зарегистрировать ssh-ключ
Отпечаток ключа linuxprac:
ED25519 key fingerprint is MD5:55:1e:6a:4c:32:99:1b:fb:fa:d3:15:b9:a5:6b:94:53. +--[ED25519 256]--+ | oo. o | | += + . | | += . . | | oo o E| | S. B | | . B | | . . o o | | . . . o | | ... . | +------[MD5]------+