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

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


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

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

最近、ちょっとしたことでイライラしたり、腹を立てたりしております。

40歳間近という年齢だから、仕方がないのかもしれません。
ですが、自分ではどうしようもないことでいちいち腹を立てたところで、 どうなるものでもありませんし、精神的にもよろしくありません。

ですので、そんなときは、とあるメルマガに書いてあった、

「このことは私に何を教えてくれているのか?」

と思うようにしています。

…はい、思うようにしているだけで、実際に思えているかどうかは、 また別の話です。そんな急激によくなれるものでもないですし。

いやいや、ですが、今後も、なるべく心がけるようにしたいと思います。

中途半端なオープニングですが、今回も、はりきってまいりましょう!

今回のお題 - sSMTP でメールを送信できるようにする

過去に、いろいろなネタを取り上げてきた…つもりですが、馬鹿のひとつ覚え的に、 あらゆるところで何度も用いてきたモノと言いますと、

メールで通知する機能

ではないかと思います。

ですが、すべてのかたがたが、MTA(Mail Transfer Agent)の設定を行っていて、 Mailコマンド等で全世界のひとにメールを届けられるようになっている… とも限らないよなあという気が、ずいぶん前からしておりました。

ただ、ひとくちに MTA と申しましても、 これがデファクトスタンダードだと言えるモノがはっきりしないように思います。 かといって、メジャーな MTA をかたっぱしからご紹介していく、というのも大変です。

ですので、いままでは、設定されているという前提で、 Mailコマンド等を使用したネタをお送りしていました。

しかし、先日、送信だけを行う、sSMTP というモノの存在を知りました。

sSMTP
http://packages.debian.org/stable/mail/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 のものを使用するようになっています。
ですので、以下のように実行して、ssmtp に切替えます。

  # 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 でいろんなものを共存させる
http://www.usupi.org/sysad/150.html
Vol.151 - alternatives に対応させる
http://www.usupi.org/sysad/151.html

設定して送信してみましょう

sSMTP の設定ファイルは、/etc/ssmtp/ssmtp.conf です。
このファイルに、送信するための設定を記述します。

たとえば、 会社の所属組織のサブネット内にある SMTPサーバに丸投げをするだけでいい、 という場合は、Mailhub にSMTPサーバを、 Hostname に自分のホスト名を指定するだけです。
SMTPサーバが smtp.ng.usupi.org で、 自分のホスト名が test.usupi.org だとしますと、以下のように記述します。

  Mailhub=smtp.ng.usupi.org
  Hostname=test.usupi.org

早速、Mailコマンドを用いて、テストメールを送信してみましょう。
kuri@usupi.org さんに、題名が test、本文が This is a test. の1行というメールを、 以下のようにして送信してみます。

  $ Mail -s test kuri@usupi.org
  This is a test.
  .
  EOT   (ここで EOT ではなく Cc: と出たらリターンキーを押します)

なにかエラーめいたことを言われず終了した場合は、 おそらく送信されていると思います。
念のため、/var/log/maillog や /var/log/mail.log などを参照してみてください。

  $ 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

ただ、送信元のメールアドレスが、ユーザ名@ホスト名 になります。
上記の場合ですと、usu@test.usupi.org になっています。
そうではなく、たとえば usu@usupi.org にしたい場合は、 RewriteDomain に usupi.org を指定します。

  Mailhub=smtp.ng.usupi.org
  Hostname=test.usupi.org
  RewriteDomain=usupi.org

 

SMTP 認証を必要とする場合は、AuthUser にユーザ名、 AuthPass にそのユーザのパスワードを指定します。
たとえば、SMTPサーバが smtp.ng.usupi.org で、ポート番号が587、 SMTP認証のユーザ名が usu で、パスワードが weak_password だとしますと、 以下のように記述します。

  Mailhub=smtp.ng.usupi.org:587
  Hostname=test.usupi.org
  AuthUser=usu
  AuthPass=weak_password

 

上記の場合は、ユーザ名とパスワードをそのまま平文で送信します。
(ちなみに、PLAIN ではなく、LOGIN を使用するようです。)
そうではなく、CRAM-MD5 を使用する場合は、AuthMethod に cram-md5 を指定します。

  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 の設定方法の基本的なところはご説明できたと思います。
ただ、/etc/ssmtpには、ssmtp.conf の他に、revaliases というファイルも存在します。

これは、送信元のメールアドレスを書き換えるための設定ファイルです。
1行につき1ユーザの設定を記述します。
具体的な書式は、以下の通りです。

  ローカルユーザ名:送信元メールアドレス:SMTPサーバ:ポート番号

SMTP サーバ以降は省略可能ですが、指定した場合は、Mailhub の設定を上書きします。

たとえば、プロバイダのSMTPサーバにメールを送信してもらうとき、 SMTP認証は必要ないけれど、 送信元アドレスはプロバイダご指定のアドレスでないといけない、といったときに、 revaliases が必要となります。

具体的には、SMTPサーバが smtp.foo.example.com で、 送信元アドレスが abcdef@example.com である必要があるとします。
そんなときは、ssmtp.conf には以下を記述して、

  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 関数の最後に4行ほど、stop 関数の途中で1行ほど、 処理を加えているだけです。

  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 で読んだ内容を出力させる、 という処理です。
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 などに配送されてしまうかもしれません。

そうならないように、指定したアドレスに配送されるよう、 設定してみてくださいまし。
(オンラインマニュアル(man ssmtp.conf)を眺めれば、すぐわかります。)

あとがき

ご存じのかたはご存じだと思いますが、わたしが普段使っている PC は、 Lenovo な ThinkPad です。

また、会社にも自宅にも、かつて最新だったデスクトップな PCが、 未だに活躍しております。

ですので、主に ThinkPad を酷使するとはいえ、デスクトップもそこそこ使います。 ゆえに、わたしの上半身は、ThinkPad とデスクトップの間を行き来することになります。

CPU切替器のように、ThinkPad からすべての操作が使えると、 左右に体を動かすこともなく、そしてマウスに右手をとられることもなく、 省電力に生きられるのになあ…と思っていましたら、 先日よいものを知りました。
ご存じのかたも多いとは思いますが、ご紹介させていただきます。

Synergy
http://synergy2.sourceforge.net/

ようするに、複数のマシンでキーボードとマウスを共有するためのソフトです。 …が、画面の端っこにマウスを持っていくと、別のマシンの画面へ飛んでいきますので、 仮想的なマルチモニタと言ったほうが、感覚的には近いように思います。

一通りの Windows はもちろん、Linux や *BSD、はたまた Mac にも対応しています。 すばらしくありがたいですね。

これを導入してからは、 ThinkPad からデスクトップな Windows の操作もできるになりまして、 すこぶる快適です。
あとは、Shift+SPACE で日本語の入力ができれば、なにも言うことはないのですが、 そこまではできておりません。(探せばありそうですが。)

ま、そこまでバリバリ仕事しているわけではないけどなぁ… ということに自ら気づきながらも、なお一層ものぐさに生きておる次第です。

 

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

 

「いますぐ実践! 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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本