このスレッドは未解決です(解決したらこちらで解決済にしてください)
<<戻る

メールでシャットダウン このメッセージに返信する
日時: 2010/08/09 05:25
名前: 寂々
URL:

こんにちは、初めまして。
さっそくなんですが、お願いします。
最近勉強のためにCentosでサーバーを構築しました。

そこで、「メールを送ってシャットダウンをする。」
もしくは、そうさ(単調なもの)ができないのでしょうか?
もしあれば、ご教授ください。
また、既出の質問でしたらすいません。

ちなみにOSはCentOS5です。
ほかに、必要な情報があれば言ってください。
記事編集 編集

Page: | 1 | 2 |

Re: メールでシャットダウン このメッセージに返信する
日時: 2010/08/09 12:22
名前: stranger
URL: http://ja.528p.com/
メールを受信したら、ランダムな文字列を返信し、
それを返信したら、shutdownに移るようなことをしないと
セキュリティ的な穴になるように思います

昔、そのようなスクリプトを掲載していた雑誌があったが廃刊になってしまった

パケット代を惜しまないなら、ssh接続をしてコマンド実行
携帯でsshできるアプリもあるようだから
記事編集 編集
Re: メールでシャットダウン このメッセージに返信する
日時: 2010/08/09 12:47
名前: kato
URL:
>stranger様

このような物ならFedoraの過去板から見つけました。

以下全てコピペです。

某雑誌に掲載されていたシェルスクリプトを改造したものです。

(概要)
携帯等からサーバーにメールを送って、任意のコマンドを実行することができるシェルスクリプトです。以下の前提条件の例を以下に示します。
・サーバー管理者メールアドレス:master@docomo.ne.jp
・本シェルスクリプト用メールアドレス:ctlbymail@example.com
・実行コマンド:reboot(サーバー再起動)
・コマンド実行キーワード:go
※root権限で実行するので、どんなコマンドでも実行できます

(使用方法)
master@docomo.ne.jpからctlbymail@example.comへメール(空でもなんでもいい)を送ると、root@example.comより、ランダムな33桁のパスワードがmaster@docomo.ne.jp宛に送られて来ます。
次に、master@docomo.ne.jpからctlbymail@example.comへ「go root@example.comより送られてきたパスワード」という本文を送ると、サーバー側でrebootが実行されます。
なお、パスワードは毎回、異なるパスワードをランダムに生成します。また、予め指定しておいたサーバー管理者メールアドレス以外のメールアドレスからメールが送られてきた場合は、そのメールをそのままサーバー管理者メールアドレス宛にメールで通知します。

@ctlbymail宛のメールを/tmp/ctlbymailへ保存する設定
[root@linux root]# echo "ctlbymail: /tmp/ctlbymail" >> /etc/postfix/aliases
[root@linux root]# postalias /etc/postfix/aliases

Actlbymail.sh作成して、パーミッションを700にする
#!/bin/sh

#----------#
# 設定開始 #
#----------#

# 管理者メールアドレス
ADMINMAIL=master@docomo.ne.jp ← 変更

# コマンド実行キーワード ← 変更
KEYWORD=go

# メール格納ファイル名
TRIGGER=/tmp/ctlbymail

# スクリプト名
SCRIPT=ctlbymail

# ロックファイル名
LOCK=/var/run/$SCRIPT.pid

# ログファイル名
LOGFILE=/var/log/$SCRIPT.log

# コマンド実行許可メール受信監視時間(秒)
INTERVAL=60

# コマンド実行許可メール受信監視回数
RETRYCOUNT=5

#----------#
# 設定完了 #
#----------#

# 後処理関数定義
function cleanfile {
rm -f $LOCK $TRIGGER
}

# メールがなければ終了
if [ ! -f $TRIGGER ]
then
exit 0
fi

# ロックファイルがある場合は終了
if [ -f $LOCK ]
then
exit 0
fi

# 終了時に後処理関数実行するように出口登録
trap cleanfile EXIT

