Линукс и DevOps Дни
2.03K subscribers
108 photos
8 videos
194 links
Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу.
Download Telegram
У самурая нет тестов, только прод

Здрасти. Есть куча способов как определить, в каком окружении запущен Bash скрипт. На хостовой машине или внутри docker контейнера. Я предпочитаю самый простой.

if [ -f /.dockerenv ]; then
echo "I'm inside docker";
else
echo "I'm living in real world!";
fi


Банально проверяем наличие файла .dockerenv и всё! Да, так просто. Способ самый универсальный и используется разработчиками в 99% случаев.

И да файл .dockerenv можно удалить и тогда скрипт сломается. Удобно, если хочешь помешать скриптам определять где они выполняются. НО после перезапуска контейнера файл .dockerenv снова появится.

А если требуется высший пилотаж, прям УНИВЕРСАЛЬНО, прочекать docker и lxc, идем таким путём:

if [ -n "$(grep 'kthreadd' /proc/2/status 2>/dev/null)" ]; then
echo "I'm living in real world!"
else
echo "I'm inside container";
fi


Тут суть такая, во всех хост-системах PID(2) == kthreadd.

Запускаем на хостовой машине:

ps -p 2

PID TTY TIME CMD
2 ? 00:00:00 kthreadd


Запускаем в контейнере:

ps -p 2
PID TTY TIME CMD
хуй с маслом


✔️ Может зафакапить, так как не установлен пакет procps.

Да, кто не знал, как сохранять изменения в docker контейнерах, применяется commit. То есть ставишь софт в контейнере, настраиваешь его там под себя. А потом делаешь:

docker commit <ID> <name>


<ID> - ID того контейнера, в котором все ставил
<name> - да похуй, можешь указать тот же самый

После перезапуска контейнера все твои настройки сохранятся. Но лучше этим не частить, а собирать контейнеры сразу с нужной тебе хуйнёй.

Ладно, погнали дальше спасать этот прекрасный мир.

tags: #linux #bash

АSHDАYS | BАSHDАYS.CОM
🏹 Предупреждён о современных киберугрозах – значит вооружён

«Лаборатория Касперского» приглашает вас на бесплатный вебинар «Сезон киберохоты: аналитика инцидентов за 2023 год», который состоится 11 апреля в 11:00 (МСК).

Знаете ли вы, что сегодня киберхищники берут не качеством, а количеством? В 2023 году произошло перераспределение в разбивке уровней критичности инцидентов, сделав этот период рекордным по количеству инцидентов низкой критичности, но в чем причина? А известно ли вам, какие отрасли наиболее привлекательны для кибермонстров?

На вебинаре эксперты «Лаборатории Касперского» представят новые аналитические отчеты Kaspersky MDR и Kaspersky Incident Response, расскажут об актуальных уловках атакующих, а также дадут рекомендации по их эффективному обнаружению и реагированию.

Каждый участник получит полные отчетов. И это еще не всё – на вебинаре состоится розыгрыш нескольких памятных подарков!

👉🏻 Зарегистрироваться

Реклама АО "Лаборатория Касперского". ИНН 7713140469
Без скрипта не выловишь и рыбку из пруда

你好! Познакомился вчера на созвоне с китайцем, зовут его что-то вроде АнХуй. Смешной персонаж. Что-то мне 40 минут втирал на сломанном английском. Я ни слова не понял, но уверено махал головой как обезьяна на бананы. 🅰️

По итогу встречи я выучил слова «Нихао» и «Херанука», а он всяко выучил — «ты, заебал» и «пиздец». Вот так и работаем. Айти объединяет.

Ну чо, поехали двигать пингвинов

Сегодня изучаем — setsid

Эта такая штука… короче с помощью нее можно запускать команды и скрипты в новых сеансах и группах процессов. Скрипт запущенный через setsid будет независим от родительского процесса.

Это гарантирует, что если родительский процесс получит сигнал SIGHUP, то запущенный скрипт через setsid продолжит работу. Nohup? Почти.. Поехали в практику.

Пишем башник bashdays.sh

#!/bin/bash

