В рот мне логи! suqo
ㅤ
Здрасти короче.
Все знают команду
Так, так, так… Чо это?
Этот тот жеиз Австралии наоборот. Оно выводит содержимое файла или стандартного ввода — в обратном порядке по строкам.
Ща покажу. Есть у нас злой файл:
Запускаем:
Поняли? Ну либо так:
А можно прям разделитель указать:
Где применить?
Да где хочешь, можешь логи смотреть, можешь в bash скрипты пихать, можешь из csv бигдату собирать и т.п.
Такие дела, изучай!
tags: #utilites #linux
—
🔔 ➡️
ㅤ
Здрасти короче.
Все знают команду
cat
, но не все знают про tac
.Так, так, так… Чо это?
Этот тот же
cat
только Команда tac входит в состав пакета GNU coreutils, и, как правило, она предустановлена на большинстве Linux-дистрибутивов.
Ща покажу. Есть у нас злой файл:
ножка на ножку и залупа в ладошку
eбутся утки вторые сутки
хуй сосали на вокзале
Запускаем:
tac file.txt
хуй сосали на вокзале
eбутся утки вторые сутки
ножка на ножку и залупа в ладошку
Поняли? Ну либо так:
echo -e "строка 1\nстрока 2\nстрока 3" | tac
строка 3
строка 2
строка 1
А можно прям разделитель указать:
echo "слово1:слово2:слово3" | tac -s ":"
слово3
слово2
слово1
Где применить?
Да где хочешь, можешь логи смотреть, можешь в bash скрипты пихать, можешь из csv бигдату собирать и т.п.
Такие дела, изучай!
tags: #utilites #linux
—
🔔 ➡️
Привет, давай напишем очередной велосипед на Bash.
А напишем мы своё подобие команды
ㅤ
Конечно можно воспользоваться дополнительной утилитой
Вот что у меня получилось:
Не забываем
Запускать так:
➡️ Теперь разбираемся:
threads указываем количество потоков для чтения текстового файла.
process_line = функция, которая будет обрабатывать строку, у меня это простое
export -f = экспортируем функцию, чтобы функция была доступна в subprocess (этот момент ранее в постах мы с тобой уже разбирали, ссылку не дам, по поиску найдешь если интересно).
fifo = задействуем FIFO для контроля потоков (чуть ниже объясню что это такое за хуйня).
mkfifo = создаём именованный канал
for ((i = 0; = заполняем каналы «семафора» чтобы ограничить потоки.
while IFS = читаем файл построчно и обрабатываем строки.
read -u 3 = ждем свободный слот «семафора», каждый поток блокируется до тех пор, пока не освободится место в «семафоре».
wait exec 3>&- = ждем завершение всех потоков
Что такое FIFO?
Представляем ебейшую очередь в магазине:
1. Бабки встают в очередь
2. Первым обслуживают ту бабку, что пришла первой
3. Никто не может сказать — мне только спросить и пройти первым
Ну или на примере стопки книг:
Если ты складываешь книги в стопку и потом начинаешь снимать их, то ты будешь использовать LIFO (Last In, First Out).
Но если ты встал в очередь к кассе — это FIFO.
Думаю ты ты понял, тут все просто.
Единственное отличие от
С другой стороны эту поделку можно применить для каких-то задач, где порядок строк в файле неважен, ну или еще для чего-то.
Ну и домашка тебе: сделай так, чтобы строчки выводились по порядку (также, как и в файле), но использовалась многопоточность.
Пользуйтесь, чо!
tags: #bash #linux
—
🔔 ➡️
А напишем мы своё подобие команды
cat
, но с потоками.ㅤ
Конечно можно воспользоваться дополнительной утилитой
parallel
, но мы лёгких путей не ищем. Глаза боятся, да руки веселятся.Вот что у меня получилось:
#!/bin/bash
file=$1
threads=4
process_line() {
line="$1"
echo $line
}
export -f process_line
fifo="/tmp/fifo"
mkfifo "$fifo"
exec 3<>"$fifo"
rm "$fifo"
for ((i = 0; i < threads; i++)); do
echo >&3
done
while IFS= read -r line; do
read -u 3
{
process_line "$line"
echo >&3
} &
done < "$file"
wait
exec 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
, у нас получилось, что строчки выводятся в порядке завершения потока. Какой поток быстрее завершился тот и папа.строка4
строка1
строка2
строка3
строка5
строка6
С другой стороны эту поделку можно применить для каких-то задач, где порядок строк в файле неважен, ну или еще для чего-то.
Ну и домашка тебе: сделай так, чтобы строчки выводились по порядку (также, как и в файле), но использовалась многопоточность.
Пользуйтесь, чо!
tags: #bash #linux
—
🔔 ➡️
Добрый вечер, здрасти. За чо купил, за то и продаю.
На повестке —
Эт полезная хуёвина для расширения оболочки. И она достаточно известна среди населения в загнивающем западе.
ㅤ
Позволяет загружать и выгружать переменные среды в зависимости от каталога.
Грубо говоря — позволяет не засирать
Работает так: перед каждым запуском оно проверяет наличие файла (
Если такой файл существует, то он загружается в подоболочку bash. И все экспортируемые переменные становятся доступны для текущей оболочки.
Работает с большой четверкой: bash, zsh, fish, tcsh
Что интересно,
Для убунты ставится так:
Подключаем так, добавляем в
Не забываем перечитать файл
Так, поставили, молодцы! Проверяем чо получилось:
На экран выдалось: bashdays
Переменная среды FOO не вывелась, логично, дальше:
Ёпта, ошибка —
Сработала защита от дурака, которая запретила нам использовать .envrc. Хе, ща пофиксим!
Во! Лепота!
Повторяем первую команду:
Хуяк и получаем:
Что и требовалось доказать,
Теперь выходим из проекта и смотрим:
Ииии барабанная дробь, у нас вывелось — bashdays!
Какая же красота и любовь с первого взгляда!
Рекомендую! Однозначно забираем себе в копилку и внедряем в свой воркфлоу, по крайней мере для всяких лабораторных испытаний эта штука подходит идеально.
➡️ Проект на гитхабе: https://github.com/direnv/direnv
⭐️ Star 12.6k
tags: #bash #linux
—
🔔 ➡️
На повестке —
direnv
.Эт полезная хуёвина для расширения оболочки. И она достаточно известна среди населения в загнивающем западе.
ㅤ
Позволяет загружать и выгружать переменные среды в зависимости от каталога.
Грубо говоря — позволяет не засирать
.profile
всяким дерьмом.Работает так: перед каждым запуском оно проверяет наличие файла (
.envrc
или .env
) в текущем или родительском каталоге.Если такой файл существует, то он загружается в подоболочку bash. И все экспортируемые переменные становятся доступны для текущей оболочки.
Работает с большой четверкой: bash, zsh, fish, tcsh
Суть — используем переменные среды для конкретного проекта, не трогая при этом ~/.profile.
Что интересно,
direnv
это бинарник на golang, что уже подразумевает скорость и все плюхи связанные с этим.Для убунты ставится так:
apt install direnv
Как воткнуть это в другое место, подробно написано тут ну или спроси у медведя.
Подключаем так, добавляем в
~/.bashrc:
eval "$(direnv hook bash)"
Для других шелов смотрим тут.
Не забываем перечитать файл
~/.bashrc
чтобы изменения вступили в силу.Так, поставили, молодцы! Проверяем чо получилось:
cd /tmp
mkdir my-project
echo ${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/.envrc
direnv: export +FOO
Повторяем первую команду:
echo ${FOO-bashdays}
Хуяк и получаем:
foo
Что и требовалось доказать,
direnv
отлично справилась с поставленной задачей.Теперь выходим из проекта и смотрим:
cd ..
direnv: unloading
echo ${FOO-bashdays}
Ииии барабанная дробь, у нас вывелось — bashdays!
Какая же красота и любовь с первого взгляда!
Рекомендую! Однозначно забираем себе в копилку и внедряем в свой воркфлоу, по крайней мере для всяких лабораторных испытаний эта штука подходит идеально.
➡️ Проект на гитхабе: https://github.com/direnv/direnv
⭐️ Star 12.6k
tags: #bash #linux
—
🔔 ➡️
Как-то мы с тобой познакомились с etckeeper, ну дак вот, есть еще такая штука —
ㅤ
Это херня для управления dotfiles (конфигурационными файлами, которые обычно начинаются с точки, например,
Я сейчас такие файлы просто в гит руками херачу. Из основного у меня это конфиг для вима и zshrc со всякими алиасами и настройками.
На убунту ставится так:
Для других операционок мануальчик здесь.
Ну поставили и чо дальше? А дальше запускаем:
Добавляем например .bashrc
Эта команда скопирует bashrc в
Теперь отредактируй файл:
И посмотрим изменения:
То есть началась вестись история изменений, что довольно удобно. Теперь например ты запортачил свой
Запускаем:
Нажимаешь к пример «o» = overwrite.
Хоба! И bashrc успешно восстанавливается. Прекрасно!
Теперь как с гитом работать:
В принципе стандартная практика, первой командой переходим в каталог
Затем на другой машине делаем:
Конфиги успешно подтягиваются. Если репа приватная, то на офф сайте есть чтиво как это настроить.
Я этим пользоваться не буду, мне привычнее свои поделки запускать. Но ты имей в виду что существует такая пепяка. Возможно где-то прикрутишь и оно тебе облегчит трудовые будни.
Сайт проекта: https://www.chezmoi.io/
На гитхабе: https://github.com/twpayne/chezmoi
tags: #utilites #linux
—
🔔 ➡️
ChezMoi.
ㅤ
Это херня для управления dotfiles (конфигурационными файлами, которые обычно начинаются с точки, например,
.bashrc
, .vimrc
, .gitconfig
) на нескольких устройствах.Я сейчас такие файлы просто в гит руками херачу. Из основного у меня это конфиг для вима и zshrc со всякими алиасами и настройками.
ChezMoi
как раз всю эту рутину берет на себя. Из коробки есть синхронизация между устройствами, поддержка git, создание набора конфигураций для разных ОС, шаблоны и куча еще всякого.На убунту ставится так:
snap install chezmoi --classic
Для других операционок мануальчик здесь.
Ну поставили и чо дальше? А дальше запускаем:
chezmoi init
Добавляем например .bashrc
chezmoi add ~/.bashrc
Эта команда скопирует bashrc в
~/.local/share/chezmoi/dot_bashrc
Теперь отредактируй файл:
chezmoi edit ~/.bashrc
И посмотрим изменения:
chezmoi diff
То есть началась вестись история изменений, что довольно удобно. Теперь например ты запортачил свой
.bashrc
в следствии экспериментов, как откатиться?Запускаем:
chezmoi -v apply
Нажимаешь к пример «o» = overwrite.
Хоба! И bashrc успешно восстанавливается. Прекрасно!
Теперь как с гитом работать:
chezmoi cd
git add .
git commit -m "Initial commit"
git remote add origin git.com:$GITHUB_USERNAME/dotfiles.git
git branch -M main
git push -u origin main
В принципе стандартная практика, первой командой переходим в каталог
~/.local/share/chezmoi
ну а дальше база гита.Затем на другой машине делаем:
chezmoi init https://github.com/$GITHUB_USERNAME/dotfiles.git
Конфиги успешно подтягиваются. Если репа приватная, то на офф сайте есть чтиво как это настроить.
Я этим пользоваться не буду, мне привычнее свои поделки запускать. Но ты имей в виду что существует такая пепяка. Возможно где-то прикрутишь и оно тебе облегчит трудовые будни.
Сайт проекта: https://www.chezmoi.io/
На гитхабе: https://github.com/twpayne/chezmoi
tags: #utilites #linux
—
🔔 ➡️
🤩 Пятница — это продакшн, который уже не твоя проблема.
Частенько для установки какого-то софта в линукс, предлагают использовать какой-то snap.
Когда snap появился я как-то скептически к нему отнесся. Мол, чо за хуйня, есть же apt и еже подобные коробочные варианты. Больше наверное меня беспокоило что засрётся система какой-то неведомой шляпой.
ㅤ
Время шло и snap появился в коробке. Всё больше вкусных репок стало инсталиться именно через эту штуковину. Пришлось лезть в нору и знакомиться.
Короче snap это пакетный менеджер, кто бы мог подумать.
Фишка snap — пакеты работают на любом дистрибутиве Ubuntu, Fedora, Arch, Debian и др. без необходимости адаптации под конкретный дистрибутив.
То есть создается один пакет с софтиной и он подходит под все дистрибутивы. Красота!
Получается что-то вроде докер контейнера, который заработает на любой машине.
А еще такой софт запускается в песочнице. Тут безопасники сразу ставят плюсик.
А еще установленные пакеты автоматически обновляются в фоне и они всегда актуальны.
А еще snap пакет содержит все зависимости и библиотеки, которые требуются для запуска софтины.
То есть твой линукс не будет загажен файлами, библиотеками, доп-софтом и т.п. Всё это уже есть в рамках пакета. Никаких конфликтов, никаких танцев с бубном. Да, танцы порой случаются, но редко.
Ну ты понял… а когда применять apt, а когда snap?
➡️ snap хорошо подходит для:
— для приложений, которые часто обновляются (камень в гитлаб).
— упрощённого развёртывания на разных дистрибутивах.
— обеспечения безопасности через контейнеризацию.
➡️ apt предпочтительнее для:
— системных компонентов и пакетов, тесно интегрированных с операционной системой.
— софта, требующего максимальной производительности.
Вот и всё! Не такой snap и страшный. Вечерком еще покажу кое-что интересное (не письку).
tags: #linux
—
🔔 ➡️
Частенько для установки какого-то софта в линукс, предлагают использовать какой-то snap.
snap install chezmoi
Когда snap появился я как-то скептически к нему отнесся. Мол, чо за хуйня, есть же apt и еже подобные коробочные варианты. Больше наверное меня беспокоило что засрётся система какой-то неведомой шляпой.
ㅤ
Время шло и snap появился в коробке. Всё больше вкусных репок стало инсталиться именно через эту штуковину. Пришлось лезть в нору и знакомиться.
Короче snap это пакетный менеджер, кто бы мог подумать.
Фишка snap — пакеты работают на любом дистрибутиве Ubuntu, Fedora, Arch, Debian и др. без необходимости адаптации под конкретный дистрибутив.
То есть создается один пакет с софтиной и он подходит под все дистрибутивы. Красота!
Получается что-то вроде докер контейнера, который заработает на любой машине.
А еще такой софт запускается в песочнице. Тут безопасники сразу ставят плюсик.
А еще установленные пакеты автоматически обновляются в фоне и они всегда актуальны.
А еще snap пакет содержит все зависимости и библиотеки, которые требуются для запуска софтины.
То есть твой линукс не будет загажен файлами, библиотеками, доп-софтом и т.п. Всё это уже есть в рамках пакета. Никаких конфликтов, никаких танцев с бубном. Да, танцы порой случаются, но редко.
Ну ты понял… а когда применять apt, а когда snap?
➡️ snap хорошо подходит для:
— для приложений, которые часто обновляются (камень в гитлаб).
— упрощённого развёртывания на разных дистрибутивах.
— обеспечения безопасности через контейнеризацию.
➡️ apt предпочтительнее для:
— системных компонентов и пакетов, тесно интегрированных с операционной системой.
— софта, требующего максимальной производительности.
Вот и всё! Не такой snap и страшный. Вечерком еще покажу кое-что интересное (не письку).
tags: #linux
—
🔔 ➡️
👀 Один рубит - семеро в хуй трýбят!
Попросил сегодня на собесе кандидата зачистить nginx логи. Кандидат на роль девопс (мидл) на вилку 200-250к.
Зачистил —
Мде блядь… это будет интересно!
ㅤ
Задаю следующий вопрос — Серёжа, а почему файл
Где карта Билли? Нам нужна карта!
Внятного ответа не получил, что-то на уровне — он появится спустя сутки, когда logrotate отработает. Дада… будем сутки без логов сидеть. А если нет logrotate?
Короче, если хочешь зачистить файл, есть несколько безопасных способов.
Первый способ:
Тут мы перезаписываем лог-файл с помощью оператора редиректа «>».
Это безопасно для процесса, который продолжает записывать в лог, поскольку процесс будет продолжать писать в тот же файл, а его дескриптор не изменится.
Ключевая фраза — дескриптор не изменится. А когда ты этот файл через
Второй способ:
Третий способ:
Некоторые сервисы, например, apache или nginx, позволяют отправить сигнал процессу для того, чтобы он закрыл текущий лог-файл и открыл новый (сигнал USR1). В этом случае процесс продолжит работать, но логи будут записываться в новый файл.
Где
Четвертый вариант — тот самый logrotate, но его рассматривать не будем.
Я пользуюсь первым вариантом с символом перенаправления «>». Стильно, модно, молодежно!
Короче сначала думаем головой, а потом уже пользуемся тяжелой артиллерией вроде
А какие способы обнуления знаешь ты? Про аклкашку не пишите, этот способ знают все.
tags: #рабочиебудни #linux
—
🔔 ➡️
Попросил сегодня на собесе кандидата зачистить 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
—
🔔 ➡️
Верной дорогой идёте товарищи...
ㅤ
Уровень статьи средне-сложный. Я не буду объяснять, как завести пользователя, как прописать ему оболочку, как настроить аутентификацию по ключам. Информации об этом валом.
Сегодня мы рассмотрим как сделать «тупиковую машину». Под ней я понимаю машину, попасть на которую можно через интернет по ssh, но на самой этой машине интернета нет.
Заинтриговал? Мозг немного взорвался? Короче, делаем ssh-прокси.
⁉️ Для чего это нужно?
Это можно использовать для раздачи доступа сторонним пользователям для управления ресурсами внутри сети, для студентов, работающих на удалёнке. (студенты IT - самые агрессивные пользователи).
Короче для минимизации рисков информационной безопасности. Скажу сразу, это не панацея. Инфу/файлы можно таскать через буффер обмена. Но много информации так не передашь.
Поехали!
Понадобится 2 машины: Бастионная (Jump-сервер, ssh-прокси) - машина, которая торчит открытым портом ssh в интернет.
И Тупиковая - машина (возможно виртуалка), с открытым в локалку портом ssh, на которой будет работать пользователь. И у которой нет доступа в инет (закрыт на периметровом маршрутизаторе. Или не прописаны шлюзы.
Основное условие у пользователя не должно быть root, а то сменит IP/MAC, пропишет шлюзы...). (допустим ее локальный ip
С Бастионной машины должен быть доступ к Тупиковой по ssh, внутри локалки.
НА БАСТИОННОЙ МАШИНЕ. (аутентификация по ключам уже настроена, ssh защищена от быстрого перебора)
1. Заводим пользователя, например, Tagd83j6 с паролем >=20 символов (не пригодится)
2. Добавляем публичный ключ Пользователя. (Он обычно с парольной фразой) в
3. Генерим ключ без пароля для доступа к Тупиковой машине. (лучше ed25519).
4. Домашней папке Tagd83j6 создаем файл типа
НА ТУПИКОВОЙ МАШИНЕ (аутентификация по ключам уже настроена)
1. Заводим пользователя Tagd83j6 с паролем >=20 символов (не пригодится)
2. добавляем публичный ключ(с Бастионной машины. п3) в
Все. Теперь, если на Бастионной машине от root набрать
Сразу должны попасть на Тупиковую машину.
Собственно все.
Аутентификация пользователя производится на Бастионной машине!!!
При подключении к Бастионной машине нас сразу перебрасывает на Тупиковую. На ней есть локалка, но нет интернета.
Вопросы, критика, плюсики приветствуется.
tags: #networks #linux © by Tagd Tagd
—
🔔 ➡️
ㅤ
Уровень статьи средне-сложный. Я не буду объяснять, как завести пользователя, как прописать ему оболочку, как настроить аутентификацию по ключам. Информации об этом валом.
Сегодня мы рассмотрим как сделать «тупиковую машину». Под ней я понимаю машину, попасть на которую можно через интернет по ssh, но на самой этой машине интернета нет.
Заинтриговал? Мозг немного взорвался? Короче, делаем ssh-прокси.
⁉️ Для чего это нужно?
Это можно использовать для раздачи доступа сторонним пользователям для управления ресурсами внутри сети, для студентов, работающих на удалёнке. (студенты IT - самые агрессивные пользователи).
Короче для минимизации рисков информационной безопасности. Скажу сразу, это не панацея. Инфу/файлы можно таскать через буффер обмена. Но много информации так не передашь.
Поехали!
Понадобится 2 машины: Бастионная (Jump-сервер, ssh-прокси) - машина, которая торчит открытым портом ssh в интернет.
И Тупиковая - машина (возможно виртуалка), с открытым в локалку портом ssh, на которой будет работать пользователь. И у которой нет доступа в инет (закрыт на периметровом маршрутизаторе. Или не прописаны шлюзы.
Основное условие у пользователя не должно быть root, а то сменит IP/MAC, пропишет шлюзы...). (допустим ее локальный ip
10.10.10.10
).С Бастионной машины должен быть доступ к Тупиковой по ssh, внутри локалки.
НА БАСТИОННОЙ МАШИНЕ. (аутентификация по ключам уже настроена, ssh защищена от быстрого перебора)
1. Заводим пользователя, например, Tagd83j6 с паролем >=20 символов (не пригодится)
2. Добавляем публичный ключ Пользователя. (Он обычно с парольной фразой) в
~/.ssh/authorized_keys
3. Генерим ключ без пароля для доступа к Тупиковой машине. (лучше ed25519).
4. Домашней папке Tagd83j6 создаем файл типа
shell10.sh
(666 root:root)
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
ssh $USER.10.10.10 2>/dev/null
sudo usermod -s /home/Tagd83j6/shell10.sh Tagd83j6
НА ТУПИКОВОЙ МАШИНЕ (аутентификация по ключам уже настроена)
1. Заводим пользователя Tagd83j6 с паролем >=20 символов (не пригодится)
2. добавляем публичный ключ(с Бастионной машины. п3) в
~/.ssh/authorized_keys
Все. Теперь, если на Бастионной машине от root набрать
su Tagd83j6
Сразу должны попасть на Тупиковую машину.
Собственно все.
Аутентификация пользователя производится на Бастионной машине!!!
При подключении к Бастионной машине нас сразу перебрасывает на Тупиковую. На ней есть локалка, но нет интернета.
Вопросы, критика, плюсики приветствуется.
tags: #networks #linux © by Tagd Tagd
—
🔔 ➡️
Интересно, но часто получаю вопрос: чем vi отличается от vim?
ㅤ
Если коротко, то все форки
Сейчас в современных дистрибутивах предустановлен именно
Так что ничего тут такого нет. Отличия — в функциональности.
Банально открой какой-нибудь
Но если будешь проверять, убедись что открывается именно
Такие дела. Вечерком залетит пост попизже от Tagd про права.
Хорошей всем рабочий недели!
tags: #linux
—
🔔 ➡️
ㅤ
Если коротко, то все форки
vi
это стероидные штуки, со своими свистоперделками, обвесами и т.п. А vi давно уже в деприкейтед.VIM =
VI iMproved, то есть — «VI Улучшенный»Прям готовое погоняло для викинга.
Сейчас в современных дистрибутивах предустановлен именно
vim
. Даже в CentOS 7 был предустановлен vim
вместо vi
(без симлинков).Так что ничего тут такого нет. Отличия — в функциональности.
Банально открой какой-нибудь
index.py
в vi
и потом в vim
, сразу увидишь что в vi
отсутствует подсветка синтаксиса + в vi
если память не изменяет — не было визуального режима.Но если будешь проверять, убедись что открывается именно
vi
, потому что в 99999% у тебя отроется vim
.Такие дела. Вечерком залетит пост попизже от Tagd про права.
Хорошей всем рабочий недели!
tags: #linux
—
🔔 ➡️
Тут меня попросили подробнее рассказать про права 330 на каталог.
🔤🔤🔥🔤🔤🔤🔤
Но начну я с того, что напомню, что права в текстовом формате несколько лучше, чем в числовом.
ㅤ
Конкретно дело касается права "X". Это то же самое, что "x" но касается только каталогов.
То есть
Ну, ладно, я отвлекся. 330.
Тут в чате Alex (генератор идей) правильно назвал права «черной комнатой». Клаcсная аналогия.
Короче, я баню зловредов, которые ломятся ко мне на ssh. Баню в разных филиалах. И филиалы сваливают ежедневные отчеты мне, в головной по sftp.
По-хорошему, нужно, чтоб для каждого филиала, отдельная учетка, все загружают, каждый в свой каталог... Но данные не особо ценные.
Но и паранойю никто не отменял. А если ломанут один филиал, и как начнут данные отравлять... :-)
В общем принял решение, что все работают под одной учеткой. Поставил права на папку 330 (-wx-wx---).
Эти права разрешают файл открыть, записать, удалить. Только нужно точно указать какой конкретно файл. Потому что список получить нельзя.
Файлы сваливаются с суффиксом, например
То есть на сервере в головном от root я вижу все файлы, а филиалы не видят не то что соседние файлы, но даже свой.
Эти права раньше часто ставили на папку upload на анонимных ftp серверах. Но и сейчас можно использовать, для заливки, бэкапов, например.
Да, знаю, сейчас опытные админы набегут и начнут рассказывать про rsync. Я архивы шифрую. А при работе с шифрованными архивами rsync работает хуже, чем sftp. (Ну, сначала контрольные суммы, потом сравнение, потом синхронизация).
А что там сравнивать... они всегда разные. Блин, опять скатился на больное... В общем, при одной учетке, формально можно считать sftp сервер анонимным, но с кругом пользователей, ограниченным ключами :-).
Применение прав 330 позволяет упростить заливку файлов с обеспечением некоторой секьюрности.
Для освежения памяти очень рекомендую статью chmod в википедии.
tags: #security #linux
—
🔔 ➡️
🔤🔤🔥🔤🔤🔤🔤
Но начну я с того, что напомню, что права в текстовом формате несколько лучше, чем в числовом.
ㅤ
Конкретно дело касается права "X". Это то же самое, что "x" но касается только каталогов.
То есть
chmod -R +X ./
установит возможность поиска во всех подкаталогах текущего, но не сделает все файлы исполняемыми!Ну, ладно, я отвлекся. 330.
Тут в чате Alex (генератор идей) правильно назвал права «черной комнатой». Клаcсная аналогия.
Короче, я баню зловредов, которые ломятся ко мне на ssh. Баню в разных филиалах. И филиалы сваливают ежедневные отчеты мне, в головной по sftp.
По-хорошему, нужно, чтоб для каждого филиала, отдельная учетка, все загружают, каждый в свой каталог... Но данные не особо ценные.
Но и паранойю никто не отменял. А если ломанут один филиал, и как начнут данные отравлять... :-)
В общем принял решение, что все работают под одной учеткой. Поставил права на папку 330 (-wx-wx---).
Эти права разрешают файл открыть, записать, удалить. Только нужно точно указать какой конкретно файл. Потому что список получить нельзя.
Файлы сваливаются с суффиксом, например
filXXX_Ohd1Ul.txt
Имя файла для каждого филиала всегда одно и то же, префикс - название филиала, суффикс набор букв (защита от перебора).То есть на сервере в головном от root я вижу все файлы, а филиалы не видят не то что соседние файлы, но даже свой.
Эти права раньше часто ставили на папку upload на анонимных ftp серверах. Но и сейчас можно использовать, для заливки, бэкапов, например.
Да, знаю, сейчас опытные админы набегут и начнут рассказывать про rsync. Я архивы шифрую. А при работе с шифрованными архивами rsync работает хуже, чем sftp. (Ну, сначала контрольные суммы, потом сравнение, потом синхронизация).
А что там сравнивать... они всегда разные. Блин, опять скатился на больное... В общем, при одной учетке, формально можно считать sftp сервер анонимным, но с кругом пользователей, ограниченным ключами :-).
Применение прав 330 позволяет упростить заливку файлов с обеспечением некоторой секьюрности.
Для освежения памяти очень рекомендую статью chmod в википедии.
tags: #security #linux
—
🔔 ➡️
Сегодня настроение ныть почему-то нет, поэтому научимся открывать файл на нужной строке в разных редакторах.
ㅤ
А нахуя это нужно? Ну ХЗ, я обычно этим не пользуюсь, открываю полностью файл и ищу нужную мне строку. Но это вкусовщина, кто как привык.
Вообще я встречал людей, которые так открывают файлы, когда видят нечто подобное:
Хуяк и открыл
Короче давай посмотрим как это сделать.
Создаем файл для теста:
Получаем такое содержимое:
Ну и теперь давай открывать это:
➡️ mcedit
➡️ less
➡️ nano
➡️ vim
Вот такие пироги. А какие еще редакторы ты знаешь в которых можно открыть файл на определенной строке? Камон в комменты!
tags: #linux #tricks #bash
—
🔔 ➡️
ㅤ
А нахуя это нужно? Ну ХЗ, я обычно этим не пользуюсь, открываю полностью файл и ищу нужную мне строку. Но это вкусовщина, кто как привык.
Вообще я встречал людей, которые так открывают файлы, когда видят нечто подобное:
Error in file "script.py" on line 42: NameError: name 'variable' is not defined
Хуяк и открыл
script.py
сразу на 42 строке.Короче давай посмотрим как это сделать.
Создаем файл для теста:
( printf '%s\n' {A..Z}-$[++I] > /tmp/bashdays.txt )
Получаем такое содержимое:
A-1
B-2
C-3
D-4
E-5
F-6
G-7
H-8
I-9
...
Ну и теперь давай открывать это:
➡️ mcedit
mcedit +7 /tmp/bashdays.txt
➡️ less
less -w +11 /tmp/bashdays.txt
➡️ nano
nano +14 /tmp/bashdays.txt
➡️ vim
vim +4 /tmp/bashdays.txt
Вот такие пироги. А какие еще редакторы ты знаешь в которых можно открыть файл на определенной строке? Камон в комменты!
tags: #linux #tricks #bash
—
🔔 ➡️
👍1