ar
Feedback

لا تقع ضحية للمخادعين! تيليمتريو يكتشف ويُميّز هذه القنوات 👉 إذا كنت تريد رؤية العلامة، اشترك

LinuxSkill - Сводки с прода и Шпаргалки

LinuxSkill - Сводки с прода и Шпаргалки

الذهاب إلى القناة على Telegram

Следим за новостями Linux, DevOps и ИБ, чтобы быть готовым к любым факапам. Бонусом — плотные шпаргалки и чеклисты для ежедневной работы в терминале. 📩 По всем вопросам: @chorapov Зеркало в MAX: https://max.ru/LinuxSkill РКН https://vk.cc/cMUwm4

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام LinuxSkill - Сводки с прода и Шпаргалки

تُعد قناة LinuxSkill - Сводки с прода и Шпаргалки (@linuxskill) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 10 677 مشتركاً، محتلاً المرتبة 11 415 في فئة التكنولوجيات والتطبيقات والمرتبة 59 550 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 10 677 مشتركاً.

بحسب آخر البيانات بتاريخ 16 أكتوبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -47، وفي آخر 24 ساعة بمقدار -1، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 11.02‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 4.66‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 1 177 مشاهدة. وخلال اليوم الأول يجمع عادةً 498 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 9.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل docker, linux, bash, devops, скрипт.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Следим за новостями Linux, DevOps и ИБ, чтобы быть готовым к любым факапам. Бонусом — плотные шпаргалки и чеклисты для ежедневной работы в терминале. 📩 По всем вопросам: @chorapov Зеркало в MAX: https://max.ru/LinuxSkill РКН https://vk.cc/cMUwm4”

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 17 أكتوبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

10 677
المشتركون
-124 ساعات
-157 أيام
-4730 أيام

جارٍ تحميل البيانات

القنوات المماثلة
لا توجد بيانات
هل تواجه مشاكل؟ يرجى تحديث الصفحة أو الاتصال بمدير الدعم الخاص بنا.
الإشارات الواردة والصادرة
---
---
---
---
---
---
جذب المشتركين
أكتوبر '26
أكتوبر '26
+1
في 0 قنوات
سبتمبر '26
+20
في 0 قنوات
Get PRO
أغسطس '26
+11
في 0 قنوات
Get PRO
يوليو '26
+20
في 0 قنوات
Get PRO
يونيو '26
+20
في 0 قنوات
Get PRO
مايو '26
+57
في 0 قنوات
Get PRO
أبريل '26
+47
في 0 قنوات
Get PRO
مارس '26
+26
في 0 قنوات
Get PRO
فبراير '26
+257
في 0 قنوات
Get PRO
يناير '26
+49
في 2 قنوات
Get PRO
ديسمبر '25
+70
في 7 قنوات
Get PRO
نوفمبر '25
+76
في 0 قنوات
Get PRO
أكتوبر '25
+230
في 0 قنوات
Get PRO
سبتمبر '25
+367
في 0 قنوات
Get PRO
أغسطس '25
+505
في 0 قنوات
Get PRO
يوليو '25
+238
في 1 قنوات
Get PRO
يونيو '25
+89
في 0 قنوات
Get PRO
مايو '25
+539
في 1 قنوات
Get PRO
أبريل '25
+193
في 0 قنوات
Get PRO
مارس '25
+192
في 0 قنوات
Get PRO
فبراير '25
+159
في 0 قنوات
Get PRO
يناير '25
+187
في 1 قنوات
Get PRO
ديسمبر '24
+503
في 4 قنوات
Get PRO
نوفمبر '24
+1 144
في 0 قنوات
Get PRO
أكتوبر '24
+1 744
في 0 قنوات
Get PRO
سبتمبر '24
+782
في 0 قنوات
Get PRO
أغسطس '24
+874
في 0 قنوات
Get PRO
يوليو '24
+912
في 0 قنوات
Get PRO
يونيو '24
+1 949
في 0 قنوات
Get PRO
مايو '24
+416
في 0 قنوات
Get PRO
أبريل '24
+581
في 0 قنوات
Get PRO
مارس '24
+359
في 0 قنوات
Get PRO
فبراير '24
+1 227
في 0 قنوات
التاريخ
نمو المشتركين
الإشارات
القنوات
17 أكتوبر0
16 أكتوبر0
15 أكتوبر0
14 أكتوبر0
13 أكتوبر0
12 أكتوبر+1
11 أكتوبر0
10 أكتوبر0
09 أكتوبر0
08 أكتوبر0
07 أكتوبر0
06 أكتوبر0
05 أكتوبر0
04 أكتوبر0
03 أكتوبر0
02 أكتوبر0
01 أكتوبر0
منشورات القناة
🚨 Сервер под подозрением? 8 шагов аудита прав и SUID-бэкдоров Кажется, что кто-то получил лишние привилегии, а с чего начать проверку — непонятно. Держи чек-лист на первые минуты: ищем скрытые пути к root — SUID, capabilities, PAM и sudo. Команды с SELinux проверены по документации, остальное прогнано на Ubuntu 24.04. 🔴 Шаг 1. SELinux: снять маску dontaudit
# Правила dontaudit глушат часть отказов —
# атака может не попасть в лог AVC.
# Временно снимаем глушилку:
sudo semodule -DB
sudo ausearch -m avc -ts today
# Вернуть как было:
sudo semodule -B
ВАЖНО: без semodule -DB часть заблокированных попыток доступа в журнал AVC просто не пишется. -DB держи включённым только на время аудита. 🔑 Шаг 2. SUID и SGID
# Бинарники с SUID/SGID, по дате изменения
sudo find / -xdev -type f -perm -4000 \
  -printf '%TY-%Tm-%Td %p\n' 2>/dev/null | sort
