diff --git a/script.sh b/script.sh new file mode 100644 index 0000000..caa93ca --- /dev/null +++ b/script.sh @@ -0,0 +1,99 @@ +#!/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 "--- Готово ---" \ No newline at end of file