Linux: Системный администратор
1.92K subscribers
79 photos
8 videos
15 files
42 links
Здесь вы найдете полезные советы, практические материалы и интересные инсайты по администрированию Linux. Погружаемся в мир команд, скриптов и серверов вместе! 🚀

Авторский канал действующего админа 👨🏼‍💻
Download Telegram
🛠 Как узнать, кто перезагрузил сервер?

Сегодня покажу вам простой способ выяснить, кто именно инициировал перезагрузку сервера. Иногда бывает так: сервер внезапно ушёл в ребут, и ты не уверен — это был плановый рестарт, баг или кто-то нажал reboot не подумав. Давайте разбираться!

🔍 Шаг 1: Проверяем журнал перезагрузки

last -x | grep reboot

Эта команда покажет дату и время перезагрузки. Но кто?

🔍 Шаг 2: Ищем инициатора в журнале auditd (если он включён)

ausearch -k reboot

или

ausearch -x /sbin/reboot

Это поможет, если у вас включён auditd. Если нет — смотри следующий шаг.

🔍 Шаг 3: Проверка journalctl

journalctl -b -1 | grep -i 'reboot\|shutdown\|poweroff'

Здесь могут быть строки вроде:

systemd-logind[...]: Power key pressed.
systemd-logind[...]: Rebooting system.

или

systemd[1]: Received request to reboot from UID=1000

UID поможет понять, какой пользователь инициировал ребут.

🔍 Шаг 4: Кто был в системе до ребута?

last -F | head

Посмотри, кто был залогинен незадолго до перезагрузки. Возможно, это и есть "виновник".



🧠 Мой совет: Настрой логирование и аудит таких событий заранее — особенно на продакшене. А ещё можешь повесить алерт на неожиданные ребуты через Prometheus + Alertmanager.

Полезно? Делитесь в комментах своими кейсами, когда сервер ушёл в ребут «сам по себе» 😅

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍41
🧠 Что делает команда 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 и корректная работа сигналов.

А вы используете exec в своих скриптах? Поделитесь опытом 👇

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍32
📌 Команда : xargs — что это, как использовать с find, реальные примеры


Если ты всё ещё пишешь

bash
find . -name "*.log" -exec rm {} \;

— пора познакомиться с xargs.


🔹 Что делает xargs
Простыми словами: берёт вывод одной команды и передаёт его как аргументы другой.
Часто используется в связке с find, grep, ls, cat и т.д.


🔧 Пример 1: удаление файлов

bash
find . -name "*.log" | xargs rm

Быстрее и читаемее, чем -exec.
А если в путях есть пробелы — добавь -print0 и -0:

bash
find . -name "*.log" -print0 | xargs -0 rm



🔧 Пример 2: архивация большого списка файлов

bash
cat filelist.txt | xargs tar -czf archive.tar.gz

Но лучше писать так:

bash
xargs -a filelist.txt tar -czf archive.tar.gz



⚠️ Полезные флаги
- -n N — запускать по N аргументов
- -P N — параллельное выполнение (например, -P 4 для 4 потоков)
- -I {} — подстановка аргументов вручную:

bash
cat urls.txt | xargs -I {} curl -O {}



🧠 Где применять
- Удаление, копирование, перемещение файлов
- Обработка списков (имён, URL, путей)
- Массовый запуск скриптов
- Комбинация с parallel — огонь 🔥


✍️ Итог
xargs — это must-have в наборе админа.
Один раз освоил — и половина баш-магии стала проще.

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍4🔥1🤯1
🎯 Как быстро очистить лог-файлы, не перезапуская сервис

Привет, коллеги! Сегодня хочу показать простой, но очень полезный приём для работы с логами. Иногда лог-файлы разрастаются до гигантских размеров, и хочется их обнулить — но без остановки сервиса, который пишет в этот файл.

🔧 Вот как это сделать:


: > /var/log/your-log.log


Или, альтернативно:


truncate -s 0 /var/log/your-log.log


