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

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


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

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

わたしは、今、37歳です。
世間的にはおっさんですが、自分では、年齢による衰えを、 あまり感じたことはありません。…いや、ありませんでした。

ですが、今日、よめの実家で、15分ほど乗馬フィットネスをやってから、 子どもと公園で遊んでいたら、いつもより早く息切れしてきました。
(乗馬フィットネスは、単に面白そうだから乗ってみただけです。)

最近、睡眠時間などを気にせず、好きなように生活していましたが、 それではダメだよ! と言われたような気がします。

読者のみなさんは、おそらくわたしより若いかたが大半だと思いますが、 今のうちから、なるべく睡眠をとり、定期的に体を鍛えるなどしておいたほうが、 将来のためになると思います。ぜひ、ご検討ください。

以上、やや後悔しているおっさんの、どうでもいい話でした。
それでは、今週も、老体にむち打って、はりきってまいりましょう!

今週のお題 - PAM の設定を理解する

普段、なにげなく、sudo や passwd などのコマンドを使っていますが、 その裏では、PAM というひとが、縁の下の力持ち的に、 われわれをいつも支えてくれています。

とはいえ、特にそのままの設定でも問題はありませんし、変更したい場合でも、 ちょこっとファイルをいじるだけで、PAM を理解することもなく、 それなりに使えてしまうのが、現状ではないかと思います。

しかし、システムにとって重要であることに、変わりはありません。
逆に、空気のような存在だからこそ、PAM を理解すべきなのではないか! と熱く思うわけなのです。

というわけで今週は、PAM の仕組み…というよりも、PAM の設定方法を、 それなりにご紹介してみたいと思います。


おそらく、現在流通しているディストリビューションは、 PAM を採用しているはずです。ですので、安心して、以降をお試しください。
(ですが、万が一していなかったら、すみません。(謝るだけですが…))

あ、まず、PAM とは、Pluggable Authentication Modules の略です。
PAM が普及する前は、個々のコマンドが、 ユーザ認証のところをそれぞれ実装していました。 その認証部分をコマンドから分離して、 ユーザが柔軟に設定変更できるようにしたものが、PAM です。

さて、PAM の設定ファイルのありかですが、通常は、/etc/pam.d です。
そして、大抵は、実行するコマンドと同名の設定ファイルが存在します。
その同名の設定ファイルを解釈して、ユーザ認証などを行います。

個々の設定ファイルの中身は、以下の行の羅列です。

  type  control  module-path  module-arguments

type は、その行で行う認証の種類を表す型です。
"auth", "account", "password" もしくは "session" のうち、 いずれか1つを指定します。
ものすごく大雑把に言ってしまえば、auth で認証して、 account で期限や有効性を確認します。 password はパスワード変更などの際に使われ、 session はログの記録などを行う際に使用されます。

control は、認証の結果の成否から、その後行う処理を決めるための項目です。 以下の5つのうち、1つを指定します。
"requisite" の場合は、認証などに失敗したら、以降の処理を行わずに、 失敗と判断します。
"required" の場合は、認証などに失敗しても、以降の処理を続行します。
ただ、失敗と判断されることに変わりはありません。
"sufficient" の場合は、認証などに成功したら、以降の処理を行わず、 成功と判断します。(それまで、すべて成功している必要があります。)
"optional" の場合は、成否に関係なく処理を行うためのものです。
"include" の場合は、指定されたファイルを読み込んで解釈します。

module-path は、ずばり、使用するモジュールです。
通常は、/lib/security にあるモジュールを指定します。

そして、module-arguments は、モジュールの引数です。


説明ばかりではわからないと思いますので、例を示します。
まずは、すべてをノーチェックで受け入れてしまう、恐ろしい設定です。

  auth            sufficient      pam_permit.so
  account         sufficient      pam_permit.so
  session         sufficient      pam_permit.so

PAM によるユーザ認証では、 auth, account, session の3つの型すべてで成功する必要があります。
(auth で認証、account でユーザ確認を行い、session で記録などを行います。 password は、パスワード変更の時のみ使用されるようですので、 ここでは割愛します。)

1行目は、auth です。この行の control は sufficient ですので、 この行で成功すれば、auth に成功することになります。
ここで使用するモジュールは、 pam_permit です。
pam_permit は、無条件に成功を返します。よって、この1行だけで、 必ず auth に成功することになります。

2行目の account と、3行目の session も同様に、無条件に成功します。
ですので、この3行の設定は、一切のチェックを行わず、許可してしまいます。 たとえば、/etc/pam.d/su の内容をこれにしますと、 だれでも su で root などの権限を得ることができてしまいます。恐ろしいですね。


…という設定ではアレですので、もう少し現実的な例を、以下に示します。

  auth            sufficient      pam_unix.so
  auth            required        pam_deny.so
  account         required        pam_unix.so
  account         required        pam_time.so
  session         sufficient      pam_permit.so

1行目で指定している pam_unix は、 いわゆるパスワードによるユーザ認証を行います。 ここで成功すれば、sufficient ですので、以降のチェックを行わずに、 auth が成功します。
2行目の pam_deny は、pam_permit の逆で、無条件に失敗を返します。
ですので、1行目に失敗すると、auth は必ず失敗します。

3行目にも、pam_unix がありますね。account で pam_unix を指定しますと、 パスワードの有効期限などを確認します。ここは required なので、 ここで成功しないと、account は失敗してしまいます。
4行目の pam_time は、そのユーザが使用可能な時間かどうかをチェックします。 あ、これは、以前ネタにしましたね。

Vol.057 - ログイン時間を限定する
http://www.usupi.org/sysad/057.html

…はいいとして、account では、 pam_unix と pam_time の両方とも成功する必要があるということですね。

