summaryrefslogtreecommitdiff
path: root/LINUX/HOME_SERVER
diff options
context:
space:
mode:
authorvlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
committervlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
commite5abc1fe99340b979b18864d978179f71fe8f5c5 (patch)
tree98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /LINUX/HOME_SERVER
First
Diffstat (limited to 'LINUX/HOME_SERVER')
-rw-r--r--LINUX/HOME_SERVER/5 малоизвестных команд для Linux.md48
-rw-r--r--LINUX/HOME_SERVER/Caddy - замена Nginx.md54
-rw-r--r--LINUX/HOME_SERVER/watch.md48
-rw-r--r--LINUX/HOME_SERVER/Очистка системы.md36
-rw-r--r--LINUX/HOME_SERVER/Приложение в SYSTEMD.md141
-rw-r--r--LINUX/HOME_SERVER/Усиление безопасности Linux.md178
6 files changed, 505 insertions, 0 deletions
diff --git a/LINUX/HOME_SERVER/5 малоизвестных команд для Linux.md b/LINUX/HOME_SERVER/5 малоизвестных команд для Linux.md
new file mode 100644
index 0000000..36ec72f
--- /dev/null
+++ b/LINUX/HOME_SERVER/5 малоизвестных команд для Linux.md
@@ -0,0 +1,48 @@
+### tldr
+
+Если набрать, например, man tar, вы получите труднопонятную простыню текста. В отличие, от man, результат вывода команды ниже более понятен.
+
+tldr [command]
+
+Например:
+tldr tar
+Create a .tar archive
+tar cf archive.tar file1 file2
+
+Extract a .tar.gz archive
+tar xzf archive.tar.gz
+
+List contents of a tar file
+tar tf archive.tar
+
+### timeout
+
+Команда timeout позволяет выполнять команду в течение определенного времени. Если время истечет, тайм-аут убьет процесс, так что скрипт не будет выполняться вечно. Пара примеров:
+timeout 5s ping google.com
+timeout 30s ./myscript.sh
+
+### ncdu
+
+Инструмент ncdu похож на du, но с текстовым интерактивным интерфейсом, который позволяет проверять использование диска и удалять мусор на месте.
+ncdu
+--- /home/user ------------------------
+. 3.1 GiB [##########] Downloads
+ 1.2 GiB [###.......] Videos
+ 800.0 MiB [##........] Projects
+ 450.0 MiB [#.........] Documents
+
+### fd
+
+Это удобная альтернатива find с простым синтаксисом (больше никаких длинных флагов или странных шаблонов). Несколько примеров:
+fd notes.txt
+fd -e py
+fd config /etc
+
+### trash
+
+Если вы быстро набирали rm и удаляли не тот файл (или, что еще хуже, целую папку), вы знаете, как жесток Linux в отношении удаления файлов. Кнопки «отменить» нет. Если что-то исчезло, значит, оно действительно исчезло.
+
+Вот тут-то и пригодится команда trash. Она работает так же, как rm, но вместо того, чтобы навсегда удалять файлы, она отправляет их в корзину, откуда их можно легко восстановить позже. Несколько примеров:
+trash filename.txt
+trash file1.txt file2.txt folder/
+trash-restore \ No newline at end of file
diff --git a/LINUX/HOME_SERVER/Caddy - замена Nginx.md b/LINUX/HOME_SERVER/Caddy - замена Nginx.md
new file mode 100644
index 0000000..3b4cfd6
--- /dev/null
+++ b/LINUX/HOME_SERVER/Caddy - замена Nginx.md
@@ -0,0 +1,54 @@
+Caddy - замена Nginx с авто-TLS и минимальной настройкой
+
+Ты наверняка используешь Nginx как прокси-сервер или для выдачи статики. Но есть более свежий и удивительно простой веб-сервер - Caddy. Он сам получит HTTPS, сам перезапустится при изменении конфига и вообще просит к себе минимум внимания. Разбираемся, чем он крут.
+
+Caddy — это современный веб-сервер, написанный на Go. Его главная фишка — всё работает из коробки:
+
+1) Автоматический HTTPS от Let's Encrypt
+2) Перезапуск при изменении конфига
+3) Встроенный reverse proxy
+4) Простая конфигурация (Caddyfile)
+
+Установка:
+
+
+sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
+
+curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy.gpg
+
+curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
+
+sudo apt update
+sudo apt install caddy
+
+
+Минимальный пример Caddyfile:
+
+
+example.com {
+ reverse_proxy localhost:3000
+}
+
+- Заменяешь "example.com" на свой домен
+- localhost:3000 (твой сервис);
+
+Запуск сервера
+
+Caddy работает как systemd-сервис. Чтобы запустить или перезапустить:
+
+
+sudo systemctl restart caddy
+
+После этого caddy сам проверит домен, получит HTTPS-сертификат от Let's Encrypt, настроит прокси и всё заработает)
+
+Почему это удобно
+
+- Не нужно возиться с SSL — HTTPS работает из коробки
+- Конфигурация проще, чем у Nginx
+- Отлично подходит для pet-проектов, демо, VPS-серверов
+
+Когда лучше остаться с Nginx
+
+1) Если у тебя уже сложная конфигурация с множеством rewrite, map, ssl_params
+2) Если нужна кастомная сборка модулей
+3) Если используешь stream (TCP/UDP proxy) \ No newline at end of file
diff --git a/LINUX/HOME_SERVER/watch.md b/LINUX/HOME_SERVER/watch.md
new file mode 100644
index 0000000..8c9409a
--- /dev/null
+++ b/LINUX/HOME_SERVER/watch.md
@@ -0,0 +1,48 @@
+Команда watch: живой взгляд на процессы и метрики
+
+watch - утилита, которая повторно запускает любую команду через заданный интервал (по‑умолчанию 2 сек) и отображает её вывод полноэкранно. Подходит, когда:
+
+1) нужно увидеть изменение метрики прямо сейчас;
+2) нет времени поднимать полноценный мониторинг;
+3) требуется «подкараулить» событие и выйти, как только оно случится;
+4) работает везде: на Debian, BusyBox в Alpine, внутри Docker‑контейнера;
+
+Базовый синтаксис
+
+
+watch [-n <сек>] [-d] [-g] [-t] [-p] [-e] [-x] <команда>
+
+Ключевые опции
+
+"-n 5” — устанавливает интервал в 5 с. Хорош для медленных команд и экономии CPU;
+-d — подсвечивает изменения относительно предыдущего вывода. Удобно отслеживать «скачки»;
+-g — автоматически выходит, как только вывод изменится; полезно, когда ждёте окончания бэкапа;
+-e — завершает работу при ненулевом exit‑коде команды. Превращает watch в health‑check;
+-t — убирает заголовок watch. Идеален для чистых скриншотов;
+-p — синхронизирует запуск с системными секундами. Это важно при очень частых опросах, например "-n 0.2";
+-x — запускает команду без обёртки в shell. Это помогает, если команда содержит символы вроде $ или *, которые интерпретируются bash'ем;
+
+Практические примеры
+
+Топ прожорливых процессов
+
+
+watch -n 1 -d 'ps -eo pid,cmd,%cpu --sort=-%cpu | head'
+
+Ждём появления строки ERROR в логе и выходим
+
+
+watch -g "grep -q ERROR /var/log/app.log"
+echo 'Нашли ERROR!'
+
+Мини‑график latency
+
+
+watch -n 0.2 -p 'ping -c1 1.1.1.1 | awk -F"=" "/time=/{print $4}"'
+
+Лайфхаки
+
+"-d" подсвечивает изменения — удобно, когда хочешь быстро понять, что именно изменилось. Добавь "--differences=permanent", чтобы подсветка не исчезала между обновлениями.
+"-t" убирает заголовок watch — идеально для чистых логов или скриншотов.
+"-p" даёт ровный ритм (1 Hz и выше), полезно для прецизионного мониторинга.
+"-g" или "-e" + немного shell'а — и у тебя мини-скрипт, который реагирует на событие. \ No newline at end of file
diff --git a/LINUX/HOME_SERVER/Очистка системы.md b/LINUX/HOME_SERVER/Очистка системы.md
new file mode 100644
index 0000000..82c3ed6
--- /dev/null
+++ b/LINUX/HOME_SERVER/Очистка системы.md
@@ -0,0 +1,36 @@
+```sh
+# удалить старые версии установленных пакетов и очистить кэш пакетов от ненужных файлов:
+sudo apt autoclean
+# очистить кэш пакетов от ненужных файлов:
+sudo apt clean
+
+sudo dpkg --remove <package_name>
+sudo dpkg --purge <package_name>
+
+# удалить старое и неиспользуемое ядро:
+sudo apt --purge remove linux-image-<version>
+# текущее работающее ядро:
+uname -r
+
+snap list
+sudo snap remove <snap_name>
+
+# удалить файлы журнала сталше 7 дней:
+sudo journalctl --vacuum-time=7d
+# удалить файлы пока общий размер журналов не станет меньше 100Мб:
+sudo journalctl --vacuum-size=100M
+
+# увидеть использование диска домашним каталогом (для дальнейшей очистки):
+du -h --max-depth=1 ~
+
+# очистка кэшированных миниатюр в системе (графической):
+rm -rf ~/.cache/thumbnails/*
+```
+## Очистка кэша миниатюр
+
+Ubuntu создает миниатюры для предварительного просмотра изображений, видео и документов для быстрого доступа. Со временем эти миниатюры могут накапливаться и занимать место.
+Чтобы удалить их, используйте следующую команду:
+
+==`rm -rf ~/.cache/thumbnails/*
+
+Это удалит все кэшированные миниатюры в вашей системе. \ No newline at end of file
diff --git a/LINUX/HOME_SERVER/Приложение в SYSTEMD.md b/LINUX/HOME_SERVER/Приложение в SYSTEMD.md
new file mode 100644
index 0000000..d0c989c
--- /dev/null
+++ b/LINUX/HOME_SERVER/Приложение в SYSTEMD.md
@@ -0,0 +1,141 @@
+```sh
+sudo systemctl edit --force --full mqtt_log.service
+# vim /etc/systemd/system/mqtt_log.service
+
+#==================================
+[Unit]
+Description=mqtt_log
+After=network.target
+
+[Service]
+WorkingDirectory=/home/vlapa/mqtt_log
+StandardError=append:/var/log/myapp/mqtt_log_error.log
+User=vlapa
+Group=vlapa
+Type=simple
+Restart=always
+RestartSec=5
+ExecStart=/home/vlapa/mqtt/.venv/bin/python3 mqtt_log.py
+Environment="PATH=/home/vlapa/mqtt/.venv/bin:/usr/bin:/bin"
+
+
+[Install]
+WantedBy=multi-user.target
+
+#==================================
+# Создаем папку и файл
+mkdir /var/log/myapp
+touch /var/log/myapp/mqtt_log_error.log
+
+#==================================
+sudo systemctl daemon-reload
+sudo systemctl enable myapp
+sudo systemctl start myapp
+sudo systemctl status myapp
+
+# Логи сервиса с последнего запуска
+journalctl -u mqtt_log.service -b
+
+```
+============
+sudo nano /etc/systemd/system/myapp.service
+```
+# Пример конфигурации unit-файла
+
+[Unit]
+Description=My Python Application
+After=network.target
+
+[Service]
+Type=simple
+# Если используете виртуальное окружение:
+ExecStart=/path/to/venv/bin/python /path/to/your/app.py
+# Или без виртуального окружения:
+# ExecStart=/usr/bin/python3 /path/to/your/app.py
+
+# Рабочая директория
+WorkingDirectory=/path/to/your/app/directory
+
+# Пользователь для запуска (опционально)
+User=username
+Group=groupname
+
+# Перезапуск при ошибке
+Restart=always
+RestartSec=5
+
+# Переменные окружения
+Environment="PYTHONPATH=/path/to/your/app"
+Environment="DATABASE_URL=mysql://user:pass@localhost/db"
+
+[Install]
+WantedBy=multi-user.target
+
+
+# Для приложений с зависимостями (виртуальное окружение)
+
+[Service]
+Type=simple
+ExecStart=/home/user/myapp/venv/bin/python /home/user/myapp/main.py
+WorkingDirectory=/home/user/myapp
+Environment="PATH=/home/user/myapp/venv/bin"
+
+
+# Основные команды для управления
+
+
+# Загрузить изменения конфигурации
+sudo systemctl daemon-reload
+
+# Запустить сервис
+sudo systemctl start myapp
+
+# Остановить сервис
+sudo systemctl stop myapp
+
+# Включить автозапуск при загрузке
+sudo systemctl enable myapp
+
+# Проверить статус
+sudo systemctl status myapp
+
+# Просмотреть логи
+sudo journalctl -u myapp -f
+
+
+# Полезные опции для Python-приложений
+
+- **`Restart`** - политика перезапуска:
+
+ - `no` - не перезапускать
+
+ - `on-success` - только при успешном завершении
+
+ - `on-failure` - при ошибке (рекомендуется)
+
+ - `always` - всегда перезапускать
+
+- **`StandardOutput`/`StandardError`** - куда перенаправлять вывод:
+
+ ini
+
+ StandardOutput=journal
+ StandardError=journal
+ # Или в файл:
+ StandardOutput=file:/var/log/myapp.log
+
+
+# Проверка и отладка
+
+bash
+
+# Проверить синтаксис конфигурации
+sudo systemd-analyze verify /etc/systemd/system/myapp.service
+
+# Тестовый запуск без systemd
+sudo -u username /path/to/python /path/to/app.py
+
+# Подробные логи
+sudo journalctl -u myapp -n 100 -f
+
+``` \ No newline at end of file
diff --git a/LINUX/HOME_SERVER/Усиление безопасности Linux.md b/LINUX/HOME_SERVER/Усиление безопасности Linux.md
new file mode 100644
index 0000000..5d4ada7
--- /dev/null
+++ b/LINUX/HOME_SERVER/Усиление безопасности Linux.md
@@ -0,0 +1,178 @@
+### 10 bash-скриптов
+
+## 1. Включение автоматических обновлений безопасности
+
+Одной из важнейших практик поддержания безопасности систем является поддержание программного обеспечения в актуальном состоянии. Этот скрипт включит автоматические обновления безопасности в системе Linux, гарантируя, что система всегда будет защищена от уязвимостей.
+```sh
+#!/bin/bash
+# Автоматическое обновление и установка исправлений безопасности
+sudo apt-get update -y
+sudo apt-get upgrade -y
+sudo apt-get dist-upgrade -y
+# Установка unattended-upgrades, если они не установлены
+sudo apt-get install unattended-upgrades -y
+# Включение автоматических обновлений
+sudo dpkg-reconfigure --priority=low unattended-upgrades
+```
+- `apt-get update -y` обновляет, а `apt-get upgrade -y`модернизирует все системные пакеты.
+- `unattended-upgrades`обеспечивает применение автоматических обновлений безопасности.
+- `dpkg-reconfigure`используется для настройки автоматических обновлений в системе.
+
+## 2. Отключение ненужных служб
+
+Во многих системах ненужные службы запущены по умолчанию. Отключение этих служб уменьшает количество целей для атаки сервера. Этот скрипт выведет список и отключит ненужные службы.
+```sh
+#!/bin/bash
+# Список всех активных служб
+echo "Список активных служб:"
+sudo systemctl list-units --type=service --state=active
+# Отключение ненужных служб
+echo "Отключение ненужных служб..."
+sudo systemctl stop apache2
+sudo systemctl disable apache2
+sudo systemctl stop mysql
+sudo systemctl disable mysql
+```
+- `systemctl list-units`показывает все запущенные службы.
+- `systemctl stop`останавливает службу и `systemctl disable`отключает ее запуск при загрузке.
+- Этот скрипт отключает Apache2 и MySQL в качестве примера.
+
+## 3. Внедрение политики надежных паролей
+
+Обеспечение соблюдения пользователями политики надежных паролей необходимо для безопасности системы. Этот скрипт настроит политику паролей системы для обеспечения надежных паролей.
+```sh
+#!/bin/bash
+# Установите пакет libpam-pwquality для настройки политик паролей
+sudo apt-get install libpam-pwquality -y
+# Установите требования к сложности пароля
+sudo sed -i 's/# minlen = 8/minlen = 12/' /etc/security/pwquality.conf
+sudo sed -i 's/# minclass = 1/minclass = 4/' /etc/security/pwquality.conf
+# Включите политику паролей в конфигурации PAM
+sudo echo "password tribute pam_pwquality.so retry=3" >> /etc/pam.d/common-password
+```
+- пакет `libpam-pwqualityп` предоставляет инструменты для соблюдения политики надежных паролей.
+- параметр`minlen` устанавливает минимальную длину пароля, `minclass`задает количество требуемых классов символов (заглавные, строчные, цифры, специальные символы).
+
+## 4. Отключение входа root по SSH
+
+Разрешение входа root через SSH представляет собой существенный риск безопасности. Этот скрипт отключает вход root SSH путем редактирования конфигурации SSH.
+```sh
+#!/bin/bash
+# Отключение вход root через SSH
+sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
+# Перезапуск службу SSH, чтобы применить изменения
+sudo systemctl restart sshd
+```
+- директива `PermitRootLogin` в конфигурации SSH контролирует, разрешен ли вход root. Установка значения «no» отключает его.
+- `systemctl restart sshd`перезапускает службу SSH для применения изменений.
+
+## 5. Обеспечение прав доступа к конфиденциальным файлам
+
+Обеспечение правильных разрешений для конфиденциальных файлов важно для безопасности системы. Этот скрипт проверяет и корректирует разрешения для важных файлов, таких как `/etc/passwd`и `/etc/shadow`.
+```sh
+#!/bin/bash
+# Убедитесь, что у /etc/passwd и /etc/shadow правильные права доступа
+sudo chmod 644 /etc/passwd
+sudo chmod 000 /etc/shadow
+# Проверьте права доступа
+echo "Права доступа для /etc/passwd:"
+ls -l /etc/passwd
+echo "Права доступа для /etc/shadow:"
+ls -l /etc/shadow
+```
+- `chmod 644`устанавливает разрешения на чтение и запись для владельца файла и только на чтение для остальных.
+- `chmod 000`гарантирует, что никто не сможет читать или записывать в файл`/etc/shadow`, содержащий информацию о пароле пользователя.
+
+## 6. Настройка брандмауэра (UFW)
+
+Использование брандмауэра — важный шаг в защите сервера. Этот скрипт настраивает простой брандмауэр (UFW) для блокировки ненужных портов и разрешения только необходимых служб.
+```sh
+##!/bin/bash
+# Включить UFW
+sudo ufw enable
+# Разрешить SSH (порт 22) и HTTP (порт 80)
+sudo ufw allow 22
+sudo ufw allow 80
+# Запретить все остальные входящие соединения
+sudo ufw default deny incoming
+sudo ufw default allow outgoing
+# Показать статус UFW
+sudo ufw status
+```
+- `ufw enable`включает несложный брандмауэр (UFW).
+- команды «allow» разрешают соединения SSH и HTTP.
+- «default deny incoming» и «default allow outgoing» устанавливают правила по умолчанию для блокировки входящего трафика и разрешения исходящего трафика.
+
+## 7. Регулярная ротация логов
+
+Чтобы избежать заполнения диска логами, следует настроить регулярную ротацию логов. Этот скрипт настраивает ротацию логов на ежедневной основе.
+```sh
+#!/bin/bash
+# Установить logrotate, если он не установлен
+sudo apt-get install logrotate -y
+# Создать пользовательский файл конфигурации logrotate
+echo "/var/log/*.log {
+ daily
+ rotate 7
+ compress
+ delaycompress
+ missingok
+ notifempty
+ create 0640 root root
+}" | sudo tee /etc/logrotate.d/custom_logs
+# Проверить конфигурацию logrotate
+sudo logrotate --debug /etc/logrotate.conf
+```
+- `logrotate`управляет ротацией файлов журналов.
+- файл конфигурации указывает, что журналы должны ротироваться ежедневно, сохранять 7 старых журналов и сжимать старые журналы для экономии места.
+- флаг `--debug` проверяет правильность конфигурации logrotate.
+
+## 8. Блокировка учетных записей пользователей после неудачных попыток входа в систему
+
+Блокировка учетных записей пользователей после определенного количества неудачных попыток входа в систему является распространенной и важной функцией безопасности. Этот скрипт настраивает блокировку учетных записей пользователей после 5 неудачных попыток входа в систему.
+```sh
+#!/bin/bash
+# Установить pam_tally2, если он не установлен
+sudo apt-get install libpam-modules -y
+# Установить политику блокировки для блокировки учетных записей пользователей после 5 неудачных попыток
+echo "auth required pam_tally2.so onerr=fail deny=5" | sudo tee -a /etc/pam.d/common-auth
+# Сбросить счетчик неудачных попыток входа для всех пользователей
+sudo pam_tally2 --user * --reset
+```
+- модуль`pam_tally2` отслеживает попытки входа в систему и блокирует учетную запись после указанного количества неудачных попыток ( `deny=5`).
+- флаг `--reset` сбрасывает счетчик неудачных попыток входа для всех пользователей.
+
+## 9. Обнаружение и удаление файлов SUID/SGID
+
+Файлы SUID и SGID предоставляют пользователям повышенные привилегии и могут представлять угрозу безопасности. Этот скрипт проверяет и удаляет файлы SUID/SGID из системы.
+```sh
+#!/bin/bash
+# Поиск файлов SUID и SGID
+echo "Поиск файлов SUID и SGID..."
+find / - type f -executable -perm /4000 -o -perm /2000
+# При желании удалите их (закомментируйте эту строку, если не хотите удалять файлы)
+# find / -type f -executable -perm /4000 -o -perm /2000 -exec rm -f {} \;
+```
+- `find / -type f -executable -perm /4000`ищет файлы с установленным битом SUID (Set User ID).
+- `find / -type f -executable -perm /2000`ищет файлы с установленным битом SGID (Set Group ID).
+- Скрипт выводит список файлов, вы можете удалить их, раскомментировав последнюю строку.
+
+## 10. Обеспечение надлежащих прав доступа пользователей к критически важным файлам
+
+Этот скрипт проверяет и гарантирует, что конфиденциальные файлы принадлежат пользователю root и доступны только ему.
+```sh
+#!/bin/bash
+# Установка владельца и разрешений для критических системных файлов
+sudo chown root:root /etc/passwd
+sudo chmod 644 /etc/passwd
+sudo chown root:root /etc/shadow
+sudo chmod 600 /etc/shadow
+# Проверка изменений
+ls -l /etc/passwd /etc/shadow
+```
+- `chown root:root`гарантирует, что файлами владеет пользователь root.
+- «chmod 644» гарантирует, что файл `/etc/passwd`доступен для чтения другим пользователям, но доступен для записи только пользователю root.
+- «chmod 600» ограничивает доступ `/etc/shadow`только пользователю root.
+
+
+На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал [usr_bin](https://t.me/usr_bin_linux), где будет еще больше полезной информации. \ No newline at end of file