vm:ubuntu:script:02-root_user

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
vm:ubuntu:script:02-root_user [2025/09/21 21:08] – создано adminvm:ubuntu:script:02-root_user [2025/09/21 21:25] (текущий) admin
Строка 7: Строка 7:
 **Характеристики:** **Характеристики:**
   * **Версия:** 1.0   * **Версия:** 1.0
-  * **Автор:** Nick 
   * **Совместимость:** Ubuntu 18.04+, Debian 10+   * **Совместимость:** Ubuntu 18.04+, Debian 10+
   * **Требования:** sudo права   * **Требования:** sudo права
Строка 21: Строка 20:
   * ✅ Проверка результатов и рекомендации по безопасности   * ✅ Проверка результатов и рекомендации по безопасности
  
-===== Установка и запуск =====+===== Создание и запуск скрипта =====
  
-==== Шаг 1: Создание файла скрипта ====+Создание файла скрипта в домашней директории текущего пользователя:
  
 <code bash> <code bash>
-nano /tmp/activate_root.sh+cd ~ 
 +nano activate_root.sh
 </code> </code>
  
-**Примечание:** Скопируйте содержимое скрипта в созданный файл +Скопируйте код скрипта в созданный файл, установите права выполнения и запустите:
- +
-==== Шаг 2: Установка прав выполнения ====+
  
 <code bash> <code bash>
-chmod +x /tmp/activate_root.sh+chmod +x activate_root.sh 
 +sudo ./activate_root.sh
 </code> </code>
  
-==== Шаг 3: Запуск скрипта ====+**ВАЖНО!** Скрипт должен запускаться с правами sudo 
 + 
 +===== Код скрипта =====
  
 <code bash> <code bash>
