
|
[バックナンバーのトップへ] [Linux システム管理のトップへ] いますぐ実践! Linux システム管理 / Vol.138 / 読者数:1343名こんばんは、うすだです。 先日、ひさしぶりに、某 MS 社のセミナーに侵入してきました。
…も、もちろん、正規に申し込んで、堂々と行ってきたのですが。 それはさておき、こういったセミナーのささやかな楽しみといいますと、 よく来てくれたねぇ的グッズをいただけることではないか、 と個人的には思っております。
今回はなにをいただけるのかな、なんて淡い期待をいだいていましたら、
分厚くてでかくて重い写真集を、もれなくいただきました。
さて、どんな写真集なのかと思い、期待せずに開けて見てみますと…
さまざまな可能性を考慮してみましたが、この写真集を家に置いておくというニーズを、
ついに思いつくことはできませんでした。
ここのところ、会社では、本棚の隅のほうを見るたびに、
写真集のことを思い出させられてしまいます。 強引にポジティブ思考したところで、今回も、はりきってまいりますよ! 今回のお題 - fakeroot で root になりきる今でこそ、システム管理のメルマガなんて出しちゃっていますけれども、 学生のころは、一度も root 権限を得ることなく、 一般ユーザとして日々を過ごしていました。 root 権限を持つ先輩が、su して作業するのを見るたびに、 ああシステム管理者は大変そうだけどかっこいいなあ…などと思ったものでした。
さて、時は流れ、現在では、仮想環境やらなんやらのおかげで、
UNIX 的な環境を個人で持つことが、かなり簡単な世の中になりました。
とはいえ、初心者や初心者に近いかたにとっては、
それすらも敷居の高いものかもしれません。
というわけで、今回は、fakeroot をご紹介しようと思います。
fakeroot は、root 権限をシミュレートしてくれるソフトです。
もし fakeroot パッケージが見当たらなければ、Debian 系のかたは apt で、
Fedora なかたは yum で、入手してください。
fakeroot …といったことができるなら、 fakeroot で root の雰囲気を味わう必要などないように思いますが… 気づかなかったふりをしたいと思います。
それではまず、習うより慣れろ、ということで、実行してみましょう。 % fakeroot # 上記では、プロンプトが root っぽくなっていますが、 実際には何も変化しないかもしれません。ですが、見分けがつかないと不便ですので、 以降では、fakeroot 上か否かがわかるよう、プロンプトを変えておきます。 まずは、試しに、ファイルを作成してみましょう。 # touch foo # ls -l foo -rw-r--r-- 1 root root 0 5月31日 23:34 foo
foo という名の空のファイルを、touch コマンドで作成しています。 普通のひとなのに、fakeroot コマンドを実行しただけで、パスワードもなしに、 root の権限を得てしまったのでしょうか…。
…もちろん、そんなわけはありません。 % ls -l foo -rw-r--r-- 1 usu adm 0 5月31日 23:34 foo
…ああ、なんの変哲もない、自分のファイルでした。
別のひとの持ち物にしてみると、どうなるでしょうか。 # chown test.users foo # ls -l foo -rw-r--r-- 1 test users 0 5月31日 23:34 foo
ちゃんと、test ユーザ(users グループ)の持ち物になっています。 % ls -l foo -rw-r--r-- 1 usu adm 0 5月31日 23:34 foo
それでは、一般ユーザが作れないファイルを、
fakeroot 上では作ることができるのでしょうか。 # mknod null c 1 3 # ls -l null crw-r--r-- 1 root root 1, 3 6月 1日 21:51 null
…おお、作れてしまいました。 % ls -l null -rw-r--r-- 1 usu adm 0 6月 1日 21:51 null ちなみに、既存のファイルもすでに root のものになっています。 # ls -l drwxr-xr-x 3 root root 4096 4月 3日 19:41 bin/ drwxr-xr-x 12 root root 4096 6月10日 2004 doc/ ... fakeroot が root 権限をシミュレートするものだということが、 なんとなくわかっていただけたのではないかと思います。 ところで、fakeroot は、どのような原理で動作しているのでしょうか。
fakeroot を実行しますと、LD_PRELOAD という環境変数を設定して、
新たにシェルを起動します。
試しに、LD_PRELOAD を空っぽにしますと、悪い夢から醒めます。 # echo $LD_PRELOAD libfakeroot.so # ls -ld bin drwxr-xr-x 3 root root 4096 4月 3日 19:41 bin/ # export LD_PRELOAD= # echo $LD_PRELOAD # ls -ld bin drwxr-xr-x 3 usu adm 4096 4月 3日 19:41 bin/
ただ、fakeroot の実体は、LD_PRELOAD で指定されたライブラリと言えるため、 これだけでは、fakeroot 内で行った結果を残しておけません。
そこで、faked というデーモンさんを起動して、
faked に情報を一括管理させています。
# ls -ld bin
drwxr-xr-x 3 root root 4096 4月 3日 19:41 bin/
# ps -C faked
PID TTY TIME CMD
25262 ? 00:00:00 faked
# kill 25262
semop(1): encountered an error: 無効な引数です
bash: [: -ge: unary operator expected
# ls -ld bin
(応答がなくなる…)
faked を kill した後は、faked から情報が得られなくなってしまいますので、
その後 ls などを実行しますと、固まってしまいます。
…といった原理で、fakeroot は動作しています。 たとえば、/etc/shadow は root しか読み書きできませんので、 fakeroot 上で参照しようとしても、にべもなく断られます。 # grep test /etc/shadow grep: /etc/shadow: 許可がありません mount もできません。…が、その理由は微妙に異なります。 # mount -o loop,ro /boot/initrd.img /mnt/tmp mount: error while loading shared libraries: libfakeroot.so: \ cannot open shared object file: No such file or directory 実は、mount コマンドは setuid されているため、 LD_PRELOAD が無効になってしまいます。ですので、動作しないというわけなのです。 # ls -l `which mount` -rwsr-xr-x 1 root root 85564 11月 6日 2007 /bin/mount それでは、fakeroot は、どのような状況で必要とされるのでしょうか。 前述しましたが、ファイルを自分以外の所有者にしたいときや、 デバイスファイルなどをアーカイブやパッケージに含めたいときに、使用します。
以下では、一例として、Vine Linux 4.2 で使用している initrd に細工を施して、
QEMU 上で動作させてみたいと思います。
% fakeroot
# zcat < /boot/initrd-2.6.16-0vl76.28.img > initrd-cpio.img
# mkdir initrd-cpio; cd initrd-cpio
# cpio -i < ../initrd-cpio.img
552 blocks
# rm init bootsplash bin/*
# cp -p /bin/ash bin/
# cp -p /lib/i686/libc.so.6 /lib/ld-linux.so.2 lib/
# cat > init << EOF
#!/bin/ash
mount -t proc proc /proc
mount -t sysfs sysfs /sys
while [ 1 ]; do
/bin/ash
done
EOF
# chmod +x init
# cd ..
# (cd initrd-cpio; find . | cpio -o -H newc) | gzip -9 > initrd.img
これを、以下のようにして、QEMU でお試し実行します。 % qemu -kernel /boot/vmlinuz-2.6.16-0vl76.28 -initrd initrd.img \ -m 128 -no-kqemu -hda /dev/null
すると、QEMU 上で、ash がひたすら起動します。 以上、fakeroot の簡単な使いかたやしくみを、ご紹介しました。 詰め込んで駆け足でご説明してしまいましたので、 わかりにくい点も多々あったように思われます。そうだったら、申し訳ありません。
そんなときは、実行例をそっくり真似て、実行してみてください。
あ、fakeroot や LD_PRELOAD につきましては、以下の本に、
やや詳しく載っています。気になる貴兄は、
本屋さんで立ち読んでみてください。
Binary Hacks - ハッカー秘伝のテクニック100選 宿題の答え前回の宿題は、 CSV ファイルから、ユーザを復元するスクリプトを作りましょう。 でした。 CSV ファイルの該当する行から情報をいただいて、 useradd コマンドなどを呼んでしまえばよさそうですね。 というわけで、シェルスクリプトをもりもりと作成してみました。
#!/bin/sh
if [ $# -ne 1 ]; then
echo "Usage: $0 account"
exit 1
fi
IFS=','
while read acct pass uid gid gcos hdir shell lstchg min max \
warn inact expire flag; do
if [ "$1" = "$acct" ]; then
[ -n "$expire" ] && exp_opt="-e $expire" || exp_opt=""
[ -n "$inact" ] && ina_opt="-f $inact" || ina_opt=""
useradd -c "$gcos" -d $hdir $exp_opt $ina_opt \
-g $gid -p "$pass" -s $shell -u $uid $acct
[ -n "$min" ] && min_opt="-m $min" || min_opt=""
[ -n "$max" ] && max_opt="-M $max" || max_opt=""
[ -n "$warn" ] && warn_opt="-W $warn" || warn_opt=""
if [ -n "$min" -o -n "$max" -o -n "$warn" ]; then
chage $min_opt $max_opt $warn_opt $acct
fi
if [ -n "$lstchg" ]; then
chage -d $lstchg $acct
fi
fi
done
引数に、復活させたいユーザ名を、1つだけ指定します。 # chmod +x restoreuser.sh # ./restoreuser.sh jesus < user_20080518.csv CSV ファイルは、前回の前半でご紹介した、showuser.pl で作成したものです。 /etc/passwd と /etc/shadow 双方の情報を含むやつですね。
このスクリプトは、例によって、CSV ファイルをひたすら読み込み、
引数で指定したユーザ名と一致する行があれば、
useradd や chage といったコマンドを実行します。
情報のない項目のことをやや考えているため、見づらくなっています。 前回の内容や chage コマンドについて、詳しくご覧になりたい貴兄は、 以下を参考にしてくださいまし。
Vol.137 - ユーザ情報を管理する 今回の宿題今回の宿題は、 fakeroot で、setuid/setgid のコマンドを実行できない理由を考えて みましょう。 です。
setuid/setgid されたコマンドは、実行すると LD_PRELOAD が無効になりますが、
その理由を考えてみましょう。 あとがき冒頭で、分厚い写真集の恨みつらみを書いてしまいましたが、もちろん、 それだけではなく、Windows Server 2008 や Vista を、 ぽーんと無償でくださいました。1年間という期限つきではありますが、 それでもかなり太っ腹ではないかと思います。ありがたいです。敵ながら。…て、敵? 今の会社に入ってからは、Windows サーバなどには一切関わってきませんでしたので、 これを機会に、どこかにインストールして、1年間フル活用したいと思います。 ところで、MS さんは、DynamicIT と称して、ハードウェアの仮想化だけでなく、 ミドルウェアやアプリケーションなど、 あらゆるレイヤで仮想化を進めていこうとしているようです。
周囲の変化にあわせて柔軟に対応するために、
あらゆる層で仮想化を行うという考え方は、とてもまっとうなように思います。
今回も、ここまで読んでいただき、ありがとうございました。
「いますぐ実践! Linux システム管理」の解除は、以下からできます。
バックナンバーは、こちらにほぼ全部そろっています。
「栗日記」−毎日栗の絵を描いていると、いいこともあります。へへへ。 |
▼ トップ ▼ プロフィール ▼ リンク
▼ 作ってみました
▼ せんでん
▼ 最近読んだ本
[X]
「賢者の書」 喜多川 泰「セキュリティウォリア」 Cyrus Peikari, Anton Chuvakin 「CORE MEMORY」 John Alderman, Mark Richards 「新訳 星の王子さま」 サン=テグジュベリ / 倉橋 由美子 「センネン画報」 今日 マチ子 「粟津潔 デザインする言葉」 粟津潔 「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の創りかた」 渡波 郁 「非常識な成功法則」 神田 昌典 …これ以前は記録してません…
▼ 気に入ってる本
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||