Аутентификация
Помимо использования сертификатов, пользователи KOMRAD как метод аутентификации используют логин и пароль для входа в систему.
Есть несколько способов добавления пользователей и задания им паролей.
Роли
Доступные роли:
- 
Администратор - доступ к любым вкладкам системы. Возможность настраивать коллекторы, пользовательские поля, плагины, загружать сертификаты, настраивать уведомления, все действия относительно других пользователей, доступ к настройкам ГосСОПКА 
- 
Пользователь - доступ ко всем вкладкам системы, кроме "manage". Разрешены все действия с фильтрами, директивами, активами, виджетами, событиями, инцидентами 
Системный пользователь
При установке pauth-server создаёт системного пользователя root, он не отображается на UI, но смена пароля является обязательным действием.
Пароль пользователя хранится в формате хеша bcrypt в базе.
Для генерации хеш-функции Вы можете воспользоваться онлайн генератором
Или сгенерировать локально с использованием скрипта Python 3:
import getpass
import bcrypt
password = getpass.getpass("password: ")
hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
print(hashed_password.decode())
Выполните подключение к базе данных PostgreSQL:
psql postgres://postgres:pass@localhost:5432/pauth-preferences
Измените EXAMPLE_HASH на сгенерированный вами хеш:
update preferences.users set password_hash = 'EXAMPLE_HASH' where login = 'root';
Отключитесь от базы данных:
\q
Также можете использовать команды quit, exit.
Добавление пользователей в UI
Во вкладке "manage" ⇒ "Пользователи" нажатием на +
Заполните обязательные поля:
- Фамилия
- Имя
- Логин
- Пароль
Сложность пароля будет зависеть от значения указанного в конфигурационном файле сервера аутентификации
MinPasswordEntropyBits: 70
70 является энтропией пароля.
Какое значение энтропии следует использовать?
Вы принимаете решение, какую сложность пароля следует использовать, мы считаем наиболее оптимальным диапазон значений в районе 50-70.
Таблица энтропии пароля
| Энтропия | Строчные буквы | Заглавные + строчные + цифры | заглавные + строчные + цифры + спецсимволы | 
|---|---|---|---|
| 120 | 20 | ||
| 118 | 25 | 18 | |
| 116 | |||
| 114 | 19 | ||
| 112 | 24 | 17 | |
| 110 | |||
| 108 | 23 | 18 | |
| 106 | 16 | ||
| 104 | 22 | ||
| 102 | 17 | ||
| 100 | |||
| 98 | 21 | 15 | |
| 96 | 16 | ||
| 94 | 20 | ||
| 92 | 14 | ||
| 90 | 19 | 15 | |
| 88 | |||
| 86 | 13 | ||
| 84 | 18 | 14 | |
| 82 | |||
| 80 | 17 | ||
| 78 | 13 | 12 | |
| 76 | 16 | ||
| 74 | |||
| 72 | 12 | 11 | |
| 70 | 15 | ||
| 68 | |||
| 66 | 14 | 11 | 10 | 
| 64 | 11 | ||
| 62 | 13 | ||
| 60 | 10 | 9 | |
| 58 | |||
| 56 | 12 | ||
| 54 | 9 | ||
| 52 | 11 | 8 | |
| 50 | |||
| 48 | 10 | 8 | |
| 46 | 7 | ||
| 44 | |||
| 42 | 9 | 7 | |
| 40 | 6 | 
При этом мы исключаем возможность использования односложных паролей.
С повторяющимися символами, такими как aaaaaaaaaaaaa или 111222, мы изменяем длину последовательности, чтобы она считалась не более, чем 2.
aaaa имеет длину 2
111222 имеет длину 4
Обычные последовательности длины три или более считаются за длину 2.
- 12345имеет длину 2
- 765432имеет длину 2
- abcимеет длину 2
- qwertyимеет длину 2
Последовательности проверяются по принципу с начала до конца, и в обратном порядке. Вот последовательности, которые мы реализовали на данный момент, и они не чувствительны к регистру:
- 0123456789
- qwertyuiop
- asdfghjkl
- zxcvbnm
- abcdefghijklmnopqrstuvwxyz
Добавление пользователя через консоль
Добавить пользователя через консоль можно следующей командой:
sudo pauthctl user add --email name@domain.com --login admin --roles admin --password admin --conn "postgresql://postgres:pass@localhost:5432/pauth-preferences"
Где:
- --pass – укажите пароль пользователя postgres(PostgreSQL)
- --e-mail name@domain.com– укажите свой e-mail администратора
- --login admin– укажите свой логин администратора
- --roles admin- назначение роли администратора илиuserдля пользователя
- --password admin– укажите свой пароль администратора
Удалить пользователя полностью нельзя, его "следы" останутся в системе. Например, если пользователь, ответственный за инцидент, был удалён, его имя всё равно останется в графе "Ответственный"
Добавление пользователей LDAP
Укажите настройки Вашего LDAP-сервера.
Для редактирования конфигурационного файла выполните команду:
sudo nano /etc/echelon/komrad/pauth-server.yaml
kind: ldap
priority: 20  
enabled: true #включить (false для отключения)
ldap:
url: ldap://echelon.lan:389 # адрес подключения к домену; 
search-dn: search-dn  # отличительное имя пользователя, доступное только для чтения, которое будет использовано для аутентификации с LDAP-сервером, чтобы извлечь информацию пользователя;
search-password: search-password # пароль пользователя, доступный только для чтения, который будет аутентифицирован с LDAP-сервером для того, чтобы извлечь информацию пользователя;
base-dn: dc=echelon,dc=lan # домены первого и второго уровня
uid: sAMAccountName # ключ входа для использования в качестве идентификатора пользователя. Если передать null как значение данной опции, тогда по умолчанию будет использоваться sAMAccountName;
scope: 2 глубина поиска, возможны три варианта:
Base (0) — поиск только по указанному в запросе объекту. В результате поиска 
возвращается либо один объект, либо ничего. Данная область, как правило,
используется для проверки наличия объекта.
One level (1) — поиск только по дочерним объектам указанного объекта. Поиск
по вложенным объектам не производится, также в результаты поиск не попадает сам 
базовый объект.
Subtree (2) — поиск по всем дочерним объектам, включая вложенные. 
connection-timeout: 30 # таймаут LDAP соединения, в секундах, по умолчанию 30;
tls: 
enabled: false # включение шифрования передачи данных LDAP протокола true;
group-conf:
filter: objectclass=Group # фильтр для выбора класса или категории.
https://social.technet.microsoft.com/wiki/contents/articles/8077.active-directory-ldap-ru-ru.aspx 
 
