そろそろLDAPにしてみないか?

第4回 UNIXアカウント以外でLDAP

この記事を読むのに必要な時間:およそ 3 分

よって,これらをまとめるとリスト2のようなLDIFを作成すれば良いことがわかります。userPassword属性については,例のごとくslappasswdコマンドにて作成された文字列を使用しています。

リスト2 ftpuser.ldif

dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: example

dn: ou=FTPGroup,dc=example,dc=com
objectClass: organizationalUnit
ou: FTPGroup

dn: ou=FTPUser,dc=example,dc=com
objectClass: organizationalUnit
ou: FTPUser

dn: cn=sales,ou=FTPGroup,dc=example,dc=com
objectClass: posixGroup
cn: sales
gidNumber: 10000

dn: cn=ftpuser, ou=FTPUser, dc=example, dc=com
objectClass: posixAccount
objectClass: account
cn: ftpuser
uid: ftpuser
userPassword: {SSHA}uuj0BIaaMIPrmjBZy8NBD0kTB7XSCSLb
homeDirectory: /home/ftproot/ftpuser
uidNumber: 10000
gidNumber: 10000

スキーマファイルの読み方に関しては,今後の連載で紹介していくつもりですので,今回はこのような簡単な説明でお許しください。

FTPサーバの設定

冒頭で述べたよう,FTPサーバを構築するためにはいくつかの選択肢が存在しますが,十分にLDAP認証をサポートしていると言えるのがProftpdです。CentOSではyumコマンドで直接導入することができないため,今回は図1のようにソースファイルからインストールを行いました。

図1 Proftpdのインストール

% tar xfv proftpd-1.3.0a.tar.bz2
% cd proftpd-1.3.0a
% ./configure --with-modules=mod_ldap
% make
# make install

proftpdの設定

ここでは必要最低限の設定のみを行います。

リスト3 /usr/local/etc/proftpd.conf

DefaultServer      on
RequireValidShell  off
LDAPServer         10.0.100.10
LDAPDoAuth         on "dc=example,dc=com" "(&(cn=%v)(objectClass=posixAccount))"
LDAPDoUIDLookups   on "ou=FTPUser,dc=example,dc=com"
LDAPDoGIDLookups   on "ou=FTPGroup,dc=example,dc=com"

Proftpdはさまざまなオプションを備えていますので,実際のサーバ環境に適用する場合にはそれ以外の項目にも十分注意してください。今回の必要条件としては次の通りです。

  • LDAP内のFTPユーザにシェルは必要ないためRequireValidShell offを定義
  • LDAPサーバの場所をLDAPServerで定義する
  • 検索ベースをdc=example,dc=comとし,検索条件を(&(cn=ユーザ名)(objectClass=posixAccount))とする(そこで見つかったユーザのDNとFTPセッションで入力されたパスワードを元に再度バインドを行い認証する)
  • ou=FTPUser,dc=example,dc=comツリー以下よりUID情報の検索を行う
  • ou=FTPGroup,dc=example,dc=comツリー以下よりGID情報の検索を行う

設定ファイル中のLDAPDoUIDLookupsとLDAPDoGIDLookupsは必須ではないのですが,このオプションが無い場合にFTPセッション中でls-laなどすると,次のように所有者と所有グループが不明な状態となります。

> ls -la
drwxr-xr-x   2 (?)      (?)          4096 Sep 11 07:48 .
drwxr-xr-x   3 root     root         4096 Sep 11 07:47 ..

これでは気持ち悪いので,それぞれのオプションを有効にしておく方が良いでしょう。そうすることで,

> ls -la
drwxr-xr-x   2 ftpuser  sales        4096 Sep 11 07:48 .
drwxr-xr-x   3 root     root         4096 Sep 11 07:47 ..

このような表示となりすっきりします。設定が終わったら図2のようにproftpdを起動して,クライアントから接続を行ってみてください。うまくいかないようであれば,proftpdをproftpd -d 10 -nのような形で起動させつつ認証を行い,トラブルシューティングを行います。LDAPサーバ側のログを確認することも忘れないでください。

図2 proftpdの起動

# /usr/local/sbin/proftpd

まとめ

Proftpdには今回紹介したオプション以外にも,基本的なところではLDAPProtocolVersion,LDAPQueryTimeoutなどがあります。おもしろいところでは,LDAP中に数値で指定されたQuotaを参照するためのLDAPDoQuotaLookupsや,ホームディレクトリを自動作成させるためのLDAPGenerateHomedirなど,ほかにもさまざまなものが用意されています。http://www.proftpd.org/docs/directives/linked/by-name.html

ftpEnabledなどといった独自の属性を定義して,

LDAPDoAuth         on "dc=example,dc=com" "(&(cn=%v)(objectClass=posixAccount)(ftpEnabled=1))"

とするのもおもしろそうですね。さまざまなオプションを組み合わせて,FTPとLDAPの連携を堪能してみてください!

著者プロフィール

中満英生(なかみつひでお)

大学時代に出会ったSolarisがきっかけでUNIXの世界へ。その後ホスティングプロバイダ,データセンターで実務経験を積む傍ら,雑誌記事の執筆や技術セミナーの講師を務める。サーバ設定の他,セキュリティに関する著作や技術者エッセイも執筆経験あり。