vm:ubuntu:script:02-root_user

Это старая версия документа!


Скрипт активации root в Ubuntu

Автоматизированный скрипт для безопасной активации учетной записи root в Ubuntu с дополнительными возможностями управления пользователями системы.

Характеристики:

  • Версия: 1.0
  • Совместимость: Ubuntu 18.04+, Debian 10+
  • Требования: sudo права
  • ✅ Проверка текущего статуса root
  • ✅ Интеллектуальная активация root (пропуск если уже активен)
  • ✅ Установка/смена пароля root
  • ✅ Настройка SSH доступа для root (опционально)
  • ✅ Управление пользователями системы
  • ✅ Безопасное удаление пользователей с завершением процессов
  • ✅ Проверка результатов и рекомендации по безопасности
nano /tmp/activate_root.sh
nano activate_root.sh

Скопируйте содержимое скрипта в созданный файл, установите права выполнения и запустите:

chmod +x activate_root.sh
sudo ./activate_root.sh

ВАЖНО! Скрипт должен запускаться с правами sudo

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

          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

#!/bin/bash
 
# Скрипт активации учетной записи root на Ubuntu
# Версия: 1.0
 
===== Пошаговое использование =====
 
==== Этап 1: Проверка системы ====
 
Скрипт автоматически проверит:
  - Права администратора
  - Операционную систему
  - Текущий статус root
 
**Примечание:** При обнаружении уже активированного root, скрипт предложит изменить пароль или пропустить этот шаг
 
==== Этап 2: Работа с root ====
 
**Если root не активирован:**
  - Установка нового пароля
  - Разблокировка учетной записи
 
**Если root уже активирован:**
  - Опциональная смена пароля
  - Переход к следующему этапу
 
==== Этап 3: Настройка SSH ====
 
<code>
Разрешить SSH доступ для root? (y/N):

При выборе «y»:

  1. Создание резервной копии конфигурации SSH
  2. Изменение параметра `PermitRootLogin` на `yes`
  3. Перезапуск SSH службы

ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ: SSH доступ для root повышает риски безопасности!

Скрипт покажет:

  1. Обычных пользователей (ID ≥ 1000)
  2. Системных пользователей с shell
  3. Полный список всех пользователей

Опции удаления пользователя:

  1. Только пользователь (домашняя папка остается)
  2. Пользователь + домашняя папка
  3. Пользователь + домашняя папка + все файлы

При удалении пользователя с активными процессами:

⚠️  НАЙДЕНЫ АКТИВНЫЕ ПРОЦЕССЫ:
 1251     1 /usr/bin/process_name
Завершить все процессы пользователя? (y/N):

Алгоритм завершения:

  1. Мягкое завершение (SIGTERM)
  2. Ожидание 3 секунды
  3. Принудительное завершение (SIGKILL)
  4. Финальная проверка
=== Root уже активирован ===
✓ Учетная запись root уже имеет пароль и активна
Хотите изменить пароль root? (y/N): n
✓ Пароль root оставлен без изменений
Введите имя пользователя для удаления: 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 перед выполнением
  • 🔒 Запрет удаления текущего пользователя
  • 🔒 Предупреждения при работе с системными пользователями
  • 🔒 Завершение активных процессов перед удалением
  • 🔒 Создание резервных копий конфигурационных файлов

Обязательные действия:

  1. Использовать сильный пароль для root
  2. Настроить SSH ключи вместо паролей
  3. Настроить файрвол (ufw)
  4. Регулярно обновлять систему
  5. Мониторить логи входа
# Настройка 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 ./script.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 - это мощный инструмент, который требует ответственного использования!

  • vm/ubuntu/script/02-root_user.1758489629.txt.gz
  • Последнее изменение: 2025/09/21 21:20
  • admin