среда, 28 января 2015 г.

LDAP в Linux. Часть 3


Эта часть будет постепенно дополнятся:
3.1 Авторизация в SSH
3.2 Авторизация в Jenkins
3.3 Публичные ключи в LDAP

3.1 Авторизация в SSH через LDAP

Необходимо установить следующие пакеты: sudo apt-get install libpam-ldap nscd ldap-utils


Далее конфигурируем:
LDAP server Uniform Resource Identifier: ldap://ip_сервера:389
Distinguished name of the search base: "dc=test,dc=com"
LDAP version to use: 3
Make local root Database admin: Yes
Does the LDAP database require login? No
LDAP account for root:"cn=admin,dc=test,dc=com"
LDAP root account password: root-пароль-лдап-админа

Если где-то ошиблись, то конфигурируем заново: sudo dpkg-reconfigure ldap-auth-config

Дальше правим /etc/nsswitch.conf:
passwd:         compat [SUCCESS=return] ldap
group:          compat [SUCCESS=return] ldap
shadow:         compat [SUCCESS=return] ldap

И добавляем строчку в /etc/pam.d/common-session:
session required    pam_mkhomedir.so skel=/etc/skel umask=077
про umask можно почитать тут
в /etc/skel/.profile добавить строчку: umask 077

Если мы создали posix-группы в LDAP, и хотим давать sudo только для группы sshadmin(должна быть в ldap), тогда необходимо добавить строчку в /etc/sudoers:
%sshadmin ALL=(ALL) ALL

Делаем рестарт сервиса nscd и пробуем логинится:
sudo /etc/init.d/nscd restart

3.2 Авторизация в jenkins

Необходимо установить LDAP Plugin. После этого выполнить настройку через Настроить Jenkins/Configure Global Security/Область защиты (realm)
выбрать LDAP и зайти в расширенные настройки. Далее 


3.3 Публичные ключи в LDAP

Публичные ключи нужны для безпарольной аутентификации на серверах/сервисах. Для этого генерируется пара закрытого(хранится только у пользователя) и публичного/открытого ключа. На сервере/сервисе прописывается публичный ключ, и после проверки пары закрытого и публичного ключа пользователь аутентифицируется.
Но если у нас >10 пользователей, то прописывать ключ становится проблемой, особенно если серверов много. Для упрощения можно хранить публичный ключ в LDAP и при каждой аутентификации, сервис/сервер будет сам доставать публичный ключ из LDAP  и сверять его с пользовательским закрытым ключем.
Для атрибута публичного ключа необходимо подправить схему LDAP. Для этого:
1)Создать файл /etc/ldap/schema/openssh-lpk.ldif с содержанием:
dn: cn=openssh-lpk,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: openssh-lpk
olcAttributeTypes: ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey'
  DESC 'MANDATORY: OpenSSH Public key'
  EQUALITY octetStringMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
olcObjectClasses: ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY
  DESC 'MANDATORY: OpenSSH LPK objectclass'
  MAY ( sshPublicKey $ uid )
  )
2)Выполнить импорт схемы:  ldapadd -Y EXTERNAL -H ldapi:/// -f openssh-lpk.ldif
3)Проверить что схема включилась в /etc/ldap/slap.d/cn=config/cn=schema должен появится openssh-lpk.ldif
4)Далее заходим в PhpLdapAdmin нажимаем схема/перейти и проверяем появился ли пункт ldapPublicKey
5)После этого заходим в любого пользователя и в ObjectClass нажимаем "добавить значение" и выбираем ldapPublickey:
Дальше у этого же пользователя нажимаем добавить новый атрибут и выбираем sshPublicKey и вводим туда публичный ключ пользователя.

После выполнения пункта 3.1 необходимо так же установить следующее ПО:
sudo apt install ldap-utils

Создать файл script.sh в папке /etc/ssh/ со следующим содержанием:
 #!/bin/bash

cn=$1
server=ldap.server.ru           #Put your server IP
basedn=ou=users,dc=server,dc=ru #Put your basedn
port=389

ldapsearch -x -h $server -p $port -o ldif-wrap=no  -b $basedn -s sub "(&(objectClass=posixAccount)(uid=$cn))" | sed -n 's/^[ \t]*sshPublicKey:[ \t]*\(.*\)/\1/p'


Сделать скрипт выполняемым: chmod +x /etc/ssh/script.sh

Далее необходимо добавить в конфиг ssh(/etc/ssh/sshd_config) следующие строки:
PasswordAuthentication no
AuthorizedKeysCommand /etc/ssh/script.sh
AuthorizedKeysCommandUser nobody

Заодно можно убрать слабые алгоритмы шифрования:
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss
KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256
MACs hmac-sha2-256,hmac-sha2-512


Установить правильные права на скрипт: chmod 755 /etc/ssh/script.sh
После этого можно на стороне клиента пробовать подключиться к серверу, где настраивали вход по ключам:
ssh -i ~/.ssh/id_закрытый_ключ пользователь_из_ldap@192.168.56.101



Комментариев нет:

Отправить комментарий