У меня есть bash для создания файла keytab:
#!/bin/bash
user = "username"
pass = "password"
printf "%b" "add_entry -password -p [email protected] -k 1 -e aes128-cts-hmac-sha1-96\n$pass\nadd_entry -password -p [email protected] -k 1 -e aes256-cts-hmac-sha1-96\n$pass\nadd_entry -password -p [email protected] -k 1 -e arcfour-hmac-md5-exp\n$pass\nadd_entry -password -p [email protected] -k 1 -e des3-cbc-sha1\n$pass\nadd_entry -password -p [email protected] -k 1 -e des-cbc-md5\n$pass\nwrite_kt $user.keytab" | ktutil
но не могу подключиться к ldap-серверу с этой ошибкой:
kinit: не удалось выполнить предварительную аутентификацию при получении первоначальных учетных данных
когда я использую kinit -V $user, все в порядке, и я пытаюсь создать keytab из командной строки несколько раз, но получаю ту же ошибку при входе в keytab
Наборы шифров aes128
и aes256
в Kerberos используют соленый PBKDF2 для получения ключа из пароля. Когда вы kinit с паролем, соль извлекается из KDC, но когда вы вручную создаете вкладку ключей, используется имя по умолчанию + соль области, которая будет работать большую часть времени, но не будет работать, если учетная запись пользователя была переименована как тогда его существующие ключи по-прежнему будут использовать старую соль (на основе старого имени), по крайней мере, до смены пароля.
Чтобы справиться с такой возможностью, используйте опцию -f
для add_entry
— она заставит ktutil выполнить AS-REQ и получить правильную соль от KDC, точно так же, как это делает kinit:
add_entry -password -p [email protected] -k 1 -e aes128-cts-hmac-sha1-96 -f
(arcfour-hmac
не использует соль; он работает с прямыми NTLM-хешами, поэтому у него нет этой проблемы, но с другой стороны, arcfour-hmac — это другое имя для RC4, и в наши дни вам, вероятно, не следует его использовать. .
Я не помню, какие наборы шифров salt des3
и des
используют, но я очень сомневаюсь, что вам нужен любой из них — Windows вообще не поддерживает des3
, только des
, а одиночный DES можно взломать за несколько часов, так что не надо тоже хочу его использовать. Тем не менее, в любом случае опция -f
будет работать правильно для всех наборов шифров.)
Вместо массивного printf используйте <<
heredoc:
ktutil <<EOF
add_entry -password -p [email protected] -k 1 -e aes128-cts-hmac-sha1-96 -f
$pass
add_entry -password -p [email protected] -k 1 -e aes256-cts-hmac-sha1-96 -f
$pass
write_kt $user.keytab
EOF
Альтернативно, вместо одной команды вы можете использовать { }
или ( )
для одновременной передачи нескольких выводов команды:
{
for etype in {aes128,aes256}-cts-hmac-sha1-96; do
echo "add_entry -password -p [email protected] -k 1 -e $etype -f"
echo "$pass"
done
echo "write_kt $user.keytab"
} | ktutil
дес-cbc-md5? Вы получили сценарий 1999 года?