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

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


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

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

楽しかった黄金週間が、まもなく終わろうとしています。
みなさんの黄金週間は、いかがでしたでしょうか?

いろいろ思うところはあると思いますが、個人的には、明日から社会復帰できるよう、 早めに就寝されることをお勧めします。
(こんな時間に発行しておいてなんですが…。)

ところで、Windows XP の販売期間やサポート期間について、 いろいろと話題になっているようですね。(Yahoo の買収ほどじゃないですが…)

結局、OS の新機能はさほど必要とされておらず、セキュリティや速度、 信頼性などがそこそこ維持されるなら、XP でもぜんぜん問題ないよ、 とみんなが思っているところに、問題があるような気がします。

…いえ、XP でいいのだから、ぜんぜん問題ではないですね。

CPU などのハードが速くなり、インターネットもそこそこ使えて、 OS も安定してきた今、ひとびとの注目が OS より上の層に向かうことは、 ごく自然なことのように思います。

ですので、今後、MS がどのように方向転換していくのか、 現在の寡占的状況を維持できるのかなどを、注意深く観察したいなと思います。

身もふたもないことを書いたところで、今回も、はりきってまいります!

今回のお題 - パスワードを自動生成する

前回、Mercurial というバージョン管理ツールを使って管理する方法を、 簡単にご紹介しました。

Vol.135 - Mercurial で設定ファイルを管理する
http://www.usupi.org/sysad/135.html

ですが、反響がほとんどなく、読者さんもあまり増えませんでした。
これはいいぞと思うツールに出会って、勝手に舞い上がってしまっていたようです。 …め、目が覚めました。

また、この時期、新入社員のかたが教育を終え、 配属されてシステム管理の見習いに任命されたとか、 異動先でシステム管理を任されてしまった、ということが、 各所で見受けられるように思われます。

これらを踏まえまして、またしても初心にかえり、 脱初心者を目指す貴兄向きの内容を、粛々とご紹介したいと思います。

というわけで、まず手始めに、ユーザ登録を取り上げたいと思います。

ユーザ登録といえば、useradd コマンドですが、 数十または数百のユーザを一括して登録するとなると、若干のひねりが必要です。
そのあたりを、できるだけ具体的に、ご紹介していこうと思います。


…とはいえ、複数ユーザの一括登録ネタは、初期のころにご紹介済です。

Vol.004 - たくさんのユーザを登録する
http://www.usupi.org/sysad/004.html
Vol.005 - たくさんのユーザを登録する フルスロットル
http://www.usupi.org/sysad/005.html

上記を見ていただければ、決まったパターンのユーザを大量生成することができます。 後は、各自読んでいただければと思います。

…いやいや、ですが、パスワードに関しては、 驚くほど簡潔に終わらせてしまっています。いくら社内限定とはいえ、 簡単に推測できるパスワードを使用するのは、 あまりお勧めできるものではないですよね。(われながら…)

ですので、今回は、ややきちんとしたパスワードを自動生成して、 複数のユーザをじゃんじゃん登録したいと思います。


ありがたいことに、かゆいところに手が届く的ツールは、 たいていだれかが開発してくださっています。

パスワードを自動的に生成してくれるツールも、もちろん存在します。
それは、mkpasswd というコマンドです。

Fedora や Vine などでは、expect パッケージに含まれます。
Ubuntu の場合、whois パッケージに同名のコマンドがありますが、 効用がちょっと異なります。ですので、 libstring-mkpasswd-perl パッケージに含まれる mkpasswd.pl のほうを、 ご使用ください。

 

さて、mkpasswd(もしくは mkpasswd.pl)コマンドを実行しますと、 適切なパスワードを標準出力に出力してくださいます。

  % mkpasswd
  zxv7@N8mJ

