en
Feedback
NetworkAdmin.ru

NetworkAdmin.ru

Open in Telegram

Авторский блог про сетевое и системное администрирование. Сайт: networkadmin.ru Реклама: @dad_admin Биржа: https://telega.in/c/networkadminru

Show more
4 725
Subscribers
No data24 hours
-57 days
No data30 days
Posts Archive
🏃 Баг с заглавными буквами в PowerShell при кириллической раскладке Несколько раз сталкивался с неприятной проблемой: при наборе или вставке текста в PowerShell внезапно "пропадают" заглавные буквы. Особенно заметно, если набираете команды в кириллической раскладке - PowerShell просто не реагирует на Shift.
Проблема возникает из-за сбоя в модуле PSReadLine, который отвечает за подсветку, автодополнение, историю команд и другие удобства в CLI.
Решение - обновить или переустановить PSReadLine:

# Проверим установленную версию
Get-Module | Where-Object Name -eq "PSReadLine" | Select-Object Name, Path

# Удалим старую версию
Remove-Module PSReadLine
Remove-Item "C:\Program Files\WindowsPowerShell\Modules\PSReadLine\*" -Recurse -Force

# Установим последнюю версию из PSGallery
Install-Module PSReadLine -Force
Модуль будет установлен в актуальной версии, и проблема с заглавными буквами исчезнет. После установки перезапустите PowerShell. ⭐️ Совет: добавьте в profile.ps1 строку Import-Module PSReadLine, если он не загружается автоматически. #powershell #windows 🧑‍💻 NetworkAdmin

🧠 #юмор 🧑‍💻 NetworkAdmin
🧠 #юмор 🧑‍💻 NetworkAdmin

Оптимизируем работу в Linux 🚀 Linux — сердце цифровой инфраструктуры 21 века. Эта ОС лежит в основе облаков, дата-центров и
+4
Оптимизируем работу в Linux 🚀 Linux — сердце цифровой инфраструктуры 21 века. Эта ОС лежит в основе облаков, дата-центров и серверов. А для ИТ-специалистов Linux — стандарт де-факто: мощный инструмент для автоматизации, кибербезопасности и администрирования. Совместно с каналом NetworkAdmin.ru подготовили дельные лайфхаки для облегчения и ускорения работы с Linux — читайте в карточках! На канале есть много другой полезной информации для специалистов в области сетевого администрирования, посмотреть можете здесь. #BellintegratorTeam #советыBell

