📌 Основы регулярных выражений (RegEx)
🔹 Символы для поиска
. – любой символ, кроме новой строки
\w – любой буквенно-цифровой символ + _
\W – любой НЕ буквенно-цифровой символ
\d – любая цифра (0-9)
\D – любой НЕ цифровой символ
\s – любой пробельный символ
\S – любой НЕ пробельный символ
🔹 Якоря
^ – начало строки
$ – конец строки
\b – граница слова
\B – НЕ граница слова
🔹 Квантификаторы
* – 0 или больше повторений
+ – 1 или больше повторений
? – 0 или 1 повторение
{n} – ровно n повторений
{n,} – n или больше повторений
{n,m} – от n до m повторений
🔹 Классы символов
[abc] – любой из символов a, b, c
[^abc] – любой символ, кроме a, b, c
[a-z] – любой символ от a до z
[0-9] – любая цифра от 0 до 9
🔹 Группы и альтернативы
(...) – захватывающая группа
(?:...) – НЕ захватывающая группа
| – “или” между выражениями
🔹 Экранирование специальных символов
\ – экранирование (\. означает точку)
🔹 Примеры
\d{3}-\d{2}-\d{4} – совпадает с SSN (123-45-6789)
\w+@\w+\.\w+ – совпадает с email-адресом
📌 Полезно при поиске, валидации данных и обработке текста!
👉 @sysodminof
🔹 Символы для поиска
. – любой символ, кроме новой строки
\w – любой буквенно-цифровой символ + _
\W – любой НЕ буквенно-цифровой символ
\d – любая цифра (0-9)
\D – любой НЕ цифровой символ
\s – любой пробельный символ
\S – любой НЕ пробельный символ
🔹 Якоря
^ – начало строки
$ – конец строки
\b – граница слова
\B – НЕ граница слова
🔹 Квантификаторы
* – 0 или больше повторений
+ – 1 или больше повторений
? – 0 или 1 повторение
{n} – ровно n повторений
{n,} – n или больше повторений
{n,m} – от n до m повторений
🔹 Классы символов
[abc] – любой из символов a, b, c
[^abc] – любой символ, кроме a, b, c
[a-z] – любой символ от a до z
[0-9] – любая цифра от 0 до 9
🔹 Группы и альтернативы
(...) – захватывающая группа
(?:...) – НЕ захватывающая группа
| – “или” между выражениями
🔹 Экранирование специальных символов
\ – экранирование (\. означает точку)
🔹 Примеры
\d{3}-\d{2}-\d{4} – совпадает с SSN (123-45-6789)
\w+@\w+\.\w+ – совпадает с email-адресом
📌 Полезно при поиске, валидации данных и обработке текста!
👉 @sysodminof
Как увеличить размер каталога /tmp/
Иногда необходимо увеличить размер каталога, который в свою очередь находится в корневом каталоге системы.
Решить это можно перемонтированием каталога:
# mount -t tmpfs tmpfs /tmp -o size=1024M,mode=1777,remount
Теперь проверим, есть ли у нас каталог в фстабе:
# cat/etc/fstab
Если нет, создаем, если существует то выполняем следующую команду:
# none /tmp tmpfs size=1024M,mode=1777,rw 0 0
Теперь готов каталог/tmp/ с размером, указанным в операторе “size” размером 1024 mb.
👉 @sysodminof
Иногда необходимо увеличить размер каталога, который в свою очередь находится в корневом каталоге системы.
Решить это можно перемонтированием каталога:
# mount -t tmpfs tmpfs /tmp -o size=1024M,mode=1777,remount
Теперь проверим, есть ли у нас каталог в фстабе:
# cat/etc/fstab
Если нет, создаем, если существует то выполняем следующую команду:
# none /tmp tmpfs size=1024M,mode=1777,rw 0 0
Теперь готов каталог/tmp/ с размером, указанным в операторе “size” размером 1024 mb.
👉 @sysodminof
Как отлаживать bash-script-ы по шагам
Мне всегда хотелось иметь возможность отлаживать bash-scripts так же, как и любой другой код, т.е. по шагам, и bash такую возможность предусмотрел, но о ней не все знают. Несмотря на довольно большой опыт использования Linux, я дошёл до неё только недавно.
Волшебная строчка, которую нужно добавить после #!/bin/bash, чтоб скрипт можно было отлаживать по шагам
Процесс отладки
Запускаем скрипт, перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши <ENTER>.
Если понимаем, что что-то пошло не так, нажимаем Ctrl+C и выходим из отладки.
Ингредиенты
команда trap, которая умеет перехватывать разные сигналы и в нашем случае она перехватывает сигнал DEBUG, посылаемый перед выполнением команды
команда read, которая умеет ожидать ввода чего-нибудь с клавиатуры (в данном случае нам нужно только либо ENTER либо Ctrl+C
переменная окружения $BASH_COMMAND, валидная внутри обработчика команды trap.
👉 @sysodminof
Мне всегда хотелось иметь возможность отлаживать bash-scripts так же, как и любой другой код, т.е. по шагам, и bash такую возможность предусмотрел, но о ней не все знают. Несмотря на довольно большой опыт использования Linux, я дошёл до неё только недавно.
Волшебная строчка, которую нужно добавить после #!/bin/bash, чтоб скрипт можно было отлаживать по шагам
#!/bin/bash
trap 'echo "# $BASH_COMMAND";read' DEBUG
echo line1
echo line2
echo line3
Процесс отладки
Запускаем скрипт, перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши <ENTER>.
Если понимаем, что что-то пошло не так, нажимаем Ctrl+C и выходим из отладки.
Ингредиенты
команда trap, которая умеет перехватывать разные сигналы и в нашем случае она перехватывает сигнал DEBUG, посылаемый перед выполнением команды
команда read, которая умеет ожидать ввода чего-нибудь с клавиатуры (в данном случае нам нужно только либо ENTER либо Ctrl+C
переменная окружения $BASH_COMMAND, валидная внутри обработчика команды trap.
# Online Bash Shell.
# Code, Compile, Run and Debug Bash script online.
# Write your code in this editor and press "Run" button to execute it.
trap 'echo "# $BASH_COMMAND";read' DEBUG
echo line1
echo line2
echo line3
echo "Hello World";
👉 @sysodminof
👍2
🔍 Обработка содержимого файла в Bash
Часто при работе с файлами в Bash применяют вложенные циклы. Внешний цикл перебирает строки файла, а внутренний — обрабатывает каждую строку по отдельности.
Этот метод особенно полезен для работы с CSV-файлами или другими текстовыми файлами с разделителями. Для правильной обработки данных можно использовать переменную окружения IFS (Internal Field Separator), задавая нужный символ-разделитель.
📌 Пример кода:
📌 Что делает этот скрипт?
- Читает файл /etc/passwd построчно
- Для каждой строки разбивает данные по ":" (разделителю в файле)
- Выводит каждое поле строки отдельно
⚠️ Важно!
При обработке больших файлов такой способ может быть неэффективным из-за использования подстановки команд $(cat file). Лучше применять while read, например:
Такой вариант работает быстрее и не создает проблем с пробелами в строках! 🚀
👉 @sysodminof
Часто при работе с файлами в Bash применяют вложенные циклы. Внешний цикл перебирает строки файла, а внутренний — обрабатывает каждую строку по отдельности.
Этот метод особенно полезен для работы с CSV-файлами или другими текстовыми файлами с разделителями. Для правильной обработки данных можно использовать переменную окружения IFS (Internal Field Separator), задавая нужный символ-разделитель.
📌 Пример кода:
IFS=$'\n' # Устанавливаем разделитель строк
for entry in $(cat /etc/passwd) # Читаем файл построчно
do
echo "Значения в строке: $entry"
IFS=: # Меняем разделитель для обработки полей
for value in $entry # Разбираем строку по полям
do
echo " -> $value"
done
done
📌 Что делает этот скрипт?
- Читает файл /etc/passwd построчно
- Для каждой строки разбивает данные по ":" (разделителю в файле)
- Выводит каждое поле строки отдельно
⚠️ Важно!
При обработке больших файлов такой способ может быть неэффективным из-за использования подстановки команд $(cat file). Лучше применять while read, например:
while IFS=: read -r user pass uid gid info home shell
do
echo "Пользователь: $user, UID: $uid, Домашняя папка: $home"
done < /etc/passwd
Такой вариант работает быстрее и не создает проблем с пробелами в строках! 🚀
👉 @sysodminof
Media is too big
VIEW IN TELEGRAM
Что такое systemd? Управление демонами linux c помощью systemctl
В этом видео я расскажу что такое systemd, обзор небольшой. Управление сервисами и демонами.
В видео вы узнаете:
где хранится systemd unit
какие бывают юниты
как посмотреть статус сервиса
как добавить сервис в автозагрузку
как запустить/остановить сервис
как запретить запускать сервис
А также мини man systemctl:
systemctl is-enabled
systemctl list-units -t тип --all
systemctl status
systemctl start
systemctl stop
systemctl restart
systemctl reload
systemctl enable
systemctl disable
systemctl mask
systemctl unmask
👉 @sysodminof
В этом видео я расскажу что такое systemd, обзор небольшой. Управление сервисами и демонами.
В видео вы узнаете:
где хранится systemd unit
какие бывают юниты
как посмотреть статус сервиса
как добавить сервис в автозагрузку
как запустить/остановить сервис
как запретить запускать сервис
А также мини man systemctl:
systemctl is-enabled
systemctl list-units -t тип --all
systemctl status
systemctl start
systemctl stop
systemctl restart
systemctl reload
systemctl enable
systemctl disable
systemctl mask
systemctl unmask
👉 @sysodminof
Как защитить сервер Linux
Ограничьте, кто может использовать sudo
Почему
sudo позволяет учетным записям выполнять команды от имени других учетных записей, включая root. Мы хотим убедиться, что только нужные нам учетные записи могут использовать sudo.
Цели
привилегии sudo ограничены теми, кто входит в указанную нами группу.
Примечания
Возможно, ваша сборка уже сделала это, или у вас уже есть специальная группа, предназначенная для этой цели, поэтому сначала проверьте.
Debian создаёт группу sudo. Чтобы просмотреть пользователей, которые входят в эту группу (таким образом, имеют привилегии sudo):
cat /etc/group | grep "sudo"
Шаги
1 - Создайте группу:
sudo groupadd sudousers
2 - Добавьте учетную запись(и) в группу:
sudo usermod -a -G sudousers user1
sudo usermod -a -G sudousers user2
sudo usermod -a -G sudousers ...
Вам нужно будет сделать это для каждой учетной записи на вашем сервере, которой нужны привилегии sudo.
3 - Создайте резервную копию файла конфигурации sudo /etc/sudoers:
sudo cp --archive /etc/sudoers /etc/sudoers-COPY-$(date +"%Y%m%d%H%M%S")
4 - Отредактируйте файл конфигурации sudo /etc/sudoers:
sudo visudo
5 - Скажите sudo, чтобы только пользователи из группы sudousers могли использовать sudo, добавив эту строку, если ее еще нет:
%sudousers ALL=(ALL:ALL) ALL
👉 @sysodminof
Ограничьте, кто может использовать sudo
Почему
sudo позволяет учетным записям выполнять команды от имени других учетных записей, включая root. Мы хотим убедиться, что только нужные нам учетные записи могут использовать sudo.
Цели
привилегии sudo ограничены теми, кто входит в указанную нами группу.
Примечания
Возможно, ваша сборка уже сделала это, или у вас уже есть специальная группа, предназначенная для этой цели, поэтому сначала проверьте.
Debian создаёт группу sudo. Чтобы просмотреть пользователей, которые входят в эту группу (таким образом, имеют привилегии sudo):
cat /etc/group | grep "sudo"
Шаги
1 - Создайте группу:
sudo groupadd sudousers
2 - Добавьте учетную запись(и) в группу:
sudo usermod -a -G sudousers user1
sudo usermod -a -G sudousers user2
sudo usermod -a -G sudousers ...
Вам нужно будет сделать это для каждой учетной записи на вашем сервере, которой нужны привилегии sudo.
3 - Создайте резервную копию файла конфигурации sudo /etc/sudoers:
sudo cp --archive /etc/sudoers /etc/sudoers-COPY-$(date +"%Y%m%d%H%M%S")
4 - Отредактируйте файл конфигурации sudo /etc/sudoers:
sudo visudo
5 - Скажите sudo, чтобы только пользователи из группы sudousers могли использовать sudo, добавив эту строку, если ее еще нет:
%sudousers ALL=(ALL:ALL) ALL
👉 @sysodminof
Media is too big
VIEW IN TELEGRAM
Защита от подбора пароля на устройствах MikroTik
Если у вас есть маршрутизатор MikroTik с белым IP-адресом и открытым стандартным портом SSH, вероятно, вы заметили, что журнал заполнен неудачными попытками входа в систему. В большинстве случаев это происходит из-за неумолимых попыток брутфорса SSH со стороны злоумышленников. Сегодня я расскажу вам, как можно защитить себя от подобных атак на устройствах MikroTik. Мы создадим что-то аналогичное fail2ban.
источник
👉 @sysodminof
Если у вас есть маршрутизатор MikroTik с белым IP-адресом и открытым стандартным портом SSH, вероятно, вы заметили, что журнал заполнен неудачными попытками входа в систему. В большинстве случаев это происходит из-за неумолимых попыток брутфорса SSH со стороны злоумышленников. Сегодня я расскажу вам, как можно защитить себя от подобных атак на устройствах MikroTik. Мы создадим что-то аналогичное fail2ban.
источник
👉 @sysodminof
Terminus (Tabby) – Кросс-платформенный терминал с возможностью тонкой конфигурации.
Данный терминал имеет интегрированный ssh-клиент - что делает его превосходной заменой стандартного PowerShell или PuTTY на Windows.
https://github.com/Eugeny/tabby
👉 @sysodminof
Данный терминал имеет интегрированный ssh-клиент - что делает его превосходной заменой стандартного PowerShell или PuTTY на Windows.
https://github.com/Eugeny/tabby
👉 @sysodminof
🧠 Что делает команда exec в bash — и зачем она нужна?
Многие слышали о exec, но используют редко. А зря! Это мощный инструмент, особенно в скриптах и системном администрировании.
🔹 Что делает exec?
Она заменяет текущий процесс новым, без создания дочернего. То есть, вместо запуска новой программы — текущий процесс «перевоплощается» в неё.
Простой пример:
exec topВ этом случае оболочка bash будет заменена на top, и когда вы закроете top, сессия завершится.
🛠 Где это может пригодиться:
1. В systemd-юнитах — при запуске сервиса через скрипт:
#!/bin/bash
exec /usr/bin/myapp
Это позволит системе правильно отслеживать основной процесс.
2. В контейнерах (например, Docker) — если вы запускаете скрипт в качестве ENTRYPOINT, используйте exec, чтобы сигналы (например, SIGTERM) корректно передавались вашему приложению.
3. Для перенаправления ввода/вывода:
exec >> /var/log/myscript.log 2>&1
Всё, что будет выведено в stdout и stderr после этой строки — пойдёт в лог.
⚡ exec не делает магии, но помогает делать вещи правильно. Особенно там, где важна замена PID и корректная работа сигналов.
👉 @sysodminof
Многие слышали о exec, но используют редко. А зря! Это мощный инструмент, особенно в скриптах и системном администрировании.
🔹 Что делает exec?
Она заменяет текущий процесс новым, без создания дочернего. То есть, вместо запуска новой программы — текущий процесс «перевоплощается» в неё.
Простой пример:
exec topВ этом случае оболочка bash будет заменена на top, и когда вы закроете top, сессия завершится.
🛠 Где это может пригодиться:
1. В systemd-юнитах — при запуске сервиса через скрипт:
#!/bin/bash
exec /usr/bin/myapp
Это позволит системе правильно отслеживать основной процесс.
2. В контейнерах (например, Docker) — если вы запускаете скрипт в качестве ENTRYPOINT, используйте exec, чтобы сигналы (например, SIGTERM) корректно передавались вашему приложению.
3. Для перенаправления ввода/вывода:
exec >> /var/log/myscript.log 2>&1
Всё, что будет выведено в stdout и stderr после этой строки — пойдёт в лог.
⚡ exec не делает магии, но помогает делать вещи правильно. Особенно там, где важна замена PID и корректная работа сигналов.
👉 @sysodminof
Media is too big
VIEW IN TELEGRAM
Деление IP сети на подсети при помощи маски легко и быстро. Наглядный способ!
Как выделить подсеть нужного размера из большой IP сети? Как быстро и наглядно вычислить все адреса компьютеров в нужной подсети, маску для подсети нужного размера, как найти первые и последние адреса формируемых подсетей? Как выделить несколько подсетей разного размера? В этом видео вы найдете ответы на эти вопросы.
источник
👉 @sysodminof
Как выделить подсеть нужного размера из большой IP сети? Как быстро и наглядно вычислить все адреса компьютеров в нужной подсети, маску для подсети нужного размера, как найти первые и последние адреса формируемых подсетей? Как выделить несколько подсетей разного размера? В этом видео вы найдете ответы на эти вопросы.
источник
👉 @sysodminof
Не все логи одинаковы полезны: 3 истории из жизни
В своей статье я расскажу, как выявить проблемы в ПО, не имеющего исходного кода и написанного не вами, а так же как минимальными средствами выяснить, что происходит у вас в системе. Данный текст подойдет администраторам, где по условиям работы всё запрещено, а так же инженерам АСУТП, где систему приходится эксплуатировать в жестких рамках ИБ.
https://habr.com/ru/articles/790554/
👉 @sysodminof
В своей статье я расскажу, как выявить проблемы в ПО, не имеющего исходного кода и написанного не вами, а так же как минимальными средствами выяснить, что происходит у вас в системе. Данный текст подойдет администраторам, где по условиям работы всё запрещено, а так же инженерам АСУТП, где систему приходится эксплуатировать в жестких рамках ИБ.
https://habr.com/ru/articles/790554/
👉 @sysodminof
Media is too big
VIEW IN TELEGRAM
OpenSSH: Разбираем туннели
Мы с примерами разбираем прямые туннели, обратные и создаем SOCKS туннели для проксирования веб траффика.
источник
👉 @sysodminof
Мы с примерами разбираем прямые туннели, обратные и создаем SOCKS туннели для проксирования веб траффика.
источник
👉 @sysodminof
Как работает HTTPS?
Безопасный протокол передачи гипертекста
(HTTPS) - это расширение протокола передачи гипертекста (HTTP). HTTPS передает зашифрованные данные с использованием транспортного уровня безопасности (TLS). Если данные будут перехвачены в Интернете, все, что получит угонщик, - это двоичный код.
Как шифруются и дешифруются данные?
Шаг 1 - Клиент (браузер) и сервер устанавливают TCP-соединение.
Шаг 2 - Клиент отправляет серверу " client hello". Сообщение содержит набор необходимых алгоритмов шифрования (наборов шифров) и последнюю версию TLS, которую он может поддерживать. Сервер отвечает " server hello", чтобы браузер знал, может ли он поддерживать алгоритмы и версию TLS.
Затем сервер отправляет SSL-сертификат клиенту. Сертификат содержит открытый ключ, имя хоста, дату истечения срока действия и т. д. Клиент проверяет сертификат.
Шаг 3. После проверки SSL-сертификата клиент генерирует ключ сессии и шифрует его с помощью открытого ключа. Сервер получает зашифрованный ключ сеанса и расшифровывает его с помощью закрытого ключа.
Шаг 4 - Теперь, когда клиент и сервер владеют одним и тем же сеансовым ключом (симметричное шифрование), зашифрованные данные передаются по защищенному двунаправленному каналу.
Почему HTTPS переключается на симметричное шифрование при передаче данных? Есть две основные причины:
1. Безопасность: Асимметричное шифрование работает только в одну сторону. Это означает, что если сервер попытается отправить зашифрованные данные обратно клиенту, любой сможет расшифровать их с помощью открытого ключа.
2. Ресурсы сервера: Асимметричное шифрование добавляет довольно много математических накладных расходов. Оно не подходит для передачи данных в длительных сессиях.
👉 @sysodminof
Безопасный протокол передачи гипертекста
(HTTPS) - это расширение протокола передачи гипертекста (HTTP). HTTPS передает зашифрованные данные с использованием транспортного уровня безопасности (TLS). Если данные будут перехвачены в Интернете, все, что получит угонщик, - это двоичный код.
Как шифруются и дешифруются данные?
Шаг 1 - Клиент (браузер) и сервер устанавливают TCP-соединение.
Шаг 2 - Клиент отправляет серверу " client hello". Сообщение содержит набор необходимых алгоритмов шифрования (наборов шифров) и последнюю версию TLS, которую он может поддерживать. Сервер отвечает " server hello", чтобы браузер знал, может ли он поддерживать алгоритмы и версию TLS.
Затем сервер отправляет SSL-сертификат клиенту. Сертификат содержит открытый ключ, имя хоста, дату истечения срока действия и т. д. Клиент проверяет сертификат.
Шаг 3. После проверки SSL-сертификата клиент генерирует ключ сессии и шифрует его с помощью открытого ключа. Сервер получает зашифрованный ключ сеанса и расшифровывает его с помощью закрытого ключа.
Шаг 4 - Теперь, когда клиент и сервер владеют одним и тем же сеансовым ключом (симметричное шифрование), зашифрованные данные передаются по защищенному двунаправленному каналу.
Почему HTTPS переключается на симметричное шифрование при передаче данных? Есть две основные причины:
1. Безопасность: Асимметричное шифрование работает только в одну сторону. Это означает, что если сервер попытается отправить зашифрованные данные обратно клиенту, любой сможет расшифровать их с помощью открытого ключа.
2. Ресурсы сервера: Асимметричное шифрование добавляет довольно много математических накладных расходов. Оно не подходит для передачи данных в длительных сессиях.
👉 @sysodminof
👍1