Это старая версия документа!
Скрипт активации root в Ubuntu
Описание
Автоматизированный скрипт для безопасной активации учетной записи root в Ubuntu с дополнительными возможностями управления пользователями системы.
Характеристики:
- Версия: 1.0
- Совместимость: Ubuntu 18.04+, Debian 10+
- Требования: sudo права
Возможности скрипта
- ✅ Проверка текущего статуса root
- ✅ Интеллектуальная активация root (пропуск если уже активен)
- ✅ Установка/смена пароля root
- ✅ Настройка SSH доступа для root (опционально)
- ✅ Управление пользователями системы
- ✅ Безопасное удаление пользователей с завершением процессов
- ✅ Проверка результатов и рекомендации по безопасности
Установка и запуск
Шаг 1: Создание файла скрипта
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»:
- Создание резервной копии конфигурации 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 ./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 - это мощный инструмент, который требует ответственного использования!