### 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), где будет еще больше полезной информации.