# Управление пользователями и аутентификацией в VyOS

> Управление пользователями VyOS: создание учетных записей, SSH-ключи, RADIUS и TACACS+ аутентификация, уровни привилегий для Yandex Cloud и VK Cloud

Source: https://opennix.org/docs/vyos/system/vyos-login/



Управление пользователями и аутентификацией в VyOS обеспечивает безопасный доступ к роутеру через SSH, console, и другие интерфейсы. Правильная конфигурация login management критична для безопасности системы.

## Обзор

### Типы пользователей

**System users**:
- Локальные пользователи на VyOS
- Хранятся в конфигурации
- Доступ через SSH, console, API

**Root access**:
- Root логин отключен по умолчанию
- Используйте sudo для административных команд
- Безопасность через limited privileges

### Методы аутентификации

1. **Local authentication** - пользователи в конфигурации VyOS
2. **SSH keys** - публичные ключи для passwordless login
3. **RADIUS** - централизованная аутентификация
4. **TACACS+** - Cisco-compatible authentication
5. **LDAP** - интеграция с Active Directory

### Уровни доступа

**Admin level**:
- Полный доступ к конфигурации
- Может выполнять все команды
- sudo доступ

**Operator level**:
- Read-only доступ
- Может просматривать конфигурацию
- Не может изменять настройки

## Базовая конфигурация

### Создание локального пользователя

```bash
# Создать пользователя с паролем
set system login user alice authentication plaintext-password 'SecurePass123!'

# Full name (опционально)
set system login user alice full-name 'Alice Admin'

# Home directory
set system login user alice home-directory '/home/alice'

commit
save
```

**Примечание**: Plaintext password шифруется автоматически при commit.

### Проверка пользователей

```bash
# Список пользователей
show system login

# Текущий пользователь
whoami

# Активные сессии
show system login users
```

### Удаление пользователя

```bash
delete system login user alice
commit
```

## SSH Keys Authentication

### Добавление SSH публичного ключа

```bash
# Добавить SSH ключ для пользователя
set system login user alice authentication public-keys workstation key 'AAAAB3NzaC1yc2EAAAADAQABAAABAQC...'
set system login user alice authentication public-keys workstation type 'ssh-rsa'

commit
```

**Генерация SSH ключа на клиенте**:
```bash
# На рабочей станции
ssh-keygen -t rsa -b 4096 -C "alice@company.com"

# Публичный ключ
cat ~/.ssh/id_rsa.pub
```

### Множественные SSH ключи

```bash
# Workstation key
set system login user alice authentication public-keys workstation key 'AAAAB3...'
set system login user alice authentication public-keys workstation type 'ssh-rsa'

# Laptop key
set system login user alice authentication public-keys laptop key 'AAAAB3...'
set system login user alice authentication public-keys laptop type 'ssh-rsa'

# Server key (for automation)
set system login user alice authentication public-keys automation key 'AAAAB3...'
set system login user alice authentication public-keys automation type 'ssh-ed25519'

commit
```

### Отключение password authentication

```bash
# Только SSH keys
delete system login user alice authentication plaintext-password
delete system login user alice authentication encrypted-password

commit
```

## Encrypted Passwords

### Использование encrypted passwords

```bash
# Генерация encrypted password
mkpasswd -m sha-512

# Или на VyOS
openssl passwd -6 'PlainPassword'

# Использование encrypted password
set system login user bob authentication encrypted-password '$6$rounds=656000$...'

commit
```

**Преимущества**:
- Пароль не виден в plaintext
- Безопаснее для backup конфигураций
- SHA-512 hashing

## User Groups и Privileges

### Admin vs Operator

**Admin (по умолчанию)**:
```bash
# Полный доступ
set system login user alice authentication plaintext-password 'Pass123!'

# Admin level подразумевается
commit
```

**Operator (read-only)**:
```bash
# VyOS не имеет встроенного operator level
# Используйте sudo restrictions или TACACS+ для granular control
```

### Sudo конфигурация

```bash
# Все пользователи VyOS имеют sudo доступ по умолчанию
# Для ограничения используйте sudoers файл (advanced)
```

## RADIUS Authentication

### Базовая RADIUS конфигурация

```bash
# RADIUS серверы
set system login radius server 192.168.1.10 key 'RadiusSecret123!'
set system login radius server 192.168.1.11 key 'RadiusSecret123!'

# Timeout
set system login radius server 192.168.1.10 timeout 5

# Port (default 1812)
set system login radius server 192.168.1.10 port 1812

# Source address для RADIUS запросов
set system login radius source-address 192.168.1.1

commit
```

### RADIUS с fallback