⭐️ Полезные трюки с grep и регулярками в unix-консоли Сегодня расскажу про несколько простых приемов, которые помогут вам эффективнее работать с текстом и конфигами в терминале. Речь пойдёт о символах ^ и $ - они обозначают начало и конец строки в регулярных выражениях. 1️⃣ Символ ^ - начало строки Очень удобно, когда нужно исключить строки, начинающиеся с комментариев (#), но оставить те, где # идёт в середине строки:

grep -E -v '^#' nginx.conf
Если комментарий начинается с табуляции, команда выше его не отфильтрует. Чтобы учесть таб, нужно ввести его "вручную": 1. Наведите курсор после ^ 2. Нажмите Ctrl + V, затем Tab Получится поиск по строкам с табом и # в начале:

grep -E -v '^ #' nginx.conf
(Скопированная команда не сработает — таб символ нужно вставить вручную в консоли!) Также ^ помогает искать по началу имени файла:

ls | grep ^error
2️⃣ Символ $ - конец строки Допустим, в директории есть файлы *.png и *.png.webp. Если сделать:

ls | grep .png
Вы получите оба варианта. А чтобы отфильтровать только те, что заканчиваются на .png:

ls | grep .png$
Можно объединить два условия:

ls | grep ^error | grep .png$
3️⃣ Комбинация ^$ - пустая строка Очень удобно, если хотите вычистить конфиг от пустых строк и комментариев:

grep -E -v '^#|^$' nginx.conf
Эти трюки работают с любой текстовой утилитой (grep, sed, awk) и экономят кучу времени при разборе логов, конфигов и вывода в терминале. #linux #grep 🧑‍💻 NetworkAdmin

🔒 Безопасность Python-скриптов: как защитить код и данные Python - язык простой и удобный, но в плане безопасности исходников у него есть слабое место: скрипты легко читаются, модифицируются и анализируются. Если ты разрабатываешь утилиту, обрабатываешь конфиденциальные данные или просто хочешь защититься от «любопытных», стоит продумать меры защиты. Разберём основные подходы: 1️⃣ Компиляция в байткод Python автоматически компилирует .py в .pyc, но и их можно дизассемблировать. Более надёжный способ - сборка в .pyd/.so (динамическую библиотеку):

pip install cython
cythonize -i myscript.py
На выходе - скомпилированный бинарник. Исходный код спрятан, но не полностью защищён от реверса. 2️⃣ Шифрование и упаковка. Можно шифровать скрипты и расшифровывать их только в момент выполнения: Использовать PyArmor, который шифрует байткод:

pip install pyarmor
pyarmor obfuscate myscript.py
Использовать Nuitka или PyInstaller - обфускация + упаковка в исполняемый файл:

pyinstaller --onefile myscript.py
3️⃣ Изоляция через виртуальное окружение. Размещай код в venv, где минимум привилегий и стороннего ПО. Для чувствительных задач - запускай скрипты через Docker, изолируя переменные окружения и доступ к файловой системе. 4️⃣ Безопасное хранение секретов. Не храни API-ключи и пароли в коде:
📍 Используй .env файл + библиотеку python-dotenv 📍 Храни секреты в HashiCorp Vault, AWS SSM или аналогах 📍 Шифруй конфиги с GPG, если нужно хранить локально
Полной защиты от реверса не будет - Python не компилируемый в машинный код язык. Но затруднить анализ, защитить данные и повысить безопасность вполне реально. #python #security 🧑‍💻 NetworkAdmin

Не забывайте про защиту от несанкционированного доступа, кошачьего в том числе 😎 #юмор 🧑‍💻 NetworkAdmin
Не забывайте про защиту от несанкционированного доступа, кошачьего в том числе 😎 #юмор 🧑‍💻 NetworkAdmin

CI/CD на минималках: как быстро развернуть GitLab Runner на своём сервере Если вы используете GitLab и хотите автоматизировать сборки, тесты или деплой - вам нужен GitLab Runner. Это агент, который обрабатывает пайплайны и запускает описанные в .gitlab-ci.yml задачи. 🔎 Что нужно? 📍 Сервер (виртуалка или физика) с Linux 📍 GitLab проект 📍 Пара минут времени ⚙️ Установка GitLab Runner. Официальная установка для Debian/Ubuntu:

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt install gitlab-runner
▪️ Регистрация Runner'а Берём токен в GitLab: Settings → CI/CD → Runners → Expand → Registration token И запускаем регистрацию:

sudo gitlab-runner register
▪️ Ответы на вопросы:
URL GitLab: https://gitlab.com или адрес вашего GitLab Token: тот, что скопировали Описание: любое имя Теги: по желанию Executor: shell, docker, virtualbox и др. (начать можно с shell)
▪️ Пример .gitlab-ci.yml для начала:

stages:
  - test

test_job:
  stage: test
  script:
    - echo "Тестируем Runner"
    - uname -a
Добавьте файл в корень репозитория, закоммитьте и запушьте. После пуша GitLab запустит пайплайн, и ваш Runner выполнит команду. ❓ Зачем это нужно?
📍 Автоматизация тестов, сборки, деплоя 📍 Локальный контроль - runner работает на вашем железе 📍 Безопасность - код не уходит в сторонние облака 📍 Можно изолировать окружения (через Docker executor)
#gitlab #linux 🧑‍💻 NetworkAdmin

Автоматическое монтирование дисков в Linux через systemd Многие по привычке используют fstab для автоподключения дисков в линукс. Но systemd предлагает более гибкий и надёжный механизм - монтирование через unit-файлы. Это особенно полезно: 📍 в средах с динамически подключаемыми дисками 📍 при работе с нестабильными устройствами (например, сетевыми томами) 📍 для точного контроля зависимостей и порядка монтирования ▪️ Пример: монтируем диск /dev/sdb1 в /mnt/data 1️⃣ Создаём unit-файл для монтирования:

sudo systemctl edit --force --full mnt-data.mount
Пример содержимого:

[Unit]
Description=Монтирование диска в /mnt/data
After=network.target

[Mount]
What=/dev/sdb1
Where=/mnt/data
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target
Обратите внимание: имя unit-файла mnt-data.mount формируется по пути монтирования: /mnt/data → mnt-data.mount 2️⃣ Активируем и проверяем

sudo systemctl daemon-reexec
sudo systemctl enable mnt-data.mount
sudo systemctl start mnt-data.mount
Проверим статус:

systemctl status mnt-data.mount
⭐️ Преимущества systemd-монтажа:
📍 Учитываются зависимости (можно настроить Requires= и After=) 📍 Возможность рестартов и таймаутов 📍 Удобство в контейнерах и виртуальных средах 📍 Логирование и отладка через journalctl
🌟 Важно: если диск может не быть доступен при загрузке, рассмотрите опции nofail или отложенное монтирование через automount. #linux #systemd 🧑‍💻 NetworkAdmin

Repost from Linux Club
Подборка каналов IT от наших друзей: 🎬 https://t.me/videos_it  — Самая большая база видеоуроков по IT в Рунете 🐧 https://t.me/Linux_Club_nomer_1 — Гайды, статьи  и обучающие материалы по Linux. Если хочешь погрузиться в мир Linux, то тебе к нам 📔 https://t.me/Programmirovanie_1 — объёмная библиотека для программистов 🇷🇺 https://t.me/our_computer — От каждого по способностям, каждому по потребностям 🔐 https://t.me/LazySecurity777 — канал по информационной безопасности с разнообразными техническими материалами на разные темы 🤩 https://t.me/iwannabeprogrammer  — здесь вы найдёте лучшие IT-мемы и прекрасно проведёте время 🔥 https://t.me/floppydisky — Юмор для программистов 🦥https://t.me/Lazy_Programmer_channel – подпишись, будем лениться вместе 📱 https://t.me/codebase_frontend— Все самое интересное и полезное у нас 😎

Удалённое управление принтерами через PowerShell Во многих случаях для установки или настройки принтера у пользователя нет необходимости заходить через RDP. Все операции можно выполнить удалённо через PowerShell, что удобно и быстро. Разберем пример пошаговой настройки сетевого принтера: 1️⃣ Подключение к удалённому ПК:

Enter-PSSession -ComputerName Comp1
2️⃣ Установка драйвера в хранилище Windows:

pnputil.exe -i -a "\\server1\drivers\KYOCERA\OEMsetup.inf"
pnputil добавляет драйвер в систему, используя .inf файл. Путь может быть сетевым. 3️⃣ Установка драйвера печати:

Add-PrinterDriver -Name "Kyocera Classic Universaldriver PCL6"
4️⃣ Создание TCP/IP порта для принтера:

Add-PrinterPort -Name "IP_192.168.10.26" -PrinterHostAddress "192.168.10.26"
5️⃣ Добавление самого принтера:

Add-Printer -Name "Ricoh IM 2702" `
-DriverName "Kyocera Classic Universaldriver PCL6" `
-PortName "IP_192.168.10.26" -Verbose
Все это можно выполнить вручную или автоматизировать через сценарии - особенно удобно при массовом развёртывании принтеров или переездах. #windows #printer 🧑‍💻 NetworkAdmin

Сисадмин, который не умеет использовать командную строку bash – так себе специалист. Если посетить несколько собеседований уровня от миддл, то можно убедиться, что вопросы про опыт работы в консоли появляются довольно часто. Сходу научиться всем командам bash нереально – их очень много. К счастью, появился канал BashMaster, в котором каждый день можно узнавать по одной небольшой связке команд и сразу же внедрять их в свою работу. Подпишись, освоишь bash на изи 👍

Как понять, сколько памяти действительно использует процесс в Linux? Многие, особенно после Windows, теряются при анализе памяти в Linux. Диспетчер задач в Win наглядно показывает, сколько ОЗУ занято, сколько свободно - всё просто. В Linux же понимание, что и сколько потребляет, требует большего погружения. Разберемся на примере анализа потребления памяти процессом, например, nginx или php-fpm. 1️⃣ Находим PID процесса

ps ax | grep nginx
Допустим, PID мастер-процесса - 1947. 2️⃣ Используем pmap. Эта утилита показывает, какие участки памяти использует процесс и сколько они занимают. 📍 Виртуальная память (VIRT/VSZ):

pmap 1947 -p
Внизу увидим итоговое значение виртуальной памяти - все, включая разделяемые библиотеки и даже то, что может быть в swap. Для многопроцессных сервисов (как nginx) эта цифра будет одинаковой у всех дочерних процессов. Поэтому она мало информативна в отрыве от контекста. 📍 Резидентная память (RES/RSS):

pmap 1947 -x
Это объем оперативной памяти, реально занятой процессом (без учета swap). Но и тут не всё идеально - при наличии форков каждый из них покажет одинаковую RSS, хотя они могут разделять память. 📍 Приватная память:

pmap 1947 -d
А вот здесь интересно: writeable/private показывает именно ту часть памяти, которую процесс использует исключительно сам. Без общих библиотек и форков. Это значение важно при планировании числа одновременно работающих процессов (например, php-fpm). ❓ Как применять эти данные? Если планируешь запустить 50 PHP-процессов, и каждый из них использует ~30 МБ приватной памяти, нужно минимум 1.5 ГБ ОЗУ только под них. А ещё есть сама ОС, веб-сервер, БД и кэш - нужно считать с запасом, иначе словишь oom-killer. ❓ Где берёт данные pmap? Из /proc/<PID>/smaps, но pmap красиво их парсит. Хочешь больше деталей - загляни туда напрямую.

cat /proc/1947/smaps
Анализ потребления памяти в Linux - это не только top или htop. Используй pmap, чтобы понять реальное потребление и не попасть в просак при настройке сервисов. #linux #memory 🧑‍💻 NetworkAdmin

🌐 Настройка NGINX как TCP/UDP Reverse Proxy Когда речь заходит о NGINX, большинство сразу думают о HTTP-прокси. Но на самом деле он умеет работать и с TCP/UDP, начиная с версии 1.9.0 (с поддержкой модуля stream). Это отличный способ пробросить нестандартные протоколы - от MySQL до DNS. ▪️ Пример: TCP Reverse Proxy (например, для проброса SSH) Включаем модуль stream и прописываем в конфигурации:

# /etc/nginx/nginx.conf
stream {
    upstream ssh_backend {
        server 192.168.1.100:22;
    }

    server {
        listen 2222;
        proxy_pass ssh_backend;
    }
}
Теперь при подключении к NGINX по порту 2222, трафик будет перенаправляться на внутренний сервер по SSH-порту 22. ▪️ Пример: UDP Reverse Proxy (например, DNS)

stream {
    upstream dns_backend {
        server 192.168.1.53:53;
    }

    server {
        listen 53 udp;
        proxy_pass dns_backend;
    }
}
Важно: UDP-прокси работает не со всеми типами UDP-протоколов - требуется тестирование. ▪️ Возможности stream-модуля:
📍 Load-balancing для TCP/UDP (с least_conn, round-robin) 📍 Проксирование SSL, SSH, MySQL, RDP и других нестандартных протоколов 📍 Поддержка access log, limit_conn, geo-блокировки 📍 Возможность защиты backend-ов без дополнительного софта
▪️ Полезные опции:

    proxy_timeout 10s;
    proxy_connect_timeout 5s;
    proxy_protocol on;
proxy_protocol - если используется PROXY protocol от клиента (например, HAProxy). timeout - не даём соединениям висеть вечно. #nginx #reverseproxy 🧑‍💻 NetworkAdmin

Ты это, заходи если что #юмор 🧑‍💻 NetworkAdmin
Ты это, заходи если что #юмор 🧑‍💻 NetworkAdmin

Откуда Windows «знает», что файл из интернета? Когда вы скачиваете файл из браузера, а потом открываете его свойства, Windows может предупредить: «Файл получен с другого компьютера и может быть небезопасным». Это происходит не случайно. ❓ Как Windows узнаёт источник?
Файл, скачанный на NTFS-диск, получает специальную метку в альтернативном потоке данных (Alternate Data Stream, ADS) с именем Zone.Identifier. Эта метка добавляется браузером автоматически и никак не зависит от расширения — она будет даже у mp3, .txt или .jpg.
▪️ Посмотреть содержимое метки:

Get-Content -Path ".\hard_rock.mp3" -Stream Zone.Identifier
Или в Блокноте:

notepad.exe hard_rock.mp3:Zone.Identifier
▪️ Пример содержимого:

[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://ya.ru
HostUrl=https://ya.ru/file.mp3
🌟 Что значит ZoneId:
0 - Мой компьютер 1 - Локальная интрасеть 2 - Доверенные сайты 3 - Интернет (по умолчанию для всего, что скачано) 4 - Ограниченные сайты
Даже если вы переименуете файл или перенесёте его, метка сохраняется. Некоторые антивирусы и скрипты используют эту информацию для усиленной проверки. ▪️ Как убрать предупреждение: 1. Через свойства файла → Разблокировать 2. Через PowerShell:

Unblock-File .\hard_rock.mp3
#windows #security 🧑‍💻 NetworkAdmin

⛔️ lsof - больше, чем просто список открытых файлов Утилиту lsof (list open files) чаще всего используют для просмотра открытых файлов в Linux - и на этом, как правило, всё. Но возможности этой команды куда шире. Давайте разберёмся. 🔎 Основная задача: поиск открытых, но удалённых файлов Это частый кейс: удалили лог-файл (/var/log/nginx/access.log), не перезапустили сервис - и место продолжает быть занятым.

lsof | grep '(deleted)'
# или так, короче:
lsof +L1
💎 Полезные команды по категориям 📍 Открытые файлы в каталоге:

lsof +D /var/log
📍 Открытые файлы от пользователя:

lsof -u user
# Посчитать, сколько файлов открыто:
lsof -u user | wc -l
# Исключить пользователя:
lsof -u^user | wc -l
📍 Завершить все процессы пользователя, открывшие файлы:

kill -9 $(lsof -t -u user)
📍 Файлы, открытые конкретным PID:

lsof -p 12345
💩 Сетевой режим - неочевидный, но мощный 📍 Список всех сетевых соединений (TCP и UDP):

lsof -ni
📍 Кто слушает порт 80:

lsof -ni TCP:80
📍 TCP соединения к конкретному IP:

lsof -ni TCP@192.168.1.10
📍 Сетевые соединения конкретного пользователя:

lsof -ai -u nginx
📍 UDP соединения:

lsof -iUDP
lsof - это инструмент не только для отладки “куда делось место”, но и для быстрого анализа сетевых соединений, отлова "висячих" файлов и поиска активных пользователей. #linux #lsof 🧑‍💻 NetworkAdmin

IT-челлендж Слёрма — проверь свой скилл! 5 дней — 5 тем для IT-инженеров уровня Middle: ▪️ Bash / Linux / DevOps ▪️ Сети ▪️ C
IT-челлендж Слёрма — проверь свой скилл! 5 дней — 5 тем для IT-инженеров уровня Middle: ▪️ Bash / Linux / DevOps ▪️ Сети ▪️ CI/CD, Docker, Jenkins ▪️ SQL и базы данных ▪️ Информационная безопасность 🔺Короткие, но умные задания в Google Формах 🔺Удобный Telegram-бот ведёт по шагам 🔺Занимает не больше 15–20 минут в день Подарки победителям: Подписка на курсы Слёрма Курс «Администрирование Linux» Курс «Ansible: Infrastructure as Code» 🎫 30% скидка всем, кто дойдёт до конца 📅 Челлендж с 16 по 20 июня 📍 Регистрация в боте до 15 июня

🌀 Решение для зависшей виртуальной машины в ESXi Иногда в работе с VMWare ESXi можно столкнуться с ситуацией, когда виртуальная машина зависает и не реагирует ни на выключение, ни на перезагрузку через vSphere Web Client. Но это все ещё не повод перезагружать весь хост целиком 💜 Решение: остановка зависшей ВМ через консоль ESXi 1️⃣ Подключаемся к ESXi через SSH или открываем локальную консоль. 2️⃣ Смотрим список всех активных ВМ:

esxcli vm process list
3️⃣ Находим зависшую машину по имени и запоминаем её WorldID. 4️⃣ Пробуем завершить ВМ мягко (предпочтительный способ):

esxcli vm process kill --type=soft -w 12345678
Если не помогает, можно применить более жёсткие методы: --type=hard - принудительное завершение, аналог kill -9 --type=force - экстренное завершение, применяется в крайнем случае ▪️ Альтернатива: esxtop Можно использовать и утилиту esxtop:

esxtop
Нажимаем V, чтобы отобразить список процессов виртуальных машин. Ищем нужную ВМ и при необходимости завершаем процесс. #VMware #ESXi 🧑‍💻 NetworkAdmin

Когда пришел просить отпуск #юмор 🧑‍💻 NetworkAdmin
Когда пришел просить отпуск #юмор 🧑‍💻 NetworkAdmin

Любой сбой инфраструктуры = простои, потери и размытая репутация. Но классические платформы виртуализации сегодня либо сложны
Любой сбой инфраструктуры = простои, потери и размытая репутация.  Но классические платформы виртуализации сегодня либо сложные, либо дорогие, либо не отвечают новым требованиям к отказоустойчивости и управляемости. Есть ли альтернатива?  Расскажем и покажем на деле:Вебинар «Точка устойчивости ИТ: почему HCI не только про “проще”, но и про “надёжнее”»  Что вы узнаете: 🔸Почему гиперконвергентная инфраструктура действительно может выигрывать у классических решений 🔸Как снизить затраты времени, ресурсов и усилий на поддержку 🔸Живое демо: веб-интерфейс vStack — управление инфраструктурой без лишней сложности 🔸Анонс новых возможностей — для тех, кто хочет быть на шаг впереди 🔸Открытый Q&A: разберём ваши кейсы, ответим на вопросы Когда: 10.06 в 11.00 ЗАРЕГИСТРИРОВАТЬСЯ