Как настроить одновременную смену пароля в OpenLDAP и Kerberos?¶
Для одновременной смены пароля в OpenLDAP и Kerberos необходимо в конфигурационном файле /etc/tionix/vdi_server.yaml
проверить наличие секции:
KERBEROS:
script_path: "path to script"
При наличии этой секции и валидного значения параметра script_path
смена пароля выполняется посредством указанного сценария. Если путь до скрипта неверный или нет доступа к файлу, то возвращается ошибка в VDI клиенте, и в логах VDI сервера указывается причина. Если значение пустое или секции вообще нет, то производится смена пароля через обычный функционал Keystone.
Пример конфигурационного файла vdi_server.yaml
:
DB:
NAME: tionix_vdi_server
DEBUG: true
RABBIT_QUEUES:
vhost: "tionix_vdi_server_vhost"
KERBEROS:
script_path: /etc/tionix/chpwd.sh
Для успешного запуска скрипта, указанного в chpwd.sh
, с целью выполнения скрипта на удаленной машине необходимо соблюсти ряд условий:
- Скрипт на хосте с VDI брокером не должен располагаться в каталоге
/tmp
. - Необходимо учесть, что скрипт выполняется от пользователя, запустившего VDI сервер (в случае использования настроек по умолчанию это
tionix
). - Необходимо предоставить возможность авторизации без использования пароля от пользователя
tionix
на удаленной машине.
Пример скрипта chpwd.sh
на локальном хосте:
#!/bin/bash
SERVER='$SERVER_NAME' # Доменное имя либо IP-адрес
TM=$TIME_FOR_SSH # Ожидаемое время выполнения скрипта через SSH (в секундах)
timeout $TM ssh root@$SERVER /usr/local/sbin/princ_chpwd.sh $1 $2 $3
if [ "$?" != "0" ]; then
exit 1
else
exit 0
fi
Пример скрипта (princ_chpwd.sh
) смены паролей в OpenLDAP и Kerberos на удаленной машине (находится в зоне ответственности администраторов OpenLDAP и Kerberos):
#!/bin/bash
export PATH=$PATH:/usr/bin/:/usr/sbin/
ROOTDN="cn=ldaproot,dc=zags,dc=loc"
ROOTPW="thae0cohf1cieph7"
USERDN="ou=People,dc=zags,dc=loc"
DATE=$(date '+%F %T')
LOG="/var/log/avanpost.log"
#### Определение параметров ####
USER="$1"
PASS="$2"
OLDPASS="$3"
################################
#### Проверьте наличие учетной записи, если нет - укажите ее в лог и выйдите ####
PRINC=$(/usr/sbin/kadmin.local -q "getprinc $USER" | grep "Key: vno 1")
GETENT=$(/usr/bin/ldapsearch -LLL -b "$USERDN" -x -H "ldap://127.0.0.1" "(&(objectClass=posixAccount)(uid=$USER))" uid)
if [ -z "$PRINC" ]; then
echo "$DATE Account krb lock. User $USER not found." >> $LOG
exit
elif [ -z "$GETENT" ]; then
echo "$DATE Account ldap lock. User $USER not found." >> $LOG
exit
fi
####
/usr/bin/ldappasswd -x -D "$ROOTDN" -x -w $ROOTPW -s $PASS -a $OLDPASS uid=$USER,$USERDN
#### Измените пароль основного пользователя ####
/usr/sbin/kadmin.local -q "change_password -pw $PASS $USER"
echo "$DATE Princ change password. Password for principal "$USER" changed" >> $LOG