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

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


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

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

先週、初心者のかた向けに回帰しますよ的宣言をしたところ、 たくさんのご感想をいただきました。

ありがとうございます。ありがとうございます。
みなさんの熱烈な励ましに、7回泣きました。とても勇気づけられました。

 

 

…すみません、本当は、感想をいただいたのは1通だけでした。
(お送りいただいた I さん、ものすごくありがとうございました!)

 

とはいえ、読者数が減らず、いつもよりちょびっと増えたという事実を、 斜めに直視しますと、おおむねご賛同いただけたと判断していいのかな、 などと思っております。(ポジティブ思考で。)

ですので、今後も、この路線でつっ走ってまいりたいと思います。
いろいろ思うこともあるかと存じますが、よろしくお願いいたします。
(思うことがあったら、お気軽にメールしてくださいまし。)

それでは、先週に引続き、今週も、はりきってまいりましょう!

今週のお題 - パスワード変更していない日数をチェックする

普段、何気なく、ユーザ名とパスワードを入力して、 Linux マシンなどにログインしていますが、よく考えますと、パスワードは、 そのユーザだということを証明する唯一の証拠だと言えます。たぶん。

そんな大事なものであるにも関わらず、最初にパスワードを設定すると、 ずっとそのまま使い続けている貴兄が、多いのではないかと推測します。

しかし、パスワードを変更する習慣を身につけておかないと、 /etc/shadow が漏洩したときに、パスワードを解読され、 電光石光のごとく侵入されるということが、現実に起こってしまうかもしれません。

 

さて、以前、chage というコマンドで、パスワードの有効期間を設定し、 パスワード変更を強制的に行ってもらうという封建的手法を、 ご紹介したことがあります。

Vol.036 - パスワードを管理する
http://www.usupi.org/sysad/036.html

chage を用いて、適切な期間を設定すれば、 強制的にパスワード変更してもらうことができます。

しかし、所属する組織の方針に合わないとか、 コンセンサスが得られないなどの理由により、 適用できないということも十分考えられます。

とはいえ、適用できないからといって放置するわけにもいきませんよね。
というわけで、今週は、ユーザ各位の、 パスワード変更していない日数をチェックする方法について、ご紹介したいと思います。


パスワード変更に関する情報がどこにあるのか、と言いますと、 さきほどちらっと出てきた、/etc/shadow に記述されています。

せっかくですので、shadow ファイルの内容を確認しておきましょう。
大雑把に述べますと、1行につき1人分の情報で、 それぞれに以下の情報が格納されています。

  ユーザ名
  (暗号化された)パスワード
  最後にパスワードが変更された日(1970年1月1日からの日数)
  パスワードが変更可能となるまでの日数
  パスワードを変更しなくてはならなくなるまでの日数
  パスワードの有効期限が来る前に、警告を発する日数
  パスワードの有効期限が過ぎてから使用不能になるまでの日数
  アカウントが使用不能になるまでの日数(1970年1月1日からの日数)
  予約フィールド

実際の shadow ファイルは、たとえばこんな感じです。

  # cat /etc/shadow
  root:秘密:13572:0:99999:7:::
  bin:*:13257:0:99999:7:::
  ...後略...

各フィールドが、: で区切られていますね。
3つ目のフィールドが、パスワードを変更した日ですので、 今日からそのフィールドの値を引けば、パスワード変更していない日数が計算できる、 という寸法です。


しかし、そのためには、 1970年1月1日から今日までの日数がわからないといけませんよね。
日数ではなく、秒数であれば、date コマンドでわかります。

  % date +%s
  1174756224

引数に +%s を指定すると、 1970年1月1日午前0時0分0秒から今までの秒数を出力してくれます。 (他にもさまざまなフォーマットで出力してくれますが、 詳しくはオンラインマニュアル(man date)などをご覧ください。)

ですので、得られた秒数を 60*60*24 で割れば、日数になります。

  % expr 1174756224 / 60 / 60 / 24
  13596

1970年1月1日から今日まで、13596日を経過している、 ということが計算できました。
ちなみに、これをまとめて実行するなら、以下のようにします。

  % expr `date +%s` / 60 / 60 / 24
  13596

それでは、shadow ファイルを読み込み、 パスワード変更していない日数を計算するスクリプトを、作ってみましょう。

  #!/bin/sh
  TODAY=`expr \`date +%s\` / 60 / 60 / 24`
  IFS=:
  while read name pwd lstchg min max warn inact expire reserved; do
      echo "$name : `expr $TODAY - $lstchg`"
  done < /etc/shadow

まず、今日の日数を、変数 TODAY に格納しています。
そして、shadow ファイルを読み込み、 パスワード変更していない日数をひとつずつ計算して出力しています。
これを実行しますと、以下のような出力が得られます。

  root : 24
  bin : 339
  daemon : 339
  ...後略...

ただ、これでは、もともとパスワードを設定していないユーザの結果も、 出力されてしまいます。
ですので、パスワードフィールドが、* や !! の場合、 パスワードが設定されていないとみなして、 それ以外のユーザの結果だけを出力するようにしてみましょう。

  #!/bin/sh
  TODAY=`expr \`date +%s\` / 60 / 60 / 24`
  IFS=:
  while read name pwd lstchg min max warn inact expire reserved; do
      if [ "$pwd" != '*' -a "$pwd" != '!!' ]; then
          echo "$name : `expr $TODAY - $lstchg`"
      fi
  done < /etc/shadow

