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

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

ただいまの
回答率

89.21%

LDAPについて教えてください。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,753

gik

score 148

cent os7でLDAPサーバを立てています。

下記サイトを参考に立てています
https://www.server-world.info/query?os=CentOS_7&p=openldap

#!/bin/bash

SUFFIX='dc=srv,dc=world'
LDIF='ldapuser.ldif'

echo -n > $LDIF
GROUP_IDS=()
grep "x:[5-9][0-9][0-9]:" /etc/passwd | (while read TARGET_USER
do
    USER_ID="$(echo "$TARGET_USER" | cut -d':' -f1)"

    USER_NAME="$(echo "$TARGET_USER" | cut -d':' -f5 | cut -d' ' -f1,2)"
    [ ! "$USER_NAME" ] && USER_NAME="$USER_ID"

    LDAP_SN="$(echo "$USER_NAME" | cut -d' ' -f2)"
    [ ! "$LDAP_SN" ] && LDAP_SN="$USER_NAME"

    LASTCHANGE_FLAG="$(grep "${USER_ID}:" /etc/shadow | cut -d':' -f3)"
    [ ! "$LASTCHANGE_FLAG" ] && LASTCHANGE_FLAG="0"

    SHADOW_FLAG="$(grep "${USER_ID}:" /etc/shadow | cut -d':' -f9)"
    [ ! "$SHADOW_FLAG" ] && SHADOW_FLAG="0"

    GROUP_ID="$(echo "$TARGET_USER" | cut -d':' -f4)"
    [ ! "$(echo "${GROUP_IDS[@]}" | grep "$GROUP_ID")" ] && GROUP_IDS=("${GROUP_IDS[@]}" "$GROUP_ID")

    echo "dn: uid=$USER_ID,ou=People,$SUFFIX" >> $LDIF
    echo "objectClass: inetOrgPerson" >> $LDIF
    echo "objectClass: posixAccount" >> $LDIF
    echo "objectClass: shadowAccount" >> $LDIF
    echo "sn: $LDAP_SN" >> $LDIF
    echo "givenName: $(echo "$USER_NAME" | awk '{print $1}')" >> $LDIF
    echo "cn: $USER_NAME" >> $LDIF
    echo "displayName: $USER_NAME" >> $LDIF
    echo "uidNumber: $(echo "$TARGET_USER" | cut -d':' -f3)" >> $LDIF
    echo "gidNumber: $(echo "$TARGET_USER" | cut -d':' -f4)" >> $LDIF
    echo "userPassword: {crypt}$(grep "${USER_ID}:" /etc/shadow | cut -d':' -f2)" >> $LDIF
    echo "gecos: $USER_NAME" >> $LDIF
    echo "loginShell: $(echo "$TARGET_USER" | cut -d':' -f7)" >> $LDIF
    echo "homeDirectory: $(echo "$TARGET_USER" | cut -d':' -f6)" >> $LDIF
    echo "shadowExpire: $(passwd -S "$USER_ID" | awk '{print $7}')" >> $LDIF
    echo "shadowFlag: $SHADOW_FLAG" >> $LDIF
    echo "shadowWarning: $(passwd -S "$USER_ID" | awk '{print $6}')" >> $LDIF
    echo "shadowMin: $(passwd -S "$USER_ID" | awk '{print $4}')" >> $LDIF
    echo "shadowMax: $(passwd -S "$USER_ID" | awk '{print $5}')" >> $LDIF
    echo "shadowLastChange: $LASTCHANGE_FLAG" >> $LDIF
    echo >> $LDIF
done

for TARGET_GROUP_ID in "${GROUP_IDS[@]}"
do
    LDAP_CN="$(grep ":${TARGET_GROUP_ID}:" /etc/group | cut -d':' -f1)"

    echo "dn: cn=$LDAP_CN,ou=Group,$SUFFIX" >> $LDIF
    echo "objectClass: posixGroup" >> $LDIF
    echo "cn: $LDAP_CN" >> $LDIF
    echo "gidNumber: $TARGET_GROUP_ID" >> $LDIF

    for MEMBER_UID in $(grep ":${TARGET_GROUP_ID}:" /etc/passwd | cut -d':' -f1,3)
    do
        UID_NUM=$(echo "$MEMBER_UID" | cut -d':' -f2)
        [ $UID_NUM -ge 500 -a $UID_NUM -le 1000 ] && echo "memberUid: $(echo "$MEMBER_UID" | cut -d':' -f1)" >> $LDIF
    done
    echo >> $LDIF
done
)

[root@dlp ~]# sh ldapuser.sh 
[root@dlp ~]# ldapadd -x -D cn=Manager,dc=srv,dc=world -W -f ldapuser.ldif -W -c
で登録できました。
phpLDAPadminでも登録確認できました。
ただ、ldapadd -x -D cn=Manager,dc=srv,dc=world -W -f ldapuser.ldif -W -c
で登録した場合、2重で登録しないでしょうか?
自宅PCでは二重登録しなかったのですが.....
またldapadd -x -D cn=Manager,dc=srv,dc=world -W -f ldapuser.ldif 
で登録した場合、ldap_add: Already exists (68)というエラーがでます。
このエラーはなんでしょうか?ぐぐっても出てきません。
このエラーを出さなくする方法はないでしょうか?

さらに ユーザーパスワードを変更したい
ldappasswd -x -D "cn=Manager,dc=server,dc=world" -w secret -s himitsu "uid=user1,ou=People,dc=server,dc=world"
Invalid credentials (49)
になります

またsssdに設定をしたく、
http://qiita.com/s5601026/items/8c5f16a2935ccd7fb305
この通りにやったのですが、
authentication failureで
pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh
なのですが、どこから手を付けたらいいかわかりません。

