web-dev-qa-db-ja.com

Kerberos kinitはプロンプトなしでパスワードを入力します

私はこれを見ていました: http://docs.Oracle.com/javase/7/docs/technotes/tools/windows/kinit.html そして、「パスワードフラグ」これを行う方法はわかりませんか?

kinitのプロンプトを表示せずにパスワードを入力できますか?

たとえば、現在:

入力した場合:

$ kinit test@REALM

私は応答を受け取ります:

test@REALM's password: 

パスワードを入力する必要があります。とにかくkinit test @ REALM passwordのようなものを入力できるので、プロンプトは表示されませんか?

28
user754905

そのプリンシパルのキータブを使用してください!

詳細:サービスのキータブはどうすればよいですか。

複数の方法がありますが、私は次のことを前提としています。KDC実装としてActive Directoryを実行しており、バックエンドはCentOS、FreeBSD、HP-UXなどのUnixまたはUnixライクなOSで実行されています。また、MIT KerberosまたはHeimdalがインストールされ、_krb5.conf_が適切に構成されている。

インストール mskutil(1) パッケージ/ポートマネージャーを使用するか、ソースからコンパイルします。コンパイルする場合は、すべての依存関係がマシンに存在することを確認してください。

mskutilを実行します。

_$ /usr/local/sbin/msktutil update --verbose --use-service-account --account-name <samAccountName> \
  --old-account-password <password> --dont-change-password --keytab <path>
_

samAccountNamepasswordをデータに置き換えます。自動生成されたパスワードで問題ない場合は、_dont-change-password_を省略します。 keytabファイルを保存する場所をpathに調整します。

サンプルの実行:

_$ /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
_

次に、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
_

このキータブは、JGSSの_login.conf_または_KRB5_CLIENT_KTNAME_およびMIT Kerberosで使用できるようになりました。

13
Michael-O

またできます

$ echo 'password' | kinit username
51
user2939990

2つの人気のあるKerberosクライアントパッケージがあります:MITおよびHeimdal。HeimdalはMacOSに付属するものですが、MITはリファレンス実装です。Heimdalクライアントでは、 --password-fileフラグを使用します。

$ kinit --password-file=~/mypasswordfile test@REALM

これにより、「パスワードをファイル名の 1行目 から読み取る」ので、プロセスリストにパスワードが漏洩することを回避できます。

代わりに行うことができます

--password-file=STDIN

パイプして、例cat password_file | kinit --password-file=STDIN test@REALM

注:これにより、ps出力を介したパスワードの漏洩が回避されます。

MacOSでは keychain オプションも使用できます。お持ちのクライアントのタイプはkinit --versionで確認できます。 --versionフラグが認識されない場合は、MIT client; Heimdalクライアントがフラグを認識しすぎてバージョンを報告しているようです。

UbuntuがデフォルトをHeimdal実装からMIT 14.04と16.04の間の1つに切り替えました。また、一般的に言えば、2つのパッケージ 互いに競合する )に切り替えたことに注意してください。

4
rogerdpack

使用しているkinitに正確に依存することもできるかもしれませんが、それは非常に悪い考えです。そのシステムの誰でもプロセステーブルと任意のコマンドのARGVを読み取ることができるため、パスワードが公開されます。

Kinitのほとんどの実装は、まさにこの理由でこれをサポートしていません。

あなたはウィンドウズボックスとUNIXボックスのどちらにいるのか完全に明確ではありませんか?

どちらにしても、この問題を処理する正しい方法は、キータブを使用することです。

キータブには、プリンシパルのキー(パスワードではない)が格納されます。 Kerberosでは、パスワードは、暗号交換で実際に使用されるよりランダムなキーを生成するために使用されます。キータブを作成/操作するコマンドは通常、

ktutil

「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

Keytabとログインを渡すコマンド

kinit [email protected] -k -t /path/to/username.keytab

参照リンク hortonworkskb.iu.ed

2
Kumar