MastodonでLDAP認証を利用する
マストドンでは通常ローカルに認証情報を持つローカル認証を利用します。
しかし特殊な状況では外部の認証サービスを利用して認証を行うことができます。 Mastodon v3.1.4ではLDAP, PAM, CAS, SAMLに対応しています。
LDAP認証は実装された当初はバグっていたのですがいつの間にか改修されて使えるようになっていました。 LDAP認証を使う人はほとんどいないと思いますが、設定は解説がないので解説してみます。
LDAP認証設定
設定値は.env.production.sample
にあります。
# LDAP authentication (optional) # LDAP_ENABLED=true # LDAP_HOST=localhost # LDAP_PORT=389 # LDAP_METHOD=simple_tls # LDAP_BASE= # LDAP_BIND_DN= # LDAP_PASSWORD= # LDAP_UID=cn # LDAP_MAIL=mail # LDAP_SEARCH_FILTER=(|(%{uid}=%{email})(%{mail}=%{email})) # LDAP_UID_CONVERSION_ENABLED=true # LDAP_UID_CONVERSION_SEARCH=., - # LDAP_UID_CONVERSION_REPLACE=_
LDAP_METHOD
simple_tls
か start_tls
を選択できます。
実は LDAP_TLS_NO_VERIFY
というパラメーターが存在しており、 LDAP_TLS_NO_VERIFY=true
とすることでSSL/TLSで暗号化されないLDAPを利用することができます。
LDAP_BASE
ベース DNを記載します。
LDAP_BIND_DN
バインド DNを記載します。今のところ匿名バインド(anonymous bind)は設定できません。
LDAP_UID
MastodonのユーザーIDと対応させるLDAP属性を指定します。
一般的にはcn
でよいと思いますが、sAMAccountName
も使えるかもしれません。
LDAP_MAIL
メールアドレスが入っているLDAP属性を指定します。
LDAP_SEARCH_FILTER
LDAPの中からユーザーを探すときの検索フィルタを指定できます。 検索フィルタ自体の文法は RFC 4515を読んで頂くしかありません。
デフォルトでは
LDAP_SEARCH_FILTER=(|(%{uid}=%{email})(%{mail}=%{email}))
となっていますが、%{uid}
はLDAP_UID
で、%{mail}
はLDAP_MAIL
でそれぞれ置き換えられます。
%{email}
はログイン時にユーザーの入力したメールアドレスになります。
デフォルトの設定例ではLDAP認証時に
(|(cn=%{hoge@example.com})(email=hoge@example.com))
がフィルタとして利用されることになります。
LDAP_UID_CONVERSION_ENABLED
マストドンのユーザー名(username)には利用できる文字の制限があります。
使える文字は以下のようになっています。
/[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i
そうするとLDAPには存在するが、マストドンでは使えない文字が登場することがあります。 その場合にいい感じに変換してくれる機能がLDAP_UID_CONVERSIONになります。
LDAP_UID_CONVERSION_SEARCH
には、LDAPには存在するがマストドンでは使えない文字を指定します。
LDAP_UID_CONVERSION_REPLACE
にはそれらの文字が登場したときにマストドン上でのユーザー名に置き換える文字を指定します。
デフォルトの例だとLDAP上のユーザー名の中に含まれる., -
の3文字を_
で置き換えるようになります。
例えばLDAP上にkazuki-h
というユーザーがいた場合には、マストドン上でのユーザー名はkazuki_h
になります。
マストドンのユーザー名で使える文字種は増えているので使う機会はあまりないかもしれませんね。
LDAP認証を有効にするとどうなる?
新規登録が必要なくなる
マストドンに登録していない状態でログインすると、LDAP認証が成功すればその時点でユーザーアカウントが作成されます。 新規登録を「誰も許可しない」設定にしている場合でもLDAP認証によるアカウント作成は行うことができます。 このとき認証メールは送信されません。
運用途中でLDAP認証を有効にした場合は?
途中でLDAP認証を有効にした場合は、ローカル認証とLDAP認証が両方有効になった状態になります。 まず最初にLDAP認証でパスワードの確認が行われ、LDAPが通らなかった場合はローカルでの認証が行われます。 既存のユーザーはLDAPのパスワードも、ローカルのパスワードも両方使うことができます。 またLDAPには存在しないユーザーも残しておくことができますし、新規に作成することもできます。