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

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


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

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

明日から新学期なので、子どもが、その準備でばたばたしています。

長く楽しい夏休みが終わりますので、どうしても、 気分は沈みがちになりますよね。
うちの子の場合、沈みがちなんていうレベルではなく、 ネガティブな方向に針が振り切っています。(計測不能!!っていうくらい…。)

その気持ちはとってもよくわかるのですが、だからといって、 悪い空気をまき散らしていいということにはなりません。 ですので、朝からそのことで、叱ってばっかりでした。

とはいえ、あまりひとのことは言えません。
いやな打ち合わせの前日や納期間近、あるいは仕事でミスしたときなど、 知らないうちに不機嫌になっている自分がいます。

決まっている予定や、すでに起こってしまったことは、 今さら変えようがありませんので、負の感情に引っ張られてはいけないですよね。
ましてや、関係のないひとに八つ当たりするなんて、もってのほかです。
ですので、いやだいやだと思わずに済む方法を考えて、後向きな言動を、 前向きな行動に差し替えていくようにしたいと思います。

さあ心機一転して、今週も、はりきってまいりますよ!

今週のお題 - グループを使いこなす

ここのところ、初心を忘れて、走りすぎてしまったように思います。
ですので、ここらでまた、最初のころに戻りたいと思います。

 

この世界で生きていく以上、われわれは、 必ずどこかの組織に属していることになると思います。
読者のかたの大半は、どこかの企業に属していると思いますし、 独立して仕事をされているかたでも、たとえば住んでいる自治体には属していて、 何らかのサービスを受けているのではないかと思います。

Linux の世界でも…といいますか、UNIX や UNIX ライクな OS の世界でも、 ご存じのとおり、ユーザは、必ずどこかのグループに所属します。
そして、そのグループに与えられた権限を、ユーザが享受しています。

そんな、当り前過ぎて見落としがちなグループですが、これをうまく活用しないと、 せっかくのサーバの魅力が半減してしまいます。
あるいは、言い替えますと、管理の手間が倍増してしまいます。
まっとうなシステム管理者であれば、そんなゆゆしき状況を、 甘受してはいられませんよね。

というわけで、今週は、グループを使いこなすための初歩的なところを、 ご紹介したいと思います。


まずは、今さらですが、グループってなんだっけ? といったところから、 はじめてみたいと思います。

グループというのは、複数のユーザをひとまとめにして、 そのひとまとめのユーザに対して、 ある権限を扱えられるようにするためのものです。
(権限を指定する単位だ、と言っても間違ってはいないと思います。)

たとえば、あるプロジェクトの資料は、 開発一部に所属するひとしか見ることができないようにしたい、としましょう。
そんなときは、開発一部グループのひとしか参照できないよう、 ファイルのパーミッションを、以下のように設定します。

  # chmod 440 secretfile
  # chgrp kaihatu1 secretfile
  # ls -l secretfile
  -r--r----- 1 root kaihatu1 179811  9月 2日 15:14 secretfile

お察しのとおり、ファイル secretfile が、プロジェクトの資料です。
secretfile の所有者が root、所有グループが kaihatu1 です。さらに、 パーミッションが、所有者か所有グループのひとしか読めないように、 設定されています。
これで、kaihatu1 グループに属するひとだけ見られるように、 設定することができました。


さて、各ユーザは、主グループというグループに所属します。
普通にファイルを作成すると、作成されたファイルのグループが、 それに設定されます。

  % touch foo
  % ls -l foo
  -rw-r--r-- 1 usu sysad 0  9月 2日 22:31 foo

この例の場合、ユーザは usu さんで、主グループは sysad です。

主グループは、useradd コマンドなどでユーザを作成する際に、 指定することができます。

  # useradd -u 601 -g sysad -d /home/usu -s /bin/bash -m usu

主グループは、-g オプションで指定します。
あるいは、usermod コマンドで、あとから変更することもできます。

  # usermod -g adm usu

上記では、usu ユーザの主グループを、adm に変更しています。