引数なしですと、上記のように、9文字のパスワードを出力します。
長さを指定したい場合は、-l オプションを使用します。
たとえば、16文字のパスワードにする場合、以下のように実行します。

  % mkpasswd -l 16
  c[j5Fwcmsmaydl4A

また、使用するパスワードの文字種も指定できます。
デフォルトでは、数字、アルファベット小文字、大文字、そして特殊文字は、 それぞれ最低 2, 2, 2, 1文字使用されますが、 オプションの使用で変更することが可能です。
-d オプションで数字、-c オプションで小文字、-C オプションで大文字、 -s オプションで特殊文字の最低文字数を指定できます。
たとえば、大文字を最低3文字、特殊文字を最低2文字使用したい場合は、 以下のように実行します。

  % mkpasswd -C 3 -s 2
  {_T3Ig1Iv

…という感じで、mkpasswd コマンドを実行しても、 ファイルが消えたりパスワードが変更されたりなどといったことはありません。
ですので、いろいろなオプションを指定して、実行してみてください。


mkpasswd コマンドの使いかたがわかったところで、本題に入ります。

まず、ユーザを一括登録する際に使用する、 CSV ファイルを生成するためのスクリプトを、作成したいと思います。
CSV ファイルには、1行につき、以下の情報を含むこととします。

  ユーザ名,パスワード,UID,GID,ユーザ情報,ホームディレクトリ,シェル

ユーザ名は、ここでは user001, user002, ... といった、 連番的なものにしたいと思います。
そして、ユーザID(UID)は 500+連番に、グループID(GID)は 500、 ホームディレクトリは /home/ユーザ名、シェルは /bin/bash だと仮定します。

すると、上記 CSV ファイルを生成するスクリプトは、以下の通りです。

#!/bin/sh
MKPASSWD="/usr/bin/mkpasswd -s 0 -l 8"
BASEUID=500
GID=500
[ $# -eq 1 ] && TOTAL=$1 || TOTAL=100
num=1
while [ $num -le $TOTAL ]; do
    printf "user%03d,`$MKPASSWD`,%d,$GID,User %03d,/home/user%03d,/bin/bash\n" $num `expr $BASEUID + $num` $num $num
    num=`expr $num + 1`
done

そのまま実行しますと、user001〜user100 の100人分を出力します。
引数に数字を指定すれば、指定した人数分を出力することもできます。

これを mkpasswdcsv.sh というファイル名で保存し、実行しますと、以下のように、 CSV 形式の情報がどどどと吐き出されます。

  % chmod +x mkpasswdcsv.sh
  % ./mkpasswdcsv.sh
  user001,5ia4fAQk,501,500,User 001,/home/user001,/bin/bash
  user002,qi8clZC5,502,500,User 002,/home/user002,/bin/bash
  ...中略...
  user100,0Vkyu1Ow,600,500,User 100,/home/user100,/bin/bash

そして、上記 CSV ファイルをもとに、ユーザを一括登録するスクリプトは、 以下のようになります。

#!/usr/bin/perl
my @salt = ('.', '/', 0..9, 'A'..'Z', 'a'..'z');
my $snum = $#salt + 1;

srand(time ^ $$ ^ unpack "%L*", `ps auxww|gzip`);
while(<>) {
    chop;
    my @dat = split(/,/);
    my $passwd =
        crypt($dat[1], join('', @salt[rand $snum, rand $snum]));
    `useradd -p \"$passwd\" -u $dat[2] -g $dat[3] -c \"$dat[4]\" -d $dat[5] -s $dat[6] $dat[0]\n`;
    print "$dat[0] : " . ("ok", "NG")[$? ? 1:0] . "\n";
}

パスワードの暗号化のために crypt が必要でしたので、 Perl スクリプトに仕立て上げました。とはいえ、基本的には、 useradd コマンドに、各種情報を横流しするだけの、ごく単純な作りだと思います。

これを、useraddcsv.pl という名前で保存しましたら、root の権限で、 以下のように実行してください。

  # ./mkpasswdcsv.sh > user001-100.csv
  # chmod +x useraddcsv.pl
  # ./useraddcsv.pl < user001-100.csv

すると、user001〜user100 が、めでたく生成されるはずです。
もしされなかったら、エラーメッセージなどをもとに、 粛々とデバッグをしてみてくださいまし。


以上、mkpasswd コマンドを使ってパスワードを自動的に生成し、 複数のユーザを一括して登録する方法を、ご紹介しました。

上記は、あくまでもひとつの例です。
実際には、さまざまなシチュエーションが想定されますので、 ご紹介したスクリプトがそのまま使える、というケースは少ないのかもしれません。

ですが、肝の部分はそのまま使えると思いますので、ぜひ、スクリプトを作成して、 極力自動化することを目指してくださいませ。

宿題の答え

前回の宿題は、

  Mercurial によるバージョン管理を、最初からあらためて始めたいとき
  には、どうすればよいでしょうか?

でした。

管理対象のトップディレクトリ直下に、.hg という名前のディレクトリが作られて、 その下にじゃんじゃんと情報が記録されていきます。

ですので、いままでのことをなかったことにするには、 .hg 以下をすべて消し去ってしまえばよいです。

  % rm -rf .hg

あっけないですね。以上、現場からお送りしました。

 

さて、予定より早く試合が終わりましたので、当初ご紹介の予定だった、 Mercurial の続きの一部を、ここでご紹介しましょう。(なんじゃそりゃ)

分散バージョン管理ツールというくらいですので、 複数のマシン上で分散して管理することができます。
具体的には、SSH を使って、他のマシン上の管理対象を、 手元のマシン上にコピーすることができます。

  % hg clone ssh://マシン名/パス

たとえば、zion という名のマシンの /etc/httpd 以下をお取り寄せするには、 以下のように実行します。

  # hg clone ssh://zion//etc/httpd

zion 上に同名のアカウントがないとか、root で ssh ができないという場合は、 他のユーザの権限でお取り寄せしましょう。たとえば、 zion 上のユーザ usu の権限で行うには、以下のように実行します。
(/etc/httpd 以下を読む権限を、usu が持っている必要があります。)

  # hg clone ssh://usu@zion//etc/httpd

すると、カレントディレクトリに、httpd/ 以下の複製が作成されます。

 

さて、双方で開発を行いますと、同期をとる必要があると思います。
たとえば、コピー元のマシンで変更が行われ、それをコピー先のマシンに反映するには、 コピー先のマシン上で hg pull を実行します。

  # hg pull

ただし、これだけでは、.hg/ 以下の情報が反映されるだけです。
実際のファイルを更新するために、hg update も実行してください。

  # hg update

 

逆に、コピー先のマシンで変更し、commit した内容を、コピー元に反映する場合は、 commit した後に hg push を実行します。

  # hg push

こちらも、コピー元の .hg/ 以下を変更するだけです。 コピー元の実際のファイルに変更を反映させるには、 コピー元のマシン上で hg update を実行してください。

  zion# hg update

 

ちなみに、コピー元のありかは、hg path でわかります。

  # hg path
  default = ssh://usu@zion//etc/httpd

 

反響はあまりありませんでしたが、 Mercurial がよいツールだということにかわりはないと思います。ですので、 もし万が一触る機会がありましたら、ぜひぜひ使ってみてください。(嘆願)

今回の宿題

今回の宿題は、

  複数のユーザを一括で削除するスクリプトを作成しましょう。

です。

たくさんのユーザを登録する機会があるとするならば、その逆も真なりということで、 一括して削除しなければならないシチュエーションもあるのではないかと思います。

ユーザ名を引数で指定してもいいですし、 本題と同じようなCSVファイルを使用してもいいと思います。 各自よいなと思った方法で、実現してみてくださいませ。

あとがき

昨年の黄金週間は、栗日記のブログパーツを作ることだけを目標にして、 いちおうブログパーツを完成させることができました。

今年は、諸般の事情により、絵をいくつか描く必要があり、 これといった目標は立てませんでした。
そのおかげで…と言っていいのかどうかわかりませんが、 描き上げるべき絵は完成させることができましたし、 親子ともにもりもりと休みを楽しむこともできました。

せっかくの休みですから、お仕事などから開放されて、 リフレッシュすることも大事だよな、と思うことにしました。
というわけで、明日から、みっちりと仕事をこなそうと思います。

さて、絵を描くノルマを達成するついでに、 以前から描こうと思っていた絵も作ってみました。
それは、シス管のページのトップの絵です。

http://www.usupi.org/sysad/

個人的に思い入れのあるワークステーションをメインに、描きたいマシンを、 縮尺はやや無視して(本当は気づいたらおかしくなっていただけですけど…)、 もりもりと描いてみました。
こんな程度の画力ですので、こりゃなんだよっていうマシンも多々あると思いますが、 あーこんなのあったねとかなんとか思っていただけますと、幸いです。

 

今回も、ここまで読んでいただき、ありがとうございました。
それでは、次回は 5月18日(日) 頃に、お会いしましょう!

 

「いますぐ実践! 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デスクトップ環境に関する情報が満載です。 メルマガもありますよ。
LINUXで自宅サーバーを構築・導入
(Fedora8)

Fedora8のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日本の Linux 情報
日本の、Linux 総本山的なところです。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
Open Tech Press
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん





▼ 最近読んだ本

ハリー・ポッターと炎のゴブレット ハリー・ポッターと炎のゴブレット
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターとアズカバンの囚人 ハリー・ポッターとアズカバンの囚人
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと秘密の部屋 ハリー・ポッターと秘密の部屋
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと賢者の石 ハリー・ポッターと賢者の石
J.K.Rowling
  ハリポ月刊なので読み直してます
アルケミスト アルケミスト
パウロ・コエーリョ
  また読んだ
賢者の書 賢者の書
喜多川 泰
  違った視点から見られてよかった
セキュリティウォリア セキュリティウォリア
Cyrus Peikari, Anton Chuvakin
  やや冗長…ためにはなりました
CORE MEMORY CORE MEMORY
John Alderman, Mark Richards
  この筐体でPC作ってほしい!
新訳 星の王子さま 新訳 星の王子さま
サン=テグジュベリ
倉橋 由美子
  つまらない大人になったのか…
センネン画報 センネン画報
今日 マチ子
  長編マンガがとてもよかった
.....

[X]
「粟津潔 デザインする言葉」 粟津潔
「Binary Hacks」 高林 哲,鵜飼 文敏,佐藤 祐介,浜地 慎一郎,首藤 一幸
「Make: Volume01」 オライリー・ジャパン
「セーラが町にやってきた」 清野 由実
「手紙屋」 喜多川 泰
「Linuxカーネル2.6解読室」 高橋 浩和,小田 逸郎,山幡 為佐久
「人蕩し術」 無能 唱元
「子育てハッピーアドバイス2」 明橋 大二, 太田 知子
「ラッセル幸福論」 B. Russell
「それでも人生にイエスと言う」 Viktor Emil Frankl
「子育てハッピーアドバイス」 明橋 大二, 太田 知子
「考具」 加藤 昌治
「北欧デザイン<3>」 渡部 千春
「北斎の謎を解く」 諏訪 春雄
「体感美術館」 平野 暁臣
「チベット永遠の書」 Theodore Illion
「リナックスの革命」 Pekka Himanen
「人月の神話」 Frederick Phillips,Jr. Brooks
「ヤバい経済学」 Steven D. Levitt, Stephen J. Dubner
「小布施ッション<2001-2002>」 セーラ・マリ カミングス
「アンパンマン伝説」 やなせ たかし
「夢をかなえるゾウ」 水野 敬也
「ゲーム開発者のためのAI入門」 David M. Bourg, Glenn Seemann
「北欧デザイン<2>」 渡部 千春
「北欧デザイン<1>」 渡部 千春
「ヒューマン2.0」 渡辺 千賀
「中国・ロシア同盟がアメリカを滅ぼす日」 北野 幸伯
「超ロング・セラー 絶滅寸前商品」 湯浅 豊彦
「The BUG(ザ・バグ)」 すずき ひろのぶ,かとう みつあき
「デザインのデザイン」 原 研哉
「マキアヴェッリ語録」 塩野 七生
「ハンバーガーを待つ3分間の値段」 斎藤 由多加
「星の旅人-スペイン「奥の細道」-」 黛 まどか
「食品の裏側」 安部 司
「On Lisp」 Paul Graham
「ぼくが医者をやめた理由 つづき」 永井 明
「あなたならどうする?」 Jack Nikolaschka
「セキュアプログラミング−失敗から学ぶ設計・実装・運用・管理」
      Mark G. Graff, Kenneth R. van Wyk
「「左利き」は天才?−利き手をめぐる脳と進化の謎
      David Wolman
「自分の中に毒を持て」 岡本 太郎
「アトピーの薬を減らす本」 田中 貴子
「岡本太郎「明日の神話」修復960日間の記録」 吉村 絵美留
「X51.ORG THE ODYSSEY」 佐藤 健寿
「アレルギーっ子の暮らし応援BOOK」 佐藤 のり子
「沖縄文化論」 岡本 太郎
「「伝説の社員」になれ!」 土井 英司
「コンピュータの構成と設計(上)」 Patterson & Hennessy
「カラスのジョンソン」 明川 哲也
「ドリルを売るには穴を売れ」 佐藤 義典
「頭がよくなる照明術」 結城 未来
「クロフォードのインタラクティブデザイン論」 Chris Crawford
「いじめの根を絶ち子どもを守るガイド」 Barbara Coloroso
「非常識のすすめ―逆発想の仏教論」 ひろさちや
「Linuxアドバンストネットワーク構築ガイド - HAサーバ構築編」
      デージーネット
「イノベーションの達人!」 Tom Kelly, Jonathan Littman
「クリエーター50人が語る創造の原点」 小原 啓渡
「欺術 - 史上最強のハッカーが明かす禁断の技法」 Kevin Mitnick
「楽しい気象観察図鑑」 武田 康男
「入門 Ajax」 高橋 登史朗
「リリカルな自画像」 岡本 太郎
「やぎの目ゴールデンベスト」 林 雄司
「初めてのPython 第2版」 Mark Lutz,David Ascher
「鼻兎」 小林 賢太郎
「なぜ、これがアートなの?」 Amelia Arenas
「芸術起業論」 村上 隆
「まほう色の瞳」 Enrique Barrios
「ラーメンズつくるひとデコ」 ラーメンズ
「R25 つきぬけた男たち」 R25編集部
「美の呪力」 岡本 太郎
「しろのあお」 上大岡 トメ
「ザ・ゴール」 Eliyahu M. Goldratt
「ハッカーと画家」 Paul Graham
「岡本太郎に乾杯」 岡本 敏子
「Fedore Core Expert」 Software Design
「誰も知らない男」 ブルース・バートン
「子どもが育つ魔法の言葉」 ドロシー・ロー・ノルト
「国家の罠」 佐藤 優
「夜回り先生」 水谷 修
「やぎの目絵日記」 林 雄司
「7つの習慣」 スティーブン・R. コヴィー
「まろ、ん?−大掴源氏物語」 小泉 吉宏
「ザ・サーチ グーグルが世界を変えた」 ジョン・バッテル
「ポストモダン・マーケティング」 スティーブン ブラウン
「機動戦士ガンダムさん」 大和田 秀樹
「小エロのひみつ - Webやぎの目研究発表」 林 雄司
「これ、誰がデザインしたの?」 渡部千春
「60分間・企業ダントツ化プロジェクト」 神田 昌典
「ガルシアへの手紙」 エルバート ハバード
「人生は素晴らしいものだ」 オグ・マンディーノ
「ザ・マインドマップ」 トニー・ブザン,バリー・ブザン
「ワインバーグのシステム思考法」 G.M.ワインバーグ
「渋谷ではたらく社長の告白」 藤田 晋
「渋井真帆の日経新聞読みこなし隊」 渋井 真帆
「コラム息切れ」 小野 法師丸
「早朝起業」 松山 真之介
「変な人が書いた驚くほどツイてる話」 斎藤 一人
「35歳から仕事で大切にしたいこと」 村井 勉
「金融広告を読め」 吉本 佳生
「発想する会社!」 トム・ケリー,ジョナサン・リットマン
「エハイク」 吉田 戦車
「人生の旋律」 神田 昌典
「仕事の思想」 田坂 広志
「CPUの創りかた」 渡波 郁
「非常識な成功法則」 神田 昌典
…これ以前は記録してません…

▼ 気に入ってる本

夢をかなえるゾウ 夢をかなえるゾウ
水野 敬也
  いままでで最高の「笑える」成功本
Linuxデバイスドライバ Linuxデバイスドライバ
Alessandro Rubini,
Jonathan Corbet
  ドライバ作らなくてもためになる
Firefoxの改造テクニック! Firefoxの改造テクニック!
大浦 淳
  いま栗日記拡張を考えてます
Apacheモジュール プログラミングガイド Apacheモジュール プログラミングガイド
小山 浩之
  Apacheの中身もわかるよ
図解 実戦マーケティング戦略 図解 実戦マーケティング戦略
佐藤 義典
  栗日記も戦略的に行こう!
やぎの目ゴールデンベスト やぎの目ゴールデンベスト
林 雄司
  よめも爆笑してました
アルケミスト アルケミスト
パウロ・コエーリョ
  ヘコみそうなとき読みます
X51.ORG THE ODYSSEY X51.ORG THE ODYSSEY
佐藤 健寿
  X51.ORGの集大成
チベット永遠の書 チベット永遠の書
Theodore Illion
  いろんな意味ですごい!!
影響力の武器 影響力の武器
ロバート・B・チャルディーニ
  思わず納得します