Параллельные вызовы kinit приводят к повреждению кэша Kerberos - PullRequest
0 голосов
/ 06 июля 2018

Если я пытаюсь выполнить аутентификацию с помощью таблицы ключей Kerberos несколько раз параллельно, я случайно получаю сообщения об ошибках, в которых говорится, что кэш учетных данных поврежден.

Я мог бы воспроизвести эту проблему с помощью следующего сценария. Однако в моем реальном случае использования есть процессы, вызывающие kinit одновременно, и я не могу их контролировать:

kdestroy
kinit $USER@$REALM -k -t $HOME/$USER.keytab && echo "OK" &
kinit $USER@$REALM -k -t $HOME/$USER.keytab && echo "OK" &
kinit $USER@$REALM -k -t $HOME/$USER.keytab && echo "OK" &
kinit $USER@$REALM -k -t $HOME/$USER.keytab && echo "OK" &
kinit $USER@$REALM -k -t $HOME/$USER.keytab && echo "OK"

, который выдает случайные результаты каждый раз, когда я запускаю его. Пример такого вывода следующий:

kinit: Failed to store credentials: Internal credentials cache error (filename: /tmp/krb5cc_1645005342) while getting initial credentials
kinit: Failed to store credentials: No credentials cache found (filename: /tmp/krb5cc_1645005342) while getting initial credentials
kinit: Failed to store credentials: Bad format in credentials cache (filename: /tmp/krb5cc_1645005342) while getting initial credentials
OK
OK

Есть ли способ заставить kinit "ждать своей очереди" и не обращаться к кешу, если к нему уже обращается другой процесс?

1 Ответ

0 голосов
/ 06 июля 2018

Если несколько процессов создают заявки независимо, то у них нет оснований использовать одинаковый кэш учетных данных. В худшем случае они даже использовали бы разные принципы, и побочные эффекты были бы ... интересными.

Решение: измените среду каждого процесса таким образом, чтобы KRB5CCNAME указывал на конкретный файл - и, предпочтительно, в каталоге для конкретного приложения. Это предотвратит гонки и очистит ваш беспорядок.

Частичное решение: поддерживать один кеш, но не на основе файла (поскольку Linux не может принудительно установить исключительную блокировку для файла) например. KEYRING.

В любом случае, вы имеете право жаловаться на неуклюжий способ разработки этих приложений. Или, может быть, они предназначены для работы в изолированных контейнерах?

...