Je regardais ceci: http://docs.Oracle.com/javase/7/docs/technotes/tools/windows/kinit.html et j'ai remarqué qu'il disait que je pouvais utiliser le "drapeau de mot de passe" ". Je ne sais pas comment faire cela cependant?
Puis-je entrer le mot de passe pour kinit
sans qu'il me le demande?
Par exemple actuellement:
Si je tape:
$ kinit test@REALM
Je reçois une réponse:
test@REALM's password:
et je dois saisir le mot de passe. Existe-t-il de toute façon que je peux saisir quelque chose comme kinit test @ mot de passe REALM pour qu'il ne m'invite pas?
Utilisez un keytab pour ce principal!
En détail: Comment puis-je un keytab de service.
Il existe plusieurs façons, mais je supposerai ce qui suit: vous exécutez Active Directory en tant qu'implémentation KDC, vous exécutez en arrière-plan sur un système d'exploitation Unix ou Unix comme CentOS, FreeBSD, HP-UX, etc. Vous avez également MIT Kerberos ou Heimdal installé et le krb5.conf
Est correctement configuré.
Installez mskutil(1)
via le gestionnaire de paquets/ports ou compilez à partir des sources. Si vous choisissez de compiler, assurez-vous que toutes les dépendances sont présentes sur votre machine.
Exécutez maintenant mskutil
:
$ /usr/local/sbin/msktutil update --verbose --use-service-account --account-name <samAccountName> \
--old-account-password <password> --dont-change-password --keytab <path>
Remplacez samAccountName
et password
par vos données. Oubliez dont-change-password
Si vous êtes d'accord avec les mots de passe générés automatiquement. Ajustez path
où vous souhaitez stocker le fichier keytab.
Exemple d'exécution:
$ /usr/local/sbin/msktutil update --verbose --use-service-account --account-name uawet8er \
> --old-account-password '...' --dont-change-password --keytab uawet8er.keytab
-- execute: Skipping creation of new password
-- get_dc_Host: Attempting to find Domain Controller to use via DNS SRV record in domain AD.EXAMPLE.COM for procotol tcp
-- validate: Found DC: dc01.ad.example.com. Checking availability...
-- get_dc_Host: Found preferred Domain Controller: dc01.ad.example.com
-- create_fake_krb5_conf: Created a fake krb5.conf file: /tmp/.msktkrb5.conf-y6WVDM
-- destroy_g_context: Destroying Kerberos Context
-- initialize_g_context: Creating Kerberos Context
-- finalize_exec: SAM Account Name is: uawet8er
-- try_machine_password: Trying to authenticate for uawet8er with password
-- create_default_machine_password: Default machine password for uawet8er is uawet8er
-- try_machine_password: Error: krb5_get_init_creds_keytab failed (Vorauthentifizierung fehlgeschlagen)
-- try_machine_password: Authentication with password failed
-- try_machine_supplied_password: Trying to authenticate for uawet8er with supplied password
-- switch_default_ccache: Using the local credential cache: FILE:/tmp/.mskt_krb5_ccache-ZUutAC
-- finalize_exec: Authenticated using method 6
-- LDAPConnection: Connecting to LDAP server: dc01.ad.example.com
SASL/GSSAPI authentication started
SASL username: [email protected]
SASL SSF: 256
SASL data security layer installed.
-- ldap_get_base_dn: Determining default LDAP base: dc=AD,dc=EXAMPLE,dc=COM
-- get_default_ou: Determining default OU: CN=Users,DC=ad,DC=example,DC=com
-- ldap_check_account: Checking that a service account for uawet8er exists
-- ldap_check_account: Checking service account - found
-- ldap_check_account: Found userAccountControl = 0x200
-- ldap_check_account: Found supportedEncryptionTypes = 28
-- ldap_check_account: Found User Principal: uawet8er
-- ldap_check_account_strings: Inspecting (and updating) service account attributes
-- ldap_set_supportedEncryptionTypes: No need to change msDs-supportedEncryptionTypes they are 28
-- ldap_set_userAccountControl_flag: Setting userAccountControl bit at 0x200000 to 0x0
-- ldap_set_userAccountControl_flag: userAccountControl not changed 0x200
-- ldap_get_kvno: KVNO is 8
-- remove_keytab_entries: Trying to remove entries for uawet8er from keytab
-- execute: Updating all entries for service account uawet8er in the keytab WRFILE:uawet8er.keytab
-- update_keytab: Updating all entries for uawet8er
-- add_principal_keytab: Adding principal to keytab: uawet8er
-- get_salt: Using salt of AD.EXAMPLE.COMuawet8er
-- add_principal_keytab: Adding entry of enctype 0x17
-- add_principal_keytab: Adding entry of enctype 0x11
-- add_principal_keytab: Adding entry of enctype 0x12
-- add_principal_keytab: Adding principal to keytab: uawet8er
-- get_salt: Using salt of AD.EXAMPLE.COMuawet8er
-- add_principal_keytab: Adding entry of enctype 0x17
-- add_principal_keytab: Adding entry of enctype 0x11
-- add_principal_keytab: Adding entry of enctype 0x12
-- add_keytab_entries: Trying to add missing entries for uawet8er to keytab
Vérifiez maintenant votre keytab avec kinit
:
$ kinit -k -t uawet8er.keytab uawet8er
$ klist
Ticketzwischenspeicher: FILE:/tmp/krb5cc_722
Standard-Principal: [email protected]
Valid starting Expires Service principal
24.07.2019 13:15:45 24.07.2019 23:15:45 krbtgt/[email protected]
erneuern bis 25.07.2019 13:15:45
Ce keytab est maintenant prêt à être utilisé avec votre login.conf
Pour JGSS ou avec KRB5_CLIENT_KTNAME
Et MIT Kerberos.
Vous pouvez aussi
$ echo 'password' | kinit username
Il existe 2 packages client Kerberos populaires: MIT et Heimdal. Heimdal est fourni avec MacOS, mais MIT est l'implémentation de référence. Sur les clients Heimdal, vous pouvez Utilisez le --password-file
drapeau:
$ kinit --password-file=~/mypasswordfile test@REALM
Cela évite de divulguer le mot de passe à la liste des processus car il "lit le mot de passe à partir du première ligne du nom de fichier".
Vous pouvez également faire
--password-file=STDIN
et le canaliser, ex cat password_file | kinit --password-file=STDIN test@REALM
.
REMARQUE: Cela évite la fuite du mot de passe via la sortie ps
.
Sur MacOS, vous pouvez également utiliser l'option troussea . Vous pouvez vérifier le type de client que vous avez avec kinit --version
. Si la --version
L'indicateur n'est pas reconnu, vous avez très probablement un client MIT; les clients Heimdal semblent aussi reconnaître l'indicateur et signaler une version.
Notez qu'Ubuntu a changé la valeur par défaut d'une implémentation Heimdal en une MIT celle entre 14.04 et 16.04. De plus, de manière générale, les deux packages en conflit l'un avec l'autre .
Vous pourrez peut-être dépendre exactement de la kinit que vous utilisez, mais c'est une très mauvaise idée. N'importe qui sur ce système peut lire la table de processus et ARGV pour n'importe quelle commande et ainsi votre mot de passe est exposé.
La plupart des implémentations de kinit ne prennent pas cela en charge pour exactement cette raison.
Ce n'est pas tout à fait clair, êtes-vous sur une boîte Windows ou Unix?
Dans les deux cas, la bonne façon de gérer ce problème consiste à utiliser un keytab.
Keytabs stocke la clé d'un principal (pas le mot de passe). Dans Kerberos, le mot de passe est utilisé pour générer une clé plus aléatoire qui est réellement utilisée dans l'échange cryptographique. La commande de création/manipulation des keytabs est généralement
ktutil
Créer un keytab en utilisant "ktutil"
> ktutil
ktutil: addent -password -p [email protected] -k 1 -e rc4-hmac
Password for [email protected]: [enter your password]
ktutil: addent -password -p [email protected] -k 1 -e aes256-cts
Password for [email protected]: [enter your password]
ktutil: wkt username.keytab
ktutil: quit
# Below steps will will create a keytab for the user, move it into a secure directory,
and automatically get a ticket when the user logs in with a bash Shell
mkdir /home/username/keytabs
chmod 700 /home/username/keytabs
mv username.keytab /home/username/keytabs
chmod 600 /home/username/keytabs/username.keytab
echo "kinit -kt /home/username/keytabs/username.keytab [email protected]" >> /home/username/.bash_profile
Commande pour passer le keytab et la connexion
kinit [email protected] -k -t /path/to/username.keytab
Lien de référence hortonworkskb.iu.ed