Shino's Bar

Linux奮戦記


フレッツ ISDNで常時接続に準じる環境ができたのをきっかけに Vine Linux 2.0 を導入。 OSはタダだが、How-To本にいくら使ったことか・・・トホホ。 手探りでなんとかメールの自動振り分け、転送などができるようになりました。 成果のいくつかを公開。というよりは自分のための覚え書きか?
updetae:8 Jul 2001 ( origin:17 Sep 2000) bye byeでshutdown

私の職場の状況はWindowsがほとんどで、 Linuxは試行的に私のマシンと他に1台入っているだけです。 たとえば私が不在のとき誰かが私のマシンを借りようとして立ち上げたところ、 WindowsにあらずLinuxのログイン画面が出て、 さてどうしてシャットダウンしたものかというような場面を想定しています。 そこでログイン画面でbye, パスワード入力でもbyeと入力すれば 直ちにシャットダウンされるようにします。
  1. まずはbyeというユーザーを用意します。パスワードもbyeです。

  2. sudoの設定は /etc/sudoers に
    bye localhost = NOPASSWD: /usr/sbin/shutdown
    としておけばlocalhostのbyeから/usr/sbin/shutdownを パスワードの要求なしで実行できます。 グラフィカルログインのときはターミナルがあてがわれず パスワードの入力ができないので、 ここでNOPASSWDとしておかないとエラーで落ちます。

    byeでログインすると/home/bye/.bashrcを実行するので、これを /usr/bin/sudo /usr/sbin/shutdown -h now とすればよいことになります。 しかしこのままだとリモートターミナルからも切断できることになります。 悪戯でなくとも、telnetを覚え始めた人が練習か好奇心から 私のマシンにbyeでログインしようとするかもしれません。 なにより自分がうっかりログインするかもしれない。 そこでbyeがどこからログインしてきたかを調べます。

    ttyというコマンドを実行すると
    1. グラフィカルログインでは 'ttyではありません' (Vine Linux 2.0の場合)
    2. ログイン後に仮想ターミナルで実行すると 'tty0' (あるいはtty1,tty2など)
    3. telnetでログインすると 'dev/pts/0' などとなります。
    システムにより異なる場合があるので確かめてください。

  3. これらを利用し、/home/bye/.bashrc を次のようにします。
    ### /home/bye/.bashrc
    if tty  | grep pts > /dev/null
      then
        echo Remote login denied.
        read x
        logout
      else
        /usr/bin/sudo /usr/sbin/shutdown -h now
        logout
    fi
    ### .bashrc ここまで
    
    if文のところは分かり難いですが、 ttyコマンドを実行、'pts'という文字を探し、結果の出力は/dev/nullに送る、すなわち出力しないで探した結果のフラグだけを利用し、見つかった場合then以下を実行します。 read xはメッセージが消えないようにEnterキーの入力を待ちます。 shutdownの後のlogoutコマンドは本来実行されませんが、shutdown失敗のときのための念押しです。
アドバイスは E-mail で マスターまで
Shino's Bar goto [シノバー店内案内] [PRIVATE ROOM マスターの部屋] [DOS/Vマシンの自作] [MPEG2最前線!] [Linux奮戦記]