こうすると、パスワードを設定しているユーザの結果だけが得られます。

  root : 24
  usu : 48
  kentarou : 7
  jin : 125

しかし、たくさんユーザさんがいる組織では、出力が大量になってしまいそうです。 ですので、最近パスワード変更したひとの情報は、この際省略してしまいましょう。

  #!/bin/sh
  [ $# -eq 1 ] && NOCHANGE=$1 || NOCHANGE=30
  TODAY=`expr \`date +%s\` / 60 / 60 / 24`
  LIMIT=`expr $TODAY - $NOCHANGE`
  IFS=:
  while read name pwd lstchg min max warn inact expire reserved; do
      if [ "$pwd" != '*' -a "$pwd" != '!!' -a $lstchg -le $LIMIT ]; then
          echo "$name : `expr $TODAY - $lstchg`"
      fi
  done < /etc/shadow

30日前の日数を変数 LIMIT に代入し、if 文に、 その値以下であるという条件を追加しています。
これを実行すると、30日以上パスワード変更していないユーザだけを出力します。

  usu : 48
  jin : 125

引数に数値を指定すると、 その日数以上パスワード変更していないユーザだけを出力します。 (デフォルトが30日ってことです。)


以上、しばらくパスワード変更していないユーザをチェックする方法を、 ご紹介しました。

出力結果を Mail コマンドに渡してメールで報告させたりなど、 いろいろ応用が考えられそうですね。
ただ、メールの場合、相手以外の誰かに見られる可能性があるということを考慮して、 あまり情報を盛り込まないようにすべきだと思います。

宿題の答え

先週の宿題は、

  ホームの残りの空き容量が、指定された kB 以下のときに、ホーム以下
  の各ディレクトリの使用量をメールするスクリプトを作りましょう。

でした。

まず、空き容量を得るには、-k オプションをつけて df コマンドを実行し、 2行目の出力の4番目の文字列(数字)を取り出せば、よさそうです。

  # df -k /home
  Filesystem         1K-blocks      Used Available Use% Mounted on
  /dev/hda2           76095208  68881044   3348736  96% /

2行目だけにするには、先週と同様 tail コマンドを用います。

  # df -k /home | tail -1
  /dev/hda2           76095208  68881044   3348736  96% /

さらに、4番目の文字列を取り出すために、awk コマンドを用います。

  # df -k /home | tail -1 | awk '{print $4}'
  3348736

awk コマンドはいろいろできるひとなのですが、 ここでは4番目の文字列を取り出すためだけに使うという、 ゼイタクなことをしています。

というわけで、答の例を示します。

  #!/bin/sh
  [ $# -ge 1 ] && HOMEDIR=$1 || HOMEDIR="/home"
  [ $# -eq 2 ] && HOMETHR=$2 || HOMETHR=524288
  HOMEFREE=`df -k $HOMEDIR | tail -1 | awk '{print $4}'`
  if [ $HOMEFREE -le $HOMETHR ]; then
      du -sk $HOMEDIR/* | sort -nr
  fi

デフォルトでは、/home の属するファイルシステムの空き容量が、 512MB(524288kB)以下になったら、使用量を計測して出力します。

話は変わりますが、トップ10の結果だけでいいよっていう場合は、 if 文の中を以下に差し替えましょう。

      du -sk $HOMEDIR/* | sort -nr | head -10

お察しの通り、数字を変えれば、トップ3とかトップ40にできます。

今週の宿題

今週の宿題は、

  しばらくパスワードを変更していないユーザに、その旨をメールで通知
  しましょう。

です。

パスワード変更していないユーザの一覧を出力していましたが、それだけだと、 ちょっと積極性に欠けるように思います。
ですので、パスワード変更を怠っていることを、 各ユーザにメールで連絡するっていうのは、いかがでしょうか。
実際に仕込むかどうかは別にして、まずはそういうモノを作ってみたいと思います。

あとがき

今週は、「クロフォードのインタラクティブデザイン論」の後遺症もありましたので、 以下の新書をさらっと読んでみました。
(後遺症=ボリュームがあった、というだけのことですが。)

頭がよくなる照明術
http://www.amazon.co.jp/exec/obidos/ASIN/4569657745/usupiorg06-22

ものすごく要約しますと、蛍光灯による青白い光に、上から直接照らされていると、 ずっと緊張してしまいますので、 オレンジ色の間接照明を有効に使ってリラックスしましょう、という内容でした。

とにかく、照明が人間に与える影響の大きさに、びっくりしました。
それだけではなく、仕事や普段の生活に、 照明を効果的に使って改善する方法がていねいに紹介されていて、 面白かったです。
(中には、明らかに照明と関係のない方法も載っていますが…。)

個人的には、障子や金屏風、玉砂利など、日本に昔からあるものが、 自然の光を有効に使っているという話が、興味深く感じました。
電気のない時代であれば、そう考えるのが自然という気もしますが、 それを差し引いても、よく思いつくもんだなあと、感銘を受けました。

新書だからだと思いますが、さらっと読めます。
興味のあるかたは、出張の際などに、読んでみてくださいませ。

 

さて、来週の 4/1 は、個人的な事情(?)により、お休みとさせていただきます。
申し訳ありませんが、ご了承ください。

 

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また来週…じゃなくて来々週に、お会いしましょう!

 

「いますぐ実践! 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://www.fumido.co.jp/kuriniki/ (栗日記ぎゃらりー)


[バックナンバーのトップへ] [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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本