Авторы программы
Онлайн-практикум -
практикуйтесь, когда вам удобно
Онлайн-практикум от команды Fevlake*
*8 лет обслуживаем IT-инфраструктуры
самых востребованных
навыков для системных администраторов и
DevOps-инженеров
Средняя зарплата
специалиста по направлению
- администрирование Linux
вакансий
на территории РФ
Basics
· Знакомство с Linux.
· Базовые навыки работы с консолью и системой.
Scripting
· Написание скриптов при помощи командной оболочки.
· Построение цепочек команд для автоматизации задач.
Configuration
· Конфигурирование системы.
· Управление пользователями, запущенными сервисами и процессом запуска системы.
Hardware
· Принципы работы с оборудованием через командную оболочку (работа с дисками и рейдами).
· Как контролировать ресурсы (память, swap, место, процессорное время)
Network
Основные команды конфигурирования сетевых устройств и сетевых служб (DNS, Firewall, NAT, Routing).
Debug
Работа с базовыми утилитами для разбора проблем в системах (утилиты по логам и системным вызовам, сетевые проблемы).
Applications
Принципы работы и конфигурирования необходимых для работы Linux-администратора приложений.
· Работа с Web-серверами (nginx, apache, php-fpm).
· Работа с Let's Encrypt.
· Работа с основными базами данными (MariaDB, PostgreSQL, Redis).
· Работа со средствами доступа к системе (SSH, VNC).
· Работа с сетевыми сервисами – с базовыми (DNS, DHCP), со средствами обеспечения отказоустойчивости приложений и различными VPN-сервисами.
· Работа с почтовыми решениями (postfix, dovecot).
· Работа с сетевыми решениями для хранения.
· Работа с инфраструктурными приложениями (Docker, LXC, FreeIPA).
· Работа с системами работы с логами (logrotate, syslog, EFK, Graylog).
· Работа со средствами мониторинга (Zabbix, Prometheus, Grafana).
· Работа с инструментами для бэкапов (rsync, borg).
Пока мы разбирали команды, которые можно выполнять в своей директории и никаких проблем не возникнет, но в некоторых при администрировании системы требуется работать с файлами, которыми владеет пользователь root - суперпользователь, о котором мы говорили вскользь ранее, либо с программами, которые требуют таких полномочий. Для того чтобы производить такие операции, требуется повысить свои полномочия до уровня суперпользователя существует две команды для повышения полномочий:
1. Залогиниться как суперпользователь.
2. Использовать утилиту sudo для повышения полномочий для выполнения одной команды.
Начнем с простого - с входа в систему как суперпользователь. Для такого действия требуется установить пароль для суперпользователя и либо заходить в систему под ним (Desktop версия не позволяет такого), либо переключиться на пользователя, используя команду su.
При ее вызове система просит ввести пароль пользователя, и при корректном вводе вы получите доступ к командной оболочке пользователя root со всеми полномочиями.
Данная команда также позволяет переключаться и на других пользователей при передаче опции -u USERNAME.
Используя опцию c COMMAND, можно запустить команду, отличную от командной оболочки.
В случае, если данная команда запускается пользователем root, пароль не требуется.
Однако ввод пароля по каждому запросу - довольно муторная затея. Плюс, как правило, давать такие возможности для пользователей, которые создаются для конкретного сервиса, а не для реального человека - слишком странная идея с точки зрения безопасности. Как правило, им требуется доступ только до ряда команд, как перезапуск конкретного приложения или удаление конкретных защищенных файлов, но не полный доступ.
Для решения таких задач существует другая утилита - sudo, которая позволяет делать тоже самое, что и su, но еще огромную кучу всего сверху.
Сравним, как делать те же действия, что и с su:
1. Вызов интерактивной оболочки - sudo –i.
2. Вызов команды от имени суперпользователя - sudo COMMAND .
3. Вызов команды от пользователя, отличного от суперпользователя, - sudo -u USER COMMAND.
Главное отличие от su - при запросах запрашивается пароль не пользователя, от которого вы пытаетесь запустить команду, а пароль вашего пользователя.
Однако есть возможность настроить вызов команды sudo и без пароля вовсе, разрешить вызов данной команды только к ограниченному списку команд и многое другое. Все это конфигурируется через файл /etc/sudoers, у которого довольно замысловатый синтаксис, однако все управление производится именно здесь.
Перед тем, как разбирать синтаксис данного файла, давайте разберем несколько команд, которые вам потребуются для работы:
• whoami - выводит имя пользователя, под которым выводится текущая команда;
• id - выводит информацию о текущем пользователе и группах, в которых он состоит (данную тему мы разберем позже);
• visudo - редактировать файл /etc/sudoers с возможностью отката - данная команда позволяет редактировать файл /etc/sudoers и в случае, если в формате записываемого файла есть ошибка, измененный файл не будет сохранен (запускается она, естественно, только с правами суперпользователя, то есть либо от root, либо с использованием sudo - да, команда sudo visudo - может показаться довольно странной, но уж как есть).
Последняя команда особенно важна - она позволяет спасти вас от довольно грустных последствий изменений файла без верификации синтаксиса, поскольку сохраненный файл sudoers, содержащий синтаксис, приводит к полной неработоспособности команды sudo!
Теперь разберем синтаксис файла /etc/sudoers на примере упрощенного конфигурационного файла:
# Пример комментария
Итак, формат команды для пользователя/группы: User Host = (Runas) Options Command.
Разберем этот синтаксис на примере %sudo ALL=(ALL:ALL) NOPASSWD:ALL - данная директива устанавливает для всех, кто состоит в группе sudo на всех (ALL) хостах от имени всех пользователей и групп (ALL:ALL) без пароля (NOPASSWD:) запускать любую команду (ALL).
Как правило, описанная выше директива - это наиболее распространенная директива, которую можно встретить чаще остальных.
Напоследок, мы порекомендуем вам при тестах с sudoers предварительно задать пользователю root пароль при помощи команды passwd, чтобы в случае ошибки в /etc/sudoers иметь возможность исправить доступ.
Как правило, в дистрибутивы Linux по умолчанию входит много пакетов (в особенности для Desktop версий), которые покрывают основные требования пользователя.
Но, как правило, в зависимости от целей, вашей конкретной системе может потребоваться инструмент и для вашей конкретной задачи, может потребоваться программа, которой нет и которую нужно установить.
В операционных системах семейства Microsoft Windows по умолчанию есть возможность установки приложений из интернета и из магазина приложений. Аналогично - в операционной системе MacOS X (да, есть еще brew). Однако у Linux подход к установке пакетов отличается этих систем - да, есть возможность устанавливать пакеты из интернета (причем в разных форматах - об этом далее), но основной метод - использование пакетного менеджера для установки приложений
Пакетный менеджер - это утилита, которая позволяет получать, устанавливать пакеты с приложениями и отслеживать их зависимости друг от друга, на случай, если для корректной работы одного приложения требуется другое приложение.
У каждого семейства дистрибутивов пакетный менеджер свой, равно как и свой формат хранения пакетов:
• ArchLinux - пакетный менеджер называется pacman, формат пакетов - архивы с собранным под архитектуру бинарными файлами (есть еще неофициальные пакеты, но это отдельный мир).
• Gentoo - пакетный менеджер называется portage (команда вызова - emerge), формат пакетов - архивы с исходным кодом, которые собираются.
• RHEL - пакетный менеджер называется yum и dnf, формат пакетов – rpm.
• Debian - пакетный менеджер называется apt, формат пакетов – dpkg.
Поскольку наш практикум проходит на Ubuntu, который принадлежит семейству Debian, разбираться мы будем с apt и dpkg
apt - это пакетный менеджер, от акронима (advanced packaging tool), который включает в себя несколько команд для работы с пакетами:
• apt-get - команда для установки, удаления пакетов и обновления реестра пакетов;
• apt-cache - позволяет найти пакеты по имени и узнать детали о нем;
• apt - объединенная команда, которая на данный момент объединяет наиболее частые команды из первых двух для удобства (на момент выхода Ubuntu 18.04 команда доступна повсеместно).
Для каждой из команд есть обширные man-страницы, но кратную информацию можно получить из help к командам.
Заранее скажем - использование пакетного менеджера - это изменение состояния системы, а потому требует прав суперпользователя, так что для использования команды потребуется запускать все эти команды при помощи sudo или от имени суперпользователя.
Все пакеты хранятся в репозиториях рядом с файлом, содержащим текущую ревизию всех пакетов, которой и оперирует кэш локальной машины.
При установке apt проверяет свой кэш на наличие необходимой команды и, если таковая находится, определяет зависимости пакета, составляет список требуемых пакетов, запрашивает их по ссылке из кэша и устанавливает в систему
Однако бывает так, что при запросе пакетов возвращается 404 ошибка (HTTP код, означающий, что запрашиваемый файл не существует). Это может быть связано с тем, что на вашей машине устаревший кэш, который указывает на файлы старых версий пакетов, которые уже отсутствуют в репозитории.
Для обновления кэша используется команда apt update, которая проходит по всем репозиториям, на которые настроен конфигурационный файл пакетного менеджера, и забирает текущие списки пакетов, после чего ошибки с установкой пакетов, как правило, решаются.
Таким образом, мы подошли к вопросу конфигурации apt - все конфигурационные файлы хранятся в директории /etc/apt и доступны для изменения только суперпользователю.
Рассмотрим некоторые файлы и директории:
• sources.list - данный файл содержит репозитории, из которых устанавливаются пакеты в определенном формате (разберем его далее);
• sources.list.d - директория может содержать файлы с разрешением .list, в которых прописаны дополнительные репозитории - это сделано для логического разделения репозиториев по их источникам, когда подключаются внешние репозитории;
• trusted.gpg - список OpenPGP ключей, которые используются для подписания списка пакетов в репозитории и подтверждения, что мы скачиваем из доверенного источника;
• trusted.gpg.d - логика аналогична с sources.list.d - директория для логического разделения ключей от разных репозиториев.
В данных файлах важно их разрешение - .list - для список пакетов, .gpg - для ключей. В случае, если разрешение отличается, то при обновлении кэша apt будет игнорировать репозиторий/ключ.
Разберем, из чего состоит типичная запись в sources файле:
deb http://archive.ubuntu.com/ubuntu bionic main universe
• deb - тип архива. Может быть либо deb, либо deb-src, что означает что указанный репозиторий содержит либо бинарные файлы, либо исходные файлы, соответственно.
• http://archive.ubuntu.com/ubuntu - адрес репозитория. Корневой адрес репозитория.
• bionic main universe - компоненты. Благодаря компонентам, есть возможность держать коревой адрес репозитория неизменным, а apt дополнит ссылку для получения списка пакетов (он заархивирован и называется Packages.gz). К примеру, приведенный репозиторий будет получать Releases.gz по адресу http://archive.ubuntu.com/ubuntu/dists/bionic/main/binary-amd64/Packages.gz.
Для того чтобы понять, зачем нужен OpenGPG ключ репозитория из trusted.gpg, нужно зайти в apt репозиторий и там вы обязательно найдете файл Release.gpg, который содержит подпись к файлу Releases при помощи соответствующего приватного ключа OpenGPG, публичная часть которого хранится в trusted.gpg - подпись позволяет подтвердить, что файл подписан реальным владельцем репозитория.
Отсюда должно стать ясно, что происходит при обновлении кэша - apt обращается к Releases.gpg, получает Releases, проверяет, что подпись в Releases.gpg верна при помощи ключа из trusted.gpg и, если все хорошо, скачивает требуемый Packages.gz, который содержит все актуальные на данный момент пакеты.
Отлично, разобравшись, как работает под капотом apt, разберем его основные команды:
• list - вывести список всех пакетов, доступных в системе (в том числе установленных);
• install - устанавливает конкретный пакет в систему;
• remove - удаляет указанный пакет из системы;
• purge - удаляет пакет и все файлы, связанные с пакетом (к примеру, конфиги и созданные в ходе работы файлы);
• autoremove - удаляет пакеты, которые не используются в системе и не числятся зависимостями ни у одного пакета;
• update - обновляет список пакетов из репозиториев;
• upgrade - обновляет все пакеты, которые есть в системе (как правило, перед этой командой стоит обновлять и список пакетов);
• search - позволяет найти пакет по имени.
Кроме того, часть полезных команд осталась в остальных командах, как, к примеру, apt-cache madison, который выводит все доступные версии пакета из всех репозиториев, если у вас из нескольких репозиториев имеется какой-то пакет с таким же именем.
В рамках последней задачи стоит разобрать, как мы можем установить пакет конкретной версии - для этого используется синтаксис apt install $PACKAGE_NAME=$VERSION. Разберем на примере:
# apt-cache madison bash
bash | 4.4.18-2ubuntu1.2 | http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
bash | 4.4.18-2ubuntu1 | http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages
# apt install bash=4.4.18-2ubuntu1.2
В случае, если нам необходимо зафиксировать конкретную версию пакета на хосте, можно воспользоваться командой apt-mark hold $PACKAGE, который не будет обновлять пакет в ходе upgrade, что можно впоследствии отменить через apt-mark unhold $PACKAGE.
Теперь опустимся чуть ниже - в утилиту для работы с deb пакетами напрямую - dpkg. Она позволяет устанавливать, удалять, настраивать пакеты, скачанные вручную. Разберем основные команды, которые представлены флагами:
• -l - выводит все пакеты, имеющиеся в системе. Первый параметр может иметь значение ii и rc, что означает, что пакет установлен или готов к установке, соответственно;
• -i - устанавливает пакет из указанного файла. В ходе установки может потребовать установить зависимость для пакета, что можно решить через apt;
• -r - удаляет пакет из системы;
• --configure - позволяет настроить пакет, если он требовал конфигурации при установке (к примеру, ввод данных о системе).
Напоследок лишь хотелось бы разобрать, что такое виртуальные пакеты - такие пакеты могут содержать либо несколько утилит, связанных одной целью, либо пакет, который реализован разными группами разработки и, хоть команда для их вызова одинаковая, но в реальности они устанавливаются из разных пакетов. В таких случаях либо система сообщит вам, какой пакет нужно установить при попытке вызвать или установить команду, либо придется искать необходимый пакет средствами пакетного менеджера или обратившись за помощью к Google.
1. Напишите команду для установки пакета jq без ручного подтверждения установки.
2. Напишите команду для поиска всех пакетов, имена которых начинаются на postgresql.
3. Напишите имя пакета, который содержит последнюю версию PostgreSQL сервера в вашей системе.
4. Напишите команды, требуемые для добавления официального репозитория APT для PostgreSQL согласно Wiki (с обновлением списка пакетов) от имени непривилегированного пользователя.
5. Пришлите команду и вывод команды для нахождения возможных версий пакета из 3 пункта (предварительно обновив список пакетов для получения пакетов из репозитория PostgreSQL).
6. Напишите команду для установки пакета с самой старой версией PostgreSQL из пункта 5.
7. Напишите команды для скачивания последней версии пакета с https://github.com/gopasspw/gopass/releases при помощи wget и его дальнейшей установки от имени непривелегированного пользователя с установкой всех необходимых зависимостей в автоматическом режиме (без ручных действий)
8. Напишите команды для удаления пакета из пункта 7 при помощи apt и dpkg от непривелигерованного пользователя в автоматическом режиме (без ручных действий)
9. Пришлите название виртуального пакета, содержащего утилиту ss
10. Пришлите название пакетов, связанных с виртуальным пакетом ping по одному на строку
Работал админом у провайдера и понял, что мне это все становится не сильно интересно. Меня заинтересовал открытый урок по девопс. Пришел, послушал - понравилась подача Васи Озерова, и решил пойти дальше уже на практикум. А сейчас я еще и работаю в команде Васи - девопсом в Fevlake. Можно сказать, прошел практикум - сменил профессию.
Что запомнилось на практикуме? Отличные задачки. Некоторые заставляют прям посидеть - поразбираться. И это круто. Когда смотришь стандартные вебинары, где лектор долго что-то объясняет, уже через 15 минут засыпаешь. Здесь такого нет. Иногда так затягивала задача, что не замечаешь, как время прошло. Про время - тоже удачно придумано. Занимаешься, когда тебе удобно, очень удобно совмещать с работой и личными делами.
Обучение я бы порекомендовал любому системному администратору. Многие практики отсюда можно применять не только в девопсе. Для тех, кто разработкой занимается, много полезного в части понимания как будут разворачивать твой код. Да и вообще сюда стоит пойти всем, кому в принципе интересно развиваться и, конечно, тем, кто хочет сменить профессию
Работал системным администратором и понимал, что уже достиг потолка. Хотелось двигаться дальше. Увидел информацию про практикум - понравилось, что программа в хороших сроках и спикер компетентный на открытых уроках. В самом практикуме тоже ни разу не разочаровался: понравился чисто практический подход. Все делали руками. Программа и база очень широкие. Нравилось, что задачки максимально приближены к реальности - всё из настоящих кейсов.
Да, изначально сомнения идти/не идти на практикум были, особенно по оплате - для Украины сумма немаленькая. Но брат выручил с деньгами. И могу сказать, что все вложения окупились. После практикума устроился DevOps-инженером в продуктовую компанию. Указал в резюме, что прошел практикум, и это сыграло в плюс - всем нравится, что ты вкладываешься в свое развитие.
Сейчас еще в REBRAIN пригласили на проверку заданий. Интересно заниматься с ребятами. Понятно, что весь материал я уже знаю, но когда кому-то объясняешь, сам заново погружаешься в тему, развиваешься.
Практикум я бы порекомендовал сисадминам, инженерам, тем, кто занимается поддержкой средней и большой инфраструктуры, и вообще всем, кто входит в профессию девопс. При должном рвении добьетесь!
До практикума я работал в сфере Digital Marketing - удаленно занимался рекламой, маркетингом. Ранее работал инженером связи, от механика и до ведущего инженера, поэтому IT мне близко, и я всегда хотел развиваться в этом направлении, и вернуться в профессию. Потому заинтересовался открытым уроком по DevOps, который предложила мне таргетная реклама. После урока желание изучать DevOps усилилось - привлекли перспективы и сложная, но интересная работа. Так я решил пойти дальше на практикум. И уже в середине курса устроился в аутсорсинговую компанию по администрированию инфраструктуры и дорос до Junior DevOps.
Сам практикум - бомба! Намного круче классического формата с лекциями. Когда есть лекции, ты привязан к группе, ко времени. Здесь же отстать невозможно: включайся, когда удобно, и получай на любом этапе быструю обратную связь по всем заданиям. Выходит, как формат индивидуального практикума, но только еще и с возможностью постоянно находиться в сообществе - общаться, развивать кругозор.
После практикума меня позвали в команду REBRAIN как одного из лучших выпускников. И это тоже очень крутой опыт. Сейчас я курирую практикум - отвечаю на вопросы ребят, вместе разбираем задачи, что помогает укреплять знания, и разбираться в ньюансах.
Сам формат, практикума с упором именно на выполнение заданий - именно то что нужно, чтобы сформировать достаточный кругозор и базис для развития. Так что, если тема DevOps или развития Operations Вам близка - практикум это именно то, что нужно!
Я начинал свою карьеру с Линукса, поработал сисадмином и решил уйти в девопс. Привлекло то, что сейчас это везде, все держится на юникс. Кода много и перспектив много!
На базовый курс я попал одним из первых - в самый первый поток. Увидел рекламу практикума и побывал на первом занятии. Сомнений идти, или не идти практически не было, я был в первом потоке у ребят и мне показалось, что это больше плюс, потому что получится что-то свежее и интересное. Сейчас, когда я прошел базу, понимаю, что не прогадал. Да, не все с первого раза получалось, приходилось трудиться, "волшебных таблеток" никто не раздает. Но в итоге все получается! Особенно с такой поддержкой! С Василием Озеровым всегда можно было лично пообщаться, задать любые вопросы. Чат в Телеграм - вообще бомба! Да и в целом, понравилась экспертность Василия - без воды, все четко и сразу к делу. А еще круто, что нам дали сервер, на котором можно тренироваться и выполнять задания!
Информации на курсе было очень много и по деплою, и по непрерывной подаче кода. У меня сложилась полная картина, как работают Devops-практики, и теперь еще больше хочется погружаться в профессию! Тем более, что работу девопсом я уже получил.
Девопс решил поизучать для себя - в работе точно пригодиться, и, возможно, в перспективе поможет выйти на новый уровень. И мое стремление всю эту тему поглубже узнать совпало с рекламой открытого урока, которую я случайно увидел. Я уже встречал подобные курсы, но мне понравился подход Василия Озерова - его подача материала.
Сейчас я еще на втором модуле практикума, о результатах говорить рано. Но пока нравится то, что задания грамотные, в нужной последовательности. Еще сразу видно, что все, что изучаем можно сразу же применять на практике. Ну и дополнительные видеолекции смотрятся легко, подача хорошая.
Еще один плюс - то, что даются аккаунты для работы, инфраструктурно решены многие вопросы. А значит, для практики не нужно дополнительно что-то искать, покупать. Бери и пробуй.
Практикум я бы посоветовал таким людям как я - системным администраторам, которые хотят получить опыт, расширить кругозор, и тем, кто занимается разработкой.
Сейчас все чаще стали использоваться новые технологии типа Ansible, и изучать их разрозненно достаточно проблематично. Потому я искал практикум, на котором все это можно освоить на практике - через конкретные задачи. Сходил на открытый урок к Василию Озерову, ну и, конечно, сравнил практикум с другими курсами. У многих акцент делается на теорию, а её я и сам могу изучить. Потому решил остаться на практикуме у Василия.
Приятно, что здесь есть документация, а дальше ты должен действовать самостоятельно. Многое приходится делать самому - а это реальная практика, как в жизни.
Обучение нравится, я даже знакомому уже порекомендовал - он системный администратор. Да и вообще практикум можно посоветовать всем, кто хочет развиваться и на практике пошагово изучать девопс
Я работал в госорганизацию с информационными системами. Технологический стэк там довольно древний. Понял, что хочется развития и работу решил сменить. Отсюда появилась и потребность в практикуме. Устроился системным администратором в компанию поддержки медиапортала и параллельно пошел учиться.
Практикум привлек изначально удачным сочетанием цена/качество, да и упором на практику. Еще понравилось, что тут комплексно все темы разбираются - складывается целостная картина. И еще всегда радует очень быстрая обратная связь по задачам, которым мы изучаем
В целом практикумом доволен и порекомендовал бы его людям моего уровня - тем, кто занимается системным администрированием и хочет развиваться. Также порекомендовал бы курс разработчикам, стремящимся развиваться в fullstack-development и желающим понять сторону Operations.