Сравни список с чистой системой. Свежая дата у файла в /tmp, /dev/shm или /var/tmp — почти наверняка бэкдор. 🎭 Шаг 3. Capabilities: SUID, который find не видит
# Права root без бита SUID
getcap -r / 2>/dev/null
ВАЖНО: cap_setuid даёт тот же root, что и SUID, но в поиске -perm -4000 НЕ появится. Проверил: файл с cap_setuid+ep дал обычному юзеру uid 0, а find -perm -4000 его не нашёл. Опасные: cap_setuid, cap_setgid, cap_dac_override, cap_sys_admin, cap_sys_ptrace. 🚪 Шаг 4. PAM: вход мимо пароля
# Модули, дающие проход: pam_permit,
# pam_rootok не на месте, чужой pam_exec
grep -rnE "pam_permit|pam_exec|pam_rootok" \
  /etc/pam.d/
sufficient pam_permit.so в common-auth — открытая дверь. pam_permit там штатно идёт только как required в хвосте стека. 👤 Шаги 5–6. Скрытый root и sudo-лазейки
# Второй UID 0 — сразу к делу
awk -F: '$3==0 {print $1}' /etc/passwd
# NOPASSWD, добавленный в обход
sudo grep -rEn "NOPASSWD" /etc/sudoers /etc/sudoers.d/
🔐 Шаги 7–8. Чужие ключи и входы
# Ключи SSH у всех, кто есть
sudo cat /root/.ssh/authorized_keys \
  /home/*/.ssh/authorized_keys 2>/dev/null
# Неудачные входы — брутфорс перед взломом
sudo lastb -Fai | head
Порядок: dontaudit и AVC → SUID и capabilities → PAM → root и sudo → ключи. Нашёл подозрительное — не «чисти», а снимай образ: подчищенный сервер невозможно расследовать. И держи эталонный список SUID и getcap заранее — сравнивать будет с чем. ❗️ Нравится формат? Ставь 👍 👉 Рубрика: #SkillHunter@LinuxSkill #Linux #Security #SELinux #Forensics #Hardening #SysAdmin

2
لا يوجد نص...
738
3
💀 df показывает 100%, а du молчит? 5 шагов спасения прода Сервисы падают с «No space left on device», df -h рисует 100%, а du -sh /* насчитывает куда меньше. Классика: кто-то удалил гигантский лог, а процесс держит его открытым — файла уже нет, а блоки заняты. Показываю, как вернуть место без рестарта сервиса. Шаг 1. Что именно кончилось df -h /var # Место есть, а пишет «No space left»? Кончились inode: df -i /var При 100% в df сервисы от root ещё пишут в резерв ext4, а остальные уже падают. Шаг 2. Ищем удалённые, но открытые файлы # +L1 — файлы без единой ссылки в ФС. # Точка монтирования в конце = только эта ФС. sudo lsof -nP +L1 \<mountpoint> COMMAND PID FD SIZE/OFF NAME python3 690 3w 73400887 /mnt/t/app.log (deleted) Шаг 3. PID и номер дескриптора 3w в колонке FD — дескриптор 3, открыт на запись. Проверка: sudo ls -l /proc/\<PID>/fd/\<FD> # ... -> /mnt/t/app.log (deleted) Шаг 4. Обнуляем файл без рестарта # ВАЖНО: sudo : > файл НЕ сработает — # перенаправление делает твой шелл, а не sudo. sudo truncate -s 0 /proc/\<PID>/fd/\<FD> Проверил на тестовой ФС: 141 МБ вернулись мгновенно, процесс продолжил писать. Только для логов и мусора — усечёшь файл данных БД, потеряешь данные. Подвох: если сервис пишет без O_APPEND (например, запущен как app > file.log), он продолжит с прежнего смещения. Размер снова покажет 70 МБ, хотя на диске файл занимает 4 КБ: он станет разреженным, и мониторинг по размеру будет врать. Шаг 5. Аварийный запас на ext4 # Резерв под root, по умолчанию 5% sudo tune2fs -l /dev/\<disk> | grep -i "reserved block" # Временно отдать 4% — работает на лету sudo tune2fs -m 1 /dev/\<disk> После уборки верни -m 5: резерв нужен, чтобы root мог чинить систему на полном диске. Только ext2/3/4, на XFS не сработает. lsof +L1 пуст, а расхождение осталось? Файлы могут прятаться под точкой монтирования: смонтируй корень через mount --bind в пустую папку и запусти du там. Чтобы не повторилось — logrotate с postrotate, который просит сервис переоткрыть лог, вместо ручного rm. ❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Troubleshooting #Storage #SysAdmin #DevOps
1 070
4
لا يوجد نص...
1 142
5
GitOps-практики: развёртываем сервис через ArgoCD Классический CI/CD запускает деплой. Но как сделать так, чтобы состояние Ku
GitOps-практики: развёртываем сервис через ArgoCD Классический CI/CD запускает деплой. Но как сделать так, чтобы состояние Kubernetes после него соответствовало конфигурации в Git? На вебинаре разберём принципы GitOps и посмотрим, как ArgoCD помогает управлять изменениями в кластере. 7 октября в 20:00 МСК на открытом вебинаре OTUS развернём сервис в Kubernetes с помощью ArgoCD и покажет работу подхода на практике. На практике рассмотрим: — чем GitOps отличается от классического CI/CD и когда его применять; — как устроен ArgoCD и какие есть варианты реализации GitOps; — как развернуть сервис в Kubernetes через ArgoCD; — что произойдёт при изменении конфигурации напрямую в кластере; — какие подходы к работе с ArgoCD полезны в проектах. После вебинара вы поймёте принципы GitOps, познакомитесь с возможностями ArgoCD и увидите полный процесс развёртывания сервиса. Полученные подходы сможете применить при работе со своими Kubernetes-кластерами. Урок проходит в преддверии старта курса «DevOps. Экспертный уровень». 👉 Регистрируйтесь: https://otus.pw/wyNA/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
1 062
6
لا يوجد نص...
1 085
7
📊 Диск тормозит, а iostat показывает норму? Ищем хвост задержек Приложение подвисает на записи, в логах таймауты к БД, а iostat рисует w_await в пару миллисекунд. Подвох в том, что iostat показывает среднее: 990 запросов по 0.1 мс и 10 по 200 мс дают в среднем 2 мс. Показываю, как достать хвост, который тонет в среднем. Что на самом деле показывает iostat # 1. -x — расширенные колонки, раз в секунду iostat -x 1 # r_await и w_await — СРЕДНЕЕ за интервал: # редкие зависшие запросы в нём растворяются ВАЖНО: %util под 100% на SSD, NVMe и RAID не значит, что диск упёрся: они обслуживают запросы параллельно. Это прямо написано в man iostat. Гистограмма вместо среднего # 2. В Ubuntu утилита идёт в пакете bpftrace. # Ctrl+C — и получаешь распределение задержек. sudo biolatency.bt @usecs: [16, 32) 426043 [32, 64) 15436 [64, 128) 527 ... [1K, 2K) 24 [2K, 4K) 17 [4K, 8K) 13 Проверил на тестовой нагрузке (столбики убрал, чтобы влезло в экран): iostat в тот же момент показывал w_await 0.02 мс, а в хвосте висели запросы по 4–8 мс — в сотни раз дольше среднего. Чей I/O висит # 3. Каждый запрос дольше 10 мс — с процессом. # Порог подстрой: для HDD 10 мс — норма. # На tracepoint'ах: не сломается с новым ядром. sudo bpftrace -e ' t:block:block_bio_queue { @ts[args->sector] = nsecs; @who[args->sector] = comm; } t:block:block_rq_complete /@ts[args->sector]/ { $ms = (nsecs - @ts[args->sector]) / 1000000; if ($ms >= 10) { printf("%s %d ms\n", @who[args->sector], $ms); } delete(@ts[args->sector]); delete(@who[args->sector]); } END { clear(@ts); clear(@who); }' Видишь kworker или jbd2 вместо своего процесса — это отложенная запись из page cache. Настоящего писателя покажет pidstat -d 1. Среднее говорит «всё хорошо», гистограмма показывает хвост, а третья команда — чей он. Дальше — по месту: вынести бэкап, развести нагрузку или идти к провайдеру с цифрами. ❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #eBPF #Storage #Troubleshooting #SysAdmin #DevOps
1 252
8
💀 CPU под 100%, а в top пусто? Ловим невидимые процессы через eBPF Сервер греется, в шапке top us под 90%, а в списке процессов — никого. Классика: кто-то плодит процессы, которые живут 10–50 мс, а top опрашивает /proc раз в 3 секунды и их просто не застаёт. Показываю, как поймать виновника, не роняя прод. Ловим каждый запуск # 1. В Ubuntu утилита идёт в пакете bpftrace sudo apt install bpftrace # Каждый execve() в реальном времени: # время, PID и PPID родителя. sudo execsnoop.bt TIME PID PPID ARGS 16:55:42.684175 1112 1097 /bin/true 16:55:42.685129 1113 1097 curl --version 16:55:42.691294 1114 1097 sleep 0.05 Один и тот же PPID и новые процессы каждые 50 мс — вот он, виновник. Кто плодит больше всех # 2. Считаем запуски по родителю за 10 секунд. # Подсчёт идёт ПРЯМО в ядре, без потока событий. sudo bpftrace -e ' tracepoint:syscalls:sys_enter_execve { @[comm, curtask->real_parent->tgid] = count(); } interval:s:10 { exit(); }' # Вывод: @[bash, 1097]: 525 # bash с PID 1097 за 10 секунд породил 525 процессов. # 3. Смотрим, кто это и откуда он взялся pstree -sp \<PPID> ps -o pid,etime,cmd -p \<PPID> Почему не strace -f Проверил: dd с bs=1 под strace работает в ~47 раз медленнее. И в ~37 раз — даже если трассировать только accept(), которого dd вообще не вызывает: ptrace останавливает процесс на КАЖДОМ системном вызове. eBPF процесс не останавливает и считает события в ядре. ВАЖНО: bcc-версия execsnoop-bpfcc компилирует программу на лету и без linux-headers-$(uname -r) падает с «Unable to find kernel headers». execsnoop.bt работает через BTF, заголовки ему не нужны. Есть ли BTF в ядре: ls /sys/kernel/btf/vmlinux. Вместо «CPU горит, а кто — непонятно» получаешь имя процесса, аргументы и PID родителя. Дальше дело техники: поправить крон или скрипт. ❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #eBPF #bpftrace #Troubleshooting #SysAdmin #DevOps
1 382
9
Kagent + Ollama: ИИ-агент для работы с Kubernetes Как использовать локальную языковую модель для работы с Kubernetes? На веби
Kagent + Ollama: ИИ-агент для работы с Kubernetes Как использовать локальную языковую модель для работы с Kubernetes? На вебинаре разберём связку Kagent + Ollama и посмотрим, как ИИ-агент помогает анализировать состояние кластера и взаимодействовать с его ресурсами. 1 октября в 20:00 МСК на открытом вебинаре OTUS покажем, как запустить ИИ-агента с локальной LLM и применить его в DevOps-задачах. На практике рассмотрим: — какую роль выполняют Kagent и Ollama; — как подключить локальную LLM к агенту; — как агент анализирует состояние кластера и работает с Kubernetes-ресурсами; — в каких повседневных задачах DevOps-инженера он может помочь; — какие возможности и ограничения есть у агентного подхода. После вебинара вы поймёте, как устроена связка Kagent + Ollama, увидите её применение в Kubernetes и сможете оценить, для каких задач в вашей инфраструктуре подходит ИИ-агент. Урок проходит в преддверии старта курса «ИИ в работе DevOps-инженера». 👉 Регистрируйтесь: https://otus.pw/LZsj9/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
729
10
🔥 Знаешь только ip a? 10 неочевидных команд ip для Linux Большинство админов знают про ip ровно две команды — ip a и ip r, а дальше ifconfig по старой памяти. Держи 10 команд, которые покажут то, чего не видно в ip a: скрытые маршруты VPN, дропы на интерфейсе и мёртвый шлюз. Проверил на iproute2 6.1. 1️⃣ Вся сеть одним экраном, в цвете: ip -br -c a Интерфейс, состояние и адреса — по строке на каждый. -br работает и с link. 2️⃣ Куда реально уйдёт пакет: ip route get 8.8.8.8 # какая запись в таблице сработала ip route get fibmatch 8.8.8.8 Покажет интерфейс, шлюз и source-адрес. Незаменимо, когда маршрутов много и непонятно, какой победил. 3️⃣ Маршруты, которых нет в ip route: ip rule ip route show table all ВАЖНО: ip route показывает только таблицу main. wg-quick с AllowedIPs = 0.0.0.0/0 уводит дефолт в таблицу 51820, а ip route делает вид, что всё как раньше. 4️⃣ Сменить шлюз без риска потерять сервер: sudo ip route replace default via <gw> Атомарно: нет окна без маршрута, как между del и add. Упадёт с ошибкой — старый маршрут останется на месте. 5️⃣ Дропы и ошибки на интерфейсе: ip -s link show <iface> # двойной -s — ошибки с разбивкой: crc, frame, fifo ip -s -s link show <iface> Растут errors или dropped — копай в кабель, драйвер или буферы, а не в приложение. 6️⃣ Жив ли шлюз на L2: ip neigh show dev <iface> REACHABLE и STALE — норма. Шлюз висит в FAILED или INCOMPLETE — он не отвечает на ARP, и пинговать дальше бесполезно. 7️⃣ Сеть в прямом эфире: ip -ts monitor link route Каждое изменение с меткой времени: упал линк, DHCP или VPN переписали маршрут. Оставь в tmux и лови, кто ломает сеть по ночам. 8️⃣ Отрезать IP без фаервола: sudo ip route add blackhole 203.0.113.5/32 # проверить и убрать ip route show type blackhole sudo ip route del blackhole 203.0.113.5/32 Ответы на этот адрес уходят в никуда, TCP-сессия с ним не установится. ip route get по нему вернёт Invalid argument — так ядро отвечает на blackhole, это не ошибка. 9️⃣ IP интерфейса в скрипте без awk-акробатики: ip -j -4 addr show dev <iface> \ | jq -r '.[0].addr_info[0].local' -j отдаёт JSON: парсинг не сломается, когда поменяется формат вывода. Нужен пакет jq. 🔟 Процесс без сети за две команды: sudo ip netns add lab sudo ip netns exec lab <command> # убрать за собой sudo ip netns del lab В новом namespace только выключенный lo. Удобно проверить, как приложение переживёт падение сети, не трогая хост. Всё, что меняешь через ip, живёт до перезагрузки. Постоянные настройки — в netplan, NetworkManager или systemd-networkd. А какую из десяти ты уже держишь в алиасах? ❗️ Нравится формат? Ставь 👍 👉 Рубрика: #шпаргалка@LinuxSkill #Linux #Networking #iproute2 #CheatSheet #SysAdmin #DevOps
1 538
11
لا يوجد نص...
1 428
12
Закрыть периметр правилами iptables и не остаться при этом за дверью вместе с атакующим. Посмотреть, что слушает наружу ss -tulpn Даёт порт, состояние и процесс: 0.0.0.0:8099 users:(("python3",pid=3545,fd=3)). Первое, с чего начинается любой аудит — половина находок обычно в том, что сервис слушает 0.0.0.0 вместо 127.0.0.1. Найти, кто держит больше всего соединений ss -Hntu | awk '{print $5}' | sed 's/:[^:]*$//' | sort | uniq -c | sort -rn Нюанс: в шпаргалках этот однострочник идёт без -H и с cut -d: -f1. Оба места ломаются. Без -H в подсчёт попадает строка заголовка, и в топе появляется несуществующий адрес Local. А cut по первому двоеточию режет IPv6: адрес [2001:db8::2]:54321 превращается в [2001. Отсечение через sed берёт только порт с конца. Закрыть вход по умолчанию iptables -A INPUT -m conntrack \ --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -P INPUT DROP Нюанс: в подборках порядок обратный — сначала -F, потом -P INPUT DROP, а разрешающие правила ниже. Между этими двумя строками сессия уже мертва, и до правил вы не дойдёте. Политика ставится последней, всегда. Заодно -m state там устаревший, актуален -m conntrack --ctstate. Ограничить SSH подсетью и числом сессий iptables -A INPUT -p tcp --dport 22 \ ! -s 10.0.0.0/24 -j DROP iptables -A INPUT -p tcp --dport 22 \ -m connlimit --connlimit-above 3 -j REJECT Оба правила встали. Полезная деталь: iptables -S показывает, что модуль сам дописал --connlimit-mask 32 --connlimit-saddr — лимит считается по одному адресу, а не по подсети. Если нужен другой охват, маску задавайте явно. Отправить подсеть в никуда без файрвола ip route add blackhole 192.168.10.0/24 Нюанс: это не тихий дроп. Локальные попытки получают отлуп сразу — ping вернул connect: Invalid argument, curl завершился с кодом 7. Для исходящего трафика это плюс, ошибка приходит мгновенно вместо таймаута, но маскировки не ждите. И общее: всё это живёт до перезагрузки. netfilter-persistent для правил, ip route — в конфигурацию сети, иначе следующий ребут откроет всё обратно. А вы вредоносные IP баните iptables напрямую или отдаёте это CrowdSec и fail2ban? #Linux #Security #iptables #Networking #DevOps
1 347
13
🎥 Вебинар: «Сможет ли ИИ починить Linux-сервер: где заканчиваются подсказки и начинается инженерная диагностика» Разберем ре
🎥 Вебинар: «Сможет ли ИИ починить Linux-сервер: где заканчиваются подсказки и начинается инженерная диагностика» Разберем реальный инцидент с Linux-сервером и попробуем найти причину проблемы с помощью ИИ. Посмотрим, какие рекомендации действительно помогают инженеру, какой информации не хватает модели и почему некоторые команды опасно выполнять без понимания состояния системы. О чем поговорим: - Разберем реальный инцидент с Linux-сервером и попробуем диагностировать его с помощью ИИ. - Проверим, какие рекомендации AI можно использовать, а какие требуют дополнительной проверки. - Сравним готовые команды с последовательной инженерной диагностикой и поиском первопричины. - Покажем, как безопасно применять ИИ для анализа логов, формирования гипотез и подготовки плана действий. - Разберем формат обучения, практические задания, поддержку преподавателей и итоговый проект курса. 🧠 Вебинар приурочен к старту курса «Администратор Linux. Продвинутый уровень». Программа постоянно обновляется с учётом современных требований рынка. Занятия проводят практикующие эксперты, которые ежедневно работают с производственной инфраструктурой. Вы изучите востребованные инструменты: Zabbix, Prometheus, Docker, Nginx, PostgreSQL, ELK, Ansible, SELinux, Bash и многие другие. 👉 Для участия зарегистрируйтесь https://otus.pw/6rPu/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
1 232
14
Добавить пользователя в группу и не выкинуть его при этом из sudo Добавить во вторичную группу usermod -aG developers lisa Нюанс, ради которого стоит перечитать свои скрипты: без -a флаг -G не добавляет, а заменяет весь список. Было sudo,developers,ops — после usermod -G developers lisa осталось только developers. Ни ошибки, ни предупреждения, код возврата 0. Человек узнает об этом, когда в следующий раз наберёт sudo. Удалить из группы gpasswd -d bob developers Печатает Removing user bob from group developers. В отличие от usermod -G, трогает ровно одну группу. Сменить GID существующей группы groupmod -g 2000 developers find / -xdev -nogroup 2>/dev/null chgrp -R developers /data Нюанс: groupmod меняет запись в /etc/group, но файлы на диске остаются со старым числовым GID. У меня после смены ls -ld /data показал вместо имени голое 1004 — каталог стал ничьим. Ищите такие через find -nogroup и чините chgrp -R, иначе доступ к данным потеряется молча. Создать группу в скрипте groupadd -f developers groupadd -r pgsql Нюанс: обычный groupadd на существующей группе возвращает код 9 и роняет скрипт под set -e. Флаг -f делает операцию идемпотентной — то, что нужно для повторных прогонов Ansible или cloud-init. А -r создаёт системную группу: у меня она получила GID 996, обычная — 2002. Удалить группу groupdel testers Нюанс: если группа у кого-то основная, команда откажет — cannot remove the primary group of user 'bob', код 8. Вторичную удалит без вопросов, и у пользователей она просто исчезнет из списка. Про проверку: id -nG lisa показывает актуальный список из базы, а groups в чужой открытой сессии — то, что было на момент входа. Пользователь не увидит новых групп, пока не перелогинится или не выполнит newgrp. А вы группы раскатываете Ansible-модулями или скриптом с groupadd -f? #Linux #Security #Ansible #DevOps #Bash --- Что нашлось при проверке Главную ловушку воспроизвёл. Завёл lisa в sudo, developers, ops. После usermod -G developers lisa осталась одна developers, код возврата 0, ни слова в выводе. Исходник называет это в «честном минусе», но в самом пункте 7 стоит только скобка «обязательно -a» — я вынес разбор в тело, потому что это главное содержание всей темы. Находка сверх исходника: `groupmod -g` оставляет файлы без группы. Сменил GID у developers с 1004 на 2000 — каталог /data стал показывать 1004 вместо имени. Формально данные не потеряны, но группа к ним больше не имеет отношения. Исходник даёт команду без единой оговорки. Добавил find -nogroup и chgrp -R как лечение. `groupadd -f` для идемпотентности. Обычный вызов на существующей группе — код 9. В скриптах инициализации, о которых говорит сам исходник, это ровно та причина, по которой люди начинают городить проверки через grep /etc/group. Флага -f в исходнике нет. `groupdel` на основной группе. cannot remove the primary group of user 'bob', код 8. Проверил обе ветки — вторичная удаляется молча. `groupadd -r` даёт GID из системного диапазона. У меня 996 против 2002 у обычной. Исходник пишет «GID до 1000» — подтвердилось. Из пятнадцати пунктов оставил шесть. Убрал groups, id, chgrp, find -group, newgrp, groupmod -n, gpasswd -A как отдельные блоки — по ним нечего добавить сверх справки. Мысль про groups против id вплёл в текст: она объясняет, почему пользователь «не видит» новую группу. Метрики: объём 2027, подводка 67 символов, форма — инфинитив цели. Строк кода длиннее 60 нет, восклицательных нет, хештегов 5.
1 244
15
Собрать архив с исключениями и не обнаружить потом, что исключения не сработали. Исключить каталог из архива tar --exclude='data/logs' -czf arch.tgz data Нюанс: --exclude обязан стоять до источника. Поставил после — tar честно предупредил --exclude 'data/logs' has no effect и всё равно упаковал логи. Второе: шаблон сравнивается с тем, как путь записан внутри архива. Упаковываете data, значит исключать надо data/logs, а не /tmp/ta/data/logs — с абсолютным путём совпадения не будет. Достать один файл из архива tar -tf arch.tar | grep app.conf tar -xf arch.tar tmp/ta/data/conf/app.conf Нюанс: при упаковке по абсолютному пути tar срезает ведущий слеш и пишет Removing leading '/' from member names. Поэтому распаковать по тому же абсолютному пути не выйдет — получите Not found in archive. Сначала посмотрите список через -t, потом копируйте путь оттуда. Дописать или удалить файл в архиве tar -rf arch.tar newfile.txt tar --delete -f arch.tar oldfile.txt Нюанс: только для несжатых архивов. На .tgz обе команды падают с Cannot update compressed archives и Error is not recoverable: exiting now. Чтобы поправить сжатый архив, его придётся распаковать целиком. Сжать быстрее и плотнее gzip tar --zstd -cf arch.tar.zst data На моих тестовых данных zstd дал 199 байт против 225 у gzip. Нюанс: если пакета zstd в системе нет, tar создаст файл нулевого размера и завершится с кодом 2. Файл при этом лежит на месте и выглядит как архив — в скрипте бэкапа такое заметят не сразу. Проверяйте код возврата, а не наличие файла. Не перезаписать свежие файлы при распаковке tar -xf arch.tar --keep-newer-files Работает: файл, который новее архивного, остаётся нетронутым, в выводе Current 'data/logs/a.log' is newer or same age. Нюанс: код возврата при этом 2, как при ошибке. Под set -e скрипт упадёт, хотя всё прошло по плану. Про сравнение архива с диском: tar -df arch.tar показывает Mod time differs и Size differs по каждому расхождению. Удобно проверить бэкап, не распаковывая. А вы чем сжимаете бэкапы — gzip по привычке или уже переехали на zstd? #Linux #tar #Backup #Bash #DevOps
1 590
16
🎥 Вебинар: «Типовые задачи с RAID-массивами: создание, эксплуатация, перенос данных и восстановление» На открытом уроке разб
🎥 Вебинар: «Типовые задачи с RAID-массивами: создание, эксплуатация, перенос данных и восстановление» На открытом уроке разберем повседневные задачи, возникающие при работе с RAID-массивами: замену дисков, перенос данных на другой сервер и восстановление массива после сбоя. Обсудим, как собрать RAID из оставшихся дисков и в каких случаях восстановление данных возможно, а когда вернуть массив уже не получится. О чем поговорим: — Как создавать и эксплуатировать RAID-массивы — Как правильно менять вышедшие из строя диски — Как собрать массив из оставшихся рабочих дисков — Как перенести данные на другой сервер — Как восстанавливать RAID после сбоя и оценивать вероятность успешного восстановления 🧠 Вебинар приурочен к старту курса «Администратор Linux. Продвинутый уровень». Программа постоянно обновляется с учётом современных требований рынка. Занятия проводят практикующие эксперты, которые ежедневно работают с производственной инфраструктурой. Вы изучите востребованные инструменты: Zabbix, Prometheus, Docker, Nginx, PostgreSQL, ELK, Ansible, SELinux, Bash и многие другие. 👉 Для участия зарегистрируйтесь https://otus.pw/ZrYD/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
1 255
17
Собрать дерево каталогов одной строкой и не получить папку с фигурными скобками в имени. Создать вложенную структуру mkdir -p project/src/{configs,utils,tests} Нюанс: раскрытие скобок — фича bash, а не mkdir. В sh строка отработает буквально, создав каталог с именем {configs,utils,tests} — проверил, ошибки при этом никакой. То же будет от пробела после запятой и от одного элемента без запятой: {only} останется как есть. Если скрипт начинается с #!/bin/sh, скобки не использовать. Вернуться в предыдущий каталог cd - Нюанс: cd - печатает путь в stdout. В скрипте это мусор в выводе, а $(cd -) вообще бесполезен — подстановка уходит в подоболочку, и рабочий каталог самого скрипта не меняется. Для скриптов тише так: cd "$OLDPWD" Ходить по каталогам стеком pushd /var/log >/dev/null popd >/dev/null Нюанс: лишний popd возвращает directory stack empty и код 1. Под set -e скрипт на этом падает — а такое легко получить, если между pushd и popd стоит выход по ошибке. Перенаправление в /dev/null тоже нужно: обе команды печатают содержимое стека. Пройти сквозь симлинк cd -P /var/run Проверил на своём симлинке: обычный cd оставляет PWD равным /tmp/dd/link, с -P он становится /tmp/dd/real. Нюанс не в самом переходе, а в том, что будет дальше. Из link/sub команда cd .. вернёт в link, а cd -P .. — в real. Скрипт, который ходит относительными путями через симлинк, легко уедет не туда. Заодно pwd -P показывает физический путь, когда pwd показывает логический. Снести пустую цепочку каталогов rmdir -p a/b/c Поднимается снизу вверх, пока каталоги пустые. Нюанс: наткнувшись на непустой, останавливается с Directory not empty — но то, что успел удалить ниже, уже удалено. Возврата нет, так что для глубоких цепочек лучше сначала посмотреть find a -type d -empty. А вы по дереву каталогов ходите pushd или всё-таки алиасами и cd -? #Linux #Bash #Terminal #Scripting #DevOps
1 464
18
Не оставить пароль в bash_history и не удивиться, что он всё равно там оказался. Скрыть команду от истории mysql -u root -p'super_secret' Ведущий пробел, и строка не попадёт в ~/.bash_history. Работает, если в HISTCONTROL есть ignorespace. Нюанс: в Ubuntu это уже настроено, но по-разному. В /etc/skel/.bashrc стоит ignoreboth, а в root-сессии у меня было ignoredups:ignorespace. Проверьте своё: echo "$HISTCONTROL" Если пусто — трюк не сработает вообще, а вы будете уверены в обратном. Исправить опечатку в предыдущей команде systemctl status nginx-confg ^confg^config Заменяет и сразу выполняет. Нюанс: только первое вхождение. Проверил на echo aaa bbb aaa — после ^aaa^XXX получилось XXX bbb aaa. Для всех вхождений другая конструкция: !!:gs/aaa/XXX/ Открыть длинную команду в редакторе fc Вытаскивает последнюю команду в $EDITOR, после сохранения bash её выполняет. Нюанс: порядок поиска редактора — FCEDIT, потом EDITOR, и только потом vi по умолчанию. На голом сервере без vi получите bash: vi: command not found и никакого редактирования. Заранее пропишите export FCEDIT=nano или что вам ближе. Оживить терминал после вывода бинарника reset clear только прокручивает экран, а reset переинициализирует терминал целиком. Если и это не помогает — stty sane возвращает настройки ввода, когда не видно набираемых символов. Отвязать процесс от закрывающейся сессии bg disown -h %1 Нюанс: -h и без него — разные вещи. С -h задача остаётся в jobs, но не получит SIGHUP при закрытии терминала. Без флага задача исчезает из таблицы совсем. Проверил оба варианта, разница именно в этом. И про главное ограничение трюка с пробелом: он прячет команду от файла истории, но не от системы. Пока процесс жив, его аргументы видны в ps -eo args любому пользователю. Пароль в командной строке остаётся паролем в командной строке — читайте его из файла или переменной окружения. А чем вы правите длинные пайплайны — fc или сразу пишете в файл? #Linux #Bash #Terminal #Security #DevOps
1 510
19
Смонтировать сетевую шару и не подвесить процессы, когда сервер отвалится. Убрать пароль из fstab mount -t cifs -o credentials=/etc/cifs-creds \ //10.0.0.10/share /mnt/samba Файл /etc/cifs-creds из трёх строк: username=, password=, domain=. Нюанс: chmod 600 на нём — целиком на вашей совести, mount права не проверяет и с файлом 644 отработает молча. Заодно проверьте, что каталог с ним не уезжает в бэкап открытым текстом. Отцепить зависшую шару umount -l /mnt/nfs Проверил на tmpfs: после -l каталог пуст и монтирования в mount больше нет, но процесс, державший файл открытым, спокойно дочитал его по старому дескриптору. Нюанс: -l убирает точку из дерева, а не освобождает ресурсы — пока живы процессы, ФС остаётся. Ищите их через lsof +D до того, как отцепите, иначе искать будет негде. -f имеет смысл только для NFS и только вместе с недоступным сервером, для cifs он почти ничего не даёт. Посмотреть, что отдаёт сервер showmount -e 10.0.0.10 Нюанс: showmount говорит по протоколу MOUNT, которого в NFSv4 нет вообще. На сервере с отключёнными v2 и v3 получите clnt_create: RPC: Program not registered — и это не значит, что сервер мёртв. Для v4 просто монтируйте корень экспорта: mount -t nfs4 10.0.0.10:/ /mnt. Монтировать по требованию, а не при загрузке //10.0.0.10/share /mnt/samba cifs noauto,x-systemd.automount,_netdev, credentials=/etc/creds 0 0 Нюанс: _netdev нужен наравне с x-systemd.automount. Без него systemd не знает, что монтирование сетевое, и может дёрнуть его до поднятия интерфейсов. Плюс x-systemd.idle-timeout= отцепит шару после простоя — на нестабильном канале это лучше, чем висящая точка. Не залипнуть на медленном NFS mount -t nfs -o soft,timeo=50,retrans=2 \ 10.0.0.10:/data /mnt/nfs timeo в децисекундах, так что 50 — это 5 секунд. По умолчанию для TCP стоит 600, то есть минута, да ещё с линейным ростом после каждой переотправки. Нюанс: man про soft пишет прямо — silent data corruption. Приложение получит I/O error, и если оно его не обработает, запись потеряется тихо. Для баз и любой записи оставляйте hard. И не тащите из старых шпаргалок intr — опция игнорируется с ядра 2.6.25. А вы сетевые шары монтируете через fstab или отдаёте systemd с automount? #Linux #NFS #Samba #systemd #DevOps
1 561
20
🎥 Вебинар: Где Linux хранит настройки и логи: разбираем файловую структуру на практике. На открытом уроке разберем структуру
🎥 Вебинар: Где Linux хранит настройки и логи: разбираем файловую структуру на практике. На открытом уроке разберем структуру каталогов Linux и узнаем, где искать конфигурационные файлы, системные журналы и другие важные данные. Рассмотрим назначение основных директорий и вспомним, как права доступа влияют на работу с файлами. Данный открытый урок проходит в рамках курса «Администратор Linux. Базовый уровень». О чем поговорим: — Как устроена файловая структура Linux — Для чего предназначены основные системные каталоги — Что такое конфигурационный файл и где обычно хранятся настройки сервисов — Где Linux хранит системные логи и как найти нужный журнал — Как права доступа влияют на чтение и изменение файлов 🧠 Вебинар приурочен к старту курса «Администратор Linux. Базовый уровень». Вы освоите Bash, TCP/IP, Nginx, Apache, MySQL, Docker, Git, Prometheus, Grafana и ELK. На живых занятиях с практикующими экспертами научитесь настраивать веб-серверы, работать с сетью, контейнерами, мониторингом и фильтрацией трафика. 👉 Для участия зарегистрируйтесь https://otus.pw/e3sf/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
1 454