いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.211 / 読者数:1974名

こんばんは、うすだです。

諸般の事情により、毎月、いくつかの雑誌が我が家に届きます。

某所で書かせていただいている、 あるいは過去に書かせていただいたため無料で届くものもあれば、 年間購読しているものもあります。

さらに、原稿のネタや技術的興味のため購入した本や雑誌などもあり、 机のまわりに積み上げていたところ、メモリやHDDの容量の法則のように、 空きスペースがだんだんなくなってきました。

雑誌はどうにかして処分してしまえばよいのですが、 やはり今どきの雑誌の記事は読むと勉強になることが多いですので、 すぐ処分するのはなぁ…という気がしてしまいます。
(そう言って、ほとんど全部保管する羽目になってしまうのですが…。)

しかし、このままでは、ノートPCの置き場所もなくなってしまいかねない状況ですので、 年内までになんとかせねば…と思っている次第です。

実はもう、ノートPCの下にも雑誌が積んであるので、 手遅れ感が漂ってはいるのですが、今日のところははりきってまいりたいと思います。

今回のお題 - SASL認証を活用する

前回は、saslauthd を動かしたところで終わってしまいました。

Vol.210 - SASL認証を使ってみる
http://www.usupi.org/sysad/210.html

これで、今回まったく別のテーマを取り上げたら暴動が起きると思いますので、 続きをご紹介させていただきます。
今回のラインナップは、以下の通りです。

saslauthd が扱える認証機構

前回、とりあえず的に動かしたときは、認証機構に「shadow」を指定していました。 ですが、他にもいくつかの認証機構を扱えます。
簡単にご説明しておきましょう。

getpwent
パスワード情報を取得する「getpwent」という関数を使用して、 情報を入手します。ローカルのファイル(/etc/passwd)のみ参照する設定で、 /etc/shadowにパスワードが記述されている場合は、認証できません。
kerberos4, kerberos5
Kerberos認証というものを使います。
今は理解と環境がないため、ご紹介できません。すみません。
pam
PAM(Pluggable Authentication Modules)を使用します。
PAMにつきましては、過去のどこかの紹介か、Googleさまなどに伺ってくださいませ。
rimap
IMAPサーバを利用して認証を行います。 「-O」オプションでIMAPサーバを指定すると、 そのサーバにIMAPでログインすることで確認します。
shadow
/etc/shadowを参照します。
sasldb
SASL独自のデータベースを使用します。
svnserve のところで使い方をご紹介します。
ldap
LDAPサーバに問い合わせて認証を行います。
今は理解と環境がないため、ご紹介できません。すみません。

他にも、dce とか sia とかありますが、Linux は対象外ですので、 ここでは割愛させていただきました。

Postfix のSMTP AUTHで使ってみる

それでは、テストではなく実際に使ってみましょう。

SASLがもっとも使われるのは、SMTP AUTHではないかと思います。
SMTP AUTHとは、SMTPでメールを送信する際の拡張機能で、 ユーザ認証を行うことができます。たとえば、SMTP AUTHで認証を受けたひとは、 社外からでもリレーしてもらえるといったことが可能となります。

ここでは、Postfix にSMTP AUTHの設定を追加してみます。

ちなみに、Ubuntu 11.10では、 saslauthd の問題により動作しないという情報を得ております。
(実際、延々と試してうまくいかなかった後、 そのページを発見して愕然とさせていただきました…。)

まず、/etc/postfix/main.cf などに、以下の設定を追加します。

  smtpd_sasl_auth_enable = yes

…基本的にはこれだけです。ただ、 たとえばSMTP AUTHで認証を通った人がリレーしまくれるようにするには、 「smtpd_recipient_restrictions」に「permit_sasl_authenticated」を追加します。

  smtpd_recipient_restrictions = permit_mynetworks, \
  permit_sasl_authenticated, ...

そして、以下のようにserviceコマンドでcheckして、特に文句がなければreloadします。

  # service postfix check
  # service postfix reload

認証されるかどうか、telnetコマンドで試してみましょう。

  $ telnet メールサーバ 25
  ...
  220 centos56.local.usupi.org ESMTP Postfix
  EHLO localhost                           <== EHLOする
  250-centos56.local.usupi.org
  ...
  250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5
  ...
  AUTH LOGIN                               <== LOGINで認証に挑戦
  334 VXNlcm5hbWU6
  dXNlcg==                                 <== ユーザ名のBASE64
  334 UGFzc3dvcmQ6
  cGFzc3dvcmQ=                             <== パスワードのBASE64
  235 2.0.0 Authentication successful

最初に「EHLO」コマンドを送信して、拡張機能の一覧を得ます。
「250-AUTH PLAIN LOGIN ...」とあるのが、SMTP AUTHで使用可能な認証の種類です。 ここでは単純な「LOGIN」を試しています。
ユーザ名とパスワードは、BASE64でエンコードした値を渡します。 例えばnkfコマンドで以下のように変換できます。

  $ echo -n user | nkf -MB
  dXNlcg==

ちなみに、PLAIN の場合は、 「ユーザ名\0ユーザ名\0パスワード」という文字をBASE64でエンコードした値を一気に渡します。

  ...
  AUTH PLAIN dXNlcgB1c2VyAHBhc3N3b3Jk
  235 2.0.0 Authentication successful
  ...