echo "Starting..."
sleep 200
echo "Finished..."


✔️ Скрипт будет нихуя не делать 200 секунд.

Запускаем:

setsid ./bashdays.sh


Сразу видим, что оболочка продолжила работать в интерактивном режиме. Можно вводить команды и продолжать работу. А что со скриптом bashdays.sh? Давай запустим pstree и визуально глянем.

Это скрипт запущен через setsid

 ├─sshd─bash
├─sshd─bash─pstree
└─sshd─sshd
├─bashdays.sh─sleep


Видишь, он не является частью процессов bash, а работает самостоятельно, в общем дереве процессов. Запущенный скрипт не привязан к текущему терминалу.

А это скрипт bashdays.sh запущен напрямую, без setsid

├─sshd─bash
├─sshd─bash─bashdays.sh─sleep


Видим цепочку, скрипт работает в текущей оболочке bash. Если закрыть оболочку, то и скрипт прекратит свою работу.

Давай сравним setsid и nohup

Если запустить так:

nohup ./bashdays.sh &


Наблюдаем такую картину:

├─sshd─┬─sshd─bash─pstree
├─sshd─bash─bashdays.sh─sleep


Пишем exit и видим уже такое:

├─sshd─sshd─bash─pstree
├─bashdays.sh─sleep


Процесс отделился от закрытой оболочки и попал в корень всех процессов. В данный момент он продолжает работу.

Теперь запускаем setsid ./bashdays.sh

├─sshd─┬─sshd───bash───pstree
└─sshd───bash
├─bashdays.sh─sleep


А тут сразу процесс отделился от оболочки и стал корневым. Даже если написать exit и закрыть терминал, sleep продолжит работу.

Хм. Не велика разница. Но она все же есть. Команда setsid более прямой способ создания нового сеанса, тогда как nohup просто игнорирует сигнал SIGHUP.

Изучай.

tags: #bash #linux

АSHDАYS | BАSHDАYS.CОM
Как величать сервера

Мне часто задают этот вопрос, всем одно и тоже отвечать заёбисто. Поэтому вот вам пост, буду ссылку потом на него всем скидывать.

Короче нет бест-практик. Нет серебряной пули. Есть не стандартизированная самодеятельность. Если по-простому, то как хочешь, так и называй, лишь бы тебе было удобно.

Помню когда начинал играть на гитаре, не знал что аккорды имеют название. Поэтому сам придумывал эти названия (mt-1/sl-4/sep-7). Производные от Metallica, Slayer, Sepultura и т.п.

Но спустя год оказалось, что все стандартизировано и пришлось мучительно переучиваться. Да, в те времена мы еще на ZX спектрумах кодили, про интернет и не знали. А спросить за музыку было не у кого. Все методом тыка, всё на слух. Эх, это было прекрасное время.


Короче все зависит от твоего облачного провайдера, твоей инфры и вообще всё индивидуально. У меня инфра в основном вся в Selectel. Там есть разграничение по проектам. В каждом проекте можешь заводить любое количество инстансов. Ну я думаю везде что-то похожее, в яндексе по крайней мере также. В aws уже не помню, в DO тоже есть.

✔️ Моя схема как давать погоняла железякам.

База данных = db1
Редиска = rd1
Вебнода (nginx + php) = w1
Админки (nginx + php) = a1
Реплика БД = r1
Микросервисы = d1 (daemons)
Стораджи = st1
Балансировщик = b1


По итогу имею примерно такое:

bashdays-b1 (балансировщик)
bashdays-w1 (вебнода 1)
bashdays-w2 (вебнода 2)
bashdays-w3 (вебнода 3)
bashdays-a1 (админки 1)
bashdays-r1 (реплика БД)
bashdays-st1 (могильник файлов)
bashdays-st2 (реплика могильника)
bashdays-db1 (база данных)
bashdays-r1 (редиска)
bashdays-d1 (микросервисы, демоны)


Проект bashdays, а дальше инстансы с префиксом. Цифровой индекс полезен, когда горизонтально скейлишь. Регионы и т.п. хуиту не добавляю, нет необходимости.

