OpenLDAPコマンド概要
- ldapsearch:OpenLDAPディレクトリツリーエントリを検索してください。
- ldapadd:LDIF形式でディレクトリツリーエントリを追加します。
- ldapdelete: OpenLDAPのディレクトリツリーエントリを削除します。
- ldapmodify: OpenLDAPのディレクトリツリーエントリを修正します。
- ldapwhoami:OpenLDAPユーザーの身元を検証します。
- ldapmodrdn:OpenLDAPディレクトリツリーのDNエントリを判断します。
- ldapcompare:DN値と指定されたパラメータ値が同じエントリに属しているかどうかを判定します。
- ldappasswd:OpenLDAPディレクトリツリーのユーザーエントリを修正してパスワードリセットを実現します。
- slaptest:slapd.confファイルまたはcn=configuration directoryを確認してください。
- slapindex:クエリ効率を高めるためにOpenLDAPディレクトリツリーインデックスを作成します。
- slapcat:データをOpenLDAP用のLDIFファイルに変換します。
LDAPADDコマンド
オプション | 形容 | -x | 簡単な認証を行う | -D | サーバーをバインドするのに使われたDN | -h | ディレクトリサービスのアドレス | -w | DNパスワードをバインドする | -f | エントリ追加にLDIFファイルを使用するファイル |
まず、以下のコマンドでtest.ldiフファイルを準備します。
内容は以下の通りです:
dn: uid=xzz,ou=Users,dc=itsvse,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
homeDirectory: /home/itsvse_xzz
loginShell: /bin/bash
cn: xzz
uidNumber: 1000
gidNumber: 1000
sn: System Administrator
mail: xzz@itsvse.com
postalAddress: shanghai
mobile: 13788888888
以下のようにコマンドを追加してください:
パスワードを入力すると、以下の図のように正常に追加されます:
ldapmodifiedコマンド
ldapmodifiedコマンドは固定されており、主に設定ファイルを通じてさまざまな修正機能を実装します。
demo.ldifファイルは以下の通りで、ユーザーuid=xzzのuidNumberパラメータが変更されていることを意味します。
LDAPPASSWD司令部
ldappasswdはLDAPサーバーへの接続を開き、エントリーパスワードを変更します。
オプション | 形容 | -x | 簡単な認証を行う | -D | サーバーをバインドするのに使われたDN | -w | DNパスワードをバインドする | -S | パスワードを入力するよう促されました | -s | パスを通過させるためにパスワードを設定する | -ある | パスは古いPASSWDをパスに設定した | -ある | 古い passwd の設定を促す | -H | はバインドされるサーバーを指します | -私 | SASLセッションメソッドをご利用ください |
LDAPSEARCHコマンド
LDAPサーチコマンド
[root@VM_0_9_centos ~]# ldapsearch -h
ldapsearch: option requires an argument -- 'h'
ldapsearch: unrecognized option -h
usage: ldapsearch [options] [filter [attributes...]]
where: フィルター RFC 4515準正のLDAP検索フィルター 属性 ホワイトスペース分離された属性記述のリスト その中には以下が含まれます: 1.1 属性なし * すべてのユーザー属性 + すべての運用属性 検索オプション: - 決して(デフォルト)、常に、検索、または見つけるデレフ - A retrieve 属性名のみ(値なし) -b ベース 底 dn for search(探索用) -c 連続運転モード(エラーで停止しない) -E [!]<ext>[=<extparam>] 検索拡張子(! は重要性を示します) [!]domainScope(ドメインスコープ) !dontUseCopy(コピーを使わない) [!]mv=<filter>(RFC 3876マッチングバリューフィルタ) [!]pr=<size>[/prompt|noprompt](RFC 2696ページ結果/プロンプト) [!]sss=[-]<attr[:OID]>[/[-]<attr[:OID]>...] (RFC 2891サーバー側ソート) [!]サブエントリ[=true|false](RFC 3672サブエントリ) [!]sync=ro[/<cookie>](RFC 4533 LDAP Sync refreshOnly) rp[/<cookie>][/<slimit>] (refreshAndPersist) [!]VLV=<before><after>/(/<offset>/<count>|<value>:) (LDAPV3-VLV-09 バーチャルリストビュー) [!]deref=derefAttr:attr[,...][; derefAttr:attr[,...][; ...]] [!]<oid>[=:<b64value>](ジェネリックコントロール; 応答なし) -f ファイル 'file' からの読み取り操作 -ファイル用F接頭辞 URL プレフィックス(デフォルト:file:///tmp/) - 探索の時間制限(秒単位、または「なし」または「最大」)を制限します - LDIFv1形式のプリント応答 -LL コメントなしでLDIF形式の応答を印刷 - LLLはコメントなしのLDIF形式で応答を印刷します およびバージョン -M 有効化 DSA IT 制御管理(-MM でクリティカル化) -Pバージョンプロトコルバージョン(デフォルト:3) -sスコープはベース、1、サブ、または子(サーチスコープ)の1です。 -S attr は結果を属性「attr」で並べ替えます -t は一時ディレクトリ内のファイルにバイナリ値を書き込む -tt 一時ディレクトリ内のファイルにすべての値を書き込む -t path パス パス(デフォルト:/tmp)で指定されたディレクトリにファイルを書き込む -uは出力にユーザーフレンドリーなエントリ名を含めます -z サイズ制限(エントリ数、または「なし」または「最大」)で検索 一般的な選択肢: -d レベル LDAP デバッグレベルを「レベル」に設定します -D binddn bind DN -E [!]<ext>[=<extparam>] 一般拡張(!は臨界を示します) [!]主張=<filter>(RFC 4528; RFC 4515フィルター文字列) [!]authzid=<authzid> (RFC 4370; 「dn:<dn>」または「u:<user>」 [!]チェインニング[=<resolveBehavior>[/<continuationBehavior>]] 「chainingPreferred」「chainingRequired」のいずれかの1つ、 「推薦優先」、「紹介必須」 [!]manageDSAit(RFC 3296) [!]NOOP 政策 [!]postread[=<attrs>](RFC 4527; カンマ区切りATRリスト) [!]preread[=<attrs>](RFC 4527; カンマ区切りATRリスト) [!]落ち着いて [!]セッショントラッキング 放棄、キャンセル、無視(SIGINTが放棄/キャンセルを送信、 あるいは応答を無視したり、 重要な場合はSIGINTを待たずに。 コントロールというよりは) -h ホスト LDAP サーバー - H URI LDAP 一様リソース識別子 -私はSASLインタラクティブモードを使っています -何が行われるかは示すが、実際にはやらない -N SASLホスト名の正統化にリバースDNSを使用しません -O props SASLセキュリティプロパティ -o <opt>[=<optparam>] 一般的な選択肢 nettimeout=<timeout>(秒単位、または「なし」または「最大」) ldif-wrap=<width>(列で、またはラップなしの場合は「no」) -pポートのLDAPサーバー -Q SASL 静音モードを使え -R領域 SASL領域 -U authcid SASL 認証識別 -Vは詳細モードで実行(診断を標準出力に変換) -Vプリント版情報(-VVのみ) -w passwd bind password (for simple authentication) -W プロンプト バインドパスワード -x シンプル認証 - X authzid SASL 認可識別子("dn:<dn>" または "u:<user>") -yファイルからパスワードを読み取る -YメカSASL機構 -Z TLSリクエスト開始(-ZZで応答を要求) コマンドは以下の通りです:
クエリ結果は以下の通りです:
全ユーザーにクエリ:
LDAP名詞の説明
オブジェクトクラス
LDAPオブジェクトクラスはLDAPに組み込まれたデータモデルです。 各objectClassには独自のデータ構造があります。例えば、「Phone Book」というobjectClassは、名前(uid)、ID番号(uidNumber)、ユニット名(gid)、ホームアドレス(homeDirectory)など多くの組み込み属性を持ちます。同時に、「Classmate Record」と呼ばれるobjectClassもあり、「電話帳」があります 一部の属性(例えばuid、homeDirectory)には「電話帳」にはない属性(説明など)も含まれます。
エントリー
エントリはエントリと呼ばれ、エントリはレコード、LDAPの基本的な記憶ユニット、 また、DNの集合と属性の集合とも考えることができます。 1つのエントリに複数のobjectClassesを含めることができます。例えば、zhang3は「電話帳」や「クラスメイト記録」に同時に存在できます。
DN
LDAPにおける唯一の識別名、完全なDN綴り:uid=zhang3, ou=People, dc=163, dc=com。 LDAPサーバーによって一意なのはLDAPのエントリだけです。
LDAPサーチフィルター
フィルターを使ってLDAPを検索してください。 フィルターは一般的に(attribute=value)のような単位で構成されます。例えば、(&(uid=ZHANGSAN)(objectclass=person))は検索ユーザーのLDAPエントリがZHANGSANであることを示します。別の例は次の通りです:(&(|( uid= ZHANGSAN)(uid=LISI))(objectclass=person))、これは検索IDを持つユーザーの検索がZHANGSANまたはLISIであることを示します。 また、*を使って(uid=ZHANG*SAN)などの任意の値を表現したり、ZHANGからSANで終わるuid値のエントリを検索することもできます。 さらに、異なるLDAP属性マッチングルールによれば、以下のフィルターが存在することもあります:(&(createtimestamp>=20050301000000)(createtimestamp<=20050302000000)))であり、これは検索作成時間が20050301000000から20050302000000の間であることを示します。
フィルターでは「&」は「そして」を意味し、 “!” 「ない」という意味です。 “|” 「または」という意味です。 マッチングルールによっては「=」「~=」「>=」「<=」を使えます。
基本DN
ベースDNは「dc=163,dc=com」または「dc=People,dc=163,dc=com」といえます。 LDAPは木構造データ構造であるため、ベースを指定した後はBaseDNから検索を開始し、検索範囲は「only search basedn(ベース)、basedn directサブレベル(1レベル)、およびすべてのサブツリーレベルをbasedn」と指定できます。
objectClass
LDAPでは、エントリにobjectClass属性が含まれ、少なくとも1つの値が割り当てられなければなりません。 各値はLDAPエントリによるデータ保存のテンプレートとして使用されます。 テンプレートには、エントリに割り当てるべき属性とオプション属性が含まれています。 objectClassは厳格な階層構造を持ち、トップとエイリアスが最上位にあります。 例えば、organizationalPersonのobjectClassはpersonに従属し、personはtopに従属しています。
objectClassは以下の3つのカテゴリーに分けられます: 構造的:例えば、人物や組織単位; 補助詞:例えばextensibeObject; 抽象:例えば、抽象オブジェクトクラスは直接使用できません。 OpenLDAPスキーマには多くのobjectClassが定義されており、よく使われるobjectClassの名前は以下に示します。
- アカウント
- 別名
- DCオブジェクト
- ドメイン
- ipHost
- 組織
- 組織の役割
- 組織単位
- 人物
- 組織人
- inetOrgPerson
- 居住者
- posixAccount
- posixGroup(ポジックスグループ)
ObjectClassは属性の集合であり、LDAPは人間の組織でよく使われる多くのオブジェクトをカプセル化し、それらをオブジェクトクラスにカプセル化します。 例えば、人員には姓(sn)、名前(cn)、電話番号(phoneNumber)、パスワード(userPassword)などの属性が含まれ、organisationalPersonは相続クラスの人物です。上記の属性に加え、肩書き、郵便番号(postalCode)、郵送先住所(postalAddress)も含まれますその他の属性も含まれます。
アイテムタイプはオブジェクトクラスを通じて簡単に定義できます。 各エントリは複数のオブジェクトクラスを直接継承でき、それぞれがさまざまなプロパティを継承します。 同じ属性を持つオブジェクトクラスが2つある場合、エントリが継承された後に保持されるのは1つの属性のみです。 オブジェクトクラスはまた、どのプロパティが基本情報であり含めるべき(必須)か、どのプロパティが拡張情報で含めてよいか(MayまたはOptional)も指定します。
オブジェクトクラスには構造的、抽象的、補助的な3種類があります。 構造型は最も基本的な型で、オブジェクトボディの基本的なプロパティを指定し、各エントリは1つの構造オブジェクトクラスにのみ属します。 抽象型は構造型や他の抽象型の親であり、オブジェクトプロパティの共通部分をまとめて整理するもので、他のクラスのテンプレートと呼ばれます。エントリは抽象オブジェクトクラスを直接統合することはできません。 補助型はオブジェクトエンティティの拡張プロパティを指定します。 各バーは1つの構造オブジェクトクラスにのみ属しますが、同時に複数の補助オブジェクトクラスに属することができます。
オブジェクトクラス自体は互いに継承し合うことができるので、オブジェクトクラスの根のクラスは最上位の抽象オブジェクトクラスです。 一般的に使われる人々のタイプを例に取ると、彼らの相続関係は図のように示されています。
accoutの組み込み属性は以下の通りです:userid、description、host、localityName、organizationName、organizationalUnitName、seeAlso;
inetOrgPersonの組み込み属性はcn、sn、description、seeAlso、phoneNumber、userPassword、destinationIndicator、facsimileTelephoneNumber、internationaliSDNNumber、l、ou、 physicalDelivery OfficeName、postOfficeBox、PostalAddress、PostalCode、preferredDeliveryMethod、registeredAddress、st、street、電話番号、teletexTerminalIdentifier、 telexNumber、title、x121Address、audio、usinessCategory、carLicense、departmentNumber、isplayName、employeeNumber、employeeType、givenName、homePhone、homePostalAddress、イニシャル、 jpegPhoto、labeledURI、mail、manager、mobile、o、pager、photo、preferredLanguage、roomNumber、secretary、uid、userCertificateなど;
ご覧の通り、accoutは必要かつ有用な属性をいくつかプリセットするだけで(ログイン認証を完了するには十分です)、一方inetOrgPersonは電話番号、携帯電話番号、住所、メールアドレス、メールアドレス、部屋番号、アバター、マネージャー、社員番号など多くの属性を内蔵しています。
したがって、LDAPの設定時には、ログイン確認のみの目的であればobjectClass typeをaccoutに設定し、大量の従業員情報を作りたい場合はobjectClassをinetOrgPersonに設定することを推奨します
ここでは通常「inetOrgPerson」「posixAccount」「shadowAccount」を使っています。
accountの必要な属性はuseridであり、posixAccountの必要な属性はcn、gidNumber、homeDirectory、uid、uidNumberです。 shadowAccountの必須属性はuidで、オプションの属性にはshadowExpire、shadowInactive、shadowMax、shadowMin、userPasswordなどがあります。 最上位に必要なプロパティはobjectClassです(topや他のobjectClassは継承された関係であることがわかります)。
属性
属性はプログラミング中の変数に似ており、割り当てることができます。 多くのよく使われる属性はOpenLDAPで宣言されており(ユーザーは自分の属性を定義することも可能です)。 一般的な属性の意味は以下の通りです:
- c: カントリー。
- cn:一般的な名前で、物体の名前を指します。 もし人を指す場合は、そのフルネームを使う必要があります。
- DC:ドメインコンポーネントは、ドメイン名の一部を指す際によく使われます。
- ギヴネーム:姓ではなく、人の名前を指します。
- l: 都市名やその他の地理的地域名などを指します。
- 郵便:メールアドレス。
- o:organizationName(組織名)は組織名を指します。
- ou:organizationalUnitName(組織単位名)は、組織単位の名称を指します。
- SN:姓は人の姓を指します。
- 電話番号:所在国のコードが記載されている電話番号です。
ヒント:objectClassは、他の使用される属性だけでなく自分自身も含む特別な属性です。
異なる objectClasses には、通常必要なプロパティ値とオプションのプロパティ値が存在します。 例えば、objectClassを使ってシステム内のユーザーのエントリを表現でき、そのユーザーは通常、名前、電話番号、パスワード、説明などの情報を持っている必要があります。 下の画像に示すように、personの場合は必須のcnとsnでユーザーの名前と姓を設定しますが、他の属性は任意です。
以下は、一般的に使われる objectClass の要件の一覧です。
- account:userid。
- organization:o。
- 人物:CNおよびSN。
- organizationalPerson:人と同じです。
- organizationalRole:cn。
- organizationUnit:ou。
- posixGroup:cn、gidNumber。
- posixAccount:cn、gidNumber、homeDirectory、uid、uidNumber。
(終わり)
|