[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:24390] Re: potato の Exim で SMTPauthentication されている方おられますか?



佐野@浜松です。

 "SMTP authentication" ってやったことないので
単にドキュメント読んで気がついたことだけですが。

In <200010080423.NAA18914@xxxxxxxxxxx>,  on "Sun, 8 Oct 2000 13:23:28 +0900',
 須山 猛 <tsuyama@xxxxx> さん wrote:

> なお,ユーザー名はfoo,パスワードはhogeとします。また,このアカウントは
> Debianに登録済です。ユーザー名とパスワードは実際にはBASE64でエンコードし
> て送信されるようですので,上記のドキュメントにBASE64にエンコードする
> Perlのスクリプトがあったので,それを使いました。

 BASE64 encode って plain text password ですよね。

 spec.txt.gz でも info exim でもいいですけど (内容はどっちも同じみたい)
資料を読むと "The PLAIN authentication mechanism (RFC 2595)" の場合、
ネットワークをユーザー名とパスワードが暗号化されずに流れるわけなので、
ローカルユーザーのそれをそのまま使うのは危険というようなことが書いて
あるような気がします (誰かがネットワークパケットを集めて監視していたら、
ローカルユーザのアカウントをそのまま乗っとることができる、ということ)。

> >>> host in auth_hosts? yes (192.168.0.2)

これは auth_hosts の設定が有効だということですね。
ここまでは OK と。

> なお,これは/etc/exim.confに書いた
> 
>   fixed_login:
>     driver = plaintext
>     public_name = LOGIN
>     server_prompts = "User Name:: : Password::"
>     server_condition = "\
>       ${if and {{eq{$1}{ph10}}{eq{$2}{secret}}}{yes}{no}}"
>     server_set_id = $1
> 
> を根拠としています。私はてっきり,/etc/passwdや/etc/shadowをみているのだ
> と思いましたので,まさか,こんなところでユーザーやパスワードを設定すると
> は思いませんでした。

もしローカルユーザーのアカウントをそのまま使いたいのであれば、
plaintext よりも cram_md5 を使ったほうが良いのでは ? 
あるいはメール専用のユーザ名とパスワードを使うとかしたほうが
マシンごと乗っとられる危険をより少なくできそうな気が。

> また,今気付いたのですが,このドキュメントでは,ユーザー名をph10,
> パスワードをsecretとして記述されているような感じです。

このへんは info exim -> "The plaintext authenticator" ->
 "Using plaintext in a server (continued)" にある

     fixed_plain:
       driver = plaintext
       public_name = PLAIN
       server_condition = "\
         ${if and {{eq{$2}{ph10}}{eq{$3}{secret}}}{yes}{no}}"
       server_set_id = $2

(中略)

A more sophisticated instance of this authenticator could make use of
the user name in `$2' to look up a password in a file or database, and
maybe do an encrypted comparison (see `crypteq' in chapter "String
expansions"). Note, however, that the authentication data has traversed
the network in clear, albeit encoded as a base 64 string.

に説明されているような。最後の文の "Note" 以下についてじっくり
検討されることをお勧めします。

> とりあえず,こういう結果になりましたので,御報告させていただきました次第
> です。今までフォローしてくださいました方,どうもありがとうございました。
> 
> 引き続き/etc/passwdと/etc/shadowを使ったSMTP Authenticationに挑戦
> していくつもりですので,また,なにか進展がありましたら,御報告
> いたしたいと思います。 

上記にヒントがありますね。「"String expansions" を見よ」だそうです。

 info exim から同名のメニュー項目を辿っていくと

"Expansion items" という項目に

     "${<op>:<string>}"

The string is first itself expanded, and then the operation specified
by <op> is applied to it. For example,

     ${lc:$local_part}

     "${lookup{<key>} <search type> {<file>} {<string1>} {<string2>}}"

(中略)

     "${lookup <search type> {<query>} {<string1>} {<string2>}}"

These items specify data lookups in files and databases, as discussed in
chapter "File and database lookups". The first form is used for
single-key lookups, and the second is used for query-style lookups. The
<key>, <file>, and <query> strings are expanded before use.

(中略)

This example looks up the postmaster alias in the conventional alias
file.

     "${lookup {postmaster} lsearch {/etc/aliases} {$value}}"

なんて書いてありますね。

それから "Expansion conditions" という項目には

     "crypeq {<string1>}{<string2>}"

This operator included in the Exim binary if it is built to support any
authentication mechanisms (see chapter "SMTP authentication").
Otherwise, it is necessary to define SUPPORT_CRYPTEQ in
`Local/Makefile' to get `crypteq' included in the binary.

The `crypteq' condition has two arguments. The first is encrypted and
compared against the second, which is already encrypted. The second
string may be in the LDAP form for storing encrypted strings, which
starts with the encryption type in curly brackets, followed by the
data. For example:

     {md5}CY9rzUYh03PK3k6DJie09g==

If such a string appears directly in an expansion, the curly brackets
have to be quoted, because they are part of the expansion syntax. For
example:

     ${if crypteq {test}{\{md5\}CY9rzUYh03PK3k6DJie09g==}{yes}{no}}

Two encryption types are currently supported:

   * `md5' first computes the MD5 digest of the string, and then
     expresses this as printable characters by means of base64 encoding.

   * `crypt' calls the `crypt()' function as used for encrypting login
     passwords.


If the second string does not begin with `{' it is assumed to be
encrypted with `crypt()', since such strings cannot begin with `{'.
Typically this will be a field from a password file.

という説明があります。これらは "String expansions" の下にありますが、
ここからさらに参照されている "File and database lookups" は
 info exim のメインメニュー項目です。こちらも一緒に見ておくと
良いでしょう。

-- 
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)