Admin Guides | Сисадмин
11.5K subscribers
1.34K photos
20 videos
34 files
568 links
Обучающий канал по ОС Linux & Windows для начинающих и действующих администраторов.

Админ, реклама: @Ak_Mihail
Биржа: https://telega.in/c/admguides

РКН: https://kurl.ru/nQejS
Download Telegram
💬 Вопрос на собеседовании для сисадмина

Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.


Вопрос: Что такое page reclaim в Linux и как ядро решает, какие страницы памяти освободить при нехватке RAM?

Ответ: Page reclaim — это процесс, при котором ядро Linux освобождает память, вытесняя неактивные страницы из оперативки, когда системе не хватает RAM. Это часть подсистемы управления памятью (MM subsystem).

Как это работает:
• Ядро поддерживает два списка: active и inactive.
• Активные страницы недавно использовались, неактивные — давно не трогались.
• При нехватке памяти запускается kswapd, который перемещает страницы из active → inactive и затем освобождает их, сбрасывая dirty-страницы на диск или удаляя чистые.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4
Как запретить юзерам выключать сервер или менять сетевые настройки

Иногда на сервере несколько пользователей, и не все должны иметь полные права.

Например, кто-то случайно жмёт “Выключить” в GUI — и сервер падает.

Linux даёт способ это запретить без удаления sudo: через PolicyKit (polkit).

Запрет выключения и перезапуска

Создаём правило:

sudo nano /etc/polkit-1/rules.d/49-disable-shutdown.rules


И добавляем:

polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.reboot") &&
!subject.isInGroup("wheel")) {
return polkit.Result.NO;
}
});


Теперь только пользователи из группы wheel (или другой, если заменишь) смогут перезагружать и выключать систему.

Запрет изменения сети

Файл:

sudo nano /etc/polkit-1/rules.d/50-disable-network.rules


Код:

polkit.addRule(function(action, subject) {
if (action.id.indexOf("org.freedesktop.network-manager.settings.") == 0 &&
!subject.isInGroup("netadmin")) {
return polkit.Result.NO;
}
});


Теперь менять соединения, IP и Wi-Fi смогут только пользователи группы netadmin.

Как проверить:

pkaction | grep power
pkaction | grep network


Покажет все доступные polkit-действия.
👍12🔥8
Вышел Rust 1.91.0!

30 октября 2025 года состоялся релиз новой версии языка Rust — одной из самых стабильных и безопасных экосистем в мире. 


В обновлении участвовали 235 разработчиков, а ключевые улучшения направлены на производительность, удобство и расширение поддержки платформ.

Главное в релизе:
Windows на ARM (aarch64-pc-windows-msvc) получила статус Tier-1 — теперь есть официальные бинарники и полный саппорт.
Новые lint-проверки: защита от висячих указателей и преобразования чисел в указатели через transmute.
В Cargo стабилизирована опция build.build-dir — можно указать каталог для временных артефактов сборки.
Поддержка inline-ассемблера для LoongArch32 и обновление компилятора до LLVM 21.
Добавлены десятки стабильных API — от PathBuf::add_extension до Ipv6Addr::from_segments.
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3
💬 Вопрос на собеседовании для DevOps-инженера

Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.


Вопрос: Что такое seq_file API в Linux и зачем оно используется?

Ответ: seq_file — это интерфейс ядра Linux, упрощающий вывод последовательных данных из ядра в пространство пользователя, например через /proc или /sys. Он нужен для безопасного и эффективного отображения длинных структурированных данных (таблицы, списки, статистику и т.п.).

Без seq_file разработчикам приходилось вручную управлять буферами, обрезками строк и позиционированием, что повышало риск ошибок.
seq_file решает эти проблемы, обеспечивая:

• последовательную генерацию данных в чанках,
• автоматическую поддержку seek/read,
• потокобезопасный доступ к данным ядра,
• экономию памяти за счёт ленивой генерации.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54
Как безопасно удалить старые логи и кэши, не трогая нужное

Со временем на сервере накапливаются гигабайты старых логов и временных файлов.

Рука не поднимается чистить /var/log — страшно что-то удалить лишнее.

Но всё можно сделать аккуратно, одной командой find с правильными фильтрами.

Удалим файлы старше 30 дней

sudo find /var/log -type f -mtime +30 -delete


-mtime +30 — старше 30 дней
-type f — только файлы
-delete — удалить (осторожно, без подтверждения)

Добавим исключения:

sudo find /var/log -type f -mtime +30 \
! -name "*.conf" \
! -path "/var/log/journal/*" \
-delete


Так мы не тронем systemd-журналы и конфиги лог-демонов.

Чистим кэш без вреда