Если уж и надо глянуть регион, лезу в панельку селектела и смотрю в каком ДЦ у меня все это лежит. Но обычно это требуется когда пишешь тикет в саппорт. А так нахер надо. Учись упрощать!

Про балансировщик нагрузки писал в этом посте, как заебись его организовать и полезный пост по заголовкам и проксипасам. Мастрид.

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

Хоть «ебанутый-носорог-1» назови, главное чтобы тебе комфортно было.

Знаешь же поговорку — Никого не слушай, НО прислушивайся! Хороших выходных тебе, увидимся.

Кстати расскажи в комментах как ты называешь свои сервера, очень интересно послушать. Всё, теперь точно до завтра!

tags: #bash #linux

@ВАSНDАYS | BАSHDАYS.CОM
Мы запустили профессиональную сертификацию по облачным технологиям!

Наша программа сертификации ориентирована на международные стандарты, поэтому теперь специалисты по облачным технологиям смогут официально подтвердить свои компетенции. Это поможет им получить конкурентное преимущество при трудоустройстве, ускорить развитие карьеры и претендовать на более высокую оплату. А для тех, кто работает с заказчиками напрямую, — получать более выгодные контракты.

Экзамен на сертификат Yandex Cloud Certified Engineer Associate проверяет знания и навыки в шести областях:

• Базовые облачные технологии
• Хранение и обработка данных
• DevOps и автоматизация
• Бессерверные вычисления
• Информационная безопасность
• Биллинг

🔍 О том, как устроена сертификация, что нужно сделать для подготовки и участия в первом экзамене, читайте по ссылке.
This media is not supported in your browser
VIEW IN TELEGRAM
Атаки через почту. Как защититься?

По данным Positive technologies, 92% фишинговых атак начинаются с электронного письма. Важно постоянно тестировать почту на уязвимости, чтобы устранить основной вектор атак.

Positive Technologies представляет сервис для проверки безопасности почты – PT Knockin. Теперь вы можете за 2 минуты узнать, хорошо ли ваш ящик защищен от вредоносного ПО, а также получить рекомендации по улучшению работы средств защиты.

Симулятор атак на почту PT Knockin абсолютно безопасен для устройства и корпоративной сети. Бесплатно проверить защищенность корпоративной почты можно прямо сейчас – переходи на сайт!

[Проверить безопасность почты]
🙂 Мухаха, наебнёмка SSH

Вводные: У клиента есть сервак с авторизацией по ssh ключам. С виду все настроено верно. Катают ансиблом.

Проблема: При подключении к серверу, продолжает запрашиваться пароль. Хотя явно указан ключ для подключения, а на сервере прописан публичный ключ клиента в authorized_keys.

Проблема на самом деле распространенная. Для отладки открываем логи авторизаций и смотрим что происходит. И да, никто блядь не читает логи, а сразу начинают искать суслика, которого нет. ЧИТАЙ ЛОГИ!

Понятно дело, в логах видим ошибку:

message repeated 4 times: Authentication refused: bad ownership or modes for file /root/.ssh/authorized_keys


С этой ошибкой ты всяко бодался. Смотрим права. И действительно, на файле authorized_keys стоят 3 топора (777). А должно быть 600. Как фиксить, ежу понятно.

