気ままなつぶやき

おべんきょしたこととか

【maven】nexusのLDAP認証

ω・`)

最近、読んだ本のまとめばっかりだった希ガス
まだ途中のものばかりで公開していないけどw


LDAP認証の設定方法について。

以前はnexusのアカウント管理を、
nexus側でしていたんだけど、利用者も増え、いちいちアカウントを作成するのが
めんどうになってきたのでLDAPで管理するようにしました。

ただ、LDAPのユーザ全員が操作できるわけでなく、利用者をディベロッパーに制限した。

LDAP認証の設定自体はすんなりいくと特段難しい事はないんだけど
エラーメッセージが不親切なのでつまずくとうっとおしかったなぁ・・・(´*ω*`)。


LDAPの設定

ここでLDAPの設定をする。
これをしないと話にならぬ。

管理ユーザでログインして、Security項目のLDAP Configurationをクリックすると
LDAPの設定ページが表示される
f:id:pnsk:20121130092208p:plain

設定内容は、
1. LDAPサーバへのコネクションの設定
2. ユーザのマッピングの設定
3. グループのマッピングの設定(この設定は、必須ではない)

って大きくこんな感じ。

1. LDAPサーバへのコネクションの設定

f:id:pnsk:20121130092514p:plain

hostnameにはIP直接入れた。ホスト名でもよい
portはldapのデフォポート:389
別のポートで設定されている場合は、それを指定すればよい

「Search Base」は、ユーザやグループのマッピングの設定をするときの
ルートディレクトリを設定している。


【Check Authentication】ボタンで設定が間違えていないかチェックできちゃう
f:id:pnsk:20121130092746p:plain

2. ユーザのマッピングの設定

LDAPのユーザ情報を取得しまふ。
f:id:pnsk:20121130093108p:plain

Base DNにou={organization unit}と書いているけれど{}の部分は任意のouの値を入れる
ここでBase DNは、さっき指定したSearch Baseより下層部のディレクトリである必要がある

ObjectClassやUser Id属性、RealName属性は、ldap情報から利用したい属性を使う。
ObjectClassは属性の集合体を表す。利用したいldapの集合体を指定してやれば、
その集合体に属するldapのユーザ情報とマッピングが可能になる。

userIdはuidだろうがcnだろうが何を指定しても実はかまわない。
ただし、これがnexusにログインする際のidになるので適切なものを指定する必要がある。
※uidが妥当かなー。

RealName属性は、そのままで「実名」。
nexusでユーザ情報一覧を表示したときに、表示される単なる個人名。
これも個人が特定できるものであれば、適切なものを指定すればいい。

どの値を指定するかは、自分の利用しているldapの情報をldapsearchコマンドなどで確認すると良い。
こんな感じでコマンドたたくとuid=pnskのldap情報が取得できマフ。
ldapのクライアントをインストールしている場合

$ ldapsearch -x -h xxx.xxx.xxx.xxx "uid=pnsk"

xxx.xxx.xxx.xxxはLDAPサーバのIPを指定してくらさい

3. グループのマッピングの設定

f:id:pnsk:20121201135234p:plain

これは、任意のグループにのみ、nexusの権限とマッピングしたいので設定した。

groupId属性は、任意のグループのIdを示すもの(例:gidとか)。
groupMember属性は、任意のグループのユーザを示す。
Group Member Formatは、今回はcnがdeveloperだけに権限を付与したいため固定値とした。

権限(role)のマッピング

roleの作成

ldapのグループと、nexusの権限のマッピングを作成する
上述したグループのマッピング設定のdeveloperとマッピング。

Security項目のRolesを選択する
f:id:pnsk:20121130092208p:plain

[Add]>[External Role Mapping]をクリックする
f:id:pnsk:20121202134919p:plain

マッピングを作成するポップアップが出るので
RealmにLDAPを指定し、RoleでマッピングしたいLDAPのグループを選択する。
今回は、developerになる(※上記で設定したやつ)
f:id:pnsk:20121202135208p:plain

以下で新規作成。
f:id:pnsk:20121202135855p:plain

今回はLDAPアカウントのdevelopersに属するユーザにnexusの下記の2つの権限を与えた。

  • 「Deployment and Artifact Upload Role」
  • 「Repo: All Repositories (except delete operation)」

どっちもカスタマイズした権限だよ(。´・ε・`。)

これで設定完了。

LDAPに登録しているユーザであれば、
nexusにログインできて、artifactのアップロードとかができるようになったよ(・ε・)