5行目の session は、先ほどと同様ですので、説明を割愛します。

以上をまとめますと、最初にパスワードを入力して、 そのユーザであるということを確認し、 次にパスワードの期限や使用可能な時間であることを確認します。 3つのチェックをパスすれば、ユーザ認証に成功しますし、 どれかでつまづくと、認証に失敗したとみなされます。


以上、PAM の設定方法について、簡単にご紹介しました。

今週は、簡単な例の紹介だけになってしまいました。すみません。
実際の設定ファイルは、もう少し複雑で、 別のファイルを include していたりします。 余力のある方は、追っかけてみてください。

ちなみに、内容はやや古いですが、以下の JF のドキュメントが、 とても参考になります。興味のあるかたは、眺めてみてください。

User Authentication HOWTO
http://www.linux.or.jp/JF/JFdocs/User-Authentication-HOWTO/

宿題の答え

先週の宿題は、

  wheel グループに所属するすべてのユーザを、列挙してください。

でした。

これは、/etc/passwd の中の、グループID が wheel と一致するひとと、 /etc/group の wheel の行に登録されているひとが、該当します。よね。

前者は、たとえば以下のようなスクリプトで、確認できます。

  #!/bin/sh
  IFS=":"
  while read acct passwd uid gid gcos hdir shell; do
      if [ "$gid" = 10 ]; then
          echo $acct
      fi
  done < /etc/passwd

パスワードファイルを読み込んで、グループID が 10 のひとを、 echo で出力しています。
read に、: で区切って読んでもらうため、IFS に : を指定しています。

後者も、同様のスクリプトで確認できますね。

  #!/bin/sh
  IFS=":"
  while read name passwd gid ulist; do
      if [ "$name" = wheel ]; then
          echo $ulist | tr ',' '\012'
      fi
  done < /etc/group

これを合体させますと、冗長ではありますが、こうなります。

  #!/bin/sh
  TMPFILE=`mktemp /tmp/list-wheel-XXXXXX`
  trap "rm -f $TMPFILE" 0 1 2 3 9 11 15
  IFS=":"
  while read acct passwd uid gid gcos hdir shell
  do
      if [ "$gid" = 10 ]; then
          echo $acct
      fi
  done < /etc/passwd > $TMPFILE
  while read name passwd gid ulist; do
      if [ "$name" = wheel ]; then
          echo $ulist | tr ',' '\012'
      fi
  done < /etc/group >> $TMPFILE
  sort $TMPFILE | uniq

グループID の 10 とグループ名の wheel を変更すれば、 別のグループの確認にも使えますね。先に /etc/group を参照して、 グループID をそこから得るようにすれば、グループ名の指定だけで済みます。

今週の宿題

今週の宿題は、

  以下の2行を、1行にまとめてください。

  auth            sufficient      pam_unix.so
  auth            required        pam_deny.so

です。

system-auth などではこうなっているのですが、 1行で記述できるように思われましたので、宿題にしてみました。 (間違ってませんように…)

あとがき

すべてはライフサイクルで表される、という名言を聞いたのは、数年前に参加した、 某講演会でのことでした。

ライフサイクルというのは、たとえば商品の場合、 「導入期」「成長期」「成熟期」があり、 最初は認知度が低くてあまり売れないのですが、そのうち売れ出してピークを迎え、 そのうち競合が増えてまた売れなくなってくる、という考え方のことです。(たぶん)

検索すると、図入りでわかりやすいのがあまりないのですが、たとえば、 以下が簡潔でわかりやすいと思います。

プロダクトライフサイクル
http://profile.allabout.co.jp/pf/aictax/column/detail/5272

ちなみに、わたしは、この本で最初に知りました。(面白いですよ)

60分間・企業ダントツ化プロジェクト
http://www.amazon.co.jp/exec/obidos/ASIN/447837421X/usupiorg06-22

…はいいとして、ライフサイクルがすべてに当てはまる、 という考え方は面白いですし、それとなく納得もできます。 ですので、それからは、簡単ではありますが、 いろんなことをライフサイクルに当てはめて考えるようになりました。

 

さて、今や空気のような存在となりつつあるインターネットですが、これは、 今、ライフサイクルのどのあたりに位置するのでしょうか?
…という疑問が、今さらながら、ふつふつと湧いてきました。

でも、利用者数などで確認するのは、すでにされているように思われますし、 あまりおもしろくないですよね。

などと思っていたら、今週、RFC の件数から割り出せるのではないか、 という考えが、突然、頭の中に浮かびました。
RFC の件数が多いほど、インターネット上の開発がホットと言えるのではないか、 ということですね。ホントかどうかはわかりませんが。

あ、RFC ってなに? という方は、Wikipedia の説明をご覧ください。

Request for Comments - Wikipedia
http://ja.wikipedia.org/wiki/Request_for_Comments

 

こういうのは、さっさとやるべきだと思い、 スクリプトを書いてグラフにしてみました。
以下は、1968年から2006年までの、その年に公開された RFC の件数を、 グラフで表したものです。

RFCの件数のグラフ

ややいびつですが、導入期から成長期に入ったところ、と言い切っても、 それほど間違いではないと思うのですが、いかがでしょうか。
もしそうだとしたら、まだまだあと10〜20年は、ホットでありつづけるのではないか、 と思われます。(ちょっと安心しました。)

ちなみに、このメルマガの読者数をグラフ化して、 ライフサイクルに当てはめてみたことがあります。
非常になだらかな S 字曲線が描かれましたが、すでに成熟していることがわかって、 非常に落ち込んだような記憶がございます…。

ライフサイクルはいろんなものに当てはまりますが、 それが幸せにむすびつくとは限らない、ということを知ったような気がします。

 

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

 

「いますぐ実践! 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/ (栗日記ブログ)


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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本