「主グループ」というからには、主ではないグループもあります。

あちこちのプロジェクトに参加していて、 複数のグループの権限を必要とする多忙なユーザが、 たいていいらっしゃるのではないかと思います。

そんなひとのために、複数のグループに属することができるようになっています。 これらのグループを、「補助グループ」というようです。
これも、useradd や usermod コマンドで指定できます。

  # useradd -u 601 -g sysad -G adm -d /home/usu -s /bin/bash -m usu

補助グループは、-G オプションで指定できます。
上記の場合、主グループが sysad で、補助グループが adm です。
つまり、sysad グループと adm グループに所属することになります。

複数指定する場合は、カンマ(,) で区切ります。

  # usermod -G adm,disk,uucp usu

これにより、usu ユーザは、主グループが sysad、補助グループが adm, disk および uucp に設定されます。
(つまり、sysad, adm, disk および uucp グループに所属します。)

ただ、以前補助グループに指定し、今回指定しなかったグループは、 補助グループから外されてしまいますので、ご注意ください。

たとえば、上記の状態で、以下を実行します。

  # usermod -G adm,apache,uucp usu

すると、disk グループを指定していませんので、 disk グループには所属しなくなってしまいます。

…ちょっと、こんがらがってきましたね。
こんがらがって、自分の所属するグループがわからなくなったときには、 groups コマンドを実行すると、所属グループ一覧を表示してくれます。

  % groups
  adm apache sysad uucp

ちなみに root は、自分以外のひとのグループも確認できます。

  # groups usu
  usu : adm apache sysad uucp

補助グループにいちいち参加させるのは面倒だけど、 一時的にグループの権限を与えたい、というときがあるかもしれません。

そんなときには、以前ご紹介した、グループにパスワードを設定する方法が、 使えるのではないかと思います。

Vol.037 - グループにスポット参加する
http://www.usupi.org/sysad/037.html

詳しくは、上記をご参照いただきたいのですが、簡単にご紹介しますと、 /etc/group ファイルにパスワードを設定してから、newgrp コマンドで、 そのグループのパスワードを入力します。

  % groups
  users apache
  % newgrp testg
  Password: (testg グループのパスワードを入力)
  % groups
  testg users apache

ただし、1つのパスワードを複数のひとで共有することになりますので、 脆弱性をはらんでいると言えます。取扱いには十分ご注意ください。


以上、グループを活用するための基本的なところを、ご紹介しました。

最初のうちは、管理者と非管理者くらいにしておいて、ニーズが発生する度に、 グループの作成を検討すればよいのではないかと思います。

それから、言い忘れましたが、usermod コマンドなどで所属するグループを変更しても、 /etc/group などのファイルが書き換わるだけです。
ですので、現在実行中のシェルなどには、変更が反映されません。
グループの変更を反映したいときは、ログインし直すなどしてください。

宿題の答え

先週の宿題は、

  デバイスが追加されたときに、その旨をメールでわかりやすく知らせて
  ください。

でした。

これがいいものかどうかはわかりませんが、とりあえず的回答例です。

  #!/bin/sh
  trap "/bin/rm -f $TMPFILE" 1 2 3 9 11 15
  TMPFILE=`/bin/mktemp /tmp/mail-udev-XXXXXX`
  DEVICENAME=`/bin/basename "$DEVPATH" 2> /dev/null`
  [ -n "$1" ] && TOADDR=$1 || TOADDR="root"

  echo "*** $ACTION $DEVICENAME" > $TMPFILE
  echo "*** device file : $DEVNAME ($MAJOR,$MINOR)" >> $TMPFILE
  echo "" >> $TMPFILE
  /usr/bin/printenv | /bin/grep "^[A-Z]" | /bin/sort >> $TMPFILE
  /usr/bin/Mail -s "[udev] $ACTION $DEVPATH" $TOADDR < $TMPFILE
  /bin/rm -f $TMPFILE

これを、例えば /usr/local/sbin/udevmail.sh というファイル名で保存し、 実行可能な状態にしておきます。

