概要
Ruby に net-ldap というライブラリがあり、これを使うと Ruby から ldap の操作ができます
今回は初期設定と接続まで行ってみました
ldap サーバの構築に関しては過去の記事を元にしています
環境
- CentOS 7.3.1611
- openldap 2.4.40
- Ruby 2.3.1p112
- net-ldap 0.16.0
事前準備
過去の ldap 構築記事で admin のパスワード設定、基本スキーマの登録、dc の登録、 ou の登録までは手動で済ませておいてください
もしかするとこれも Ruby から出来るかもですが今回は触れません
ライブラリインストール
- bundle init
- vim Gemfile
gem "net-ldap"
bundle install --path vendor/bundle
ldap に接続する
- vim connect.rb
require 'net/ldap'
require 'pp'
PORT = 389
HOST = '192.168.100.5'
BASE = 'dc=example,dc=com'
AUTH = {
:method => :simple,
:username => "cn=Manager,#{BASE}",
:password => 'password'
}
ldap = Net::LDAP.new(
host: HOST,
port: PORT,
base: BASE,
auth: AUTH
)
raise 'bind failed' unless ldap.bind
ldap は SSL を使っていないので 389 を指定します
HOST の部分は ldap サーバの IP または URL を入力してください
- bundle exec ruby connect.rb
でエラーがでなければ OK です
グループを操作してみる
せっかくなのでもう少し操作してみます
まずグループを追加してみましょう
先ほどの接続ロジック後に以下を記載してください
- group_add.rb
dn = "cn=group1,ou=Group,#{BASE}"
attr = {
:cn => 'group1',
:objectClass => 'posixGroup',
:gidNumber => '1000'
}
ldap.add(
:dn => dn,
:attributes => attr
)
pp ldap.get_operation_result
これで #<OpenStruct extended_response=nil, code=0, error_message="", matched_dn="", message="Success">
と表示されれば OK です
作成されたグループ名は group1 になり、ou=Group に属しています
最後の get_operation_result
は結構便利でエラーの場合、詳細が見れるのでこれで確認すると良いと思います
そしたらグループの一覧を取得してみましょう
- group_search.rb
groups = ldap.search(base: "ou=Group,#{BASE}")
pp groups
で以下のように表示されれば OK です
[#<Net::LDAP::Entry:0x000000023d3ec8
@myhash=
{:dn=>["ou=Group,dc=example,dc=com"],
:objectclass=>["organizationalUnit"],
:ou=>["Group"]}>,
#<Net::LDAP::Entry:0x000000023d3130
@myhash=
{:dn=>["cn=group1,ou=Group,dc=example,dc=com"],
:cn=>["group1"],
:objectclass=>["posixGroup"],
:gidnumber=>["1000"]}>]
あるグループだけ取得したい場合は以下のようにします
groups = ldap.search(base: "ou=Group,#{BASE}")
最後に
Ruby から ldap が操作できる net-ldap を使ってみました
ldap 自体クセが強いのでまずそれに慣れることからかなと思います
登録系に関しては ldif のフォーマットをそのまま Ruby のハッシュに落とし込んで実行するだけという感じです
取得系に関しては面倒くさいコマンドを発行する必要がなく取得できるのはうれしいです
ただ、クエリというか検索の条件は ldap のフォーマットを使わないといけないのが残念なところです
他の ldap 用のライブラリもあるのでそれを使えばもう少し簡単に使えるやつもあるかもしれません
0 件のコメント:
コメントを投稿