```bash
# RADIUS primary
set system login radius server 192.168.1.10 key 'Secret'

# Local fallback если RADIUS не доступен
# Локальные пользователи проверяются если RADIUS fails

set system login user admin authentication plaintext-password 'EmergencyPass!'

commit
```

### RADIUS accounting

```bash
# RADIUS accounting port (default 1813)
set system login radius server 192.168.1.10 acct-port 1813

commit
```

## TACACS+ Authentication

### TACACS+ конфигурация

```bash
# TACACS+ серверы
set system login tacacs server 192.168.1.20 key 'TacacsSecret123!'

# Port (default 49)
set system login tacacs server 192.168.1.20 port 49

# Timeout
set system login tacacs server 192.168.1.20 timeout 10

# Source address
set system login tacacs source-address 192.168.1.1

commit
```

### TACACS+ privilege levels

TACACS+ поддерживает 15 privilege levels (1-15):
- **Level 15**: Full admin access
- **Level 1**: Read-only

VyOS маппит TACACS+ levels:
- Level 15 → admin (configure mode)
- Level 1-14 → operator (operational mode only)

## Password Policies

### Минимальные требования

VyOS не имеет встроенной password policy engine, но можно использовать:

```bash
# Длина пароля
# Минимум 8 символов (рекомендуется 12+)

# Complexity
# Используйте буквы, цифры, специальные символы

# Примеры сильных паролей
set system login user alice authentication plaintext-password 'Tr0ng!P@ssw0rd#2024'
```

### Password rotation

```bash
# Регулярно меняйте пароли (каждые 90 дней)
# VyOS не имеет автоматической expiration
# Используйте external tools для enforcement
```

### Emergency admin account

```bash
# Всегда сохраняйте emergency admin account
set system login user emergency authentication plaintext-password 'VeryStrongEmergencyPass!'
set system login user emergency full-name 'Emergency Admin Account'

commit
```

## SSH Configuration

### SSH server settings

```bash
# SSH порт
set service ssh port 22

# Listen адреса
set service ssh listen-address 192.168.1.1
set service ssh listen-address 10.0.0.1

# Disable password authentication (только keys)
set service ssh disable-password-authentication

# Disable root login (already disabled by default)
# VyOS не позволяет root SSH login

commit
```

### SSH client settings

```bash
# SSH к другим системам с specific user
ssh alice@remote-server

# SSH с specific key
ssh -i /config/auth/id_rsa alice@remote-server
```

## Console Access

### Serial console

```bash
# Serial console включен по умолчанию
set system console device ttyS0 speed 9600

commit
```

### Console timeout

```bash
# Auto logout после inactivity (секунды)
set system login timeout 300

commit
```

## API Authentication

### API keys

```bash
# API ключи для HTTPS API
set service https api keys id admin key 'APIKey123456789!'
set service https api keys id readonly key 'ReadOnlyKey987!'

commit
```

API аутентификация отдельная от system login.

## Audit и Logging

### Command logging

```bash
# Все команды логируются автоматически в syslog
# Просмотр логов
show log authorization

# История команд
show history
```

### Failed login attempts

```bash
# Просмотр failed logins
show log authentication

# System log
cat /var/log/auth.log | grep 'Failed'
```

### Syslog для audit

```bash
# Отправка audit logs на remote syslog
set system syslog host 192.168.1.100 facility authpriv level info

commit
```

## Мониторинг и диагностика

### Активные пользователи

```bash
# Текущие login сессии
show system login users

# Who is logged in
who

# Last logins
last
```

Пример вывода:
```
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
alice    pts/0    192.168.1.50     09:15    0.00s  0.04s  0.00s w
bob      pts/1    192.168.1.51     10:23    5:00   0.01s  0.01s -bash
```

### User activity

```bash
# What users are doing
w

# Process по пользователю
ps aux | grep alice
```

### Authentication logs

```bash
# SSH authentication
show log authentication

# RADIUS authentication
show log | grep radius

# Detailed auth log
cat /var/log/auth.log
```

## Troubleshooting

### Не могу войти по SSH

**Проблема**: SSH connection refused или authentication failed.

**Причины**:
1. SSH service не запущен
2. Firewall блокирует port 22
3. Неправильный пароль или SSH key
4. User не существует

**Диагностика**:
```bash
# На VyOS (через console):
# Проверить SSH service
show service ssh

# Проверить firewall
show firewall ipv4 input filter

# Проверить пользователей
show system login

# SSH daemon status
systemctl status ssh
```