BASE64でエンコードした値は、以下のようにして求められます。

  $ printf "user\0user\0password" | nkf -MB
  dXNlcgB1c2VyAHBhc3N3b3Jk

LOGIN も PLAINも、ユーザ名やパスワードをBASE64でエンコードしているだけですので、 生で送っているようなものです。

これに対して、CRAM-MD5 や DIGEST-MD5 は、 サーバからのランダムな値にユーザ名やパスワードを含めて MD5 値を計算し、 送ります。
そのため、パスワードなどが漏洩する危険性は、グッと減ります。

ただ、だから安心…というわけでもありませんので、 SSL経由で行うなどの対処は行ったほうがよいように思います。

svnserve でも使ってみる

後半部分がだいぶ脱線してしまいました。

さて、もうひとつの例として、 Subversion のリポジトリへのアクセスを担う「svnserve」でSASLを使ってみたいと思います。

リポジトリを作成すると、以下のように、 「svnserve.conf」という設定ファイルが作られます。

  # svnadmin create /home/svnroot
  # ls /home/svnroot/conf/
  authz  passwd  svnserve.conf

このファイルの「general」セクションの「realm」に適当なドメイン名を指定し、 「sasl」セクションで「use-sasl」をyesと指定すると、 SASLが使用されるようになります。

  [general]
  realm = test.usupi.org
  [sasl]
  use-sasl = true

ただし、svnserveの場合、データベースを直接参照する設定になっているようです。 そのため、「saslpasswd2」コマンドで登録します。
(saslauthdが動作していなくても、svnserveによる認証が成功します。)

  saslpasswd2 -a アプリケーション名 -u realmの値 ユーザ名

たとえば、svnserve用に usu ユーザを追加するには、以下のように実行します。

  # saslpasswd2 -a svn -u test.usupi.org usu

データベースファイルは「/etc/sasldb2」です。
「sasldblistusers2」コマンドで、登録内容を確認できます。

  # ls -l /etc/sasldb2
  -rw-r----- 1 root root 12288 11月 19 22:27 /etc/sasldb2
  # sasldblistusers2 
  usuda@test.usupi.org: userPassword

あとは、svnserve を再起動して、認証が必要となるアクセスをしてみるだけです。

  # service svnserve restart
  $ svn mkdir -m test svn://svnserver/foo/bar/buz
  認証領域: <svn://svnserver:3690> test.usupi.org
  'usu' のパスワード: 
  ...

おわりに

以上、SASL認証を実際に使ってみる設定を、少しご紹介しました。

svnserve に関しましては、/etc/sasl2/svn.conf に設定を書くことで、 saslauthd に問い合わせるようにできると思ったのですが、うまくいっておりません。

というわけで、まだまだ調べるべきことはあるようです。
また進展が見られましたら、ご紹介したいと思います。

宿題の答え

前回の宿題は、

  saslauthd との通信には何を使っているのか調べてみましょう。

でした。

実は、オンラインマニュアル(man saslauthd)を見れば一目瞭然だったりするのですが、 ここは strace コマンドで地道に追いかけてみたいと思います。

  # strace testsaslauthd -u user -p password
  ...
  socket(PF_FILE, SOCK_STREAM, 0)         = 3
  connect(3, {sa_family=AF_FILE, path="/var/run/saslauthd/mux"}, \
  110) = 0
  writev(3, [{"\0\4user\0\8password\0\4imap\0\0", 25}], 1) = 25
  read(3, "\0\2", 2)                      = 2
  read(3, "OK", 2)                        = 2
  close(3)                                = 0
  write(1, "0: OK \"Success.\"\n", 170: OK "Success."
  )    = 17
  exit_group(0)                           = ?

どうやら、「/var/run/saslauthd/mux」というUNIXなドメインソケットを開いて、 読み書きしているようです。
そのやりとりも、「Simple」という名がついているだけあって、 ほんとにシンプルなやりとりをされているようですね。

というわけで、UNIXドメインソケットを使っている、が正解でした。

今回の宿題

今回の宿題は、

  SASL認証が意図した通りに動かないときのデバッグ方法について考えて
  みましょう。

です。

…す、すみません、いま思いつきました。

アプリケーション側でなく、saslauthd 側でどのようなログが出力されるのかなどを、 調べてご紹介できたらと思っております。(見切りですが…)

あとがき

先月の16日から、某所で展示していたものを、本日撤収しました。

ネットではすべて公開させていただいているわけですが、 そのうち出来のよいものを展示して、どんな反応が得られるか、 お客さんの生の反応などが得られたのは、貴重だったと思います。
(正確には、お客さんに直接お会いする機会はなく、 お店の方から伺った情報が貴重だった、ということなのですが…。)

仕事でも、リモートで作業を行い、メールで報告して確認していただいておしまい、 という場合よりも、現地でインストールして、 担当の方にお話を伺ったりするほうが、いろいろ得られることが多いです。

ですので、仕事でも仕事でなくても、直接お会いできる機会を設けられるようにして、 生のリアルな情報を入手して、今後に反映していこうと思います。

 

…ああ、オチが何も思い浮かびませんでした。
まあ、くだらないオチはなくってもいいですよね…。

 

今回も、ここまで読んでいただき、たいへんありがとうございました。
次回は、12月4日(日) の未明にお会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」- 展示終わりました。リアルな評価が糧になります。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本