✔️ \033[1m Но сейчас про другое \033[0m

Как сказать пингвину, чтобы он забил хуй на проверку прав для этих ключей?

А вот так, добавляем в /etc/ssh/sshd_config строчку:

StrictModes no


Ну и рестартим демона systemctl restart sshd

Всё. Теперь можешь играться с правами ключей. Хоть 000 выстави. Права проверяться не будут и тебя успешно пропустят без пароля.

Когда StrictModes установлено в no, SSH сервер не будет так строго проверять права доступа к этим файлам и каталогам. Это означает, что, например, если домашний каталог пользователя имеет права доступа, которые обычно не допускаются (например, другие пользователи могут читать каталог), SSH сервер все равно будет работать.

Установка StrictModes no уменьшает уровень безопасности, так как позволяет некоторым нежелательным правам доступа с точки зрения безопасности, но это может быть полезно в некоторых сценариях, например, при развертывании на тестовых серверах или в средах, где безопасность не является приоритетом.


Короче для дебага фишка мастхев, если в логах хуй с маслом, включаем эту опцию и проверяем, действительно ли дело в правах на ключи или дело в кривых руках.

Финк диферент!

tags: #linux #debug

@ВАSНDАYS | BАSHDАYS.CОM
Как освоить Linux на профессиональном уровне быстро и эффективно?

🎁 Начните с бесплатного практического урока «Работа с IPTables. Фильтрация пакетов» от OTUS, где вы вместе с опытным экспертом:

- разберёте основные возможности сетевого фильтра IPTables на примере системы Ubuntu 22.04;
- изучите архитектуру подсистемы Netfilter и основные команды утилита iptables;
- научитесь настраивать рабочую конфигурацию сетевого фильтра для реального сервера.

Занятие пройдёт 11 апреля в 19:00 мск в рамках курса «Administrator Linux. Professional». Доступна рассрочка на обучение!

👉 Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://otus.pw/TEe2/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🧠 Вебинар "Как работают программы в Linux?"

На бесплатном практическом уроке от OTUS, вы вместе с опытным экспертом изучите системные вызовы, сигналы и межпроцессное взаимодействие в Linux. Также преподаватель ответит на все вопросы по теме.

👉 Зарегистрируйтесь на вебинар чтобы принять участие и получить подарок https://otus.pw/9Qi3/

🎁 Всем кто зарегистрируется подарим урок «Настройка Nginx для высоких нагрузок и защиты от DoS-атак»

Занятие пройдёт 16 апреля в 20:00 мск

📌 Вебинар пройдет в рамках курса «Инфраструктура высоконагруженных систем». Доступна рассрочка на обучение!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
✔️ Сделаем за час в течение недели

Все из вас знают про канализационные люки и т.п. кринжовые задачи на собесах. Когда я работал в региональной веб-студии, директор этого цирка абсурда придумал свою кринжату.

Тестирование проводилось на кандидатах, которые претендовали на роль бэкенд разработчика. Ща будет жара!

Короче всем кандидатам назначалось одно время для собеса. Собиралось 5-10 человек. Всем вручали кубик-рубика. Включали таймер на 15 минут и понеслась пизда по кочкам.

Как ты понял, нужно было за 15 минут собрать эту шайтан игрушку. В лучшем случае из 10 человек, успешно собирали двое. Всех остальных вышвыривали обратно на мороз с фразой — мы вам перезвоним.

А дальше была битва на ножах? Неа! Брали на испытательный сразу двух человек и выживал только один (как в фильме Горец), самый скилловый, который за 3 месяца меньше всего нафакапил и принес больше денег фирме.

Вот такие вот эксперименты над людьми. Думаю они до сих пор это практикуют, так как, там напрочь отбитое начальство. Не удивлюсь если девопсов начали проверять на детекторе лжи.

Я проработал там 5 лет и ни разу у меня не было root доступа. Как я работал без рута? Шеф вводил пароль и сидел рядом пока я пилил таски. Пиздец…


Зачем кубик то собирать? Да всё просто! Если бэкендер смог собрать кубик, значит у него с алгоритмами заебись и в голове порядок. Значит он это уже делал раньше, значит нейронные связи установлены правильно.

Есть тут доля правды, ради интереса поспрашивал своих бэкендеров, сука, все как один сказали — да, мы можем собрать кубик, похуй хоть 3x3 хоть 13x13. Демоны какие-то )))

Задал этот же вопрос фронтэндерам, в ответ получил — Рома, ты ёбнутый, мы кнопочки двигаем, а не в кубики играем.

Вот и выводы. Если ты не умеешь собирать кубик-рубика, то ты не можешь быть бэкендером. Можешь конечно, но недостаточно хорошим.

Подумай, возможно как раз кубик поможет тебе решить вопросы с карьерной лестницей и разблокирует темные участки мозга.

А ты умеешь собирать кубик? Я вот нет, да и в бэкендеры не особо хочу. Но один раз по мануалу собрал, удовольствия особого не испытал.

