web-dev-qa-db-ja.com

ローカルのauthorized_keysを使用したLDAPユーザーの公開鍵認証

アカウント情報にはLDAPを使用しています。環境は次のように構成されています...

  • CentOS 7OpenLDAPディレクトリサーバー
  • ディレクトリサーバーを使用するように構成されたCentOS7クライアント
    • authconfigは、LDAP認証用にCentOS7クライアントを構成するために使用されています

私は次のことに気づきました

  • ローカルユーザー(アカウント情報が/ etc/passwdにあるユーザー)は、公開鍵認証を使用せずに(パスワードなしで)クライアント自体にSSH接続できます。
  • LDAPユーザーは、パスワードを使用してクライアント自体にSSH接続できます
  • LDAPユーザーは、公開鍵認証を使用してクライアント自体にSSH接続することはできません。ユーザーは適切に構成されたsshキーを持っています(id_rsa.pubid_rsa)およびローカルユーザーと同様のauthorized_keys

ローカルユーザーを使用してsshを実行したときのデバッグ出力は次のとおりです。

debug1: Offering RSA public key: /home/localuser/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279

LDAPユーザーを使用してsshを実行したときのデバッグ出力は次のとおりです。

debug1: Offering RSA public key: /home/ldapuser/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic

LDAPユーザーが公開鍵認証を使用して接続を試みた後、ログ/ var/log/secureには次のエントリがあります

Mar 19 16:47:01 localhost sshd[20539]: Connection closed by x.x.x.x [preauth]

LDAPはユーザーアカウントを見つけることができます

$ getent passwd ldapuser
ldapuser:x:5001:5000::/home/ldapuser:/bin/bash

Sshが許可する場合PasswordAuthentication

$ ssh test
ldapuser@test's password: 
Last failed login: Sat Mar 19 17:08:29 UTC 2016 from x.x.x.x on ssh:notty
Last login: Sat Mar 19 15:55:40 2016

OpenSSH-LPKなどの代替手段があることは承知していますが、LDAPのメンテナンスを必要としないため、Puppetを使用してインストールされたローカルのauthorized_keysを使用できるようにしたいと思います。このアプローチが可能かどうか、可能であれば、sshd、PAM、またはLDAPの構成についてはわかりません。任意のポインタをいただければ幸いです...


SshdのログレベルをDEBUGに設定するというJakujeの提案に続いて、ログには次の手がかりが含まれていました。

Mar 19 18:22:42 localhost sshd[20934]: debug1: temporarily_use_uid: 5001/5000 (e=0/0)
Mar 19 18:22:42 localhost sshd[20934]: debug1: trying public key file /home/ldapuser/.ssh/authorized_keys
Mar 19 18:22:42 localhost sshd[20934]: debug1: Could not open authorized keys '/home/ldapuser/.ssh/authorized_keys': Permission denied
Mar 19 18:22:42 localhost sshd[20934]: debug1: restore_uid: 0/0

/および/ homeディレクトリには次の権限があります

$ ll -and / /home
dr-xr-xr-x. 17 0 0 4096 Feb 22 17:26 /
drwxr-xr-x.  5 0 0   45 Mar 19 03:05 /home

/ home/ldapuserディレクトリには次の権限があります

$ ll -an .
drwxr-xr-x. 3 5001 5000  99 Mar 19 16:46 .
drwxr-xr-x. 5    0    0  45 Mar 19 03:05 ..
drwx------. 2 5001 5000  76 Mar 19 02:45 .ssh

/home/ldapuser/.sshディレクトリには次の権限があります

$ ll -an .
total 16
drwx------. 2 5001 5000   76 Mar 19 02:45 .
drwxr-xr-x. 3 5001 5000   99 Mar 19 16:46 ..
-rw-r--r--. 1 5001 5000  419 Mar 19 02:45 authorized_keys
-rw-------. 1 5001 5000 1679 Mar 19 02:45 id_rsa
-rw-r--r--. 1 5001 5000  419 Mar 19 02:45 id_rsa.pub
-rw-r--r--. 1 5001 5000  177 Mar 19 02:45 known_hosts

Sshdデーモンは有効ユーザーを5001/5000に設定しているため、アクセス許可が拒否される理由がわかりません。 rootユーザーはldapuserに切り替えることができるため、システムはユーザーを認識します。


ジャクジェ:どうもありがとう! SELinuxが問題の原因であり、restoreconを実行すると問題が修正されました。私はあなたの助けと忍耐に感謝します!

3
bkeyser5280

SELinuxはオンになっていますか?これらのファイルのそれぞれのラベルは何ですか?

ls -lZ /home/ldapuser /home/ldapuser/.ssh /home/ldapuser/.ssh/authorized_keys

ランニング restorecon -rf /home/ldapuser/問題を修正する必要があります。

1
Jakuje

LDAPユーザーのホームディレクトリは、ユーザーのLDAPuidが所有している必要があります。 LDAPユーザーのホーム内の.sshディレクトリ、および.sshディレクトリ内の公開鍵(authorized_keys)と同じです。

例:

mkdir -p /home/ldapuser/.ssh

cp authorized_keys /home/ldapuser/.ssh

getent passwd
...
kibosh:*:6035:100:kibosh:/home/kibosh:/bin/bash
ldapuser:*:6036:100:ldapuser:/home/ldapuser:/bin/bash

chmod -R 6036:users /home/ldapuser

ls -l /home
drwxr-xr-x  4 ldapuser         users      4096 Nov  2 10:40 ldapuser
...

注:gid 100は、システム上のローカルグループユーザーのgidです。

また、$ HOME /.sshや$ HOME/.ssh/authorized_keysなどの権限が正しいことを確認してください。

0
kibosh