# ロックファイル生成
echo $$ > $LOCK
L=`cat $LOCK`
if [ x$$ != x$L ]
then
echo "lock error" | mail -s "$SCRIPT error" $ADMINMAIL
echo -n `date` >> $LOGFILE
echo -n " " >> $LOGFILE
echo "lock error" >> $LOGFILE
exit 1
fi
# メール送信元チェック
if grep "From: $ADMINMAIL" $TRIGGER > /dev/null 2>&1
then # チェックOK
break
else # チェックNG
# 受信メールを管理者宛にメールして終了
cat $TRIGGER | mail -s "$SCRIPT error" $ADMINMAIL
echo -n `date` >> $LOGFILE
echo -n " " >> $LOGFILE
echo -n "mail from: " >> $LOGFILE
echo -n `grep From: $TRIGGER | awk '{ print $2 }'` >> $LOGFILE
echo " error" >> $LOGFILE
exit 1
fi

# 実行コマンドを引数より設定
EXECUTECMD=$1

# メール削除
rm -f $TRIGGER

# ランダムなパスワードを生成
X=`(dd if=/dev/random count=10 | md5sum - | colrm 33) 2>/dev/null`

# パスワードを管理者宛にメール
echo $X | mail -s "$SCRIPT password" $ADMINMAIL

# パスワードをログに記録
echo -n `date` >> $LOGFILE
echo -n " " >> $LOGFILE
echo $X >> $LOGFILE

# コマンド実行許可メールの受信監視開始
while (( RETRYCOUNT-- ))
do
sleep $INTERVAL
if [ -f $TRIGGER ]
then
# メールの実行許可キーワードとパスワードをチェック
if grep "^$KEYWORD $x" $TRIGGER > /dev/null 2>&1
then # チェックOK
# コマンド実行
$EXECUTECMD
# コマンド実行した旨を管理者宛にメールして終了
echo "$EXECUTECMD executed" | mail -s "$SCRIPT completed" $ADMINMAIL
echo -n `date` >> $LOGFILE
echo -n " " >> $LOGFILE
echo "$EXECUTECMD executed" >> $LOGFILE
sleep 10
exit 0
else # チェックNG
# 受信メールを管理者宛にメールして終了
cat $TRIGGER | mail -s "$SCRIPT error" $ADMINMAIL
exit 1
echo -n `date` >> $LOGFILE
echo -n " " >> $LOGFILE
echo "keyword or password error" >> $LOGFILE
fi
fi
done

# 監視時間内にコマンド実行許可メールが送信されなかった旨(タイムアウト)を管理者宛にメールして終了
echo "Time Out" | mail -s "$SCRIPT time out" $ADMINMAIL
echo -n `date` >> $LOGFILE
echo -n " " >> $LOGFILE
echo "time out" >> $LOGFILE

exit 1

Bctlbymailを5分おきに実行するようにcronに登録
[root@linux root]# crontab -e
*/5 * * * * /root/ctlbymail.sh
記事編集 編集
Re: メールでシャットダウン このメッセージに返信する
日時: 2010/08/10 01:10
名前: 寂々
URL:

みなさんありがとうございます。
結果、stranger様、kato様の意見を取り入れ、試してみたいと思います。

そこでまた質問なんですが、ntsysvにipopやimapの欄がないのですが・・・どうすれば追加できるのでしょうか?

立て続けに何度もすいません、ご教授ください。
記事編集 編集
Re: メールでシャットダウン このメッセージに返信する
日時: 2010/08/10 02:28
名前: stranger
URL: http://ja.528p.com/
>
>みなさんありがとうございます。
>結果、stranger様、kato様の意見を取り入れ、試してみたいと思います。
>
>そこでまた質問なんですが、ntsysvにipopやimapの欄がないのですが・・・どうすれば追加できるのでしょうか?
>
>立て続けに何度もすいません、ご教授ください。

別スレッドにしましょう

ipopは分からないけどimapはdovecotで扱うので必要無し
smtpはsendmailまたはpostfix

rpmパッケージにはインストールファイルだけでなく
設定スクリプトが隠されています


rpm -q --scripts sendmail

preinstallがパッケージのインストールの前に行われます
postinstallがパッケージのインストール後に行われます
preuninstallがパッケージのアンインストールの前に行われます
postuninstallがパッケージのアンインストールの後に行われます

起動スクリプトをimapにしたいパッケージがあれば
通常はrpmインストールの時に登録されます

じぶんで作りたい場合は他の起動スクリプトをまねて書きます
重要な部分 例 sendmail
# chkconfig: 2345 80 30
# description: Sendmail is a Mail Transport Agent, which is the program \
# that moves mail from one machine to another.