tags: #рабочиебудни

@ВАSНDАYS | BАSHDАYS.CОM
Как создавать и настраивать различные типы сервисов в Kubernetes?

Эта тема актуальна, так как играет ключевую роль в развертывании масштабируемых и надежных приложений в контейнерах.

Освойте ее на бесплатном практическом уроке от OTUS. Спикер —  преподаватель курса и действующий Senior DevOps Engineer. На вебинаре вы узнаете, как создавать и настраивать различные типы сервисов в Kubernetes:

- ClusterIP для внутренних связей;
- ExternalService для внешнего доступа;
- NodePort для открытия порта на уровне узла;
- LoadBalancer для балансировки нагрузки.

Занятие пройдёт 11 апреля в 20:00 (мск) в рамках набора на онлайн-курс «Инфраструктурная платформа на основе Kubernetes».  Спикер —  преподаватель курса и действующий Senior DevOps Engineer. Также на вебинаре вы сможете задать эксперту вопросы о самом курсе и перспективах выпускников.

Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок: https://vk.cc/cw6rB9

Для всех, кто пройдет вступительный тест и запишется на бесплатн...
Есть ли мемы на Марсе? Как вытянуть репку с помощью кода? Попробуйте разгадать все тайны Гиперкуба на Tinkoff CTF.

20 и 21 апреля пройдет ИТ-соревнование с призами до 420 000 ₽.

Выберите лигу по скиллам и участвуйте даже без опыта в спортивном хакинге. Задания будут интересны сильным разработчикам, QA- и SRE-инженерам, аналитикам и другим ИТ-специалистам.

Играйте как вам удобно: онлайн из дома или офлайн — в одном 16 городов России, Беларуси и Казахстана. В офлайне вас ждет общение с другими игроками, квизы, мерч и другие развлечения.

Узнайте больше о соревновании и зарегистрируйтесь до 19 апреля

erid:2Vtzqx5Gph4
Реклама. АО "Тинькофф Банк", ИНН 7710140679, лицензия ЦБ РФ № 2673
Открытие костыльного цеха

Привет. Все бэкапы, как и полагается я сжимаю через tar + gzip. Ну повелось так. Можно сказать это устоявшийся стандарт.

Но моя ебанца покоя не даёт, вот и в этот раз сижу, думаю — а хули так долго все сжимается, у меня 32 ядра на сервере с репликой, диск не самый плохой. А оно еле ворочается.

Пошел ковырять кишочки, оказывается у меня gzip хуярит на одном ядре. Не понял. Так и есть. Говорят что с версии 1.7 все изменилось и оно само подстраивается под железо. НИХУЯ, у меня 1.10. Из коробки работает одно ядро.

Хм, может для gzip есть какой-то ключ? Бегло пробежался, в хелпах про threads ничего нет.

Ну раз так. Расчехляем свиней. PIGZ!

PIGZ (Parallel Implementation of GZIP) - это утилита для сжатия файлов, которая использует параллельные вычисления для ускорения процесса сжатия данных.


Ставится из репы: apt install pigz, а где-то уже сразу установлен.

Давай затестим. Создаем 10ти гигабайтный файл.

truncate -s 10G bashdays


Запускаем тесты:

time gzip -k -c bashdays > /dev/null

real 0m46.590s


time pigz -k -c bashdays > /dev/null

real 0m8.535s


Хуясе да! PIGZ сжал 10гигабайт за 8 секунд. А gzip понадобилось аж 46 секунд. Разница ОЩУТИМА! Понятно тесты синтетические, но мне их достаточно.

Ради интереса открыл htop, всё верно. Gzip усирается на одном ядрышке. А «свиньи» сразу жрут всё с костями. Прекрасно!

✔️ Теперь pigz нужно подружить с tar

С этим все просто, через пайп:

tar cf - bashdays | pigz -k -c > bashdays.tar.gz


Либо как вариант через ключ --use-compress-program

tar --use-compress-program="pigz --best --recursive" -cf bashdays.tar.gz bashdays


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