そして、先週ご紹介した、ニセのデバイスドライバで試す場合は、 以下のような設定ファイルを用意しておきます。

  % cat /etc/udev/rules.d/88-uso.rules
  KERNEL=="uso_device", NAME="usodev", GROUP="adm", MODE="0660", \
    RUN+="/usr/local/sbin/udevmail.sh usu@usupi.org"

usu@usupi.org は送信先のメールアドレスです。適当なアドレスに変えてください。 (変更しないで試すと、わたしにメールが届きます。別に構いませんが。 ちなみに、メールアドレスを省略すると、root に届きます。)

あとは、ドライバを追加して、メールが届くことを確認するだけです。

  # insmod usodev.ko

すると、うまくいけば、以下のようなメールが届くと思います。

  Subject: [udev] add /class/misc/uso_device

  *** add uso_device
  *** device file : /dev/usodev (10,63)

  ACTION=add
  DEVNAME=/dev/usodev
  DEVPATH=/class/misc/uso_device
  MAJOR=10
  MINOR=63
  ...後略...

*** で始まる2行を見れば、概略がわかりますが、念のため、 環境変数の一覧もあとにつけるという優柔不断さが、姑息感を漂わせています。

もし、環境変数一覧が邪魔でしたら、printenv の1行を削ってください。
それから、device file : のところは、ls -l $DEVNAME としてよいかもですね。

…という感じで、いろいろお試しくださいませ。

今週の宿題

今週の宿題は、

  所有グループが参照不可のパーミッションのファイルを、そのグループ
  に所属するユーザは参照できるでしょうか。

です。

たとえば、以下のようなパーミッションのファイルがあったとき、

  # ls -l /foo/bar/test
  -r-----r-- 1 root sysad 4940  9月 2日 23:34 /foo/bar/test
  • 主グループが sysad のユーザは、参照できるでしょうか。
  • 主グループは sysad ではありませんが、補助グループに sysad を含むユーザは、 参照できるでしょうか。
  • グループに sysad を含まないユーザは、参照できるでしょうか。

実際に試せばわかりますよね。ぜひ、実践してみてください。

あとがき

このメルマガのネタは、なるべく早いうちに考えておくよう心がけているのですが、 たまに、土日になっても思い浮かばないことがあります。

こうなると、PC の前でうんうん唸っていても、ネタは出てきません。

そんなときは、開き直って、ぜんぜん別のことをやると、 出てくることが多いように思います。なんといいますか、 別のことを行いながら中途半端に考えると、ぽんっとネタが出てくる、 という感じです。不思議です。

今日のネタも、土曜日の夕方、からあげ粉を買いに行く道中で考えているうちに、 ふと思いついたネタです。

あ、トラブルの調査やデバッグなんかのときも、ありますね。 煮詰まったところで風呂に入ったりすると、突然対策を思いついたりします。
(アルキメデスみたいですが、思いつく策は、ささやかなものです。)

ただ、これには、副作用があります。
それは、本来の目的を忘れて、別のほうに没頭してしまうことです。

特に、ゲームなど、非仕事系趣味的なことが、 経験上非常に危険な行為だと言えます。
だれかが注意してくれればまだよいのですが、夜中ひとりで作業しているときは、 だれも注意してくれないので、かなりデンジャラスです。

こんなときは、時間制限を設けるしかないのではないかと思います。
とはいえ、ちゃんと設けたことはないのですが。(反省…)

 

さて、と書くと、もうバレバレのようで、たいへん申し訳ないのですが、 来週も、またお休みをいただきたいと思います。
またしても、本業が炎上して、脳ミソが逼迫しております。
9月末までそんな調子かもしれないのですが、再来週は、 がんばって発行にこぎつける所存でございます。

ぼちぼち上期末ですので、みなさんも、同様にご多忙かもしれませんね。
ま、こればっかりはどうしようもない、不可避なものだと思いますので、 覚悟を決めて、お互いがんばって乗り切りましょう!

 

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

 

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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本