-sudo /tmp/activate_root.sh+#!/bin/bash 
 +# Скрипт активации учетной записи root на Ubuntu 
 +# Автор: Nick 
 +# Версия: 1.0 
 +set -e  # Остановка скрипта при любой ошибке 
 +echo "=== Скрипт активации учетной записи root на Ubuntu ===" 
 +echo "ВНИМАНИЕ: Данный скрипт внесет изменения в систему безопасности!" 
 +echo 
 +# Проверка прав администратора 
 +if [ "$EUID" -ne 0 ]; then 
 +    echo "Ошибка: Скрипт должен запускаться с правами sudo
 +    echo "Использование: sudo $0" 
 +    exit 1 
 +fi 
 +# Проверка операционной системы 
 +if ! grep -q "Ubuntu" /etc/os-release; then 
 +    echo "Предупреждение: Скрипт предназначен для Ubuntu" 
 +    read -p "Продолжить выполнение? (y/N): " -n 1 -r 
 +    echo 
 +    if [[ ! $REPLY =~ ^[Yy]$ ]]; then 
 +        exit 1 
 +    fi 
 +fi 
 +echo "Текущее состояние учетной записи root:" 
 +root_status=$(passwd -S root) 
 +echo "$root_status" 
 +# Проверка статуса root (P = пароль установлен, L = заблокирован, NP = нет пароля) 
 +root_status_code=$(echo "$root_status" | awk '{print $2}'
 +echo 
 +if [[ "$root_status_code" == "P" ]]; then 
 +    echo "=== Root уже активирован ===" 
 +    echo "✓ Учетная запись root уже имеет пароль и активна" 
 +    echo 
 +    read -p "Хотите изменить пароль root? (y/N): " -n 1 -r 
 +    echo 
 +    if [[ $REPLY =~ ^[Yy]$ ]]; then 
 +        echo "=== Смена пароля root ===" 
 +        echo "Введите новый пароль для пользователя root:" 
 +         
 +        # Установка нового пароля для 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 >/dev/null 2>&
 +    echo "✓ Проверка разблокировки выполнена" 
 +     
 +else 
 +    echo "=== Шаг 1: Установка пароля для root ===" 
 +    if [[ "$root_status_code" == "L" ]]; then 
 +        echo "Учетная запись root заблокирована, требуется установка пароля" 
 +    elif [[ "$root_status_code" == "NP" ]]; then 
 +        echo "У учетной записи root нет пароля, требуется установка" 
 +    else 
 +        echo "Неопределенный статус root, устанавливаем пароль" 
 +    fi 
 +     
 +    echo "Введите новый пароль для пользователя root:" 
 +     
 +    # Установка пароля для 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 "Разрешить SSH доступ для root? (y/N): " -n 1 -r 
 +echo 
 +if [[ $REPLY =~ ^[Yy]$ ]]; then 
 +    # Создание резервной копии конфигурации SSH 
 +    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup.$(date +%Y%m%d_%H%M%S) 
 +    echo "✓ Создана резервная копия /etc/ssh/sshd_config" 
 +     
 +    # Настройка SSH для root 
 +    if grep -q "^PermitRootLogin" /etc/ssh/sshd_config; then 
 +        sed -i 's/^PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config 
 +        echo "✓ Изменен параметр PermitRootLogin на yes" 
 +    else 
 +        echo "PermitRootLogin yes" >> /etc/ssh/sshd_config 
 +        echo "✓ Добавлен параметр PermitRootLogin yes" 
 +    fi 
 +     
 +    # Перезапуск SSH службы 
 +    systemctl restart ssh 
 +    if [ $? -eq 0 ]; then 
 +        echo "✓ SSH служба перезапущена" 
 +    else 
 +        echo "✗ Ошибка перезапуска SSH службы" 
 +    fi 
 +     
 +    echo "ПРЕДУПРЕЖДЕНИЕ: SSH доступ для root включен - убедитесь в безопасности системы!" 
 +fi 
 +echo 
 +echo "=== Шаг 4: Проверка результатов ===" 
 +# Проверка статуса пользователя root 
 +echo "Статус учетной записи root:" 
 +passwd -S root 
 +# Проверка возможности входа 
 +echo 
 +echo "Проверка shell для root:" 
 +grep "^root:" /etc/passwd 
 +# Проверка групп root 
 +echo 
 +echo "Группы пользователя root:" 
 +groups root 
 +# Проверка SSH конфигурации (если была изменена) 
 +if [[ $REPLY =~ ^[Yy]$ ]]; then 
 +    echo 
 +    echo "SSH конфигурация для root:" 
 +    grep "PermitRootLogin" /etc/ssh/sshd_config 
 +fi 
 +echo 
 +echo "=== Шаг 5: Управление пользователями системы ===" 
 +echo "Список всех пользователей системы:" 
 +echo 
 +echo "Обычные пользователи (ID >= 1000):" 
 +awk -F: '$3 >= 1000 {print "ID: " $3 " | Пользователь: " $1 " | Домашняя папка: " $6 " | Shell: " $7}' /etc/passwd 
 +echo 
 +echo "Системные пользователи с shell (ID < 1000):" 
 +awk -F: '$3 < 1000 && $3 > 0 && ($7 == "/bin/bash" || $7 == "/bin/sh" || $7 == "/usr/bin/zsh") {print "ID: " $3 " | Пользователь: " $1 " | Shell: " $7}' /etc/passwd 
 +echo 
 +echo "Полный список всех пользователей (включая служебных):" 
 +awk -F: '{print "ID: " $3 " | Пользователь: " $1 " | Группа: " $4 " | Shell: " $7}' /etc/passwd | sort -n -k2 
 +echo 
 +read -p "Хотите удалить пользователей? (y/N): " -n 1 -r 
 +echo 
 +if [[ $REPLY =~ ^[Yy]$ ]]; then 
 +    echo "=== Удаление пользователей ===" 
 +    echo "ВНИМАНИЕ: Удаление пользователей - необратимая операция!" 
 +    echo 
 +     
 +    while true; do 
 +        echo "Доступные пользователи для удаления:" 
 +        echo "(Обычные пользователи ID >= 1000):" 
 +        awk -F: '$3 >= 1000 {print "- " $1}' /etc/passwd 
 +        echo 
 +        echo "(Все пользователи в системе):" 
 +        awk -F: '{print "- " $1 " (ID: " $3 ")"}' /etc/passwd | sort 
 +        echo 
 +         
 +        read -p "Введите имя пользователя для удаления (или 'exit' для выхода): " username 
 +         
 +        if [ "$username" = "exit" ]; then 
 +            echo "Выход из режима удаления пользователей" 
 +            break 
 +        fi 
 +         
 +        # Проверка существования пользователя 
 +        if ! id "$username" >/dev/null 2>&1; then 
 +            echo "✗ Пользователь '$username' не существует" 
 +            continue 
 +        fi 
 +         
 +        # Проверка, что это не текущий пользователь 
 +        if [ "$username" = "$SUDO_USER" ]; then 
 +            echo "✗ Нельзя удалить текущего пользователя ($SUDO_USER)" 
 +            continue 
 +        fi 
 +         
 +        # Проверка, что это не системный пользователь (предупреждение, но не блокировка) 
 +        user_id=$(id -u "$username" 2>/dev/null) 
 +        if [ "$user_id" -lt 1000 ] && [ "$username" != "root" ]; then 
 +            echo "⚠️  ВНИМАНИЕ: '$username' - системный пользователь (ID: $user_id)" 
 +            read -p "Вы уверены, что хотите удалить системного пользователя? (y/N): " -n 1 -r 
 +            echo 
 +            if [[ ! $REPLY =~ ^[Yy]$ ]]; then 
 +                echo "Отмена удаления системного пользователя" 
 +                continue 
 +            fi 
 +        fi 
 +         
 +        echo "Информация о пользователе '$username':" 
 +        id "$username" 
 +        groups "$username" 
 +         
 +        # Проверка активных процессов пользователя 
 +        echo 
 +        echo "Проверка активных процессов пользователя '$username':" 
 +        active_processes=$(ps -u "$username" -o pid,ppid,cmd --no-headers 2>/dev/null || true) 
 +        if [ -n "$active_processes" ]; then 
 +            echo "⚠️  НАЙДЕНЫ АКТИВНЫЕ ПРОЦЕССЫ:" 
 +            echo "$active_processes" 
 +            echo 
 +            read -p "Завершить все процессы пользователя '$username'? (y/N): " -n 1 -r 
 +            echo 
 +            if [[ $REPLY =~ ^[Yy]$ ]]; then 
 +                echo "Завершение процессов пользователя '$username'..." 
 +                 
 +                # Мягкое завершение процессов (SIGTERM) 
 +                pkill -u "$username" 2>/dev/null || true 
 +                sleep 3 
 +                 
 +                # Проверка, остались ли процессы 
 +                remaining_processes=$(ps -u "$username" -o pid --no-headers 2>/dev/null || true) 
 +                if [ -n "$remaining_processes" ]; then 
 +                    echo "Некоторые процессы не завершились. Принудительное завершение..." 
 +                    pkill -9 -u "$username" 2>/dev/null || true 
 +                    sleep 2 
 +                fi 
 +                 
 +                # Финальная проверка 
 +                final_check=$(ps -u "$username" -o pid --no-headers 2>/dev/null || true) 
 +                if [ -n "$final_check" ]; then 
 +                    echo "✗ Некоторые процессы все еще активны:" 
 +                    ps -u "$username" -o pid,ppid,cmd --no-headers 
 +                    echo "Невозможно безопасно удалить пользователя" 
 +                    continue 
 +                else 
 +                    echo "✓ Все процессы пользователя '$username' завершены" 
 +                fi 
 +            else 
 +                echo "✗ Невозможно удалить пользователя с активными процессами" 
 +                continue 
 +            fi 
 +        else 
 +            echo "✓ Активных процессов не найдено" 
 +        fi 
 +         
 +        # Проверка активных сессий 
 +        echo 
 +        echo "Проверка активных сессий пользователя '$username':" 
 +        active_sessions=$(who | grep "^$username " || true) 
 +        if [ -n "$active_sessions" ]; then 
 +            echo "⚠️  НАЙДЕНЫ АКТИВНЫЕ СЕССИИ:" 
 +            echo "$active_sessions" 
 +            echo 
 +            read -p "Завершить все сессии пользователя '$username'? (y/N): " -n 1 -r 
 +            echo 
 +            if [[ $REPLY =~ ^[Yy]$ ]]; then 
 +                echo "Завершение сессий пользователя '$username'..." 
 +                pkill -u "$username" -HUP 2>/dev/null || true 
 +                sleep 2 
 +                 
 +                # Принудительное завершение если нужно 
 +                who | grep "^$username " >/dev/null && { 
 +                    echo "Принудительное завершение сессий..." 
 +                    pkill -u "$username" -KILL 2>/dev/null || true 
 +                } 
 +                 
 +                echo "✓ Сессии завершены" 
 +            else 
 +                echo "✗ Невозможно удалить пользователя с активными сессиями" 
 +                continue 
 +            fi 
 +        else 
 +            echo "✓ Активных сессий не найдено" 
 +        fi 
 +        echo 
 +         
 +        echo "Выберите режим удаления:" 
 +        echo "1) Удалить только пользователя (сохранить домашнюю папку)" 
 +        echo "2) Удалить пользователя и домашнюю папку" 
 +        echo "3) Удалить пользователя, домашнюю папку и почту" 
 +        echo "4) Отмена" 
 +         
 +        read -p "Выберите вариант (1-4): " -n 1 -r 
 +        echo 
 +         
 +        case $REPLY in 
 +            1) 
 +                deluser "$username" 
 +                if [ $? -eq 0 ]; then 
 +                    echo "✓ Пользователь '$username' удален (домашняя папка сохранена)" 
 +                else 
 +                    echo "✗ Ошибка удаления пользователя '$username'" 
 +                fi 
 +                ;; 
 +            2) 
 +                deluser --remove-home "$username" 
 +                if [ $? -eq 0 ]; then 
 +                    echo "✓ Пользователь '$username' и домашняя папка удалены" 
 +                else 
 +                    echo "✗ Ошибка удаления пользователя '$username'" 
 +                fi 
 +                ;; 
 +            3) 
 +                deluser --remove-home --remove-all-files "$username" 
 +                if [ $? -eq 0 ]; then 
 +                    echo "✓ Пользователь '$username', домашняя папка и все файлы удалены" 
 +                else 
 +                    echo "✗ Ошибка удаления пользователя '$username'" 
 +                fi 
 +                ;; 
 +            4) 
 +                echo "Отмена удаления пользователя '$username'" 
 +                ;; 
 +            *) 
 +                echo "✗ Неверный выбор" 
 +                ;; 
 +        esac 
 +        echo 
 +    done 
 +fi 
 +echo 
 +echo "=== Информация о безопасности ===" 
 +cat << 'EOF' 
 +ВАЖНО! После активации root: 
 +1. Используйте сильный пароль для root 
 +2. Рассмотрите использование SSH ключей вместо паролей 
 +3. Настройте файрвол (ufw) для ограничения доступа 
 +4. Регулярно обновляйте систему 
 +5. Мониторьте логи на предмет подозрительной активности 
 +6. Рассмотрите отключение root после настройки системы 
 +Логи входа в систему: /var/log/auth.log 
 +Для отключения root: sudo passwd -l root 
 +EOF 
 +echo 
 +echo "=== Дополнительные команды (опционально) ===" 
 +read -p "Показать дополнительные команды безопасности? (y/N): " -n 1 -r 
 +echo 
 +if [[ $REPLY =~ ^[Yy]$ ]]; then 
 +    cat << 'EOF' 
 +Дополнительные команды безопасности: 
 +# Настройка SSH ключей для root: 
 +mkdir -p /root/.ssh 
 +chmod 700 /root/.ssh 
 +# Добавить публичный ключ в /root/.ssh/authorized_keys 
 +chmod 600 /root/.ssh/authorized_keys 
 +# Настройка файрвола (не включается автоматически): 
 +# ufw enable 
 +# ufw default deny incoming 
 +# ufw default allow outgoing 
 +# ufw allow ssh 
 +# Отключение root после настройки: 
 +passwd -l root 
 +# Изменение SSH порта: 
 +# Измените Port 22 на другой порт в /etc/ssh/sshd_config 
 +# systemctl restart ssh 
 +# Мониторинг попыток входа: 
 +tail -f /var/log/auth.log | grep "root" 
 +EOF 
 +fi 
 +echo 
 +echo "=== Активация root завершена ===" 
 +echo "Текущий статус:" 
 +passwd -S root 
 +exit 0
 </code> </code>
