99 lines
4.3 KiB
Bash
99 lines
4.3 KiB
Bash
#!/bin/bash
|
||
#
|
||
# Скрипт настройки локальных учетных записей для RedOS
|
||
# Соответствует заданию Модуля 1 (Пункт 3)
|
||
#
|
||
# Требования:
|
||
# 1. Серверы (HQ-SRV, BR-SRV):
|
||
# - Пользователь: remote_user (в задании есть упоминание sshuser, используем remote_user как основное имя)
|
||
# - UID: 2026
|
||
# - Пароль: P@ssw0rd
|
||
# - Sudo: без пароля (NOPASSWD)
|
||
# 2. Маршрутизаторы (HQ-RTR, BR-RTR):
|
||
# - Пользователь: net_admin
|
||
# - Пароль: P@ssw0rd
|
||
# - Sudo: без пароля (NOPASSWD)
|
||
#
|
||
# Примечание: Требование про "ОС отличные от Linux" не применимо к скрипту Bash для RedOS,
|
||
# поэтому реализованы максимальные привилегии через sudo NOPASSWD.
|
||
|
||
set -e # Выход при ошибке
|
||
|
||
# Проверка прав root
|
||
if [ "$EUID" -ne 0 ]; then
|
||
echo "Ошибка: Пожалуйста, запускайте скрипт от имени root (su root)"
|
||
exit 1
|
||
fi
|
||
|
||
# Получение имени хоста
|
||
HOSTNAME=$(hostname)
|
||
|
||
# Определение роли устройства по имени хоста (согласно схеме из отчета)
|
||
# HQ-SRV: hq-srv.au-team.irpo, BR-SRV: br-srv.au-team.irpo
|
||
# HQ-RTR: hq-rtr.au-team.irpo, BR-RTR: br-rtr.au-team.irpo
|
||
|
||
if [[ "$HOSTNAME" == *"srv"* ]]; then
|
||
ROLE="SERVER"
|
||
TARGET_USER="remote_user"
|
||
TARGET_UID="2026"
|
||
echo "Обнаружен сервер (SRV). Настройка пользователя: $TARGET_USER (UID: $TARGET_UID)"
|
||
elif [[ "$HOSTNAME" == *"rtr"* ]]; then
|
||
ROLE="ROUTER"
|
||
TARGET_USER="net_admin"
|
||
TARGET_UID="" # UID не указан в задании для net_admin, оставим выбор системы
|
||
echo "Обнаружен маршрутизатор (RTR). Настройка пользователя: $TARGET_USER"
|
||
else
|
||
echo "Предупреждение: Имя хоста $HOSTNAME не соответствует шаблону srv или rtr."
|
||
echo "Скрипт продолжит работу в режиме сервера (remote_user) по умолчанию."
|
||
ROLE="SERVER"
|
||
TARGET_USER="remote_user"
|
||
TARGET_UID="2026"
|
||
fi
|
||
|
||
TARGET_PASS="P@ssw0rd"
|
||
|
||
# 1. Создание пользователя
|
||
if id "$TARGET_USER" &>/dev/null; then
|
||
echo "Пользователь $TARGET_USER уже существует. Пропускаем создание."
|
||
else
|
||
if [ -n "$TARGET_UID" ]; then
|
||
useradd -u "$TARGET_UID" -m -s /bin/bash "$TARGET_USER"
|
||
else
|
||
useradd -m -s /bin/bash "$TARGET_USER"
|
||
fi
|
||
echo "Пользователь $TARGET_USER создан."
|
||
fi
|
||
|
||
# 2. Установка пароля
|
||
# Используем chpasswd для неинтерактивной установки
|
||
echo "$TARGET_USER:$TARGET_PASS" | chpasswd
|
||
echo "Пароль для $TARGET_USER установлен."
|
||
|
||
# 3. Настройка sudo (NOPASSWD)
|
||
# Проверка наличия директории sudoers.d
|
||
if [ ! -d "/etc/sudoers.d" ]; then
|
||
mkdir -p /etc/sudoers.d
|
||
chmod 750 /etc/sudoers.d
|
||
fi
|
||
|
||
# Создание файла правил
|
||
SUDOERS_FILE="/etc/sudoers.d/$TARGET_USER"
|
||
echo "$TARGET_USER ALL=(ALL) NOPASSWD: ALL" > "$SUDOERS_FILE"
|
||
chmod 0440 "$SUDOERS_FILE"
|
||
|
||
# Проверка синтаксиса sudoers (если доступна утилита visudo)
|
||
if command -v visudo &> /dev/null; then
|
||
visudo -c -f "$SUDOERS_FILE" &>/dev/null && echo "Конфигурация sudo проверена (OK)." || echo "Ошибка синтаксиса sudo!"
|
||
fi
|
||
|
||
echo "Настройка привилегий завершена."
|
||
|
||
# 4. Финальная проверка
|
||
echo "--- Итоговая проверка ---"
|
||
id "$TARGET_USER"
|
||
echo "Проверка доступа sudo (тестовая команда):"
|
||
# Примечание: su -c требует ввода пароля если не настроено, но мы настроили NOPASSWD
|
||
# Для проверки внутри скрипта от root это не совсем корректно, поэтому просто выводим статус
|
||
echo "Пользователь $TARGET_USER настроен с правами NOPASSWD sudo."
|
||
|
||
echo "--- Готово ---" |