質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • CentOS

    2561questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • LDAP

    81questions

    LDAPは、ディレクトリデータベースにアクセスするためのプロトコルです。ディレクトリデータベースとは、ネットワークに存在するメールアドレスや環境などさまざまな情報を一元的に管理するサービスのことで、クライアントはLDAPサーバにアクセスしてユーザ名から検索や追加などの操作することができます。

ldap認証について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 948

gik

score 136

今centos7でldap認証をnss-pam-ldapd nscdを使って行いたいとも思い、

https://forum.zentyal.org/index.php?topic=23831.0
を見ながら行っているのですが、 authentication failedがでてしまいます。

やり方としては
yum install -y openldap-clients nscd
をインストールし
/etc/openldap/ldap.conf に

TLS_CACERTDIR /etc/openldap/cacerts
# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON    on
URI ldap://127.0.0.1
BASE dc=,dc= ←ドメインを入力

/etc/nsswitch.conf

Code: [Select]
passwd:     files sss ldap
shadow:     files sss ldap
group:      files sss ldap
#initgroups: files

#hosts:     db files nisplus nis dns
hosts:      files dns

# Example - obey only what nisplus tells us...
#services:   nisplus [NOTFOUND=return] files
#networks:   nisplus [NOTFOUND=return] files
#protocols:  nisplus [NOTFOUND=return] files
#rpc:        nisplus [NOTFOUND=return] files
#ethers:     nisplus [NOTFOUND=return] files
#netmasks:   nisplus [NOTFOUND=return] files     

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files 

netgroup:   files ldap

publickey:  nisplus

automount:  files ldap
aliases:    files nisplus

/etc/nslcd.conf

uid nslcd
gid ldap

uri ldap://127.0.0.1

ldap_version 3

base dc=,dc= ドメインを入力

binddn cn=Manager,dc=,dc=  ドメインを入力
bindpw ディレクトリーパスワードを入力

scope sub
//dcはドメイン名を入力
base   group  ou=Groups,dc=,dc=
base   passwd ou=People,dc=,dc=
base   shadow ou=People,dc=,dc=
tls_reqcert never
ssl no
tls_cacertdir /etc/openldap/cacerts


ldapの登録の仕方はhttps://www.server-world.info/query?os=CentOS_7&p=openldap&f=1
を見たりしました

後nslcd -dを行うと
daemon may already be active, cannot acquire lock (/var/run/nslcd/nslcd.pid): Permission denied
というエラーが出ます

urlの部分はIPアドレスではなくドメインで書いてもダメでした
ファイヤウォールやselinuxの設定は終わっています。
どこが原因なんでしょうか?

希望としては
Last login: Sat Mar 19 18:38:42 GMT 2016 on pts/1
su: warning: cannot change directory to /home/ldapuser1: No such file or directory
id: cannot find name for group ID 2001
-bash-4.2$
こういう感じででてきてほしいです。

また別の方にヒントもらったのですが、ldapsearch -xはエラーでなくなりましたが、
ldapsearch -x -H ldap://127.0.0.1 -D "cn=Manager,dc=example,dc=com" -W -b "ou=People,dc=example,dc=com" "*"
getent passwd
もちゃんとldapユーザーが表示されます。

また、
/etc/pam.d/password-auth

auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

/etc/pam.d/system-auth

auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so


になっています。

この後実はパスワードを変更したら認証できました。
変更コマンドは
ldappasswd -x -D "cn=Manager,dc=private,dc=jp" -S -w <バインドDNパスワード> \
"uid=ldapuser,ou=People,dc=private,dc=jp"
を使いました。
uidとdcは環境に合わせました。

