Верной дорогой идёте товарищи... ㅤУровень статьи средне-сложный. Я не буду объяснять, как завести пользователя, как прописать ему оболочку, как настроить аутентификацию по ключам. Информации об этом валом.Сегодня мы рассмотрим как сделать «тупиковую машину». Под ней я понимаю машину, попасть на которую можно через интернет по ssh, но на самой этой машине интернета нет. Заинтриговал? Мозг немного взорвался? Короче, делаем ssh-прокси.⁉️ Для чего это нужно?Это можно использовать для раздачи доступа сторонним пользователям для управления ресурсами внутри сети, для студентов, работающих на удалёнке. (студенты IT - самые агрессивные пользователи).Короче для минимизации рисков информационной безопасности. Скажу сразу, это не панацея. Инфу/файлы можно таскать через буффер обмена. Но много информации так не передашь.Поехали!Понадобится 2 машины: Бастионная (Jump-сервер, ssh-прокси) - машина, которая торчит открытым портом ssh в интернет. И Тупиковая - машина (возможно виртуалка), с открытым в локалку портом ssh, на которой будет работать пользователь. И у которой нет доступа в инет (закрыт на периметровом маршрутизаторе. Или не прописаны шлюзы.Основное условие у пользователя не должно быть root, а то сменит IP/MAC, пропишет шлюзы...). (допустим ее локальный ip 10.10.10.10).С Бастионной машины должен быть доступ к Тупиковой по ssh, внутри локалки.НА БАСТИОННОЙ МАШИНЕ. (аутентификация по ключам уже настроена, ssh защищена от быстрого перебора)1. Заводим пользователя, например, Tagd83j6 с паролем >=20 символов (не пригодится)2. Добавляем публичный ключ Пользователя. (Он обычно с парольной фразой) в ~/.ssh/authorized_keys3. Генерим ключ без пароля для доступа к Тупиковой машине. (лучше ed25519).4. Домашней папке Tagd83j6 создаем файл типа shell10.sh (666 root:root)#!/bin/bashset -o errexitset -o nounsetset -o pipefailssh $USER.10.10.10 2>/dev/nullsudo usermod -s /home/Tagd83j6/shell10.sh Tagd83j6НА ТУПИКОВОЙ МАШИНЕ (аутентификация по ключам уже настроена)1. Заводим пользователя
Линукс и DevOps Дни
@linuxskillselevation_devops
Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу.
Похожие каналы
Все →Последние посты
Сегодня 1с начала ругаться на нехватку лицензий. Дело не мое, но начали проверять, и увидели подключение с IP, которого нет в нормативных документах.🔥 Инцидент. Я немного офигел. Что, откуда? Нужно искать, кто тут такой умный. Начинаем исследование:на сервере 1css|grep ip - Видно, машина работает с 1с.ping ip - машина не пингуется.nmap -Pn ip - все порты < 1000 закрыты.Ага, скорее всего windows 10 после обновления переключила сеть в "общедоступные".arp ip - показывает macПо mac определили, что это ASUS. Но может ноут, может комп или wi-fi роутер вредители воткнули в сеть.sudo arping -I enp3s4 ip - машина пингуется.Но как ее найти? Сетка не большая, меньше 100 ip, но не будешь же каждый комп и каждое устройство проверять...Короче, на серваке 1с:sudo iptables -I INPUT -s ip -j REJECTЧерез 5 минут пользователь звонит, "у меня 1с не работает". Проверил - точно. Ip не правильно задали. Восстановил, перевел сеть в режим "Частные".А проблему нехватки лицензий так и не решили. Конец года, вся бухгалтерия пашет. Вот лицензий на всех и не хватает.Народ, а вы сталкивались с появлением в сети незарегистрированных ip? Как решали проблему?tags: #networks #рабочиебудни © by Tagd Tagd—🔔 ➡️
Привет, друзья, вопрос из зала от коллеги. Кто что думает? Велком в комменты! ㅤВопрос:Сейчас занимаюсь задачей по миграции/синхронизации файлового сервера предприятия.Суть проблемы в следующем: Вся информация сейчас распределена по разным серверам, которые начинают выходить из строя.Используется Windows Server с DFS, права настроены через Active Directory.Новый файловый сервер нужно реализовать на базе РЕД ОС.На этапе планирования столкнулся с рядом вопросов — как лучше организовать процесс миграции, чтобы структура и права доступа остались удобными и управляемыми?Если у вас будут предложения или потребуется дополнительная информация, с радостью предоставлю! Заранее спасибо за помощь!tags: #рабочиебудни—🔔 ➡️
👀 Один рубит - семеро в хуй трýбят!Попросил сегодня на собесе кандидата зачистить nginx логи. Кандидат на роль девопс (мидл) на вилку 200-250к.Зачистил — rm /var/log/nginx/access.logМде блядь… это будет интересно!ㅤЗадаю следующий вопрос — Серёжа, а почему файл access.log пропал и больше не появляется? Nginx то в данный момент работает, запросы на него идут.Где карта Билли? Нам нужна карта!Внятного ответа не получил, что-то на уровне — он появится спустя сутки, когда logrotate отработает. Дада… будем сутки без логов сидеть. А если нет logrotate?Короче, если хочешь зачистить файл, есть несколько безопасных способов.Первый способ:sudo > /var/log/nginx/access.logТут мы перезаписываем лог-файл с помощью оператора редиректа «>».Это безопасно для процесса, который продолжает записывать в лог, поскольку процесс будет продолжать писать в тот же файл, а его дескриптор не изменится.Ключевая фраза — дескриптор не изменится. А когда ты этот файл через rm ёбнул само собой дескриптор потерялся и nginx охуевает.Второй способ:sudo truncate -s 0 /var/log/nginx/access.log-s 0 = обрезать файл до нулевого размера. В этом случае дескриптор также не будет потерян и nginx продолжит писать непотребности.Третий способ:Некоторые сервисы, например, apache или nginx, позволяют отправить сигнал процессу для того, чтобы он закрыл текущий лог-файл и открыл новый (сигнал USR1). В этом случае процесс продолжит работать, но логи будут записываться в новый файл.sudo kill -USR1 <pid>Где <pid> = PID процесса. После выполнения этой команды файл с логов превратится в access.log.1 и откроется новый access.log.Четвертый вариант — тот самый logrotate, но его рассматривать не будем.Я пользуюсь первым вариантом с символом перенаправления «>». Стильно, модно, молодежно!Короче сначала думаем головой, а потом уже пользуемся тяжелой артиллерией вроде rm и т.п.А какие способы обнуления знаешь ты? Про аклкашку не пишите, этот способ знают все.tags: #рабочиебудни #linux—🔔 ➡️

