«前の日記(2006年7月29日(土)) 最新 次の日記(2006年8月14日(月))» 編集

徒然日記


2006年8月12日(土) [長年日記]

ldapでlogin shellをしばる方法

どこにも(英語でぐぐっても)書いてなかったのでせっかくなんで書いてみる

どういう局面で使うかというと

  1. ユーザがたくさん居るので、認証は/etc/passwdには何も書かず、ldapだけで済ませたい
  2. でもユーザにshellは使わせたくない
  3. かといってloginできなくするとscpが出来ない
  4. なのでscponlyを使いたい
  5. ユーザは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




«前の日記(2006年7月29日(土)) 最新 次の日記(2006年8月14日(月))»