/var/log/messagesでnscld ldap_result() failed no such objectのエラーがでました。 
認証はできています。 
/var/log/secureではエラーはでていません。 
後、getent passwdを行うとuidで同じ人がグループID違いで2回でてきます。 
これは一回2回でてくるuidを削除したらでてこなくなるのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • TaichiYanagiya

    2017/09/21 00:47

    "no such object" だけではわかりません。どのような操作をしてそのログが出力されたのか、"no such object" を含む 1行すべて(プロセス名などの情報)と関連する上下の行を提示ください(開示できない文字列は置き換えて)。

    キャンセル

  • gik

    2017/09/21 00:59 編集

    su - ユーザ名で認証したときに/var/log/messagesでNo such objectと書かれています。 ちゃんとエラ―内容次回書いてきます。 すいません。

    キャンセル

  • gik

    2017/09/23 00:14 編集

    /var/log/messagesでnscld ldap_result() failed no such objectのエラーがでました。 認証はできています。 /var/log/secureではエラーはでていません。 後、getent passwdを行うとuidで同じ人がグループID違いで2回でてきます。 これは一回2回でてくるuidを削除したらでてこなくなるのでしょうか?

    キャンセル

回答 1

checkベストアンサー

+1

まず、LDAP を確認しましょう。
ドメインを dc=example,dc=com とすると、ldapsearch でユーザーのエントリーが参照できることを確認します。

# ldapsearch -x -H ldap://127.0.0.1 -D "cn=Manager,dc=example,dc=com" -W -b "ou=People,dc=example,dc=com" "*"


uid, userPassword の他、Linux/UNIX ユーザーとして見せるため、 uidNumber, gidNumber, homeDirectory, loginShell (posixAccount クラスの属性) が必要です。 

次に、NSS(nssswitch.conf), nslcd 経由で passwd 情報が参照できることを確認します。

# getent passwd
  (/etc/passwd に加えて LDAP ユーザーが出力されることを確認)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/14 17:56

    確認します。

    キャンセル

  • 2017/09/15 21:15 編集

    ldapsearch -x -H ldap://127.0.0.1 -D "cn=Manager,dc=example,dc=com" -W -b "ou=People,dc=example,dc=com" "*"
    でエントリー参照できました。
    これldapの認証まではできていることですよね?
    getent passwdもLDAP ユーザーが入ってました。

    キャンセル

  • 2017/09/15 23:22

    ログインは SSH でしょうか、コンソールでしょうか?
    ログインに失敗した時刻の /var/log/secure にエラーか記録されていないか確認ください。

    journal のログは nslcd が LDAP に接続できないものですが、現在は getent passwd で LDAP ユーザー情報を取得できているので、それ以前の時刻のものだと思います。

    キャンセル

  • 2017/09/16 16:41

    /var/log/secure確認します。
    ログインはsu - ldapユーザー名で行いました。
    ログの意味はnslcd が LDAP に接続できないものですか、ldapサーバーがきちんと設定されていないのかとばかり思っていました。
    ほかに見る場所ありますでしょうか?

    キャンセル

  • 2017/09/20 22:15

    すいません。認証できて別のエラーがでてきて、/var/log/secure確認するの忘れました。
    今度確認します。
    uid登録した同じ名前の人が2つでてきてしまい、困っています。
    また/var/log/messagesでNo such objectというエラーがでます。
    この件はどう考えたらいいでしょうか?
    実は一つ考えているのがuidを削除して新しく登録してみようと考えているのですが
    この考え方であっているというかせっかく認証できたのがまただめになってしまうかと
    思うと心配で。今日はできませんでした。
    せっかく認証できたのにエラーがでてきてしまいちょっとどうしたらいいか...
    すいません。アドバイスお願います。
    /var/log/secureアドバイスもらったのにすいません。次回ちゃんと見てきます。

    キャンセル

  • 2017/09/23 00:41

    > getent passwdを行うとuidで同じ人がグループID違いで2回でてきます。

    uid=A,gidNumber=X と uid=A,gidNumber=Y が違う DN で登録されているのではないでしょうか?

    ldapsearch -LLL (略) '(&(uid=A)(gidNumber=X))' dn
    ldapsearch -LLL (略) '(&(uid=A)(gidNumber=Y))' dn

    もし、そうであれば、どちらかの DN を削除すればいいと思います。

    キャンセル

  • 2017/09/25 01:10

    ありがとうございます。やってみます。返事が遅くなりすいません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • CentOS

    2561questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • LDAP

    81questions

    LDAPは、ディレクトリデータベースにアクセスするためのプロトコルです。ディレクトリデータベースとは、ネットワークに存在するメールアドレスや環境などさまざまな情報を一元的に管理するサービスのことで、クライアントはLDAPサーバにアクセスしてユーザ名から検索や追加などの操作することができます。