📌 Что здесь происходит:

- : > — это no-op команда (:) с перенаправлением вывода в файл, по сути затирает его.
- truncate -s 0 — устанавливает размер файла в 0 байт.

💡 Главное: не удаляйте лог-файл напрямую!
Если вы сделаете rm /var/log/your-log.log, то большинство демонов продолжат писать в уже открытый файловый дескриптор — и вы потеряете лог, не освободив место.

Если лог-файл всё-таки нужно удалить — сделайте это аккуратно:


> /var/log/your-log.log && systemctl reload your-service


Или используйте logrotate — но об этом в одном из следующих постов 😉

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍5
⚙️ Автоматизация рутинных задач с systemd timers

Привет, друзья! Сегодня расскажу, как я заменил cron на более гибкое решение — systemd timers.

Почему это круто?
👉 Логирование, зависимость от сервисов, простая отладка и интеграция в systemctl.

🔧 Пример: бэкап каталога каждый день

1. Создаем сервис-файл:

/etc/systemd/system/backup-home.service

[Unit]
Description=Backup /home to /backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup-home.sh


2. Создаем таймер:

/etc/systemd/system/backup-home.timer

[Unit]
Description=Daily backup of /home

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target


3. Активируем:


sudo systemctl daemon-reexec
sudo systemctl enable --now backup-home.timer


📌 Скрипт backup-home.sh можно писать как угодно: rsync, tar, borg, хоть scp.

Плюс: systemd сам выполнит задание при следующей загрузке, если сервер был выключен в 3 ночи (благодаря Persistent=true).

🔥 Используете systemd timers или предпочитаете cron? Расскажите, что автоматизируете!

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
🔐 Сегодня покажу вам, как быстро проверить, какие пользователи могут входить по SSH

Когда нужно быстро провести аудит, кто действительно может зайти на сервер по SSH, поможет вот такой однострочник:


getent passwd | awk -F: '$3 >= 1000 && $7 ~ /bash/ {print $1}' | while read user; do
if [ -f /home/$user/.ssh/authorized_keys ]; then
echo "$user — доступ по ключу"
elif grep -q "^$user:" /etc/shadow && [ "$(awk -F: -v u="$user" '$1 == u {print $2}' /etc/shadow)" != "*" ]; then
echo "$user — может входить с паролем"
fi
done


💡 Что делает скрипт?
- Ищет всех "нормальных" пользователей (UID ≥ 1000 и оболочка bash)
- Проверяет, есть ли у них authorized_keys — значит, ключи
- Если нет — сверяет в /etc/shadow, заблокирован ли пароль

📌 На заметку:
- Подходит для систем с классической схемой пользователей (не LDAP и не sssd)
- UID порог можно подправить под свою среду
- Можно дополнить логированием, например в syslog или файл


А ты проверяешь регулярно, кто может входить на твои сервера? Пиши в комментариях — автоматизировал ли ты аудит SSH-доступа у себя? 👇

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍3
💡 Как я ускоряю поиск по логам в Linux

Сегодня покажу вам приём, который не раз спасал мне нервы при анализе логов.

Представим, что нужно найти ошибки в большом лог-файле, например /var/log/nginx/access.log. Обычно все начинают с:


cat access.log | grep "500"


Но это медленно. Лучше так:


grep "500" access.log


Ещё лучше — использовать less и внутри него grep-подобный поиск:


less +F access.log


А затем нажать /500 — и перейти по найденным совпадениям. Работает быстро, особенно на больших логах.

А если хочется реального профита, то вот мой любимый трюк:


grep -E "500|502|503" access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head


Что делает эта команда:
- Ищет ошибки 500/502/503
- Извлекает IP-адреса (предположим, это первое поле)
- Считает, сколько раз каждый IP дал ошибку
- Показывает топ атакующих/плохих клиентов

Эта команда — мини-аналитика в одну строку. Часто помогает сразу понять, где проблема.


#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍5
👋 Привет, коллеги!