tar cf - bashdays | pigz -k -c | pv > bashdays.tar.gz


Тут используется утилита pv, про нее писал в этом посте.

Короче pigz прям тема и гибко конфигуряется. Я в восторге. Например, можешь сказать ей чтобы использовала только 2 ядра и 2 потока. Почитай хелпину если интересно. Основное я тебе рассказал. Изучай.

Увидимся! Пойду адаптировать под свои бэкапы.

tags: #linux #utils

@ВАSНDАYS | BАSHDАYS.CОM
🌳 Tesla A100 на платформе immers.cloud. Графический процессор с максимальным ускорением для обучения и инференса моделей искусственного интеллекта.

⚡️ Особенности A100:

- Установлены блоки памяти HBM2e внутри чипа для увеличения производительности до 20 раз в сравнении с предыдущими моделями.
- Тензорные ядра поддерживают широкий диапазон точностей вычислений, включая FP16, FP64 и INT8.
- Доступно объединение памяти и вычислительных мощностей с помощью NVLink мостов для достижения высокой пропускной способности.

💸Тарифы:

- Выгодные долгосрочные тарифы со скидками до 35% при предоплате за 30 или 60 дней.
- Цена за A100 начинается от 209,95 рублей, а минимальная конфигурация с NVLink доступна от 434,67 руб.

Повышайте производительность проектов с Tesla A100 на immers.cloud!

🎁 Для подписчиков паблика предлагаем эксклюзивный бонус: 20% к пополнению счета. Готовы подобрать индивидуальные конфигурации под конкретные задачи.

Подписаться на immers.cloud

Творите, развивайтесь, масштабируйтесь вместе с на...
Переходите на тёмную сторону тему на Хабре вместе с Yandex Cloud!

Мы знаем о любви разработчиков к тёмной теме. И знаем, что многим её не хватало на Хабре. Встречайте технический квест от Хабра и Yandex Cloud, пройдя который вы сможете подключить долгожданную тёмную тему и выиграть мерч.

Пройти квест и подключить темную тему можно здесь
Привет отдыхающим. Хош не хош, а постом вас нужно порадовать и желательно интересным. Вот сейчас и порадую, самое время.

Сегодня будем дебажить и багфиксить. Узнаем что такое core файлы в Linux и как с ними взаимодействовать.

Иногда в Linux появляются какие-то странные файлы, с названием core.xxx, порой их бывает прям дохуя. Обычно их все сносят и не задумываются чо это за высер такой.

А этот высер можно либо отключить, либо залезть в него рукой и поковырять. На самом деле все эти «Корки», очень полезный материал для изучения и отладки падающих приложений.

✔️ Что такое «Корки»

Нет это не порода собаки. Всё просто, это файл, который содержит дамп памяти процесса в моменте, когда он уебался. То есть произошел segmentation fault.

Имея этот файл на руках, можно запатчить, забагфиксить либо понять откуда растут ноги у ошибки.

Как включить core файлы.

Хуй знает. Обычно это делается через файл /etc/sysctl.conf, добавляем:

kernel.core_pattern=core


Либо из консоли брякнуть:

sysctl -w kernel.core_pattern=core


В этом случае, если процесс/программа уебалась, то в папке с этим приложением появится файл core.xxx.

Важно! Выполняем:

ulimit -c


Если вернуло 0, то хуй те, а не «корка». Чтобы все сработало, выполняем команду:

ulimit -c unlimited


Так. У нас всё готово, по идее «корки» теперь будут создаваться. Если не создаются, то ты что-то сделал не так, либо в твоем дистрибутиве это делается иначе. Но я думаю это везде одинаково. Пробуй.

Пишем простой код на СИськах

#include <stdio.h>

int main() {
int *ptr = NULL;
*ptr = 10;
return 0;
}


Компилируем:

gcc -g -o bashdays bashdays.c


Ключ -g включает отладочную информацию. Без этого ключа хуй мы чо отдебажим.

В коде выше, я пытаюсь присвоить значение 10 по адресу, на который указывает указатель ptr, но ptr не инициализирован и содержит значение NULL. В попытке разыменования указателя на NULL мы получим segmentation fault.


