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

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

新規登録して質問してみよう
ただいま回答率
85.51%
CentOS

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

LDAP

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

Q&A

解決済

2回答

2927閲覧

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

gik

総合スコア152

CentOS

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

LDAP

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

0グッド

0クリップ

投稿2017/08/02 11:58

編集2017/08/09 18:35

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
なのですが、どこから手を付けたらいいかわかりません。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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/02 14:00

編集2017/08/03 00:52
hotta

総合スコア1613

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gik

2017/08/02 15:44 編集

ざっくりのsql文理解しやすかったです。 ありがとうございます。 CentOS 7で作る ネットワークサーバ構築ガイドなどよんではいるのですが、なかなか理解できず。 助かりました。
gik

2017/08/02 17:59

phpLDAPadmin の使い方しっていましたら教えてください
hotta

2017/08/03 00:51

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

2017/08/03 05:51

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

0

私としては、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/09 22:32

raccy

総合スコア21733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gik

2017/08/10 15:32 編集

わかりました。がんばってみます。 いいわけではないのですが、いろいろネットで調べたり、本で読んだりしています。 まずびっくりしたのが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 にたどり着きました。 難しいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問