**Решение**:
```bash
# Запустить SSH
set service ssh port 22
set service ssh listen-address 0.0.0.0

# Firewall
set firewall ipv4 input filter rule 20 action accept
set firewall ipv4 input filter rule 20 destination port 22
set firewall ipv4 input filter rule 20 protocol tcp

# Проверить пользователя
set system login user alice authentication plaintext-password 'NewPass!'

commit
```

### SSH key authentication не работает

**Проблема**: Password prompt появляется несмотря на SSH key.

**Причины**:
1. Public key не добавлен правильно
2. Key type не поддерживается
3. Permissions на .ssh directory

**Решение**:
```bash
# Проверить SSH key
show system login user alice authentication public-keys

# Добавить заново
set system login user alice authentication public-keys workstation key 'AAAAB3NzaC1...'
set system login user alice authentication public-keys workstation type 'ssh-rsa'

# Удалить пароль если только keys
delete system login user alice authentication plaintext-password

commit
```

На клиенте:
```bash
# Verbose SSH для debugging
ssh -v alice@router

# Проверить что ключ загружается
ssh-add -l
```

### RADIUS authentication не работает

**Проблема**: RADIUS users не могут войти.

**Причины**:
1. RADIUS сервер недоступен
2. Shared secret неправильный
3. Firewall блокирует RADIUS порты

**Диагностика**:
```bash
# Ping RADIUS server
ping 192.168.1.10

# Test RADIUS connectivity
# На RADIUS сервере проверить logs

# VyOS auth log
show log authentication | grep radius
```

**Решение**:
```bash
# Проверить RADIUS конфигурацию
show system login radius

# Firewall для RADIUS
set firewall ipv4 output filter rule 50 action accept
set firewall ipv4 output filter rule 50 destination address 192.168.1.10
set firewall ipv4 output filter rule 50 destination port 1812,1813
set firewall ipv4 output filter rule 50 protocol udp

# Проверить secret
set system login radius server 192.168.1.10 key 'CorrectSecret'

commit
```

### Заблокирован из системы

**Проблема**: Изменили конфигурацию и больше не можете войти.

**Решение через console**:
```bash
# Console access всегда работает
# Войти через console (ttyS0)

# Сбросить пароль emergency user
configure
set system login user emergency authentication plaintext-password 'NewEmergencyPass!'
commit

# Проверить SSH service
set service ssh port 22
commit
```

**Решение через ISO/USB**:
```bash
# Boot с VyOS ISO
# Mount конфигурацию
mount /dev/sda1 /mnt
vi /mnt/config/config.boot

# Или переустановить image
install image
```

### Password forgotten

**Проблема**: Забыли пароль всех пользователей.

**Решение через console**:
```bash
# Boot в single user mode
# На GRUB: добавить 'init=/bin/bash'

# Mount filesystem
mount -o remount,rw /

# Создать нового пользователя через config
vi /opt/vyatta/etc/config/config.boot

# Или reset к default конфигурации
```

## Безопасность

### Рекомендации по безопасности

1. **Сильные пароли**:
```bash
# Минимум 12 символов, complexity
set system login user alice authentication plaintext-password 'Str0ng!C0mplex#P@ss'
```

2. **SSH keys вместо паролей**:
```bash
set system login user alice authentication public-keys workstation key 'AAAAB3...'
delete system login user alice authentication plaintext-password

set service ssh disable-password-authentication
```

3. **Изменить SSH порт**:
```bash
set service ssh port 2222

# Firewall
set firewall ipv4 input filter rule 20 destination port 2222
```

4. **Ограничить SSH access**:
```bash
# Только с management network
set service ssh listen-address 192.168.1.1

# Firewall
set firewall ipv4 input filter rule 20 source address 192.168.1.0/24
```

5. **Console timeout**:
```bash
set system login timeout 300
```

6. **Emergency account**:
```bash
set system login user emergency authentication plaintext-password 'EmergencyPass!'
```

7. **RADIUS/TACACS+ для enterprise**:
```bash
set system login radius server 192.168.1.10 key 'Secret'
```

8. **Regular audit**:
```bash
show log authentication
show system login users
```

9. **Disable unused users**:
```bash
delete system login user old-employee
```

10. **Two-factor где возможно**:
    - RADIUS с OTP
    - SSH + hardware token

## Интеграция

### Active Directory через RADIUS

```bash
# Windows NPS как RADIUS server
# NPS настроен для AD authentication

# VyOS RADIUS config
set system login radius server 192.168.1.10 key 'NPSSecret'

commit
```

### LDAP (indirect через RADIUS)

VyOS не имеет прямой LDAP интеграции. Используйте:
- FreeRADIUS с LDAP backend
- Windows NPS с AD
- Другой RADIUS proxy для LDAP

### SSH jump host

