Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| vm:ubuntu:script:02-root_user [2025/09/21 21:08] – создано admin | vm:ubuntu:script:02-root_user [2025/09/21 21:25] (текущий) – admin | ||
|---|---|---|---|
| Строка 7: | Строка 7: | ||
| **Характеристики: | **Характеристики: | ||
| * **Версия: | * **Версия: | ||
| - | * **Автор: | ||
| * **Совместимость: | * **Совместимость: | ||
| * **Требования: | * **Требования: | ||
| Строка 21: | Строка 20: | ||
| * ✅ Проверка результатов и рекомендации по безопасности | * ✅ Проверка результатов и рекомендации по безопасности | ||
| - | ===== Установка и запуск ===== | + | ===== Создание |
| - | ==== Шаг 1: Создание файла скрипта | + | Создание файла скрипта |
| <code bash> | <code bash> | ||
| - | nano /tmp/activate_root.sh | + | cd ~ |
| + | nano activate_root.sh | ||
| </ | </ | ||
| - | **Примечание: | + | Скопируйте |
| - | + | ||
| - | ==== Шаг 2: Установка прав выполнения | + | |
| <code bash> | <code bash> | ||
| - | chmod +x /tmp/ | + | chmod +x activate_root.sh |
| + | sudo ./ | ||
| </ | </ | ||
| - | ==== Шаг 3: Запуск скрипта ==== | + | **ВАЖНО!** Скрипт должен запускаться с правами sudo |
| + | |||
| + | ===== Код | ||
| <code bash> | <code bash> | ||
| - | sudo /tmp/activate_root.sh | + | # |
| + | # Скрипт активации учетной записи root на Ubuntu | ||
| + | # Автор: Nick | ||
| + | # Версия: | ||
| + | set -e # Остановка скрипта при любой ошибке | ||
| + | echo "=== Скрипт активации учетной записи root на Ubuntu ===" | ||
| + | echo " | ||
| + | echo | ||
| + | # Проверка прав администратора | ||
| + | if [ " | ||
| + | echo " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | # Проверка операционной системы | ||
| + | if ! grep -q " | ||
| + | echo " | ||
| + | read -p " | ||
| + | echo | ||
| + | if [[ ! $REPLY =~ ^[Yy]$ ]]; then | ||
| + | exit 1 | ||
| + | fi | ||
| + | fi | ||
| + | echo " | ||
| + | root_status=$(passwd -S root) | ||
| + | echo " | ||
| + | # Проверка статуса root (P = пароль установлен, | ||
| + | root_status_code=$(echo " | ||
| + | echo | ||
| + | if [[ " | ||
| + | echo "=== Root уже активирован ===" | ||
| + | echo "✓ Учетная запись root уже имеет пароль и активна" | ||
| + | echo | ||
| + | read -p " | ||
| + | echo | ||
| + | if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
| + | echo "=== Смена пароля root ===" | ||
| + | echo " | ||
| + | |||
| + | # Установка нового пароля для root | ||
| + | while true; do | ||
| + | passwd root | ||
| + | if [ $? -eq 0 ]; then | ||
| + | echo "✓ Пароль для root успешно изменен" | ||
| + | break | ||
| + | else | ||
| + | echo "✗ Ошибка изменения пароля. Повторите попытку." | ||
| + | fi | ||
| + | done | ||
| + | else | ||
| + | echo "✓ Пароль root оставлен без изменений" | ||
| + | fi | ||
| + | |||
| + | # Дополнительная проверка на блокировку (хотя если P, то должен быть разблокирован) | ||
| + | echo | ||
| + | echo "=== Проверка статуса блокировки root ===" | ||
| + | passwd -u root >/ | ||
| + | echo "✓ Проверка разблокировки выполнена" | ||
| + | |||
| + | else | ||
| + | echo "=== Шаг 1: Установка пароля для root ===" | ||
| + | if [[ " | ||
| + | echo " | ||
| + | elif [[ " | ||
| + | echo "У учетной записи root нет пароля, | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | |||
| + | # Установка пароля для root | ||
| + | while true; do | ||
| + | passwd root | ||
| + | if [ $? -eq 0 ]; then | ||
| + | echo "✓ Пароль для root успешно установлен" | ||
| + | break | ||
| + | else | ||
| + | echo "✗ Ошибка установки пароля. Повторите попытку." | ||
| + | fi | ||
| + | done | ||
| + | echo | ||
| + | echo "=== Шаг 2: Разблокировка учетной записи root ===" | ||
| + | # Разблокировка учетной записи root (если она заблокирована) | ||
| + | passwd -u root | ||
| + | if [ $? -eq 0 ]; then | ||
| + | echo "✓ Учетная запись root разблокирована" | ||
| + | else | ||
| + | echo "✗ Ошибка разблокировки учетной записи root" | ||
| + | fi | ||
| + | fi | ||
| + | echo | ||
| + | echo "=== Шаг 3: Настройка SSH доступа для root (опционально) ===" | ||
| + | read -p " | ||
| + | echo | ||
| + | if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
| + | # Создание резервной копии конфигурации SSH | ||
| + | cp / | ||
| + | echo "✓ Создана резервная копия / | ||
| + | |||
| + | # Настройка SSH для root | ||
| + | if grep -q " | ||
| + | sed -i ' | ||
| + | echo "✓ Изменен параметр PermitRootLogin на yes" | ||
| + | else | ||
| + | echo " | ||
| + | echo "✓ Добавлен параметр PermitRootLogin yes" | ||
| + | fi | ||
| + | |||
| + | # Перезапуск SSH службы | ||
| + | systemctl restart ssh | ||
| + | if [ $? -eq 0 ]; then | ||
| + | echo "✓ SSH служба перезапущена" | ||
| + | else | ||
| + | echo "✗ Ошибка перезапуска SSH службы" | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | fi | ||
| + | echo | ||
| + | echo "=== Шаг 4: Проверка результатов ===" | ||
| + | # Проверка статуса пользователя root | ||
| + | echo " | ||
| + | passwd -S root | ||
| + | # Проверка возможности входа | ||
| + | echo | ||
| + | echo " | ||
| + | grep " | ||
| + | # Проверка групп root | ||
| + | echo | ||
| + | echo " | ||
| + | groups root | ||
| + | # Проверка SSH конфигурации (если была изменена) | ||
| + | if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
| + | echo | ||
| + | echo "SSH конфигурация для root:" | ||
| + | grep " | ||
| + | fi | ||
| + | echo | ||
| + | echo "=== Шаг 5: Управление пользователями системы ===" | ||
| + | echo " | ||
| + | echo | ||
| + | echo " | ||
| + | awk -F: '$3 >= 1000 {print "ID: " $3 " | Пользователь: | ||
| + | echo | ||
| + | echo " | ||
| + | awk -F: '$3 < 1000 && $3 > 0 && ($7 == "/ | ||
| + | echo | ||
| + | echo " | ||
| + | awk -F: ' | ||
| + | echo | ||
| + | read -p " | ||
| + | echo | ||
| + | if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
| + | echo "=== Удаление пользователей ===" | ||
| + | echo " | ||
| + | echo | ||
| + | |||
| + | while true; do | ||
| + | echo " | ||
| + | echo " | ||
| + | awk -F: '$3 >= 1000 {print "- " $1}' / | ||
| + | echo | ||
| + | echo " | ||
| + | awk -F: ' | ||
| + | echo | ||
| + | |||
| + | read -p " | ||
| + | |||
| + | if [ " | ||
| + | echo " | ||
| + | break | ||
| + | fi | ||
| + | |||
| + | # Проверка существования пользователя | ||
| + | if ! id " | ||
| + | echo "✗ Пользователь ' | ||
| + | continue | ||
| + | fi | ||
| + | |||
| + | # Проверка, | ||
| + | if [ " | ||
| + | echo "✗ Нельзя удалить текущего пользователя ($SUDO_USER)" | ||
| + | continue | ||
| + | fi | ||
| + | |||
| + | # Проверка, | ||
| + | user_id=$(id -u " | ||
| + | if [ " | ||
| + | echo " | ||
| + | read -p "Вы уверены, | ||
| + | echo | ||
| + | if [[ ! $REPLY =~ ^[Yy]$ ]]; then | ||
| + | echo " | ||
| + | continue | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | id " | ||
| + | groups " | ||
| + | |||
| + | # Проверка активных процессов пользователя | ||
| + | echo | ||
| + | echo " | ||
| + | active_processes=$(ps -u " | ||
| + | if [ -n " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo | ||
| + | read -p " | ||
| + | echo | ||
| + | if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
| + | echo " | ||
| + | |||
| + | # Мягкое завершение процессов (SIGTERM) | ||
| + | pkill -u " | ||
| + | sleep 3 | ||
| + | |||
| + | # Проверка, | ||
| + | remaining_processes=$(ps -u " | ||
| + | if [ -n " | ||
| + | echo " | ||
| + | pkill -9 -u " | ||
| + | sleep 2 | ||
| + | fi | ||
| + | |||
| + | # Финальная проверка | ||
| + | final_check=$(ps -u " | ||
| + | if [ -n " | ||
| + | echo "✗ Некоторые процессы все еще активны:" | ||
| + | ps -u " | ||
| + | echo " | ||
| + | continue | ||
| + | else | ||
| + | echo "✓ Все процессы пользователя ' | ||
| + | fi | ||
| + | else | ||
| + | echo "✗ Невозможно удалить пользователя с активными процессами" | ||
| + | continue | ||
| + | fi | ||
| + | else | ||
| + | echo "✓ Активных процессов не найдено" | ||
| + | fi | ||
| + | |||
| + | # Проверка активных сессий | ||
| + | echo | ||
| + | echo " | ||
| + | active_sessions=$(who | grep " | ||
| + | if [ -n " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo | ||
| + | read -p " | ||
| + | echo | ||
| + | if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
| + | echo " | ||
| + | pkill -u " | ||
| + | sleep 2 | ||
| + | |||
| + | # Принудительное завершение если нужно | ||
| + | who | grep " | ||
| + | echo " | ||
| + | pkill -u " | ||
| + | } | ||
| + | |||
| + | echo "✓ Сессии завершены" | ||
| + | else | ||
| + | echo "✗ Невозможно удалить пользователя с активными сессиями" | ||
| + | continue | ||
| + | fi | ||
| + | else | ||
| + | echo "✓ Активных сессий не найдено" | ||
| + | fi | ||
| + | echo | ||
| + | |||
| + | echo " | ||
| + | echo "1) Удалить только пользователя (сохранить домашнюю папку)" | ||
| + | echo "2) Удалить пользователя и домашнюю папку" | ||
| + | echo "3) Удалить пользователя, | ||
| + | echo "4) Отмена" | ||
| + | |||
| + | read -p " | ||
| + | echo | ||
| + | |||
| + | case $REPLY in | ||
| + | 1) | ||
| + | deluser " | ||
| + | if [ $? -eq 0 ]; then | ||
| + | echo "✓ Пользователь ' | ||
| + | else | ||
| + | echo "✗ Ошибка удаления пользователя ' | ||
| + | fi | ||
| + | ;; | ||
| + | 2) | ||
| + | deluser --remove-home " | ||
| + | if [ $? -eq 0 ]; then | ||
| + | echo "✓ Пользователь ' | ||
| + | else | ||
| + | echo "✗ Ошибка удаления пользователя ' | ||
| + | fi | ||
| + | ;; | ||
| + | 3) | ||
| + | deluser --remove-home --remove-all-files " | ||
| + | if [ $? -eq 0 ]; then | ||
| + | echo "✓ Пользователь ' | ||
| + | else | ||
| + | echo "✗ Ошибка удаления пользователя ' | ||
| + | fi | ||
| + | ;; | ||
| + | 4) | ||
| + | echo " | ||
| + | ;; | ||
| + | *) | ||
| + | echo "✗ Неверный выбор" | ||
| + | ;; | ||
| + | esac | ||
| + | echo | ||
| + | done | ||
| + | fi | ||
| + | echo | ||
| + | echo "=== Информация о безопасности ===" | ||
| + | cat << ' | ||
| + | ВАЖНО! После активации root: | ||
| + | 1. Используйте сильный пароль для root | ||
| + | 2. Рассмотрите использование SSH ключей вместо паролей | ||
| + | 3. Настройте файрвол (ufw) для ограничения доступа | ||
| + | 4. Регулярно обновляйте систему | ||
| + | 5. Мониторьте логи на предмет подозрительной активности | ||
| + | 6. Рассмотрите отключение root после настройки системы | ||
| + | Логи входа в систему: | ||
| + | Для отключения root: sudo passwd -l root | ||
| + | EOF | ||
| + | echo | ||
| + | echo "=== Дополнительные команды (опционально) ===" | ||
| + | read -p " | ||
| + | echo | ||
| + | if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
| + | cat << ' | ||
| + | Дополнительные команды безопасности: | ||
| + | # Настройка SSH ключей для root: | ||
| + | mkdir -p / | ||
| + | chmod 700 / | ||
| + | # Добавить публичный ключ в / | ||
| + | chmod 600 / | ||
| + | # Настройка файрвола (не включается автоматически): | ||
| + | # ufw enable | ||
| + | # ufw default deny incoming | ||
| + | # ufw default allow outgoing | ||
| + | # ufw allow ssh | ||
| + | # Отключение root после настройки: | ||
| + | passwd -l root | ||
| + | # Изменение SSH порта: | ||
| + | # Измените Port 22 на другой порт в / | ||
| + | # systemctl restart ssh | ||
| + | # Мониторинг попыток входа: | ||
| + | tail -f / | ||
| + | EOF | ||
| + | fi | ||
| + | echo | ||
| + | echo "=== Активация root завершена ===" | ||
| + | echo " | ||
| + | passwd -S root | ||
| + | exit 0 | ||
| </ | </ | ||
| - | |||
| - | **ВАЖНО!** Скрипт должен запускаться с правами sudo | ||
| ===== Пошаговое использование ===== | ===== Пошаговое использование ===== | ||
| Строка 165: | Строка 527: | ||
| chmod 600 / | chmod 600 / | ||
| - | # Настройка файрвола | + | # Настройка файрвола |
| - | ufw default deny incoming | + | # ufw default deny incoming |
| - | ufw default allow outgoing | + | # ufw default allow outgoing |
| - | ufw allow ssh | + | # ufw allow ssh |
| - | ufw enable | + | # ufw enable |
| # Мониторинг попыток входа | # Мониторинг попыток входа | ||
| Строка 181: | Строка 543: | ||
| ^ Проблема ^ Причина ^ Решение ^ | ^ Проблема ^ Причина ^ Решение ^ | ||
| | `userdel: user is currently used by process` | Активные процессы пользователя | Выберите завершение процессов в скрипте | | | `userdel: user is currently used by process` | Активные процессы пользователя | Выберите завершение процессов в скрипте | | ||
| - | | `Permission denied` при запуске | Отсутствие sudo прав | Запустите: | + | | `Permission denied` при запуске | Отсутствие sudo прав | Запустите: |
| | SSH не перезапускается | Ошибка в конфигурации | Проверьте `/ | | SSH не перезапускается | Ошибка в конфигурации | Проверьте `/ | ||
| | Root остается заблокированным | Системная политика | Выполните: | | Root остается заблокированным | Системная политика | Выполните: | ||
| Строка 230: | Строка 592: | ||
| **ПОМНИТЕ: | **ПОМНИТЕ: | ||
| - | |||
| - | ---- | ||
| - | |||
| - | **Дата создания: | ||
| - | **Последнее обновление: | ||
| - | **Тэги: | ||