Скрипт активации root в Ubuntu
Описание
Автоматизированный скрипт для безопасной активации учетной записи root в Ubuntu с дополнительными возможностями управления пользователями системы.
Характеристики:
- Версия: 1.0
- Совместимость: Ubuntu 18.04+, Debian 10+
- Требования: sudo права
Возможности скрипта
- ✅ Проверка текущего статуса root
- ✅ Интеллектуальная активация root (пропуск если уже активен)
- ✅ Установка/смена пароля root
- ✅ Настройка SSH доступа для root (опционально)
- ✅ Управление пользователями системы
- ✅ Безопасное удаление пользователей с завершением процессов
- ✅ Проверка результатов и рекомендации по безопасности
Создание и запуск скрипта
Создание файла скрипта в домашней директории текущего пользователя:
cd ~ nano activate_root.sh
Скопируйте код скрипта в созданный файл, установите права выполнения и запустите:
chmod +x activate_root.sh sudo ./activate_root.sh
ВАЖНО! Скрипт должен запускаться с правами sudo
Код скрипта
#!/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>&1 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
Пошаговое использование
Этап 1: Проверка системы
Скрипт автоматически проверит:
- Права администратора
- Операционную систему
- Текущий статус root
Примечание: При обнаружении уже активированного root, скрипт предложит изменить пароль или пропустить этот шаг
Этап 2: Работа с root
Если root не активирован:
- Установка нового пароля
- Разблокировка учетной записи
Если root уже активирован:
- Опциональная смена пароля
- Переход к следующему этапу
Этап 3: Настройка SSH
Разрешить SSH доступ для root? (y/N):
При выборе «y»:
- Создание резервной копии конфигурации SSH
- Изменение параметра `PermitRootLogin` на `yes`
- Перезапуск SSH службы
ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ: SSH доступ для root повышает риски безопасности!
Этап 4: Управление пользователями
Скрипт покажет:
- Обычных пользователей (ID ≥ 1000)
- Системных пользователей с shell
- Полный список всех пользователей
Опции удаления пользователя:
- Только пользователь (домашняя папка остается)
- Пользователь + домашняя папка
- Пользователь + домашняя папка + все файлы
Этап 5: Обработка активных процессов
При удалении пользователя с активными процессами:
⚠️ НАЙДЕНЫ АКТИВНЫЕ ПРОЦЕССЫ: 1251 1 /usr/bin/process_name Завершить все процессы пользователя? (y/N):
Алгоритм завершения:
- Мягкое завершение (SIGTERM)
- Ожидание 3 секунды
- Принудительное завершение (SIGKILL)
- Финальная проверка
Примеры использования
Сценарий 1: Первичная активация root
=== Root уже активирован === ✓ Учетная запись root уже имеет пароль и активна Хотите изменить пароль root? (y/N): n ✓ Пароль root оставлен без изменений
Сценарий 2: Удаление пользователя
Введите имя пользователя для удаления: user Информация о пользователе 'user': uid=1000(user) gid=1000(user) groups=1000(user),27(sudo) ⚠️ НАЙДЕНЫ АКТИВНЫЕ ПРОЦЕССЫ: 1251 1 /usr/sbin/sshd Завершить все процессы пользователя 'user'? (y/N): y ✓ Все процессы пользователя 'user' завершены Выберите режим удаления: 1) Удалить только пользователя (сохранить домашнюю папку) 2) Удалить пользователя и домашнюю папку 3) Удалить пользователя, домашнюю папку и почту 4) Отмена
Меры безопасности
Защитные механизмы скрипта
- 🔒 Проверка прав sudo перед выполнением
- 🔒 Запрет удаления текущего пользователя
- 🔒 Предупреждения при работе с системными пользователями
- 🔒 Завершение активных процессов перед удалением
- 🔒 Создание резервных копий конфигурационных файлов
Рекомендации после активации
Обязательные действия:
- Использовать сильный пароль для root
- Настроить SSH ключи вместо паролей
- Настроить файрвол (ufw)
- Регулярно обновлять систему
- Мониторить логи входа
Команды для дополнительной защиты
# Настройка SSH ключей для root mkdir -p /root/.ssh chmod 700 /root/.ssh # Добавить публичный ключ в /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys # Настройка файрвола (не включается автоматически) # ufw default deny incoming # ufw default allow outgoing # ufw allow ssh # ufw enable # Мониторинг попыток входа tail -f /var/log/auth.log | grep "root"
Устранение неполадок
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
| `userdel: user is currently used by process` | Активные процессы пользователя | Выберите завершение процессов в скрипте |
| `Permission denied` при запуске | Отсутствие sudo прав | Запустите: `sudo ./activate_root.sh` |
| SSH не перезапускается | Ошибка в конфигурации | Проверьте `/etc/ssh/sshd_config` |
| Root остается заблокированным | Системная политика | Выполните: `passwd -u root` |
Откат изменений
# Отключение root sudo passwd -l root # Восстановление SSH конфигурации sudo cp /etc/ssh/sshd_config.backup.* /etc/ssh/sshd_config sudo systemctl restart ssh # Пересоздание удаленного пользователя sudo useradd -m -s /bin/bash username sudo usermod -aG sudo username sudo passwd username
Логи и мониторинг
Важные файлы логов
- `/var/log/auth.log` - попытки входа в систему
- `/var/log/syslog` - системные события
- `/var/log/dpkg.log` - изменения пакетов
Команды мониторинга
# Просмотр последних входов root last root # Активные сессии root who | grep root # Процессы от имени root ps -u root # Проверка SSH конфигурации sshd -T | grep permitrootlogin
Заключение
Скрипт обеспечивает безопасную и контролируемую активацию root в Ubuntu с дополнительными возможностями управления пользователями. Следуйте рекомендациям по безопасности для защиты системы после активации.
ПОМНИТЕ: Активация root - это мощный инструмент, который требует ответственного использования!