переиграем и завершим эту прекрасную рубрику #pizza хоть квантовый компьютер подключайте, щас без правил и ограничений
Бас мазафака фактор! Ща жопы сгорят...Где бы я ни работал, я стараюсь завязать какой-то кусок именно на себя. В идеале полностью подмять и пустить корни во все процессы связанные с той деятельностью, которой я занимаюсь.ㅤЕсли на пальцах, к примеру в компании изначально доминирует terraform и golden image через packer. Я прихожу, вижу этот пиздец. Почему пиздец? Да потому, что это пиздец. Но совладать с процессами на начальном этапе я не могу, потому, что я новенький и не мне диктовать условия. К моим предложениям перейти на ansible и сделать динамические inventory для теры, относятся скептически. Хули? Смириться? Нет уж.Я запиливаю в свое свободное время всю эту связку, делаю пайплайны, кнопку, тесты, короче делаю универсальное решение, которое работает. А не то, что существует у них сейчас. Презентую его CTO в личной беседе. В 99.9999% CTO дает мне зеленый свет на внедрение. А старье с golden image выбрасываем на парашу.Продавил. Молодец. Но остается хуита, когда коллеги из отдела просто в недоумении, типа хуй с горы пришел, чото новое интегрировал, CTO поддержал, да как так-то? Мы тут сидели баблишко, получали, а теперь надо чему-то новому учиться. Да блядь, ребята! Придется играть по моим правилам, либо идите на хуй! Дальше ситуация развивается стремительно, коллеги разбираться в этом не хотят и я все больше и больше подминаю инфраструктуру под себя, становлюсь единственным человеком, который во всем этом шарит и умеет управлять. Да, я предлагаю показать как все это работает. У меня есть написанная документация, она доступна для всех желающих. Но желающих обычно нет. Иииии. Возникает тот самый бас фактор.Грубо говоря, если я хуй забью, то инфраструктуру поддерживать никто не сможет какое-то время, а возможно совсем не сможет.Я не прав? Хуй там, я прав. Я всегда иду на встречу и делюсь знаниями, при условии, что люди хотят эти знания получить. Но обычно никто не хочет покидать зону комфорта. Соответственно имеем, то что имеем. Сидеть в говне я не люблю, по этому,
🤩 Пятница — это продакшн, который уже не твоя проблема.Частенько для установки какого-то софта в линукс, предлагают использовать какой-то snap.snap install chezmoiКогда snap появился я как-то скептически к нему отнесся. Мол, чо за хуйня, есть же apt и еже подобные коробочные варианты. Больше наверное меня беспокоило что засрётся система какой-то неведомой шляпой.ㅤВремя шло и snap появился в коробке. Всё больше вкусных репок стало инсталиться именно через эту штуковину. Пришлось лезть в нору и знакомиться.Короче snap это пакетный менеджер, кто бы мог подумать.Фишка snap — пакеты работают на любом дистрибутиве Ubuntu, Fedora, Arch, Debian и др. без необходимости адаптации под конкретный дистрибутив.То есть создается один пакет с софтиной и он подходит под все дистрибутивы. Красота!Получается что-то вроде докер контейнера, который заработает на любой машине. А еще такой софт запускается в песочнице. Тут безопасники сразу ставят плюсик.А еще установленные пакеты автоматически обновляются в фоне и они всегда актуальны. А еще snap пакет содержит все зависимости и библиотеки, которые требуются для запуска софтины.То есть твой линукс не будет загажен файлами, библиотеками, доп-софтом и т.п. Всё это уже есть в рамках пакета. Никаких конфликтов, никаких танцев с бубном. Да, танцы порой случаются, но редко.Ну ты понял… а когда применять apt, а когда snap?➡️ snap хорошо подходит для:— для приложений, которые часто обновляются (камень в гитлаб).— упрощённого развёртывания на разных дистрибутивах.— обеспечения безопасности через контейнеризацию.➡️ apt предпочтительнее для:— системных компонентов и пакетов, тесно интегрированных с операционной системой.— софта, требующего максимальной производительности.Вот и всё! Не такой snap и страшный. Вечерком еще покажу кое-что интересное (не письку).tags: #linux—🔔 ➡️
Как-то мы с тобой познакомились с etckeeper, ну дак вот, есть еще такая штука — ChezMoi.ㅤЭто херня для управления dotfiles (конфигурационными файлами, которые обычно начинаются с точки, например, .bashrc, .vimrc, .gitconfig) на нескольких устройствах.Я сейчас такие файлы просто в гит руками херачу. Из основного у меня это конфиг для вима и zshrc со всякими алиасами и настройками.ChezMoi как раз всю эту рутину берет на себя. Из коробки есть синхронизация между устройствами, поддержка git, создание набора конфигураций для разных ОС, шаблоны и куча еще всякого.На убунту ставится так: snap install chezmoi --classicДля других операционок мануальчик здесь.Ну поставили и чо дальше? А дальше запускаем:chezmoi initДобавляем например .bashrcchezmoi add ~/.bashrcЭта команда скопирует bashrc в ~/.local/share/chezmoi/dot_bashrcТеперь отредактируй файл:chezmoi edit ~/.bashrcИ посмотрим изменения:chezmoi diffТо есть началась вестись история изменений, что довольно удобно. Теперь например ты запортачил свой .bashrc в следствии экспериментов, как откатиться?Запускаем:chezmoi -v applyНажимаешь к пример «o» = overwrite.Хоба! И bashrc успешно восстанавливается. Прекрасно!Теперь как с гитом работать:chezmoi cdgit add .git commit -m "Initial commit"git remote add origin git.com:$GITHUB_USERNAME/dotfiles.gitgit branch -M maingit push -u origin mainВ принципе стандартная практика, первой командой переходим в каталог ~/.local/share/chezmoi ну а дальше база гита.Затем на другой машине делаем:chezmoi init https://github.com/$GITHUB_USERNAME/dotfiles.gitКонфиги успешно подтягиваются. Если репа приватная, то на офф сайте есть чтиво как это настроить.Я этим пользоваться не буду, мне привычнее свои поделки запускать. Но ты имей в виду что существует такая пепяка. Возможно где-то прикрутишь и оно тебе облегчит трудовые будни.Сайт проекта: https://www.chezmoi.io/На гитхабе: https://github.com/twpayne/chezmoitags: #utilites #linux —🔔 ➡️
Добрый вечер, здрасти. За чо купил, за то и продаю.На повестке — direnv.Эт полезная хуёвина для расширения оболочки. И она достаточно известна среди населения в загнивающем западе.ㅤПозволяет загружать и выгружать переменные среды в зависимости от каталога.Грубо говоря — позволяет не засирать .profile всяким дерьмом.Работает так: перед каждым запуском оно проверяет наличие файла (.envrc или .env) в текущем или родительском каталоге.Если такой файл существует, то он загружается в подоболочку bash. И все экспортируемые переменные становятся доступны для текущей оболочки.Работает с большой четверкой: bash, zsh, fish, tcshСуть — используем переменные среды для конкретного проекта, не трогая при этом ~/.profile. Что интересно, direnv это бинарник на golang, что уже подразумевает скорость и все плюхи связанные с этим.Для убунты ставится так: apt install direnvКак воткнуть это в другое место, подробно написано тут ну или спроси у медведя.Подключаем так, добавляем в ~/.bashrc:eval "$(direnv hook bash)"Для других шелов смотрим тут.Не забываем перечитать файл ~/.bashrc чтобы изменения вступили в силу.Так, поставили, молодцы! Проверяем чо получилось:cd /tmpmkdir my-projectecho ${FOO-bashdays}На экран выдалось: bashdaysПеременная среды FOO не вывелась, логично, дальше:echo export FOO=foo > .envrcЁпта, ошибка — direnv: error /tmp/my-project/.envrc is blocked. Run `direnv allow` to approve its content.Сработала защита от дурака, которая запретила нам использовать .envrc. Хе, ща пофиксим!direnv allow .Во! Лепота!direnv: loading /tmp/my-project/.envrcdirenv: export +FOOПовторяем первую команду:echo ${FOO-bashdays}Хуяк и получаем: fooЧто и требовалось доказать, direnv отлично справилась с поставленной задачей.Теперь выходим из проекта и смотрим:cd ..direnv: unloadingecho ${FOO-bashdays}Ииии барабанная дробь, у нас вывелось — bashdays!Какая же красота и любовь с первого взгляда!Рекомендую! Однозначно забираем себе в копилку и внедряем в свой воркфлоу, по крайней мере для всяких лабора
Привет, давай напишем очередной велосипед на Bash.А напишем мы своё подобие команды cat, но с потоками.ㅤКонечно можно воспользоваться дополнительной утилитой parallel, но мы лёгких путей не ищем. Глаза боятся, да руки веселятся.Вот что у меня получилось:#!/bin/bashfile=$1threads=4process_line() { line="$1" echo $line}export -f process_linefifo="/tmp/fifo"mkfifo "$fifo"exec 3<>"$fifo"rm "$fifo"for ((i = 0; i < threads; i++)); do echo >&3donewhile IFS= read -r line; do read -u 3 { process_line "$line" echo >&3 } &done < "$file"waitexec 3>&-Не забываем chmod +x pcatЗапускать так: ./pcat.sh input.txt➡️ Теперь разбираемся:threads указываем количество потоков для чтения текстового файла.process_line = функция, которая будет обрабатывать строку, у меня это простое echo, но можно накручивать любую логику.export -f = экспортируем функцию, чтобы функция была доступна в subprocess (этот момент ранее в постах мы с тобой уже разбирали, ссылку не дам, по поиску найдешь если интересно).fifo = задействуем FIFO для контроля потоков (чуть ниже объясню что это такое за хуйня).mkfifo = создаём именованный канал /tmp/fifo для контроля количества одновременно запущенных потоков.for ((i = 0; = заполняем каналы «семафора» чтобы ограничить потоки.while IFS = читаем файл построчно и обрабатываем строки.read -u 3 = ждем свободный слот «семафора», каждый поток блокируется до тех пор, пока не освободится место в «семафоре».wait exec 3>&- = ждем завершение всех потоковЧто такое FIFO?FIFO = «первым пришёл — первым ушёл».Представляем ебейшую очередь в магазине:1. Бабки встают в очередь2. Первым обслуживают ту бабку, что пришла первой3. Никто не может сказать — мне только спросить и пройти первымНу или на примере стопки книг:Если ты складываешь книги в стопку и потом начинаешь снимать их, то ты будешь использовать LIFO (Last In, First Out).Но если ты встал в очередь к кассе — это FIFO.Думаю ты ты понял, тут все просто.Единственное отличие от cat, у нас получилось, чт