Сложно? Забей, нам важно понять как работать с «корками» и дебажить.

Так. Запускаем бинарник.

./bashdays


Хуяк и словили Segmentation fault (core dumped). Видишь в скобках core dumped? ВОТ ОНО! Рядом с бинарником появился файл core.1302. Полезли копаться в этом высере!

Запускаем отладчик:

gdb ./bashdays core.1302

``
Происходит магия. Чето там бежит и льется. Без паники! Смотрим несколько последних строчек:

Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x0000563ebf37f13d in main () at coretest.c:5
5 *ptr = 10;


Тааак… и видим из-за чего была вызвана ошибка. Даже строчку показывает, которая справедлива для исходника, хотя мы смотрим бинарник.

Проверяем указатель ptr, вводим в отладчике:

(gdb) print ptr
$1 = (int *) 0x0


И видим что указатель ptr имеет значение NULL (0x0). Это и вызвало ошибку сегментации при попытке разыменования.

Теперь когда у нас есть эта инфа, мы знаем, что проблема заключается в попытке доступа к памяти по-нулевому указателю и можно это забагфиксить.

Самое простое решение, это добавить проверку и убедиться, что указатель ptr указывает на допустимую область памяти. Прежде чем разыменовывать его. Выделяем память для ptr с помощью функции malloc().

#include <stdio.h>
#include <stdlib.h>

int main() {
int *ptr = malloc(sizeof(int)); // выделяем память для указателя
if (ptr != NULL) { // если память выделена, присваиваем значение
*ptr = 10;
free(ptr); // освобождаем память
} else {
printf("Алярма! Память не выделяется\n");
}
return 0;
}


Вот и забагфиксили, компилируем, запускаем.

Ошибка сегментации исчезла. Улыбаемся и в очередной раз гордимся - какие же мы охуительные.

Но не достаточно! Чтобы прям вообще преисполниться, нужно запатчить бинарник через hex редактор.

Как это сделать, покажу совсем скоро, а то пост пиздец толстый получился.

У меня всё. Изучай.

tags: #linux #debug

@ВАSНDАYS | BАSHDАYS.CОM
Самара, ждём вас 25 апреля на технологический митап для IT Support специалистов 👨‍💻

Поговорим об инженерных процессах, улучшении качества IT-поддержки и процессах автоматизации работы с помощью программных решений. Рассмотрим лучшие практики и успешные кейсы адаптации новичков, которые помогают IT-специалистам получить необходимые знания и навыки для эффективной работы в компании и в команде.

Спикеры и темы:

✔️ Антон Осипов, Senior-инженер по сопровождению — «Как НЕ сломать банк? IT-поддержка и автоматизация»

✔️ Ирина Баюсова, исполнительный директор, и Юрий Логинов, старший инженер по сопровождению — «Использование ML в системах мониторинга банка»

✔️ Алексей Рылов, эксперт Центра компетенции IT on-boarding — «Адаптация IT-специалистов: прошлое и настоящее on-boarding»

Время: 18:30 – 21:40.

Локация: Бенке Холл Центра труда и отдыха «Станкозавод» — г. Самара, ул. Куйбышева, 128/1.

Регистрируйтесь по ссылке 👌
Высокопроизводительные базы данных от

А вы знали, что облачные базы данных Selectel — одни из самых производительных на диком западе рынке? Все потому, что они работают на действительно мощном железе: процессорах Intel® Xeon® Gold 6454 и AMD EPYC, высокочастотных планках оперативной памяти, а также NVMe локальных дисках в конфигурации RAID10.

Чтобы вы могли выжать максимум из облачных баз данных, коллеги прокачали их еще сильнее, а именно: увеличили параметры производительности дисковой подсистемы IOPS в 3,5 раза (до 90 000 IOPS) и пропускной способности — в 2,5 раза (до 1000 МБ/c).

Главные преимущества DBaaS в Selectel:

▫️В Selectel большой выбор систем управления базами данных: PostgreSQL, MySQL, TimeScaleDB, Apache Kafka и даже Redis.