- 
-**ВАЖНО!** Скрипт должен запускаться с правами sudo 
  
 ===== Пошаговое использование ===== ===== Пошаговое использование =====
Строка 165: Строка 527:
 chmod 600 /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys
  
-# Настройка файрвола +# Настройка файрвола (не включается автоматически) 
-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 прав | Запустите: `sudo ./script.sh` |+| `Permission denied` при запуске | Отсутствие sudo прав | Запустите: `sudo ./activate_root.sh` |
 | SSH не перезапускается | Ошибка в конфигурации | Проверьте `/etc/ssh/sshd_config` | | SSH не перезапускается | Ошибка в конфигурации | Проверьте `/etc/ssh/sshd_config` |
 | Root остается заблокированным | Системная политика | Выполните: `passwd -u root` | | Root остается заблокированным | Системная политика | Выполните: `passwd -u root` |
Строка 230: Строка 592:
  
 **ПОМНИТЕ:** Активация root - это мощный инструмент, который требует ответственного использования! **ПОМНИТЕ:** Активация root - это мощный инструмент, который требует ответственного использования!
- 
----- 
- 
-**Дата создания:** {{date:Y-m-d}} \\ 
-**Последнее обновление:** {{date:Y-m-d}} \\ 
-**Тэги:** {{tag>ubuntu root security bash automation}} 
  • vm/ubuntu/script/02-root_user.1758488930.txt.gz
  • Последнее изменение: 2025/09/21 21:08
  • admin