sudo find /var/cache -type f -mtime +15 -delete


Можно ограничить размер:

sudo du -sh /var/cache/*


и удалить вручную то, что реально разрослось (например, apt или pip кэши).

Тест перед удалением:

sudo find /var/log -type f -mtime +30 -print


Покажет, что будет удалено. Меняем -delete на -print, если нужно просто посмотреть.

Автоматизация:
Добавляем в cron:

sudo crontab -e


и строку:

0 3 * * 0 find /var/log -type f -mtime +30 -delete


Каждое воскресенье в 3:00 — чистка логов.
9🔥8👍4
Отслеживаем, кто открывает соединения на сервере

На продакшн-сервере важно знать, какие процессы слушают порты и кто к ним подключается.

Даже если firewall настроен, иногда нужно понять активность внутри системы.

Посмотреть текущие соединения и процессы

ss -tulpn


• -t — TCP
• -u — UDP
• -l — слушающие порты
• -p — показать процесс
• -n — без резолва имен

Пример вывода:

LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))


Альтернативы

lsof -i -P -n


• Показывает все открытые сетевые сокеты с процессами.

netstat -tulnp


• Старый, но привычный вариант для мониторинга.

Автоматическая запись в лог для аудита

watch -n 60 'ss -tupn >> /var/log/active_connections.log'


• Каждую минуту логируются текущие соединения.
• Можно добавить logger для syslog:

ss -tupn | logger -t net-audit
👍127
Как защитить важные файлы от случайного удаления

На сервере есть критичные файлы: конфиги, скрипты, сертификаты.

Случайное удаление или модификация могут сломать сервис.

Linux даёт несколько инструментов для защиты: chattr, ACL и правильный sudoers.

Файлы “только для чтения” с chattr

sudo chattr +i /etc/nginx/nginx.conf


• +i — ставит immutable, файл нельзя удалить, переименовать или изменить, даже root.
• Чтобы снять защиту:

sudo chattr -i /etc/nginx/nginx.conf


Разграничение прав через ACL

sudo setfacl -m u:deploy:r /etc/nginx/nginx.conf


Пользователь deploy получает только чтение.
Список прав:

getfacl /etc/nginx/nginx.conf


Правильная настройка sudoers
Не даём всем полный ALL доступ.
Пример: разрешить перезагрузку nginx без права удалять файлы:

deploy ALL=(root) NOPASSWD: /bin/systemctl restart nginx
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥97
Microsoft готовит Windows 11 26H1 - апдейт без новых фишек

Microsoft подтвердила скорый выход версии 26H1 - первой весенней сборки новой Windows.

Она уже доступна инсайдерам, начиная со сборки 28000.


26H1 не добавит пользовательских функций - только платформенные изменения под новое железо, предположительно Snapdragon X2 для ПК Copilot+ следующего поколения.

Основные обновления по-прежнему будут выходить в рамках 25H2, которая уже развёртывается массово и продлевает поддержку Windows 11 до 2028 года.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍21👎1
Изолируем сетевые интерфейсы для тестов

Надо попробовать что-то с сетью, но боишься сломать основную? Linux умеет создавать отдельные сетевые пространства через ip netns.

Внутри них можно поднимать интерфейсы, запускать сервисы и даже NAT - всё, что угодно, не трогая основной сервер.

Делаем быстро

# Создаём namespace
sudo ip netns add testns

# Делаем пару виртуальных интерфейсов
sudo ip link add veth0 type veth peer name veth1

# Перемещаем один интерфейс внутрь namespace
sudo ip link set veth1 netns testns


Назначаем адреса и поднимаем интерфейсы

# На основной сети
sudo ip addr add 192.168.100.1/24 dev veth0
sudo ip link set veth0 up

# В namespace
sudo ip netns exec testns ip addr add 192.168.100.2/24 dev veth1
sudo ip netns exec testns ip link set veth1 up
sudo ip netns exec testns ip link set lo up


И вот сейчас внутри testns можно запускать свои тесты, пинговать veth0 и проверять всё, что угодно, не трогая остальную сеть.

Проверим:

sudo ip netns exec testns ping 192.168.100.1
9👍7
💬 Вопрос на собеседовании для сисадмина

Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.


Вопрос: Что такое slab shrinker в Linux и как он участвует в освобождении памяти?

Ответ: Slab shrinker — это механизм ядра Linux, который отвечает за освобождение памяти, занятой кэширующими структурами (slab caches). Когда системе не хватает памяти, ядро вызывает shrinker-функции, зарегистрированные подсистемами, чтобы те попытались вернуть часть неиспользуемых объектов в общий пул памяти.

• Каждый кэширующий объект (например, inode cache, dentry cache, buffer head) имеет свой shrinker, который знает, какие элементы можно безопасно удалить.
• Процесс может быть запущен как фоновым демоном kswapd, так и напрямую при page reclaim.
• Shrinker сообщает ядру, сколько объектов он может освободить, и постепенно очищает кэш, не разрушая актив
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94
Как проверять DNS и маршруты на продакшн-сервере

Когда что-то “не пингуется”, виноват не всегда фаервол.

Иногда DNS не резолвит, а иногда маршрут просто уходит не туда.

Проверять это на проде нужно аккуратно — без лишних правок и даунтайма.

Проверка DNS

Быстрее всего — dig.
Он показывает, какой сервер отвечает и какой IP вернулся.

dig example.com
dig @8.8.8.8 example.com +short


Если у сервера systemd, можно проверить текущую конфигурацию DNS так:

resolvectl status


или точечно:

resolvectl query example.com


Это покажет, какой DNS-сервер реально используется и как долго кэшируются записи.

Логирование результатов

Иногда удобно писать результаты проверок в лог, особенно при отладке периодических проблем с сетью:

{
date
dig +short example.com
ip route get 8.8.8.8
} >> /var/log/netcheck.log 2>&1
👍103
Как отследить утечки памяти у демонов?

Иногда сервисы начинают «распухать» по памяти, особенно те, что работают месяцами без рестартов.

В Linux это можно заметить и даже ограничить — без внешних мониторингов.

🔍 Проверяем использование памяти

Посмотреть, кто сколько ест:

smem -p | sort -k 4 -h


или подробнее по процессу:

pmap -x <PID>


Если сервис запущен через systemd — можно сразу смотреть в разрезе cgroup:

systemd-cgtop


или точечно:

systemctl status myservice


⚙️ Автоматическое ограничение памяти

В unit-файле можно задать предел, после которого systemd перезапустит сервис:

[Service]
MemoryMax=500M
Restart=on-failure


После изменения — не забыть:

sudo systemctl daemon-reload
sudo systemctl restart myservice
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥51
💬 Вопрос на собеседовании для DevOps-инженера

Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.


Вопрос: Что такое Linux PSI (Pressure Stall Information) и как его использовать для мониторинга?

Ответ: PSI — это механизм ядра Linux, позволяющий отслеживать давление на ресурсы: CPU, память и I/O. Он показывает, сколько времени процессы провели в ожидании этих ресурсов, что помогает выявить узкие места до того, как ситуация станет критичной (например, до вмешательства oom-killer).

PSI не измеряет загрузку напрямую — он измеряет «stall time» — сколько процессов одновременно не могли продолжить работу из-за нехватки ресурса. Это дает более реалистичную картину деградации системы.

Проверка PSI осуществляется через:

cat /proc/pressure/cpu
cat /proc/pressure/memory
cat /proc/pressure/io
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4
😁19👍5🤔1
Как сделать аварийный SSH-вход при падении сети

Бывает, обновил firewall или NetworkManager — и основной SSH отвалился.

Чтобы не остаться без доступа, можно поднять резервный sshd — на другом порту и интерфейсе.

⚙️ Создаём копию конфигурации

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_alt


В файле sshd_config_alt укажи, например:

Port 2222
ListenAddress 192.168.100.10
PidFile /run/sshd-alt.pid


(адрес — интерфейс, который не трогают твои основные правила).

🚀 Запускаем второй sshd вручную

sudo /usr/sbin/sshd -f /etc/ssh/sshd_config_alt


или через systemd:

sudo systemctl start [email protected]


(в некоторых дистрибутивах можно создать отдельный unit-файл).

🧭 Проверяем доступ

С другой машины:

ssh -p 2222 [email protected]


Если всё работает — можно спать спокойнее: при сбое сети или блокировке основного порта резервный SSH всё ещё жив.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍144👎1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣20😁103
💬 Вопрос на собеседовании для сисадмина

Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.


Вопрос: Чем отличается fork() от exec() в Linux и когда использовать каждый из них?

Ответ: fork() — это системный вызов, создающий новый процесс путём копирования текущего. Получившийся дочерний процесс будет точной копией родительского: он унаследует дескрипторы файлов, переменные окружения и текущее состояние. Основное отличие — у него будет свой PID. Это полезно, если вы хотите создать процесс, который продолжит выполнять ту же программу, но, например, с другими параметрами.

exec() — это семейство функций (execl, execp, execve и др.), которое заменяет текущий процесс на новый, загружая в его адресное пространство другую программу. После вызова exec() оригинальный код процесса больше не выполняется — он полностью замещается. Это удобно, если вы после fork() хотите в дочернем процессе запустить другую программу (что и делает большинство шеллов при запуске команд).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103🔥1