membership-attribute: memberof  # атрибут допустимые значения (Mobile/SN/GivenName/Email/Mail/CN/UID)
group-roles:
- group-to-org-role:
group-dn: cn=dep_development,cn=Groups,dc=echelon,dc=lan # Путь до группы 
org-role: admin # Роль
Перезапустите pauth-server.
Создание ролей для ClickHouse и PostgreSQL
Здесь описано создание ролей администратора и пользователя.
Действия (каждая отдельная команда пишется в одну строчку):
Создать роль администратора:
sudo pauthctl role add admin --migrate --conn "postgresql://postgres:pass@localhost:5432/pauth-preferences"
Об успешном добавлении роли admin в строке сервиса будет строка:
INFO roles added {"role_names": ["admin"], "status": "success"}
Создать роль пользователя:
sudo pauthctl role add user --conn "postgresql://postgres:pass@localhost:5432/pauth-preferences"
Об успешном добавлении роли user в строке сервиса будет строка:
INFO roles added {"role_names": ["user"], "status": "success"}
Создать учетную запись администратора:
sudo pauthctl user add --email name@domain.com --login admin --roles admin --password admin --conn "postgresql://postgres:pass@localhost:5432/pauth-preferences"
Где вместо:
- 
postgres:pass– указать пароль пользователяpostgres(PostgreSQL)
- 
email name@domain.com– указать e-mail администратора
- 
login admin– указать логин администратора
- 
password admin– указать пароль администратора
Информация об изменении паролей для ClickHouse и PostgreSQL
Использовать отдельные сертификаты для аутентификации пользователя и сервисов
В случае, если Вы хотите использовать свои или отдельно сгенерированные сертификаты, необходимо внести изменения в файлы конфигурации сервера аутентификации и сервера
В указанном примере сертификаты для аутентификации лежат в папке /var/lib/echelon/komrad/certs1.
- pauth server
grpcserverca: /var/lib/echelon/komrad/certs1/ca.pem
grpcservercert: /var/lib/echelon/komrad/certs1/server.pem
grpcserverkey: /var/lib/echelon/komrad/certs1/server-key.pem
- komrad-server
auth:
  # адрес gRPC сервера PAuth
  addr: 127.0.0.1:2021
  tls:
    disable: false
    ServerName: ""
    TrustedCA: /var/lib/echelon/komrad/certs1/ca.pem
    Cert: /var/lib/echelon/komrad/certs1/client.pem
    CertKey: /var/lib/echelon/komrad/certs1/client-key.pem
    system-pool: false
    min-version: "1.3"
    client-auth: require-and-verify-client-cert
tls:
    disable: false
    ServerName: ""
    TrustedCA: /var/lib/echelon/komrad/certs1/ca.pem
    Cert: /var/lib/echelon/komrad/certs1/server.pem
    CertKey: /var/lib/echelon/komrad/certs1/server-key.pem
    system-pool: false
    min-version: "1.3"
Проверьте, чтобы у пользователя komrad был доступ к папке с сертификатами