徒然日記
2006年8月12日(土) [長年日記]
■ ldapでlogin shellをしばる方法
どこにも(英語でぐぐっても)書いてなかったのでせっかくなんで書いてみる
どういう局面で使うかというと
- ユーザがたくさん居るので、認証は/etc/passwdには何も書かず、ldapだけで済ませたい
- でもユーザにshellは使わせたくない
- かといってloginできなくするとscpが出来ない
- なのでscponlyを使いたい
- ユーザはldapで各々違うlogin shellを設定しているので/bin/bashを差し替える、といったことも出来ない
というかなり特殊な状況(汗
こんな状況に陥ったのはIMAP serverでmailのフィルタリングのルールファイル(~/.procmailrcとか)をscpで置かせたかったから
■ 認証のレイヤ
Linuxの(最近のFreeBSDもか?)認証はpamを中心としている
でも、それだけじゃぁ完結しなくて、今回は(open)ldap, pam, nss, sshなどが絡んでくる。図で表すとこんなな感じ?
ユーザ ↓↑ ----------------------------------- | ssh, login, telnet, console, .... | ----------------------------------- ↓↑ ↑↓ ----------------- --------------- ------------- | pam | | nss | | ldif | ----------------- --------------- ------------- ↓↑ ↑↓ ↓ ----------------------------------- ------------- | ldap client | <=> | ldap server | ----------------------------------- -------------
ldif以外の5つで設定ポイントがあるような(途方
一つずつ見ていった
- pam
Pluggable Authentication Modulesの略
認証の中核を担う。uidと認証の可否を取り扱うのみ
設定ファイル: /etc/pam.d
- nss
Name Service Switchの略
/etc/passwdに書いてある、uid, password以外の情報のやりとりを担う
設定ファイル: /etc/nsswitch.conf
- ldap client
pam/nssからのリクエストに基づいてldap serverとのやりとりをする
設定ファイル: /etc/ldap.conf
- ldap server
ldifに記述された情報をldap clientに返してやる
設定ファイル: /etc/ldap.conf
ってところかな。
で、結局どこで設定するかというと、/etc/ldap.confで。
nss_map_attributeという設定があって、これでldapから流れてくる情報をoverrideできる。てっきりnssの設定かと思ってたよ…
なので/etc/ldap.confに以下のような行を追加してやればよい
nss_map_attribute loginShell /user/bin/scponly