Когда вы скачиваете файл из браузера, а потом открываете его свойства, 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
0 - Мой компьютер
1 - Локальная интрасеть
2 - Доверенные сайты
3 - Интернет (по умолчанию для всего, что скачано)
4 - Ограниченные сайты
Даже если вы переименуете файл или перенесёте его, метка сохраняется. Некоторые антивирусы и скрипты используют эту информацию для усиленной проверки.
1. Через свойства файла → Разблокировать
2. Через PowerShell:
Unblock-File .\hard_rock.mp3
#windows #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥7🤔3❤1
Когда речь заходит о NGINX, большинство сразу думают о HTTP-прокси. Но на самом деле он умеет работать и с TCP/UDP, начиная с версии 1.9.0 (с поддержкой модуля stream). Это отличный способ пробросить нестандартные протоколы - от MySQL до DNS.
Включаем модуль 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.
stream {
upstream dns_backend {
server 192.168.1.53:53;
}
server {
listen 53 udp;
proxy_pass dns_backend;
}
}
Важно: UDP-прокси работает не со всеми типами UDP-протоколов - требуется тестирование.
📍 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤2😱1
Как понять, сколько памяти действительно использует процесс в Linux?
Многие, особенно после Windows, теряются при анализе памяти в Linux. Диспетчер задач в Win наглядно показывает, сколько ОЗУ занято, сколько свободно - всё просто. В Linux же понимание, что и сколько потребляет, требует большего погружения.
Разберемся на примере анализа потребления памяти процессом, например, nginx или php-fpm.
1️⃣ Находим PID процесса
Допустим, PID мастер-процесса - 1947.
2️⃣ Используем pmap. Эта утилита показывает, какие участки памяти использует процесс и сколько они занимают.
📍 Виртуальная память (VIRT/VSZ):
Внизу увидим итоговое значение виртуальной памяти - все, включая разделяемые библиотеки и даже то, что может быть в swap. Для многопроцессных сервисов (как nginx) эта цифра будет одинаковой у всех дочерних процессов. Поэтому она мало информативна в отрыве от контекста.
📍 Резидентная память (RES/RSS):
Это объем оперативной памяти, реально занятой процессом (без учета swap). Но и тут не всё идеально - при наличии форков каждый из них покажет одинаковую RSS, хотя они могут разделять память.
📍 Приватная память:
А вот здесь интересно: writeable/private показывает именно ту часть памяти, которую процесс использует исключительно сам. Без общих библиотек и форков. Это значение важно при планировании числа одновременно работающих процессов (например, php-fpm).
❓ Как применять эти данные?
Если планируешь запустить 50 PHP-процессов, и каждый из них использует ~30 МБ приватной памяти, нужно минимум 1.5 ГБ ОЗУ только под них. А ещё есть сама ОС, веб-сервер, БД и кэш - нужно считать с запасом, иначе словишь oom-killer.
❓ Где берёт данные pmap?
Из
Анализ потребления памяти в Linux - это не только
#linux #memory
🧑💻 NetworkAdmin
Многие, особенно после Windows, теряются при анализе памяти в Linux. Диспетчер задач в Win наглядно показывает, сколько ОЗУ занято, сколько свободно - всё просто. В Linux же понимание, что и сколько потребляет, требует большего погружения.
Разберемся на примере анализа потребления памяти процессом, например, nginx или php-fpm.
ps ax | grep nginx
Допустим, PID мастер-процесса - 1947.
pmap 1947 -p
Внизу увидим итоговое значение виртуальной памяти - все, включая разделяемые библиотеки и даже то, что может быть в swap. Для многопроцессных сервисов (как nginx) эта цифра будет одинаковой у всех дочерних процессов. Поэтому она мало информативна в отрыве от контекста.
pmap 1947 -x
Это объем оперативной памяти, реально занятой процессом (без учета swap). Но и тут не всё идеально - при наличии форков каждый из них покажет одинаковую RSS, хотя они могут разделять память.
pmap 1947 -d
А вот здесь интересно: writeable/private показывает именно ту часть памяти, которую процесс использует исключительно сам. Без общих библиотек и форков. Это значение важно при планировании числа одновременно работающих процессов (например, php-fpm).
Если планируешь запустить 50 PHP-процессов, и каждый из них использует ~30 МБ приватной памяти, нужно минимум 1.5 ГБ ОЗУ только под них. А ещё есть сама ОС, веб-сервер, БД и кэш - нужно считать с запасом, иначе словишь oom-killer.
Из
/proc/<PID>/smaps, но pmap красиво их парсит. Хочешь больше деталей - загляни туда напрямую.
cat /proc/1947/smaps
Анализ потребления памяти в Linux - это не только
top или htop. Используй pmap, чтобы понять реальное потребление и не попасть в просак при настройке сервисов.#linux #memory
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Сисадмин, который не умеет использовать командную строку bash – так себе специалист.
Если посетить несколько собеседований уровня от миддл, то можно убедиться, что вопросы про опыт работы в консоли появляются довольно часто.
Сходу научиться всем командам bash нереально – их очень много.
К счастью, появился канал BashMaster, в котором каждый день можно узнавать по одной небольшой связке команд и сразу же внедрять их в свою работу.
Подпишись, освоишь bash на изи 👍
Если посетить несколько собеседований уровня от миддл, то можно убедиться, что вопросы про опыт работы в консоли появляются довольно часто.
Сходу научиться всем командам bash нереально – их очень много.
К счастью, появился канал BashMaster, в котором каждый день можно узнавать по одной небольшой связке команд и сразу же внедрять их в свою работу.
Подпишись, освоишь bash на изи 👍
🫡8👍4🤡4🔥1😱1💩1
Удалённое управление принтерами через PowerShell
Во многих случаях для установки или настройки принтера у пользователя нет необходимости заходить через RDP. Все операции можно выполнить удалённо через PowerShell, что удобно и быстро.
Разберем пример пошаговой настройки сетевого принтера:
1️⃣ Подключение к удалённому ПК:
2️⃣ Установка драйвера в хранилище Windows:
pnputil добавляет драйвер в систему, используя .inf файл. Путь может быть сетевым.
3️⃣ Установка драйвера печати:
4️⃣ Создание TCP/IP порта для принтера:
5️⃣ Добавление самого принтера:
Все это можно выполнить вручную или автоматизировать через сценарии - особенно удобно при массовом развёртывании принтеров или переездах.
#windows #printer
🧑💻 NetworkAdmin
Во многих случаях для установки или настройки принтера у пользователя нет необходимости заходить через RDP. Все операции можно выполнить удалённо через PowerShell, что удобно и быстро.
Разберем пример пошаговой настройки сетевого принтера:
Enter-PSSession -ComputerName Comp1
pnputil.exe -i -a "\\server1\drivers\KYOCERA\OEMsetup.inf"
pnputil добавляет драйвер в систему, используя .inf файл. Путь может быть сетевым.
Add-PrinterDriver -Name "Kyocera Classic Universaldriver PCL6"
Add-PrinterPort -Name "IP_192.168.10.26" -PrinterHostAddress "192.168.10.26"
Add-Printer -Name "Ricoh IM 2702" `
-DriverName "Kyocera Classic Universaldriver PCL6" `
-PortName "IP_192.168.10.26" -Verbose
Все это можно выполнить вручную или автоматизировать через сценарии - особенно удобно при массовом развёртывании принтеров или переездах.
#windows #printer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
Автоматическое монтирование дисков в Linux через systemd
Многие по привычке используют
Это особенно полезно:
📍 в средах с динамически подключаемыми дисками
📍 при работе с нестабильными устройствами (например, сетевыми томами)
📍 для точного контроля зависимостей и порядка монтирования
▪️ Пример: монтируем диск /dev/sdb1 в /mnt/data
1️⃣ Создаём unit-файл для монтирования:
Пример содержимого:
Обратите внимание: имя unit-файла mnt-data.mount формируется по пути монтирования: /mnt/data → mnt-data.mount
2️⃣ Активируем и проверяем
Проверим статус:
⭐️ Преимущества systemd-монтажа:
🌟 Важно: если диск может не быть доступен при загрузке, рассмотрите опции nofail или отложенное монтирование через automount.
#linux #systemd
🧑💻 NetworkAdmin
Многие по привычке используют
fstab для автоподключения дисков в линукс. Но systemd предлагает более гибкий и надёжный механизм - монтирование через unit-файлы.Это особенно полезно:
sudo systemctl edit --force --full mnt-data.mount
Пример содержимого:
[Unit]
Denoscription=Монтирование диска в /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
sudo systemctl daemon-reexec
sudo systemctl enable mnt-data.mount
sudo systemctl start mnt-data.mount
Проверим статус:
systemctl status mnt-data.mount
📍 Учитываются зависимости (можно настроить Requires= и After=)📍 Возможность рестартов и таймаутов📍 Удобство в контейнерах и виртуальных средах📍 Логирование и отладка через journalctl
#linux #systemd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1
CI/CD на минималках: как быстро развернуть GitLab Runner на своём сервере
Если вы используете GitLab и хотите автоматизировать сборки, тесты или деплой - вам нужен GitLab Runner. Это агент, который обрабатывает пайплайны и запускает описанные в .gitlab-ci.yml задачи.
🔎 Что нужно?
📍 Сервер (виртуалка или физика) с Linux
📍 GitLab проект
📍 Пара минут времени
⚙️ Установка GitLab Runner. Официальная установка для Debian/Ubuntu:
▪️ Регистрация Runner'а
Берём токен в GitLab:
Settings → CI/CD → Runners → Expand → Registration token
И запускаем регистрацию:
▪️ Ответы на вопросы:
▪️ Пример .gitlab-ci.yml для начала:
Добавьте файл в корень репозитория, закоммитьте и запушьте. После пуша GitLab запустит пайплайн, и ваш Runner выполнит команду.
❓ Зачем это нужно?
#gitlab #linux
🧑💻 NetworkAdmin
Если вы используете GitLab и хотите автоматизировать сборки, тесты или деплой - вам нужен GitLab Runner. Это агент, который обрабатывает пайплайны и запускает описанные в .gitlab-ci.yml задачи.
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/noscript.deb.sh | sudo bash
sudo apt install gitlab-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)
stages:
- test
test_job:
stage: test
noscript:
- echo "Тестируем Runner"
- uname -a
Добавьте файл в корень репозитория, закоммитьте и запушьте. После пуша GitLab запустит пайплайн, и ваш Runner выполнит команду.
📍 Автоматизация тестов, сборки, деплоя📍 Локальный контроль - runner работает на вашем железе📍 Безопасность - код не уходит в сторонние облака📍 Можно изолировать окружения (через Docker executor)
#gitlab #linux
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Не забывайте про защиту от несанкционированного доступа, кошачьего в том числе 😎
#юмор
🧑💻 NetworkAdmin
#юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
👌14😁7🔥1🙈1
Python - язык простой и удобный, но в плане безопасности исходников у него есть слабое место: скрипты легко читаются, модифицируются и анализируются. Если ты разрабатываешь утилиту, обрабатываешь конфиденциальные данные или просто хочешь защититься от «любопытных», стоит продумать меры защиты. Разберём основные подходы:
Python автоматически компилирует .py в .pyc, но и их можно дизассемблировать. Более надёжный способ - сборка в .pyd/.so (динамическую библиотеку):
pip install cython
cythonize -i mynoscript.py
На выходе - скомпилированный бинарник. Исходный код спрятан, но не полностью защищён от реверса.
Использовать PyArmor, который шифрует байткод:
pip install pyarmor
pyarmor obfuscate mynoscript.py
Использовать Nuitka или PyInstaller - обфускация + упаковка в исполняемый файл:
pyinstaller --onefile mynoscript.py
Для чувствительных задач - запускай скрипты через Docker, изолируя переменные окружения и доступ к файловой системе.
📍 Используй .env файл + библиотеку python-dotenv📍 Храни секреты в HashiCorp Vault, AWS SSM или аналогах📍 Шифруй конфиги с GPG, если нужно хранить локально
Полной защиты от реверса не будет - Python не компилируемый в машинный код язык. Но затруднить анализ, защитить данные и повысить безопасность вполне реально.
#python #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2🔥1
Сегодня расскажу про несколько простых приемов, которые помогут вам эффективнее работать с текстом и конфигами в терминале. Речь пойдёт о символах ^ и $ - они обозначают начало и конец строки в регулярных выражениях.
Очень удобно, когда нужно исключить строки, начинающиеся с комментариев (#), но оставить те, где # идёт в середине строки:
grep -E -v '^#' nginx.conf
Если комментарий начинается с табуляции, команда выше его не отфильтрует. Чтобы учесть таб, нужно ввести его "вручную":
1. Наведите курсор после ^
2. Нажмите Ctrl + V, затем Tab
Получится поиск по строкам с табом и # в начале:
grep -E -v '^ #' nginx.conf
(Скопированная команда не сработает — таб символ нужно вставить вручную в консоли!)
Также ^ помогает искать по началу имени файла:
ls | grep ^error
Допустим, в директории есть файлы *.png и *.png.webp. Если сделать:
ls | grep .png
Вы получите оба варианта. А чтобы отфильтровать только те, что заканчиваются на .png:
ls | grep .png$
Можно объединить два условия:
ls | grep ^error | grep .png$
Очень удобно, если хотите вычистить конфиг от пустых строк и комментариев:
grep -E -v '^#|^$' nginx.conf
Эти трюки работают с любой текстовой утилитой (grep, sed, awk) и экономят кучу времени при разборе логов, конфигов и вывода в терминале.
#linux #grep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Forwarded from Карьера в Bell Integrator
Оптимизируем работу в Linux 🚀
Linux — сердце цифровой инфраструктуры 21 века. Эта ОС лежит в основе облаков, дата-центров и серверов. А для ИТ-специалистов Linux — стандарт де-факто: мощный инструмент для автоматизации, кибербезопасности и администрирования.
Совместно с каналом NetworkAdmin.ru подготовили дельные лайфхаки для облегчения и ускорения работы с Linux — читайте в карточках! На канале есть много другой полезной информации для специалистов в области сетевого администрирования, посмотреть можете здесь.
#BellintegratorTeam #советыBell
Linux — сердце цифровой инфраструктуры 21 века. Эта ОС лежит в основе облаков, дата-центров и серверов. А для ИТ-специалистов Linux — стандарт де-факто: мощный инструмент для автоматизации, кибербезопасности и администрирования.
Совместно с каналом NetworkAdmin.ru подготовили дельные лайфхаки для облегчения и ускорения работы с Linux — читайте в карточках! На канале есть много другой полезной информации для специалистов в области сетевого администрирования, посмотреть можете здесь.
#BellintegratorTeam #советыBell
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍2🔥2🤔1😡1
Несколько раз сталкивался с неприятной проблемой: при наборе или вставке текста в PowerShell внезапно "пропадают" заглавные буквы. Особенно заметно, если набираете команды в кириллической раскладке - PowerShell просто не реагирует на Shift.
Проблема возникает из-за сбоя в модуле PSReadLine, который отвечает за подсветку, автодополнение, историю команд и другие удобства в CLI.
# Проверим установленную версию
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.
#powershell #windows
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤1😁1
Auditd - это система аудита в Linux, входящая в состав auditd (Audit Daemon), которая позволяет детально отслеживать действия пользователей и системные события: от попыток доступа к файлам до изменений в правах и запусков команд. Она полезна как для соблюдения требований безопасности, так и для расследования инцидентов.
На большинстве дистрибутивов:
sudo apt install auditd # Debian/Ubuntu
sudo yum install audit # RHEL/CentOS
Проверьте, что служба активна:
sudo systemctl enable --now auditd
/etc/passwd):
auditctl -w /etc/passwd -p war -k passwd-watch
-w - путь к файлу
-p war - права: write, attribute change, read
-k - метка (key) для фильтрации в логах
auditctl -l
auditctl -W /etc/passwd
ausearch -k passwd-watch
aureport -f # по файлам
aureport -au # по пользователям
Добавьте правило для аудита всех выполненных команд:
auditctl -a always,exit -F arch=b64 -S execve -k exec-track
Это даст полную картину того, какие команды запускаются (через ausearch -k exec-track).
Не злоупотребляйте количеством правил - это может замедлить систему и засорить логи. Используйте
audit.rules или /etc/audit/rules.d/*.rules для постоянных правил.#linux #auditd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2
Не все знают, но в линукс удаление большого количества файлов - задача не из простых. Особенно когда речь идет о сотнях тысяч или миллионах объектов в одной директории. Часто встречаешь ошибку
Argument list too long, а даже если команда и запускается, она может висеть часами. Сегодня про то, а какой же способ удаления самый быстрый.
rm -r test/
rm -r test/*
find test/ -type f -delete
cd test && ls . | xargs -n 100 rm
rsync -a --delete empty/ test/
Последний способ - rsync с пустой директорией - оказался самым быстрым. Суть: создаёте пустой каталог empty/ и синхронизируете его с целевым test/:
mkdir empty
rsync -a --delete empty/ test/
mkdir test
count=1
while [ $count -le 10 ]; do
touch test/file$count-{000..50000}
count=$(( count + 1 ))
done
Вывод: rsync уничтожил всё быстрее всех. rm -r test/* вылетает с ошибкой при большом числе файлов.
count=1
while [ $count -le 10 ]; do
mkdir -p test/dir$count-{000..500}
touch test/dir$count-{000..500}/file-{000..100}
count=$(( count + 1 ))
done
Вывод: в этом случае почти все методы сработали одинаково. Но если файлов ещё больше -
rsync снова выигрывает.#linux #rsync
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4❤2