diff options
| author | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
|---|---|---|
| committer | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
| commit | e5abc1fe99340b979b18864d978179f71fe8f5c5 (patch) | |
| tree | 98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /LINUX/HOME_SERVER | |
First
Diffstat (limited to 'LINUX/HOME_SERVER')
| -rw-r--r-- | LINUX/HOME_SERVER/5 малоизвестных команд для Linux.md | 48 | ||||
| -rw-r--r-- | LINUX/HOME_SERVER/Caddy - замена Nginx.md | 54 | ||||
| -rw-r--r-- | LINUX/HOME_SERVER/watch.md | 48 | ||||
| -rw-r--r-- | LINUX/HOME_SERVER/Очистка системы.md | 36 | ||||
| -rw-r--r-- | LINUX/HOME_SERVER/Приложение в SYSTEMD.md | 141 | ||||
| -rw-r--r-- | LINUX/HOME_SERVER/Усиление безопасности Linux.md | 178 |
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 |