chkconfig: の部分
runレベル 2,3,4,5 でS80で起動し、K30で停止するように
chkconfig --add sendmailを実行した場合に登録されます
記事編集 編集
Re: メールでシャットダウン このメッセージに返信する
日時: 2010/08/10 02:53
名前: 寂々
URL:
>>strangerさん

返信ありがとうございます。

そうですね、やっぱ新スレたてるべきでした(^_^;)

いろいろ頑張ってみたのですがpostfixが起動しないという事態になってしまいましたorz
どこが悪いもか見当もつきません、チェックするポイントを探しています。
もし、心当たりがあったら教えていただけませんか?
記事編集 編集
Re: メールでシャットダウン このメッセージに返信する
日時: 2010/08/18 22:01
名前: ヒロ
URL:
ちょうど私も盆休みに携帯しかないところにいたので、
どうにかできないかと構想していました。

情報ありがとうございます。
記事編集 編集
Re: メールでシャットダウン このメッセージに返信する
日時: 2011/04/24 10:12
名前: HGlite
URL:
こんにちは。

> katoさん

1.専用ユーザを作り、
2.cronでメールボックスを監視し、
3.メールボックスが空であれば即終了
 メールボックスが空でなければメールを読み取り、そこから動作に繋ぎます。

上記アイデアを早速実践したいと思うのですが、
監視(2.)と条件分岐(3.)を実現する具体的な書き方
がどうにも見当つきません。(+_+)

参考となるサイト等をご教授いただくことは可能でしょうか。
(横から唐突のお願いで申し訳ありません。)
記事編集 編集
Re: メールでシャットダウン このメッセージに返信する
日時: 2011/04/24 13:00
名前: 新高校生
URL:
>1.専用ユーザを作り、
>2.cronでメールボックスを監視し、
>3.メールボックスが空であれば即終了
> メールボックスが空でなければメールを読み取り、そこから動作に繋ぎます。
>
>上記アイデアを早速実践したいと思うのですが、
>監視(2.)と条件分岐(3.)を実現する具体的な書き方
>がどうにも見当つきません。

私も唐突な解説ですが、katoさんが紹介しているスクリプトでは、
「メールボックスの監視」は実際のところでは
/tmp/ctlbymailの監視になっています。

というのもailiasesの設定で、ctlbymail宛てのメールは /tmp/ctlbymailへ保存
するようになっているからです。

>[root@linux root]# echo "ctlbymail: /tmp/ctlbymail" >> /etc/postfix/aliases

したがってメールボックスが空かどうかも、/tmp/ctlbymailが空かどうかで判定しています。

また動作させるコマンドは

># 実行コマンドを引数より設定
>EXECUTECMD=$1

とありますので、ctlbymail.shを実行するときの最初の引数でコマンドを
渡しています。例えばshutdownさせたいのでしたらcronの設定は

[root@linux root]# crontab -e
*/5 * * * * /root/ctlbymail.sh 'shutdown -h now'
みたいにします。何か特定のスクリプトを実行させたいなら
それなりに書けばいいと思います(たぶん)。
以上です、多少参考になるといいのですが。
記事編集 編集
Re: メールでシャットダウン このメッセージに返信する
日時: 2011/04/24 22:20
名前: ペングイン
URL: http://blog.trippyboy.com/
よこから失礼致します。

Postfixとprocmailで、
・もし件名が・・・
・もし本文に・・・
・もし宛先が・・・
・もし・・・
などの条件で「|」を用いてshutdownコマンドを走らせる方法もあると思いますし、

aliasesの設定で
・もし宛先が・・・だったら
という条件で同じく「|」を使ってコマンド実行が出来ると思いますが、
この方法だと誰でもサーバをshutdown出来てしまいます。
記事編集 編集
Re: メールでシャットダウン このメッセージに返信する
日時: 2011/04/24 23:48
名前: 新高校生
URL:
aliasesで直接にコマンドやスクリプトを実行させると、実行ユーザーがpostfixになるので
(普通では)shutdownとかはできないです。
katoさんのスクリプトで、わざわざroot権限のcronを回しているのはroot権限で実行
させたいからだと思われます。
いずれにしてもいろいろな方法がありそうですが、セキュリティとか考えると頭が痛いかも。

記事編集 編集

Page: | 1 | 2 |

件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -