[バックナンバーのトップへ] [Linux システム管理のトップへ] いますぐ実践! Linux システム管理 / Vol.172 / 読者数:1436名こんばんは、うすだです。 最近、ちょっとしたことでイライラしたり、腹を立てたりしております。
40歳間近という年齢だから、仕方がないのかもしれません。 ですので、そんなときは、とあるメルマガに書いてあった、 「このことは私に何を教えてくれているのか?」 と思うようにしています。 …はい、思うようにしているだけで、実際に思えているかどうかは、 また別の話です。そんな急激によくなれるものでもないですし。 いやいや、ですが、今後も、なるべく心がけるようにしたいと思います。 中途半端なオープニングですが、今回も、はりきってまいりましょう! 今回のお題 - sSMTP でメールを送信できるようにする過去に、いろいろなネタを取り上げてきた…つもりですが、馬鹿のひとつ覚え的に、 あらゆるところで何度も用いてきたモノと言いますと、 メールで通知する機能 ではないかと思います。 ですが、すべてのかたがたが、MTA(Mail Transfer Agent)の設定を行っていて、 Mailコマンド等で全世界のひとにメールを届けられるようになっている… とも限らないよなあという気が、ずいぶん前からしておりました。 ただ、ひとくちに MTA と申しましても、 これがデファクトスタンダードだと言えるモノがはっきりしないように思います。 かといって、メジャーな MTA をかたっぱしからご紹介していく、というのも大変です。 ですので、いままでは、設定されているという前提で、 Mailコマンド等を使用したネタをお送りしていました。 しかし、先日、送信だけを行う、sSMTP というモノの存在を知りました。
sSMTP sSMTP ですと、メールを送信するだけですので、 MUA(Mail User Agent)と同程度の設定を行うだけで、 使用することができるように思います。 というわけで今回は、sSMTP の設定方法を、ご紹介したいと思います。 まずはインストールからFedora や Debian 系のディストリビューションであれば、 パッケージが存在しますので、 いつものように yum や apt などでインストールすればよいと思います。 # yum install ssmtp (Fedora の場合) # apt-get install ssmtp (Debian,Ubuntu などの場合) そうでない貴兄は、お手数ですが、 似たようなディストリビューションのパッケージを試していただくか、 ソースコードからがんばってコンパイルなどしてくださいませ。
…おっと、Fedora をご使用の貴兄は、 sendmail といくつかのファイルがかち合いますので、 そのままでは ssmtp を利用することができません。 ですが、alternatives で切替えられるようになっていますので、 手動で ssmtp に切替えていただければ、ssmtp を使えるようになります。 現在の状況を確認してみますと、 # update-alternatives --display mta mta - status is auto. link currently points to /usr/sbin/sendmail.sendmail /usr/sbin/sendmail.sendmail - priority 90 slave mta-pam: /etc/pam.d/smtp.sendmail slave mta-mailq: /usr/bin/mailq.sendmail ... /usr/sbin/sendmail.ssmtp - priority 30 slave mta-pam: (null) slave mta-mailq: /usr/bin/mailq.ssmtp ... Current 'best' version is /usr/sbin/sendmail.sendmail.
sendmail や mailq などのコマンドが、
sendmail のものを使用するようになっています。 # update-alternatives --set mta /usr/sbin/sendmail.ssmtp # update-alternatives --display mta mta - status is manual. link currently points to /usr/sbin/sendmail.ssmtp ... そして、起動時に sendmail が動作しないように設定したい貴兄は、 以下を実行してください。 # /etc/init.d/sendmail stop (sendmail を即座に停止) # chkconfig sendmail off (sendmail の自動起動を止める) また、Mailコマンドがない場合は、mailx パッケージをインストールしてください。 # yum install mailx ちなみに、alternatives に関しましては、昔取り上げたことがありますので、 興味がおありでしたら、以下をご覧くださいませ。
Vol.150 - alternatives でいろんなものを共存させる 設定して送信してみましょう
sSMTP の設定ファイルは、/etc/ssmtp/ssmtp.conf です。
たとえば、
会社の所属組織のサブネット内にある SMTPサーバに丸投げをするだけでいい、
という場合は、Mailhub にSMTPサーバを、
Hostname に自分のホスト名を指定するだけです。 Mailhub=smtp.ng.usupi.org Hostname=test.usupi.org
早速、Mailコマンドを用いて、テストメールを送信してみましょう。 $ Mail -s test kuri@usupi.org This is a test. . EOT (ここで EOT ではなく Cc: と出たらリターンキーを押します)
なにかエラーめいたことを言われず終了した場合は、
おそらく送信されていると思います。 $ tail /var/log/maillog ... Jan 14 01:23:45 test sSMTP[PID]: Sent mail for usu@test.usupi.org \ (221 2.0.0 Bye) uid=12345 username=usu outbytes=462
ただ、送信元のメールアドレスが、ユーザ名@ホスト名 になります。 Mailhub=smtp.ng.usupi.org Hostname=test.usupi.org RewriteDomain=usupi.org
SMTP 認証を必要とする場合は、AuthUser にユーザ名、
AuthPass にそのユーザのパスワードを指定します。 Mailhub=smtp.ng.usupi.org:587 Hostname=test.usupi.org AuthUser=usu AuthPass=weak_password
上記の場合は、ユーザ名とパスワードをそのまま平文で送信します。 Mailhub=smtp.ng.usupi.org:587 Hostname=test.usupi.org AuthUser=usu AuthPass=weak_password AuthMethod=cram-md5 SMTP認証には他にも認証方式がありますが、残念ながら、 sSMTP では他の認証方式に対応していないようです。(LOGIN か CRAM-MD5 だけです。)
さらにちなみに、SSL を用いて送信する場合は、UseTLS を指定します。 Mailhub=smtp.ng.usupi.org:465 Hostname=test.usupi.org AuthUser=usu AuthPass=weak_password UseTLS=YES
ところで、ssmtp.conf には、SMTP認証のためのパスワードを、
そのまま記述する必要があります。 それじゃあ、root だけが読めるようにすればよいですよねと思い、 # chmod 600 /etc/ssmtp/ssmtp.conf などとしてみたのですが、そうしますと、 root以外の一般ユーザがメールを送信しようとしたときに、 ssmtp.conf を参照できなくなり、エラーになってしまいます。 ですので、苦渋の選択として、root と自分だけが送信できればよい、 と割り切って、ssmtp.conf の所有者を自分にしています。 # chown usu /etc/ssmtp/ssmtp.conf # chmod 600 /etc/ssmtp/ssmtp.conf revaliases とは?
以上で、sSMTP の設定方法の基本的なところはご説明できたと思います。
これは、送信元のメールアドレスを書き換えるための設定ファイルです。 ローカルユーザ名:送信元メールアドレス:SMTPサーバ:ポート番号 SMTP サーバ以降は省略可能ですが、指定した場合は、Mailhub の設定を上書きします。 たとえば、プロバイダのSMTPサーバにメールを送信してもらうとき、 SMTP認証は必要ないけれど、 送信元アドレスはプロバイダご指定のアドレスでないといけない、といったときに、 revaliases が必要となります。
具体的には、SMTPサーバが smtp.foo.example.com で、
送信元アドレスが abcdef@example.com である必要があるとします。 Mailhub=smtp.foo.example.com Hostname=test.usupi.org revaliases には以下を記述します。 usu:abcdef@example.com
また、何のためにあるのかよくわかりませんが、SMTPサーバを指定したい場合は、 送信元メールアドレスの後に、続けて指定します。 たとえば、みんなは会社のSMTPサーバ経由で送信するけれど、 usu さんだけはプロバイダ経由で送信するとします。 ここでは、ssmtp.conf を、以下のように記述してあるとします。 Mailhub=smtp.ng.usupi.org:587 Hostname=test.usupi.org usu さんは、先ほどのプロバイダのSMTPサーバおよび送信元アドレスで、 メールを送信するとしますと、revaliases には以下を記述します。 usu:abcdef@example.com:smtp.foo.example.com:25 revaliasesのコメントには、デフォルトは25番と書いてありますが、 実際は Mailhub の設定を上書きするだけですので、 25 と明示的に指定しないと、ssmtp.conf で指定した 587番が使われることになります。 おわりに以上、sSMTP の設定方法を、簡単にご紹介しました。 多くのユーザがよってかかって使用することを想定していないところが、 やや気になりますが、他のMTAを使用するよりは、 壁が薄くて低いのではないかと思います。 postfix や sendmail, exim などの設定を諦めていた貴兄は、 ダメもとで試してみてはいかがでしょうか。…いえ、是非試してください。 宿題の答え前回の宿題は、 RedHat系で、ターゲットのデーモンを自動起動させてみましょう。 でした。
大雑把に申し上げますと、/etc/init.d/tgtd スクリプトに、以下の変更を加えます。
(ちなみに、対象は Fedora 12 です。) start() { echo -n $"Starting SCSI target daemon: " ...中略... # ↓この4行を追加 if [ -f /etc/tgt/targets.conf ]; then /usr/sbin/tgt-admin -e /usr/sbin/tgt-admin --dump fi } ...中略... stop() { echo -n $"Stopping SCSI target daemon: " ...中略... # ↓この1行を追加 /usr/sbin/tgt-admin --delete ALL -f if tgtadm --op show -m target | grep "Target" > /dev/null; then echo $"Targets still in use. Cannot shutdown service." RETVAL=1 return fi ...後略...
start 関数で追加したのは、/etc/tgt/targets.conf ファイルがある場合に、
tgt-admin -e でその内容を読み込ませ、tgt-admin --dump で読んだ内容を出力させる、
という処理です。 また、stop 関数で追加したのは、 使用中のIQNを tgt-admin --delete で一掃する処理です。 念のため -f オプションをつけています。 実際に動かしてみますと、下記のように、/etc/tgt/targets.conf の内容を、 ちゃんと読んでくださいました。 # /etc/init.d/tgtd start Starting SCSI target daemon: [ OK ] default-driver iscsi <target iqn.2010-01.org.usupi:test00> backing-store /usr/local/etc/iscsi/test00.img incominguser neuromancer PLEASE_CORRECT_THE_PASSWORD </target> ... また、停止させる際は、今までですと、 あらかじめ tgt-admin --delete していない場合、以下のように叱られました。 # /etc/init.d/tgtd stop Stopping SCSI target daemon: Targets still in use. Cannot \ shutdown service. ですが、スクリプトの中で tgt-admin --delete していますので、 なにもせずとも終了させることができます。 # /etc/init.d/tgtd start Stopping SCSI target daemon: [ OK ]
以上、勝手に自動化の例を、ご紹介しました。 今回の宿題今回の宿題は、 root などのシステムアカウント宛のメールを転送してください。 です。 基本的には、すべてのメールを SMTP サーバに処理してもらおうとしますが、 それで困るのが root 宛のメールではないかと思います。 cron で出力された内容や、その他の通知メールが、たいてい root 宛に送信されます。 それらが、設定によっては、 SMTP サーバの root などに配送されてしまうかもしれません。
そうならないように、指定したアドレスに配送されるよう、
設定してみてくださいまし。 あとがきご存じのかたはご存じだと思いますが、わたしが普段使っている PC は、 Lenovo な ThinkPad です。 また、会社にも自宅にも、かつて最新だったデスクトップな PCが、 未だに活躍しております。 ですので、主に ThinkPad を酷使するとはいえ、デスクトップもそこそこ使います。 ゆえに、わたしの上半身は、ThinkPad とデスクトップの間を行き来することになります。
CPU切替器のように、ThinkPad からすべての操作が使えると、
左右に体を動かすこともなく、そしてマウスに右手をとられることもなく、
省電力に生きられるのになあ…と思っていましたら、
先日よいものを知りました。
Synergy ようするに、複数のマシンでキーボードとマウスを共有するためのソフトです。 …が、画面の端っこにマウスを持っていくと、別のマシンの画面へ飛んでいきますので、 仮想的なマルチモニタと言ったほうが、感覚的には近いように思います。 一通りの Windows はもちろん、Linux や *BSD、はたまた Mac にも対応しています。 すばらしくありがたいですね。
これを導入してからは、
ThinkPad からデスクトップな Windows の操作もできるになりまして、
すこぶる快適です。 ま、そこまでバリバリ仕事しているわけではないけどなぁ… ということに自ら気づきながらも、なお一層ものぐさに生きておる次第です。
今回も、ここまで読んでいただき、誠にありがとうございました。
「いますぐ実践! Linux システム管理」の解除は、以下からできます。
バックナンバーは、こちらにほぼ全部そろっています。
「栗日記」- アクセスは減ってるのに読者が増えるという不可解な現象。 |
▼ トップ ▼ プロフィール ▼ リンク
▼ 作ってみました
▼ せんでん
▼ 最近読んだ本
▼ 気に入ってる本 |