Сегодня хочу поделиться тем, что стоит автоматизировать на сервере в первую очередь. Это база, которая поможет вам сэкономить кучу времени и спать спокойно 😴


🔧 Что обязательно автоматизировать:

1. Резервное копирование (бэкапы)
> Без бэкапов нет продакшена. Это аксиома.

- Автоматизируйте регулярные бэкапы баз данных, конфигов, важных каталогов.
- Используйте rsnapshot, borg, restic, duplicity.
- Настройте оповещения об ошибках и ротацию архивов.


2. Установка и обновление пакетов
> Старое ПО = потенциальная уязвимость.

- unattended-upgrades (Debian/Ubuntu), dnf-automatic (RHEL/AlmaLinux).
- Обновляйте хотя бы критические патчи безопасности.


3. Мониторинг и алерты
> Узнать о проблеме до пользователей — 🔥

- Prometheus + Alertmanager, Zabbix, Netdata, Uptime Kuma.
- Telegram, Email, Slack — что угодно, лишь бы вы не прозевали тревогу.


4. Ротация и очистка логов
> Логи не должны съедать диск.

- logrotate с автоочисткой по размеру или сроку.
- Логи от багов нужны, но не навсегда 😉


5. Автоматический рестарт сервисов
> Упал — поднялся.

- systemd с Restart=on-failure, watchdog-скрипты.
- Плюс мониторинг: жив ли Nginx, работает ли БД.


6. Создание пользователей и SSH-ключей
> Добавлять вручную — долго и скучно.

- Скрипты, шаблоны, Ansible, cloud-init — на выбор.


7. Конфигурации и деплой
> Один конфиг — много серверов.

- Используйте Ansible, SaltStack, Chef, bash-скрипты с шаблонами.

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍4🔥1
🔧 Сегодня покажу вам простой способ ограничить ресурсы для процессов с помощью cgroups v2

Иногда на сервере какой-нибудь процесс начинает «жрать» всё подряд — CPU, память, I/O. Чтобы таких ситуаций избежать, можно использовать cgroups v2.

📦 Пример: ограничим использование CPU и памяти для скрипта


# Создаём директорию cgroup
CGROUP=/sys/fs/cgroup/mylimit
mkdir $CGROUP

# Ограничим память до 200M
echo $((200*1024*1024)) > $CGROUP/memory.max

# Ограничим CPU до 20% от одного ядра
echo 20000 > $CGROUP/cpu.max # 20000 микросекунд из 100000

# Запускаем процесс с этими ограничениями
echo $$ > $CGROUP/cgroup.procs
./your_script.sh


🔍 Проверить потребление можно так:

cat $CGROUP/memory.current
cat $CGROUP/cpu.stat


💡 Советы:
- Работает только если у вас включён cgroup v2 (можно проверить mount | grep cgroup)
- Удобно использовать вместе с systemd, если вы хотите применить это к сервисам (systemctl set-property)

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍42
🛡 Сегодня расскажу, как быстро проверить безопасность конфигурации SSH-сервера

Открытый SSH — это ворота на сервер. И если конфигурация слабая, то защита — как дверь из картона. Проверим, насколько хорошо у вас настроен sshd.

Вот простой чеклист, что стоит сделать:


# 1. Отключить root-доступ
PermitRootLogin no

# 2. Включить только ключевую авторизацию
PasswordAuthentication no

# 3. Установить ограничение по IP (если возможно)
# Можно использовать firewall или AllowUsers с указанием IP

# 4. Ограничить количество подключений:
MaxAuthTries 3
LoginGraceTime 30
MaxSessions 2

# 5. Изменить порт (не security, но уменьшает шум)
Port 2222


🔍 Проверка: используем ssh-audit


pip install ssh-audit
ssh-audit your.server.com


Он покажет, какие алгоритмы шифрования используются, какие из них устарели, и что можно улучшить.

🛠 А ещё можно включить Fail2Ban или iptables для защиты от перебора паролей, если всё-таки оставляете PasswordAuthentication yes.

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍65