Eu não sou um administrador de sistemas, mas um engenheiro de software, mas para o meu projeto atual precisamos usar a autenticação Kerberos entre um servidor Linux e um cliente Linux e estou tendo alguns problemas, então espero que vocês possam ajudar. Meu principal problema com o kerberos é que ele existe e que eu preciso lidar com isso.
Mas, para ser mais preciso, fiz o seguinte:
Criei uma máquina virtual do Windows server 2012 que é meu Active directory. Eu configurei o diretório ativo e deixei.
Em seguida, no meu servidor e cliente, instalei o krb5 e o samba e configurei os arquivos de configuração da seguinte forma:
krb5.conf:
includedir /var/lib/sss/pubconf/krb5.include.d/
[logging]
default = FILE:/caringo/ganesha/bin/logs/krb5libs.log
kdc = FILE:/caringo/ganesha/bin/logs/krb5kdc.log
admin_server = FILE:/caringo/ganesha/bin/logs/kadmind.log
[libdefaults]
default_tkt_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tgs_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
permitted_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
allow_weak_crypto = 1
default_realm = CAR.LOCAL
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
[realms]
CAR.LOCAL = {
kdc = caringo_ad.car.local
admin_server = caringo_ad.car.local
}
[domain_realm]
.car.local = CAR.LOCAL
car.local = CAR.LOCAL
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
samba.conf:
server string = Samba Server Version %v
security = ads
realm = CAR.LOCAL
workgroup = CAR
passdb backend = tdbsam
kerberos method = dedicated keytab
create krb5 conf = no
dedicated keytab file = /etc/krb5.keytab
preferred master = no
local master = no
domain master = no
Então, depois de configurar o samba e o krb5 no meu cliente e no servidor com as mesmas informações, adicionei as duas máquinas ao diretório ativo com o uso de:
[root@optimusprime]# net ads join -k CAR.LOCAL
Using short domain name -- CAR
Joined 'OPTIMUSPRIME' to dns domain 'car.local'
[root@optimusprime]# net ads testjoin
Join is OK
Agora, ambas as minhas máquinas estão visíveis no centro administrativo do domínio ativo.
Então, em seguida, gerei um arquivo keytab na minha máquina com:
[root@optimusprime]# net ads keytab create
[root@optimusprime]# net ads keytab list
Vno Type Principal
5 DES cbc mode with CRC-32 host/[email protected]
5 DES cbc mode with RSA-MD5 host/[email protected]
5 AES-128 CTS mode with 96-bit SHA-1 HMAC host/[email protected]
5 AES-256 CTS mode with 96-bit SHA-1 HMAC host/[email protected]
5 ArcFour with HMAC/md5 host/[email protected]
5 DES cbc mode with CRC-32 host/[email protected]
5 DES cbc mode with RSA-MD5 host/[email protected]
5 AES-128 CTS mode with 96-bit SHA-1 HMAC host/[email protected]
5 AES-256 CTS mode with 96-bit SHA-1 HMAC host/[email protected]
5 ArcFour with HMAC/md5 host/[email protected]
5 DES cbc mode with CRC-32 [email protected]
5 DES cbc mode with RSA-MD5 [email protected]
5 AES-128 CTS mode with 96-bit SHA-1 HMAC [email protected]
5 AES-256 CTS mode with 96-bit SHA-1 HMAC [email protected]
5 ArcFour with HMAC/md5 [email protected]
Então, como meu servidor e clientes usarão o mount nfs4, adicionei o princípio nfs ao arquivo keytab no servidor.
[root@optimusprime]# net ads keytab add nfs
[root@optimusprime]# net ads keytab list | grep -i nfs
7 DES cbc mode with CRC-32 nfs/[email protected]
7 DES cbc mode with RSA-MD5 nfs/[email protected]
7 AES-128 CTS mode with 96-bit SHA-1 HMAC nfs/[email protected]
7 AES-256 CTS mode with 96-bit SHA-1 HMAC nfs/[email protected]
7 ArcFour with HMAC/md5 nfs/[email protected]
7 DES cbc mode with CRC-32 nfs/[email protected]
7 DES cbc mode with RSA-MD5 nfs/[email protected]
7 AES-128 CTS mode with 96-bit SHA-1 HMAC nfs/[email protected]
7 AES-256 CTS mode with 96-bit SHA-1 HMAC nfs/[email protected]
7 ArcFour with HMAC/md5 nfs/[email protected]
Em seguida, executei o comando setspn para adicionar o protocolo nfs para computadores e usuários (o código abaixo é de quando executei o comando setspn como um segundo comando para que os princípios já existam).
C:\Users\Administrator>setspn -a nfs/centos72.car.local centos72
Checking domain DC=car,DC=local CN=centos72,CN=Computers,DC=car,DC=local
nfs/centos72.car.local
nfs/centos72
HOST/centos72.car.local
HOST/CENTOS72
Duplicate SPN found, aborting operation!
C:\Users\Administrator>setspn -a nfs/optimusprime.car.local optimusprime
Checking domain DC=car,DC=local CN=optimusprime,CN=Computers,DC=car,DC=local
nfs/optimusprime.car.local
nfs/optimusprime
HOST/optimusprime.car.local
HOST/OPTIMUSPRIME
Duplicate SPN found, aborting operation!
Então agora eu tenho meu keytab pronto, ambas as máquinas foram adicionadas ao diretório ativo, e meu comando mount deve funcionar.
Eu inicio meu servidor e testo o comando mount, primeiro sem a autenticação do kerberos:
[root@centos72]# mount -t nfs4 -o sec=sys SERVERIP:/ /mnt -v
mount.nfs4: timeout set for Wed Feb 17 09:47:24 2016
mount.nfs4: trying text-based options 'sec=sys,addr=SERVERIP,clientaddr=CLIENTIP'
[root@centos72]# cd /mnt
[root@centos72 mnt]# ls
MOUNTEDFOLDER
Isso funciona, eu sou todo-poderoso.
Vou parar o servidor e iniciá-lo com sec = krb5 e, em seguida, tentar montar o mesmo do cliente:
[root@centos72 /]# mount -t nfs4 -o sec=krb5 SERVERIP:/ /mnt -v
mount.nfs4: timeout set for Wed Feb 17 09:52:46 2016
mount.nfs4: trying text-based options 'sec=krb5,addr=SERVERIP,clientaddr=CLIENTIP'
mount.nfs4: mount(2): Invalid argument
mount.nfs4: an incorrect mount option was specified
Eu amaldiçoo os deuses e vou para os meus registros.
Dentro de / var / log / message, vejo a seguinte mensagem:
Feb 17 09:09:55 centos72 [sssd[ldap_child[17108]]]: Failed to initialize credentials using keytab [MEMORY:/etc/krb5.keytab]: Preauthentication failed. Unable to create GSSAPI-encrypted LDAP connection.
Feb 17 09:09:55 centos72 [sssd[ldap_child[17108]]]: Preauthentication failed
E isso é onde eu estou preso, eu não sei se há algo adicional que eu preciso fazer no diretório ativo ou o keytab ou qualquer outra coisa para fazer isso funcionar.
Alguém tem alguma ideia?