▫️ Развернуть отказоустойчивый кластер можно всего в пару кликов в панели управления.

▫️ Облачные базы данных Selectel соответствуют основным стандартам безопасности, включая 152-ФЗ, PCI DSS 3.2.1, ISO 27001, ISO 27017, ISO 27018.

Переходите по ссылке и создайте ...
Онлайн-хакатон по детектированию уязвимостей
13 мая – 16 июня

Positive Technologies запускает хакатон для тех, кто хочет примерить на себя роль специалиста по разработке сканера уязвимостей, работает с Linux/Windows на продвинутом уровне, умеет писать на Python.

Участников ждут три этапа:
📍Стендирование
📍Обнаружение ПО
📍Обнаружение уязвимостей

Сомневаешься в своих силах? Эксперты будут поддерживать всех участников и отвечать на вопросы в специальном чате. А еще в начале хакатона мы пришлем тебе видео, которое поможет разобраться в выполнении заданий.

Участвуй и забирай денежные призы. Самые лучшие получат шанс присоединиться к команде Positive Technologies. Заявку можно отправить до 8 мая.

Участвовать в хакатоне
⚡️⚡️⚡️⚡️⚡️⚡️

Linux умер! Все из вас хоть раз в жизни запускали fork бомбу. Но если ты, тот единственный и неповторимый, то советую взять и прям сейчас это сделать. Это как впервые поссать в море.

Открывай консоль и запускай:

:(){ :|:& };:


После запуска, перезагружай свой компьютер и продолжай читать этот пост.

Концепция, лежащая в основе форк-бомбы — процессы постоянно воспроизводят сами себя, потенциально вызывая отказ в обслуживании.


✔️ Что это за странная регулярка?

Ну да, похожа на язык брейнфака. Давай теперь эту непонятную строчку, сделаем более понятной.

forkbomb()
{
forkbomb | forkbomb &
};
forkbomb


Опа, теперь всё на своих местах. Все наглядно и прозрачно. Каждый экземпляр запускает два новых экземпляра и так до бесконечности.

От этой заразы можно защитится с помощью ulimit, ограничив количество запускаемых процессов. Делается так:

ulimit -u 30


Ну либо прописать эти ограничения /etc/security/limits.conf

* hard nproc 30


hard = максимальное количество процессов nproc
* = для всех пользователей равным 30

Жесткое ограничение позволяет зафиксировать лимиты, чтобы пользователи ненароком через ulimit их не сняли.

Еще был вопрос: а почему вместо | не использовать && ? Ну логично же, && выполняет команды последовательно. А вертикальная палка выполняет команды одновременно, при этом дескрипторы файлов перенаправляются в канал.

Вот бы с регулярками так, развернул их и наглядно стало понятно, что они делают и как. Но увы.

Ладно, чо, вроде пятница, а организм уже бунтует против субботнего рабочего дня. Ну ничего, зато потом 4 дня можно будет отдохнуть. Давай, увидимся!

tags: #bash #linux

@ВАSНDАYS | BАSHDАYS.CОM
Яндекс приглашает начинающих DevOps-инженеров на летнюю стажировку в формате «Технолето»

Студентов ждет насыщенная и яркая программа стажировки. Участники смогут пообщаться с топовыми специалистами компании, познакомиться с передовыми технологиями Яндекса, а также зажечь под диджей-сеты и на Алгорейв-вечеринках.

Во время обучения начинающие DevOps-специалисты научатся развивать инфраструктуру и мониторинг компонентов сервиса, улучшать процессы разработок и CI/СD, разбираться в архитектуре высоконагруженных распределенных систем и многое другое. А если хочется погрузиться в другую сферу, то на стажировке есть возможность освоить бэкенд, фронтенд, машинное обучение, QA, DevOps и другие IT-направления.

Стажировка оплачивается, кроме того, студенты могут выбрать для себя удобный график обучения — в течение 3, 4 или 6 месяцев. По итогам у стажеров есть все шансы получить оффер в Яндексе. По статистике, больше половины стажеров переходят в штат компании.

Оставляй заявку на участие и проведи лето ярко.