3. Как управлять учетными записями
пользователей на тысячах серверов?
● Статические файлы, нет автоматической синхронизации
● Статические файлы, с синхронизацией или системой
централизованного управления конфигурацией
● NIS, etc.
● LDAP
4. Статические файлы, нет автоматической
синхронизации
Плюсы:
– Не зависит от внешних ресурсов
Минусы:
– Сложность заведения, блокирования учетных записей
– Сложность аудита (нельзя сказать какие есть учетные записи
и куда они имеют доступ, когда получали доступ)
– Относительно слабая безопасность
5. Статические файлы, с синхронизацией или
системой централизованного управления
конфигурацией
Плюсы:
– Почти не зависит от внешних ресурсов
– Простое добавление учетных записей
Минусы:
– Сложность аудита
– Относительно слабая безопасность
6. NIS, etc.
Плюсы:
– Простота добавления/удаления учетных записей
Минусы:
– Нет возможности централизованного ограничения доступа
– Слабая безопасность
– Зависимость от внешних ресурсов
7. LDAP
Плюсы:
– Простота заведения/удаления учетных записей
– Простой аудит
– Возможность централизованного разграничения доступа
– Возможность подвязать доступы другого вида к тем же
учетным записям
– Средняя безопасность
Минусы:
– Зависимость от внешних ресурсов
8. LDAP
Плюсы:
– Простота заведения/удаления учетных записей
– Возможность централизованного разграничения доступа
– Простой аудит
– Возможность подвязать доступы другого вида к тем же
учетным записям
Минусы:
– Зависимость от внешних ресурсов
10. Запись LDAP
dn: uid=testuser,ou=People,dc=test,dc=ru
uid: testuser
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
gecos: Test User
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/testuser
host: someserver.test.ru
userPassword: {CRYPT}$1$12345678$oEitTZYQtRHfNGmsFvTBA/
11. Приступим к настройке
● Настроить LDAP-сервер
– Прописать схемы
– Настроить базу
– Задать доступы
● Залить в него корневые записи и записи пользователей
● Настроить клиент
– Прописать доступ в ldap
– Включить NSS-часть
– Включить PAM-часть
– Добавить кеширование
● Включить TLS
12. Конфигурация сервера: схемы
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/misc.schema
13. Конфигурация сервера: база
database bdb
suffix "dc=test,dc=ru"
rootdn "cn=admin,dc=test,dc=ru"
rootpw {CRYPT}XXXXXXXX
directory /var/lib/ldap
index objectClass eq,pres
index <....>
14. Конфигурация сервера: acl
access to attrs=userPassword
by anonymous auth
by dn="cn=admin,dc=test,dc=ru" write
by self write
by * none
access to dn.subtree="dc=test,dc=ru"
by anonymous auth
by dn="cn=ronly,dc=test,dc=ru" read
by dn="cn=admin,dc=test,dc=ru" write
by self read
by * none
23. Недостатки
● Ssh-ключи лежат локально
● При недоступности LDAP-серверов имеем большие
таймауты, иногда превышающие таймаут ssh
● Безопасность
24. Централизованное хранение ssh-ключей
Существует патч для openssh, добавляющий возможность
хранения ssh-ключей в LDAP:
http://code.google.com/p/openssh-lpk/
Поля добавляемые в ldap-запись:
dn: uid=blablabla
objectClass: ldapPublicKey
sshPublicKey: ssh-rsa AAAA...blablabla
25. Таймауты при недоступности LDAP-серверов
● Поднимаем дополнительные сервера, делаем
репликацию и резервирование при помощи keepalived
● Используем кеширование
– nscd
– pam_ccreds
– встроенное в sssd
● Не лукапим LDAP для локальных пользователей
– nss_initgroups_ignoreusers для nss_ldap и nslcd
– nss_ldap и pam_ldap пришлось пропатчить
– filter_users и filter_groups для sssd
26. Репликация и резервирование
● LDAP поддерживает N-way мульти-мастер репликацию
● Также умеет отдавать ссылку (Refferal) на мастер при
попытке записи в реплику
29. Настройка Kerberos
● Настройка Kerberos-сервера
– Определим realm, относящиеся к нему DNS-имена и отвечающие за него сервера
– Настроим KDC (Key Distribustion Center)
– Зададим доступы
– Добавим принципал администратора
● Настройка Kerberos-клиента
– Определим realm, относящиеся к нему DNS-имена и отвечающие за него сервера
– Добавим принципал для клиента
– Добавим принципал для пользователя
– Включим Kerberos в PAM и sshd
● Добавим дополнительные DNS записи с указанием Kerberos-серверов
34. Конфигурация Kerberos клиента
● /etc/pam.d/system-auth
auth sufficient pam_krb5.so use_first_pass ignore_root forwardable
session sufficient pam_krb5.so ignore_root
● /etc/ssh/sshd_config
KerberosAuthentication yes
GSSAPIAuthentication yes
GSSAPIKeyExchange yes
● Добавляем в DNS для зоны test.ru SRV записи с указанием наших
Kerberos-серверов
35. Интегрируем Kerberos и LDAP
● Можно хранить базу Kerberos в LDAP
● Можно настроить аутентификацию в LDAP-е Kerberos-ом
через SASL
36. One Time Passwords
● Основанные на математических функциях
Например Aladdin eToken
● Основанные на текущем времени
Например RSA Security SecurID
37. MOTP (Mobile One-Time Passwords)
Есть программные реализации,
например MOTP
– Использует очень простой алгоритм:
md5(str(unixtime/10)+secret+pin)[0:6]
пользователь (pin) и устройство (secret)
– Имеет приложение под многие типы
мобильных телефонов
38. Radius+MOTP: настройка сервера
Конфигурация сервера на основе freeradius для использования mOTP
● /etc/raddb/users
DEFAULT Auth-Type = Accept
Exec-Program-Wait = "/usr/local/motp/motp.pl %{User-Name} %{User-
Password} %{Client-Shortname}"
● /etc/raddb/clients.conf
client 1.1.1.1 {
secret = secret_up_to_31_chars
shortname = i_am_server
}
39. Radius+MOTP: настройка клиента
Конфигурация клиента для использования MOTP в ssh
● /etc/pam_radius.conf
10.10.10.10 secret_up_to_31_chars 5
● /etc/pam.d/sshd
auth sufficient pam_radius_auth.so client_id=ssh
40. ● Железные решения (USB-ключи, смарт-
карты)
● Аналог One-Time Password
● Безопасное хранение закрытых ключей
например Gemalto USB Shell Token v2
41. СПАСИБО!
Алексей Бажин
Директор по эксплуатации
bazhin@corp.mail.ru