```bash
# VyOS как SSH jump host
# На client:
ssh -J alice@vyos-router bob@internal-server

# Или SSH config (~/.ssh/config):
Host internal-server
    ProxyJump alice@vyos-router
```

### Centralized logging

```bash
# Отправка auth logs на SIEM
set system syslog host 192.168.1.100 facility authpriv level info
set system syslog host 192.168.1.100 facility local0 level info

commit
```

## Примеры конфигураций

### Пример 1: Small office (local users)

```bash
# Admin user с SSH key
set system login user admin authentication public-keys workstation key 'AAAAB3NzaC1...'
set system login user admin authentication public-keys workstation type 'ssh-rsa'
set system login user admin full-name 'Administrator'

# Regular users с паролями
set system login user alice authentication plaintext-password 'AlicePass123!'
set system login user alice full-name 'Alice Smith'

set system login user bob authentication plaintext-password 'BobPass456!'
set system login user bob full-name 'Bob Johnson'

# Emergency account
set system login user emergency authentication plaintext-password 'Emergency2024!'

# SSH configuration
set service ssh port 22
set service ssh listen-address 192.168.1.1

# Console timeout
set system login timeout 600

commit
save
```

### Пример 2: Enterprise (RADIUS)

```bash
# RADIUS authentication
set system login radius server 192.168.1.10 key 'PrimaryRadius2024!'
set system login radius server 192.168.1.11 key 'BackupRadius2024!'
set system login radius server 192.168.1.10 timeout 5
set system login radius source-address 192.168.1.1

# Local admin fallback
set system login user localadmin authentication plaintext-password 'LocalAdminFallback!'
set system login user localadmin full-name 'Local Admin (Emergency)'

# Emergency account
set system login user emergency authentication encrypted-password '$6$rounds=656000$...'

# SSH keys only
set service ssh disable-password-authentication
set service ssh port 2222
set service ssh listen-address 192.168.1.1

# Firewall
set firewall ipv4 input filter rule 20 action accept
set firewall ipv4 input filter rule 20 source address 192.168.1.0/24
set firewall ipv4 input filter rule 20 destination port 2222
set firewall ipv4 input filter rule 20 protocol tcp

# Audit logging
set system syslog host 192.168.1.100 facility authpriv level info

commit
save
```

### Пример 3: DevOps (automation)

```bash
# Human users
set system login user alice authentication public-keys laptop key 'AAAAB3...'
set system login user alice authentication public-keys laptop type 'ssh-ed25519'

# Automation user
set system login user ansible authentication public-keys automation key 'AAAAB3...'
set system login user ansible authentication public-keys automation type 'ssh-ed25519'
set system login user ansible full-name 'Ansible Automation'

# API keys
set service https api keys id ansible key 'AnsibleAPIKey123456!'

# SSH configuration
set service ssh port 22
set service ssh listen-address 0.0.0.0

# Disable password auth (keys only)
set service ssh disable-password-authentication

commit
save
```

## Лучшие практики

1. **SSH keys > passwords**:
   - Всегда используйте SSH keys для automation
   - Disable password auth где возможно

2. **Least privilege**:
   - Создавайте пользователей с минимальными правами
   - Используйте RADIUS/TACACS+ для granular control

3. **Regular audit**:
   - Просматривайте активных пользователей
   - Удаляйте старые accounts
   - Monitor failed logins

4. **Strong passwords**:
   - Минимум 12 символов
   - Complexity requirements
   - Regular rotation (90 days)

5. **Multi-factor где возможно**:
   - RADIUS с OTP
   - SSH keys + password

6. **Emergency access**:
   - Всегда имейте emergency account
   - Храните credentials безопасно

7. **Centralized auth для enterprise**:
   - RADIUS/TACACS+ для масштабируемости
   - LDAP/AD integration

8. **Console security**:
   - Physical security для console access
   - Timeout для auto logout

9. **Logging**:
   - Enable comprehensive logging
   - Centralized log collection
   - Regular review

10. **Documentation**:
    - Документируйте user accounts
    - Access procedures
    - Emergency recovery steps

## Заключение

Login management в VyOS обеспечивает безопасный и гибкий доступ к системе. Ключевые возможности:

- **Local users** - простая конфигурация для малых сред
- **SSH keys** - passwordless и безопасная аутентификация
- **RADIUS/TACACS+** - централизованная аутентификация для enterprise
- **Audit logging** - отслеживание доступа и действий

Используйте appropriate authentication method для вашей среды:
- Small office → Local users с SSH keys
- Enterprise → RADIUS/TACACS+ с AD integration
- DevOps → SSH keys для automation

Правильная конфигурация login management критична для безопасности VyOS и должна быть первым шагом при настройке системы.