誰か教えてください。お願いします

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+2

https://www.server-world.info/query?os=CentOS_7&p=openldap

これだけの情報だと、予備知識なしではツライでしょう。
とりあえず、以下のコマンドで全部出ます(データのダンプ)。

$ sudo /usr/sbin/slapcat > /tmp/ldap-all.txt
$ less /tmp/ldap-all.txt

最初は面倒でも CLI (コマンドライン)で全部できるようにならないと、
LDAP のしくみは把握しづらいと思います。phpLDAPadmin などの GUI は、
ldapsearch コマンドが使いこなせるようになってからですね。

ldap はデータが膨らんでくると、普通に数千行、数万行になったりしますので、
grep などフィルタ系のコマンドにも慣れておいたほうがいいです。

ldapsearch -x -b "dc=example,dc=com" "(objectclass=*)"

は誤解を承知でざっくり書くと、SQL で言うところの

SELECT * FROM "dc=example,dc=com" 

みたいな感じです。

【追記】過去に書いた講演資料です。
LDAPの使われ方

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • この投稿は削除されました

  • 2017/08/03 09:51

    phpLDAPadmin の使い方は(使ったことないけどきっと)わかりますが、CLI がわかっていないと、この狭いスペースでは教えるのが困難です。過去に書いた講演資料を追加しましたので、何か参考になれば。

    キャンセル

  • 2017/08/03 14:51

    ありがとうございます。読んで参考にします。

    キャンセル

+1

私としては、LDAPについてよくわからない内は、Apache Directory Studio等を使って、GUIでどのようなエントリーが存在し、どのように追加や変更されていくのかを把握しながらした方が良いと思っています。(かといって、GUIで変更してしまうと、GUIでしか変更できなくなってしまいますので、初めはあくまで把握のために使った方が良いでしょう)

さて、まずは「何かを見て、その通りにやってみる」の前に、「何かを見て、そのコマンドが何をしているのか把握する」ことから始めてください。ldapaddのコマンドのオプションの一つ一つについて把握していますか?全てはman ldapaddとすれば書いてありますし、一部であればマニュアルの日本語版もありますので、参考にしてください。

上を踏まえて、答えていきます。

ldap_add: Already exists (68)

まさしくこれは、二重登録しようとしたけど既に存在しているというエラーです。LDAPではdnでエントリーが管理されています。同じdnのエントリーを二重に登録することはできません。これはちょうど、同じパス(フォルダとファイル名が一緒)のファイルが二重に存在できないのと同じです。ファイルと違うのは、ldapaddは上書きと言うことができず、既に存在していればエラーになると言うことです。既に存在しているエントリーを別の値で上書きしたい場合は、変更用のLDIF(最初の追加用のLDIFとは異なります)を用意してldapmodifyを使用する必要があります。

Invalid credentials (49)

エラーはパスワードを変更する権限(資格)が無いという意味です。バインドするDN名やパスワードが間違っている、そのバインドするDNには権限が無い、などが考えられます。ACLがどのようになっているかは、LDAPサーバーの設定を見ないとなんとも言えません。

まず、-w secret -s himitsuというところで、secretとhimitsuがそれぞれ何を示しているかは把握していますでしょうか?secretはcn=Manager,dc=srv,dc=worldのパスワードとして指定しており、himitsuはuid=user1,ou=People,dc=server,dc=worldの新しいパスワードとして指定しています。これが間違っていないかを確認してください。

次に、cn=Manager,dc=srv,dc=worldのアクセス権を確認してください。uid=user1,ou=People,dc=server,dc=worldのuserPassword属性について書き込み権限が無くてはいけません。ACLの設定で制限がかかっていないかを確認してください。

pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh

最後のsssdはやったことが無いからちょっとよくわかりません。メッセージからすると、ユーザー名の認識すらされていないようなので、ldap_search_base等が間違っているとかでは無いでしょうか。Qiitaの記事の設定をそのまま写しても動きません。LDAPの情報等は自分のLDAPサーバーにあわせて変更されているかを確認してみてください。


最後に、"Already exists"や"Invalid credentials"という英語について、日本語ではどういう意味かはわかっている、または、調べましたか?英語がわからないで終わらせていませんでしたか?もし、英語だからわからないで終わらせているようであれば、技術情報は英語がほとんどあるため、今後も躓く事が多く、LDAPを扱えるようになる日は来ません。今はGoogle翻訳など便利な物もありますし、辞書を片手にでもエラーメッセージの意味ぐらいは調べるようにならないと、厳しいと言わざるを得ません。英語がさっぱりというのであれば、LDAPより先に英語を勉強することをお勧めします。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/08/10 22:51 編集

    わかりました。がんばってみます。
    いいわけではないのですが、いろいろネットで調べたり、本で読んだりしています。
    まずびっくりしたのが10年前のものとかそのみなさんが結構前のものがでてきたり、
    例えばslap.confがわたしのcent os7にはなくて、slapd.dがあって、これを消去してもいいとか
    消去しない方法とかいろいろあって。
    なんというか方法が統一感がなくて....
    CentOS7で作るネットワークサーバ構築ガイドを見て、作れるとおもったのですが、
    これもインストールの仕方でうまくいかずに....
    でも前の方がslapcatのやり方など、ようやくいろいろできてきて、sssdでまた挫折.....
    Already exists調べました。私最初これがエラーとは思わなくて。
    そしてldapadd -x -D cn=Manager,dc=srv,dc=world -W -f ldapuser.ldif -W -c
    にたどり着きました。
    難しいです

    キャンセル

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

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

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