場合 - みる会図書館


検索対象: UNIX MAGAZINE 1995年8月号
136件見つかりました。

1. UNIX MAGAZINE 1995年8月号

こまでで、メールの削除、 refile 、さらに refile 先の フォルダク作コマンドを紹介しました。どちらかという と、、メールの整理 " のためのコマンドです。これらを駆使 して、誰もがなろうとしてなかなかなれない「メール整理 の鉄人」を目指してください。 メールを読むときのコマンド メールを読む際に ( リなコマンドは、前回紹介したもの 以外にもたくさんあります。順にみていくことにしましょ P 、 N : * マーク寸いたメールを読む 、、メールにマークを付ける " のところで紹介する * マーク カ寸けられたメールを読むときに便利なコマンドです。 P は、現在のカーソルより前にある * マークの付いたメール を読むことができます。 N なら現在のカーソルより後ろに 連載 UNIX の首具箱ー⑩ Message NO. セージ番号を訊かれます。 カーソルを飛はせます。 j を入力すると、以下のようにメッ メッセージ番号を指定して、その番号の付いたメールに j 彎諚した番号寸いたメールに飛ぶ あるものです。詳しくは後します。 v : summary モードのみ、あるいは summary ルがそのメールに移ります。 こて飛移り先のメッセージ番号を指定すれば、カーソ UNIX MAGAZINE 1995.8 たひ男盟 t ます。 もう 1 度 v を入力すると、 message ウインドウがふた えすに summary モードのみにすることができます。 以外のウインドウがあった場合は、はかのものに景与・ ている場合は C - xl と同し働きをします。 MuIe に Mew summary & message モードの両ウインドウが表示され ます。 MuIe 本を Mew だけで利用していて、画面に これを summary モードのみにしたいときは v を入力し 側に message モードのウインドウが表示されています。 ドウ ( バッファ ) が summary モードになっていて、下 Mew でメーノレを読んでいると、 MuIe の上側のウイン トグル message モード両方のウインドウを表示するかどうカ C-c C-s 、 C-c C-r : 現在読んでいるメールの内容をサ 長いメールが届けられ、そのメールの内容 (message モードで表示されているメール ) に対して検索をおこない たい場合に用いるコマンドです 8 。 c-cc-s は順方向に、 C-c C-r は逆方向に検索します。 たとえば C-c C-s と入力すると、ますこ (Emacs の一番下の部分 ) に、 l-search: と出ます。そこで検索したい文字列を 1 文字すっ入力し ていくと、それにマッチした文字列にカーソルか移動しま す。同じ文字列をいくつも探したいときは C ー cC ー s を何回 か叩きます。すると、マッチする部分にカーソルが次々と 移動します。 C-c C-r は、検索が逆方向におこなわれるだ けで機能的には同じです。このような機能は、 Emacs の インクリメンタル・サーチ (C-s 、 C-r) とまったく同しな のて才動なく利用できるでしよう。 / 、 ? . キ諚されたフォルダを pick MH では、 pick というコマンドが同し働きをします。 pick コマンドは、指定されたフォルダに格納されたメー ルのなかから、指定された条件に合うものを探しだしてく れます。たとえば「 xxx さんからのメールだけをもう 1 度 全売もう」と考えた場合、たくさんあるメールのなかか ら、 xxx さんから届いたものだけを選びながら読むのはた いへんです。こういうときに舌躍してくれます。 / と ? の働きの違いは次のようになります。 指定されたフォルダに対して・与えられた条 : に合致する メールを選び出し、それらだけを表示する。はかのもの は表示しない。 えられた条件に合致するメールのうち、現在のフォ ルダにあるものに * マークを付ける。ただし、すでにほ かのマークが付けられているメールにはマークは付か これらを場面に応して使い分けれはいいでしよう。ちな みに、 ? を利用する場合は、その前にかならす x で。や D 8 メールク Y 、ツダは槲き対象外てす。 、ニ / ヾッファ 137

2. UNIX MAGAZINE 1995年8月号

LJN Ⅸ流プログラミング 58 リスト 1 setuid を利用したファイルへの書込み #include く stdio . れ > main() FILE int *fp; uid; if if if if ( ()p = fopen("/tmp/file" fprintf (stderr, "Can't open file /tmp/file\n") ; exit(l); (setuid(uid = getuid() ) く 0 ) { "setuid failed for %d\n" fprintf (stderr, exit ( 1 ) ; (fopen("/tmp/file" fprintf (stderr, "Open failed, but OK\n") ; (fprintf(fp, " \ Ⅱ " ) くの { uid) ; fprintf (stderr, ・℃ an't write tO file /tmp/file\n") ; exit(l); exit ( の ; / * NOTREACHED * / Open failed , but OK プログラムを見ると、このメッセージは setuid 関数 を実行したあとで f 。 pen 関数の実行に失敗したときに 出力されるのが分かります。しかし、その後実行される fprintf 文では、ちゃんと書き込めたのでメッセージは出 力されていません。これは、ファイルのオープンさえで きていれば、書込みには権限が必要ないことを示してい ます。つまり、ハイスコア・ファイルの処理などでは、最 初にオープンしておき、そのあと一般ューザーになって しまってもとくに問題とはならないのです。もちろん、 このときにファイルをオープンするモードが重要となる こともあります。オープンしただけでは書き換えてしま うことのない r 十 ( 更新 ) モードなどを指定したほうがよ いでしよう。 ちなみに、 setuid システムコールではユーザー ID と 実効ューザー ID の両方を同時に変更しましたが、実ュ ーザー ID だけを変更する setruid 関数、実効ューザー ID だけを変更する seteuid 関数も準備されています。 ただし、一般ューザーの権限では、 setuid 関数ででき ない処理をするのにこれらの関数を利用することは不可 能です。なせなら、 setruid 関数で指定できる引数は実 ューサー ID か実効ューサー ID なので、実ューザー ID を変更しないか実効ューサー ID にすることしかできな いからです。実ューサー ID を変更しないのであれば、 UNIX MAGAZINE 1995.8 何も処理をしなくてよいはすです。実効ューサー ID を 変更したい場合には、 setuid 関数に現在の実ューザー ID を渡すことで実現できます。 一時的に権限を変更する ( 1 ) setuid メカニズムを使うのは、プログラムの最初に特 別な権限が必要な部分が集まっているとか、最初に特別 な処理をしてしまえばあとは一般ューサーの権限で十分 な場合だけとはかぎりません。通常は、プログラム中の さまざまな場所に特別な権限が必要な部分が入り交しっ ています。さきはどの例は有効かもしれませんが、一イ殳 的なプログラムでいつも使える手法ではありません。今 度は、プログラム本か特別な権限を必要とするような 場合について考えてみましよう。 通常は一ヨ殳ユーザーの権限でプログラムを実行し、本 当に必要なときだけ特別な権限を使えるようにするのが 今回の目標です。このためには、 setreuid システムコ ールを利用できます。このシステムコールは、実ューザ ー ID と実効ューサー ID の両方を一度に変更するシス テムコールです。さきほど紹介した setuid 関数では、 変更したいユーサー ID を 1 つしカ甘旨定できませんでし た。そのため、この値が実ューザー ID と実効ューサー ID の両方に使われていました。 setreuid システムコー ルの場合には、実ユーザー ID と実効ューサー ID の両 方を設定するために 2 つの引数を指定します。このシス 165

3. UNIX MAGAZINE 1995年8月号

といった内容か書かれています。しかし、この文章は厳 密には正しくありません。 setuid メカニズムの特許はた しかにハードウェアの一部として申請されていますが、 実際にはソフトウェアで実現されているのです。 この機能は、システムコールで実現されています。 のような超越した操作をおこなうのがカーネルのなかだ というのは、容易に想像できるでしよう。カーネル内で 処理をおこなうためのものが、システムコールです。実 際に処理をおこなうシステムコールは、ファイルを実行 するための execve です。このシステムコールについて は、 1994 年 5 月号で紹介しましたが、そこでは setuid メカニズムについては説明しませんでした。 execve システムコールは、ファイルを実行するとき に実行可能形式のファイルのモードを調べます。 setuid メカニズムを使うように setuid ビットか轂定されてい れば、そのファイルの所有者の ID を実効ューサー ID として設定して、 execve システムコーノレカゞファイルの 実行を開始します。この瞬間から setuid メカニズムが 有効となるのです。 setuid の使用例 setuid メカニズムを使うためには、プログラム自身が このメカニズムをうまく利用しなければなりません。た とえは、 passwd コマンドについて考えてみてください。 なんの処理もおこなわずに setuid メカニズムを実現す ると、誰のパスワードでも変更できるようになってしま う可能性があります。以降では、いくつかの場面を設定 して、それぞれについて解決友去を紹介していきます。 使用しているユーザーの権限に戻す 実際に setuid メカニズムを使う場合には、プログラ ムの実行をすべて特別な権限でおこなうのではなく、本 当に必要な部分だけを特別な権限で実行し、それ以外は 一般ューサー ( プログラムを起動したユーザー ) の権限 で実行するはうがよいでしよう。ユーザーに特別な権限 をケえる危険性は、容易に想像がっくはすです。特別な 権限で実行できることが多ければ多いはど、危険性は増 大することになります。 プログラムの最初の段階だけ特別な権限が必要なら は、最初に特別な処理をすませてしまい、あとは一殳ュ ーザーの権限で実行することも可能です。この場合も、 setuid 関数を利用できます。この関数は、プロセスの 164 実ューザー ID と実効ユーザー ID を指定された ID に 変更します。 setuid 関数は、 setuid(uid) ューザー ID のいすれかのみで、 きるのは、プロセスの実ユーサー ID かプロセスの実効 ば、自由に他人になりすませることになります。指定で ありません。好きなユーサー ID を指定できるのであれ 引数には、好きなユーザー ID を指定できるわけでは ューサー ID を指定します。 という形式で用います。このとき uid には、設定したい それ以外の値を指定し す。また、 /tmp/file というファイルを作成し、その ンドを使って setuid メカニズムを利用するようにしま トでこのプログラムをコンパイルし、 chmod u 十 s コマ 利用できなければなりません。ます、 1 つ目のアカウン ムをテストするには、すくなくとも 2 つのアカウントが リスト 1 のプログラムを見てください。このプログラ だりすればよいのです。 ンしておき、必要になった時点で読み込んだり書き込ん ないわけではありません。あらかじめファイルをオープ ム終了後です。だからといってここで述べた方法が使え です。しかし、ハイスコアを言求するのは、通常はゲー ゲームプログラムのハイスコア・ファイルなどが、よい例 しようか。容易に思い浮かぶのが、ファイル操作です。 特別な権限が必要な処理には、どんなものがあるので 続けることができるのです。 関数を用いて一イ殳のユーザーとしてプログラムの実行を 必要な部分をます最初に実行してしまい、その後はこの の権限でのみ実行されるようになります。特別な権限が なりすますのではなく、プログラムを実行したユーサー 実ューザー ID を setuid の引数に指定すると、他人に 上のように、 getuid システムコールにより得られる setuid(getuid() ) と実効ユーサー ID を指定した値に設定できます。 setuid 関数を実行すると、プロセスの実ューザー ID は、引数に自由なユーザー ID を指定できます。 ります。この関数をスーパーユーサーか呼び出した場合 ー 1 が返されます。ただし、これにも例外があ た場合にはエラーとなります。 setuid 関数が失敗した場 ファイルのモードを 600 ( ーー ーー ) としておきます。 この状態で、別のアカウントを使ってこのプログラムを 実行すると、次のような出力カ碍られます。 UNIX MAGAZINE 1995.8

4. UNIX MAGAZINE 1995年8月号

連載 / プログラマー入門ー① 図 19 4 個のセルを矩形て囲む合 AB AB AB AB 0 ロロロ 0 ロ驫ロロ 0 ロロロ 0 ロ罍ロロ 0 ロ 0 ロ 0 ロ能載ロ 0 ロロ 0 ロロ ロロ 0 ロ動ロ 直糸勺に囲むパターン。条件式は・ B になる 図 20 端どうしてしているパターン」 AB AB AB AB CD CD 上端と下端のセルを囲列 図 21 8 要素を矩形て囲むパターンの例 AB AB AB AB CD 、 1 CD ・ 1 中央付近の 8 個のセルを囲列 4 要素の簡ヒ 正方形伏に囲むパターン。条件式は B ・ D になる CD CD . AB AB AB AB 3 0 ロ罍ロ 0 ロ秘ロ AB CD い CD CD AB AB 0 動ロロ 4 隅のセルを囲む例 AB AB 1 AB AB 運よく謝妾する 4 要素を炯杉で悃めた場合には、牛を 2 価成らすことができます。図 19 は 4 個の要素を攵研彡で 囲む場合で、直辛勺に囲む場合と正方形状に囲む場合の 2 不頁のパターンを示しました。 攵研彡で悃むときには、左右の端と上下の端がおのおのつ ながっていることを忘れてはいけません。図 20 に示した パターンも 4 要素か隣接している例です。 8 要素の簡ヒ 謝妾した 8 要素を去研彡で囲めれば、牛を 3 価咸らす ことカそきます。手法は 2 要素、 4 要素を囲む場合と同し なので説明は省略します。図 21 に 8 要素を囲む場合のパ ターンを示したのて参考にしてください。 UNIX MAGAZINE 1995.8 CD CD 97 ( あらい・みちこ ASTEC) きに利用できる手法を紹介します。 のこうした話題と、組み合わせる牛数がもっと増えたと についても説明しませんでした。次回は引続きカルノー図 ついては触れていません。また、簡田翻ヒできないパターン ついて説明しましたが、条件が 5 個以 - ヒある場合の操作に カルノー図については 4 個以下の条負っ基本的な操作に 点、欠点があるので場合に応して使い分けてください。 カルノー図のパターンに目を凝らすガ去も、どちらにも利 手法を 2 通り紹介しました。式をしっと見つめるガ去も、 今回は、 if 文や while 文で使用される条件式の簡略化の まとめ 上端と下端の 8 個のセルを囲列

5. UNIX MAGAZINE 1995年8月号

ワークステーションのおと UNIX MAGAZINE 1995.8 うか。 歩きました ) 、分かりやすいとはいえないのが欠点でしょ 聞いてから、私たちは地図を求めて数車の本屋さんを尋ね よう。ただ、なかなか手に入らないのと ( あるという話を バスに乗ろうという人は、路線図を入手するといいでし です。 に「台北火車站」と書いてあるバスに乗オしばいいの 車站を経由します。ですから、同し路糸 ) バスでなくても、 で帰ってくればいいのですが、しつは多くのバスが台北火 番号を教えてもらいます。帰りはもちろん同凵泉のバス ントなどて地図を見せて、目的地付近まで行くバスの絲泉 たとえは、バスでどこかに行く場合、ますホテルのフロ す。 る場合には台北火車站の近くに泊まっていると便利なので ね台北火車站を中心に運行されているので、バスで出かけ く、そのうえ乗車賃も 60 円はどです。バスは、おおむ の路線は網の目のように張り巡らされていて運行本数も多 台北市内の移動にはもつばらバスを使いました。バス ませんでした。 の調達に便利だったのですが、交通の便はあまりよくあり ル自体には問題はなく、すぐ隣か百貨店で食料・品やビール 今回は、松山機場の近くのホテルに泊まりました。ホテ ホテルはやつばり台北火車站周辺 留めておいたはうがいいでしよう。 ってきていて、ちょっとびびりました。いちおうは、気に はまだありませんが、昨年は裔巷から帰る当日に台風か迫 さな台風か襲来していました。飛行機が遅れたりしたこと あります。昨年も今年も、台湾や香港の近海には早くも小 この季節はまた、南の海で台風が産声を上げるころでも 揺れ始め、食料が遅酉團大態になってしまいました。 人は困るかもしれません。機内食を配っているときにに たちはどうということもなかったのですが、乗り物に弱い いています。ですから、往復の飛行機が少々揺れます。私 6 月初旬といえは、日本の南海ー E には梅雨前線カ漲り付 ロ 動、、ら、り かったのですが・ たのと也の人も、今年は涼しいと言っていました ) ので助 路辛剽図て確認し、その絲泉に実際に乗ってみたところ、 次のような事実力喇明しました。 ・バス停の名前が同じでも、かなり離れている場合があ る。 ・その逆に、すぐ近くのバス停なのに ( すくなくとも私に はそう見えました ) 、泉によって呼ひ方が違うバス停 がある。 台北市内は工事が多く、バス停絲泉が移動することが あり、路辛卿刈どおりの場所にバス停がないこともある。 台北のバスのプロになるのは、なかなか難しいようで す。 いちいちバスというのは辛いなあという人は、タクシー に乗るのがよいでしよう。数も多いですし、料金も日本よ り安いのて楽に乗れます。ただし、たまに白タクがいる ようなので注意してください。 台北火車站の周辺は繁華街なので、百貨店はもちろん、 コンピニエンス・ストアやちょっとした本屋さん、そして 飲角裔も数多くあります。とくに、コンビニエンス・スト アでは、 24 日ビールを売っているので大助かりです。 食べ物で思い出しましたが、 Computex に行ったとき は、会場の 2 階と 5 階にあるカフェテリアで食事をする とイ叫リです。ただし、食事どきは混雑するのて早めに行っ たはうがいいでしよう。 ( さかした・しゅう ASTEC) おまけとして、台北市街の略図を付けておきます。 台北市図 環亞大飯店■ ( 台北の秋葉原です ) 八徳路 台北希爾頓大飯店 台北火車站 松山機場 台北世界貿易中心 75

6. UNIX MAGAZINE 1995年8月号

連載 / インターネットの利用と仕組み - の 図 16 RT-100i でリモートアクセス・サーパーをする ip lan proxyarp 0 Ⅱ pp select 1 isdn remote address 5XXXYYYY ip pp remote address 192.168.1.241 ppp lcp authreq pap PPP IPCP VJ c 0 Ⅱ ppp ipcp ipaddress on ppp pap add individual userid MYNAME PASSWORD pp enable 1 せます。 ISDN によって接続された個々のホストは LAN 側からはあたかも LAN 上のホストのようにみえます。 LAN 側のアドレス設定など通常の設定をおこなったの ち、図 16 のようにリモート側の設定をします。本とし て proxyarp on にし、 pp を設定します。 PAP を使う 設定と、 PAP のユーサー名、パスワードを設定します。 RT-100i では、相手先 ISDN 番号に対して 1 つのアドレ スの設定が必要になります。 図 15 リモート宀の形態 lnternet バ D. ル 第日 LAN や、インターネット側の設定 IIJ のダイヤルアッフ・サービスを利用するような場合 には、 NT WS の設定だけが必要ですが、社内でリモート おわりに アクセスの竟を整物ーる場合などの例の 1 っとして、廉 価な INS 64 用ルータのヤマハ RT-100i を使った例を紹 Windows はビジネス・アプリケーションを中心とした アプリケーションの不頁が豊富で、かっ安価です。いまや 介します。 Windows は、目白鹹旬のネットワークにおいては非常に Windows NT サーバーがあり、 NT によるネットワー 魅力的な道具です。インターネットは環境であり道具でも ク環竟を構築している場合では、もちろん NT サーバーを あります。道具は目的に応じて使い分け、組み合わせてこ RAS サーバーにするのか普通のやり方でしよう。しかし そその真価を囎軍するというものでしよう。 TCP/IP べースのネットワークに、たまたま Windows 今回もすこし触れましたが、次回は ISDN を使ったイ NT をリモート接続したいという環境や、 NT サーバー ンターネット接続について詳しく解説してみたいと思いま をなんらかの理由で RAS サーバーにはできない場合で、 す。 INS 64 を使った面な接続を : ーる場合に該当します。 ( よしむら・しん IIJ) NT サーバーを使わなくとも面なルータで同等のこと ができるというのは大きなメリットだと思います。このよ うな接続をおこなったときにもリモートの LAN 上にあ る samba サーバーなどを利用できます。ただしプロード キャストを使ってサーバーを探しにいくだけで、プラウ ジングはできませんから、直接名前を指定する必要があり ます。 図 15 て示す接続形態が、このような接続では一イ殳的な ものです。 LAN 間孑売ではなく、個別のマシンを Point- to-Point 型でリモート接続する場合には、 proxy ARP を使うことで ISDN ルータ以外の経路情報の負担カ鰔ら ー鏖 62 UNIX MAGAZINE 1995.8

7. UNIX MAGAZINE 1995年8月号

連載 /UNIX 具箱ー⑩ が、受取り手はもうすこし楽できないか・・・・・・。そんなあな たに便利なコマンドが、 ESC s と ESC t です。 ESC t : @マークが付いたメールをまとめて uude- code 、 gunzip 、 tar ファイル ( ディレクトリを含む ) を tar 十 gzip 十 uu- encode して送ってくることはよくあります。この連載の 原稿も、ディレクトリをそっくり tar してメールで送って います。アーカイプしたファイルが大きい場合は、 split コマンドなどを用いていくつかに分割してメールで送りま す。というのも、送信先のメールスフ。ールの容量が小さか ったり、通信回線か細いため一度に大きなファイルか冲幻医 できなかったりするからです 13 。このようなうレールが きた場合、マークが大 ~ します。 とりあえす、該当するすべてのメールカ信するのを確 します。すべてか着信したら、 summary モードでその ロ・い メールにカーソルを合わせて@を入力し、 : 麪頁に@マーク を付けていきます。次に ESC t を入力します。すると以 下のような流れで、自重加勺にマークカ咐けられたメールを ; 叫吉し、 uudecode した結果、ファイルが gzip や tar さ れていることを自重加勺に判断して、ファイルをもとどおり に展開してくれます。 Execute uumerge for these messages? = 〉 (y=RET or n=SPC) ↓はい Directory: ~ / ■ ↓展開するディレクトリを指定 Executing uumerge done ↓メールを 1 つのファイルにしてくれた ! Execute gzip for xxx. tar. gz? (y=RET or n=SPC) ↓どうやら tar + gzip のファイルだったみたい Execute tar fo て misc . tar? (y=RET or n=SPC) ↓次は tar で展開してくれるみたい Executing tar for misc . tar おお ! みごとに完成しているではないか これらが無事終了すると、メールで送られてきたアーカ イプ・ファイルが、指定されたディレクトリに展開されて いるはすです。だいぶ手間が省けますれ ESC s : @マークが付いたメールをまとめて unshar 基本的には ESC t の機能と同じです。対象とするアー 13 現在ではたいていの場合、十分大きなスプールと料けぎな叫泉なので、 少々大きなメールでもそのまま出せることが多いのですが : ー ) done UNIX MAGAZINE 1995.8 カイプのカ 1 去が uuencode などではなく shar の場合に使 います。 shar でアーカイプされたファイルがいくっかの メールに分かれて送られてきたとき、それらのメールに マークを付けます。そこで ESC s を入力すると、展開す るディレクトリを訊ねてきたあと、自重加勺に unshar して 元のファイルを復元してくれます。 Mew でメールだけを読んでいる場合にはそう頻繁に効 用を実感することはないでしようが、 NetNews か第売める ようになると、絶大な威力を囎軍します。 ニュースグノレー フ。のなかには、何十もの記事に分けて 1 つの絵のデータや プログラムを投稿している場合が多いのですが、これらを 自重加勺に一気に展開できるのです。その便利さは想像でき るはすです。 MIME メールを送信する Mew の致の 1 つに、きめ細かな MIME 操作の実 現か挙げられます。 Mew を使うと MIME 形式のメール をはば思いどおりに、しかも上交的簡単に作成できます。 メールを読む際には自重加勺に MIME 角財斤をおこなってく れることは、すでに前節で説明しました。 以降は Mew のもつ MIME 関係の機能を順に説明して いきます。 「 MIME ってなんのことやら分からんわ・・・・・・」 という方でも、一応以下に述べるとおりに実行すれば、 MIME 形式のメールを作って送信できるようになります。 「それで、 MIME 使ったらどんなええことがあんの ? 」 MIME は、、 Multipurpose lnternet Mail Exten- si 。 ns " の頭文字をとったもので、メールを使ってさまざ まなデータの送受信を可能にするための規格です。普通の メール (RFC822) では文字しか送れませんが、 MIME を 用いると、重丿や絵、音声、バイナリデータなども送れる ようになるのです 14 前節ではコマンドを 1 っすっとりあげてはそれに説明 を加えるかたちで進めました。こからは MIME 形式の メールを書くときの流れに沿って解説します。 14 もうすこし詳しく知りたい場合は、オ : 1995 年 6 月号の「 MIME: インターネット上のマルチメディア」か参考になります。 143

8. UNIX MAGAZINE 1995年8月号

リスト 3 スクリプト・ファイルを呼び出すプログラム main() execl("/bin/sh" "sh" "/usr/local/bin/scrl . scr" インタープリタ形式での setuid 前回に約束した、、新しいシステムで変わった点 " につ いて紹介することにしましよう。 最初は、 setuid が変更されたということだったので、 setuid 関数や setreuid システムコーノレのマニュアノレを 調べていたのですが、変わったのは setuid 関数ではなく setuid メカニズムであることが分かりました。 execve システムコールにその答があったのです。 setuid メカニズムを用いる場合、 execve か起動する プログラム・ファイルのモードを調べて setuid メカニズ ムを利用するかどうかを決定します。実行しようとして いるファイルのモードが、 setuid メカニズムを利用する ように設定されていれば、そのファイルの所有者の ID を実効ューザー ID に設定してからプログラムを実行し ます。ただし、実行しようとするファイルが、 # ! で始ま るインタープリタ形式 2 のファイルだった場合にはどう なるのでしよう。 1994 年 5 月号でも説明したように、インタープリタ 形式のファイルは execve システムコールが直接実行し ます。このとき、 execve に渡されたファイルではなく、 インタープリタとして指定されたプログラムが実行され るのです。引数には execve に渡されたファイル名がそ のまま渡されるので、実際にはそのファイルに書かれた 内容をインタープリタが実行します。このとき、 execve に渡された引数 ( つまり、インタープリタが解釈すべき ファイル。以降、、スクリプト・ファイル " と呼ぶ ) が se- tuid メカニズムを利用するように設定されていた場合、 複数の解釈方法があるわけです。 以前の execve システムコーノレは、スクリプト・ファイ ルのモードにもとづいて実効ューザー ID を設定してい ました。つまり、スーパーユーザーの権限で実行したい スクリプト・ファイルを実行可能としたうえでスーパー ューザーの所有にし、 setuid メカニズムを用いるよう に設定しておけば、 execve システムコールが実効ユー ザー ID をスーパーユーザーに自動的に設定してくれた 2 インタープリタ形式については、 1991 年 12 月号で説明しました。 168 (char * ) 0 ) ; のです。この仕組みを使い、スクリプト・ファイルのモー UNIX MAGAZINE 1995.8 実行するバイナリファイルのモードだけを調べる新 setuid を理解するインタープリタ 関数の引数に指定しておかなければなりません。 ションか書かれている場合は、そのオプションも execl リプト・ファイルのインタープリタを指定する行にオプ スクリプト・ファイルを実行できます。もちろん、スク のプログラムとなり、 setuid メカニズムカ陏効な状態で す。こうすることで、 execve か起動するプログラムはこ 所有にし、 setuid メカニズムを利用するように変更しま このプログラムをコンパイルして、適当なユーサーの グラムを作成します。 き、 /usr/local/bin/scrl としてリスト 3 のようなプロ のファイルを /usr/local/bin/scrl ・ scr に移動してお 利用し、名前が /usr/local/bin/scrl の場合には、 です。たとえば、スクリプト・ファイルが /bin/sh を スクリプト・ファイルを呼び出す形式にするのが簡単 機が直接実行可能なファイルを作成し、そのなかから カニズムを利用したければ、スクリプトではなく計算 ます。このようなシステムで従来と同しく setuid メ していたスクリプトが正しく動かなくなる場合があり ムを適用するので、これまで setuid メカニズムを利用 は、インタープリタのモードを調べて setuid メカニズ 話を元に戻すことにしましよう。新しいシステムで トが隠されています。 Perl 5 のマニュアルを読んでみてください。そこにヒン しく説明しません。どうしても興味があるという方は、 ィ・ホールを安易に暴くことにつながるので、こでは詳 せんでした。なぜ間題が生しるかについてはセキュリテ れますが、マニュアルを見くらべてもなかなか分かりま ます。これはおもにセキュリティ上の理由からだと思わ るインタープリタのモードを調べるように変更されてい ルのモードではなく、実際にメモリに読み込んで実行す ところが、新しいシステムではスクリプト・ファイ を受けることができました。 ドを操作するだけで、簡単に setuid メカニズムの恩恵

9. UNIX MAGAZINE 1995年8月号

UN Ⅸへの招待 ファイルを探したせるでしようが、ファイルやディレク トリの数か増えると、このリストは膨大な量になります。 そこからファイルを探しだすことも可能ですが、もっと手 軽なガ去はないのでしようか。そんな場合にイリなのが、 find コマンドです。ひと言で説明すると、これはファイ ルを探しだすコマンドです。もっとも簡単な使い方は、次 % find 8 . tex す。 find ファイル名 のとおりです。 ファイル名には、探したいファイルの名前を指定しま 178 /home/husband/aya/write/Invt/1995/8. tex /home/husband/aya/write/Invt/1994/8. tex /home/husband/aya/write/Invt/1993/9308. tex /home/husband/aya/write/Invt/1992/9208. tex /home/husband/aya/write/Invt/1991/9108. tex /usr/lib/find/f ind. codes は、、定期的 " に更新さ ら探しだしているわけです。 のは時間がかかるので、高速 find はこのデータベースか に更新されています。ファイルをディレクトリから探す ムの管理者によって ( 通常は cron などを用いて ) 定期的 ァイルのパス名か求されているデータベースで、システ す。 /usr/lib/find/find. codes は、システムにあるフ を含むものを探し、該当するパス名を表示しているので find/find. codes ファイルから指定されたファイル名 ーから実際にファイルを探しだすのではなく、 /usr/lib/ す ) 。高速 find では、ディレクトリとファイルのツリ 、高速Ⅱ d " と呼ばれます ( このほかの使い方もありま ところで、上記の形式で find コマンドを使う場合は、 文字列がパス名に含まれています。 とになっているのです。例では、いすれも 8. tex という 指定した文字列をパス名に含むファイルか検出される " 確には find を上記のように使用すると、、、ファイル名で かもしれません。しかしこれは間違いではありません。正 は、 8. tex ではないのに何か変じゃないの ? " と思われた した。結果を見て、、 9108. tex 、 9208. tex 、 9308. tex ます。該当するものとして、 5 つのファイルか検出されま この例では、 8 . tex という名前のファイルを探してい れているだけなので ( ファイル作成や削除のたびに更新さ れているわけではありません ) 、かならすしも正しい結果 か得られるとはかぎりません。それでも、素早く該当する ファイル名のリストを得たい場合には、この機能が f. リで す。もちろん、 /usr/lib/find/find. codes がなければ、 高速 find は使えません。 普通の find 高速 find は、新しく find に加えられた機能です。 のガ去では、ファイル名からしかファイルを探せません。 一方、従来の find は、ファイル名のほかにも、 ・ファイルの不患頁 ・ファイルのイ描モード ・ファイルのリンク数 ・ファイルの所有者 ・ファイルの大きさ ・ファイルの i ノード番号 ・ファイルのアクセス / 更新日時 など、さまざまな牛からファイルの検出かできます。 さらに、検出したファイルに処理を施すことも可能で す。たとえば、 ・ UNIX のコマンドの夫行 ・ ls の一 1 オプションに似た情報の表示 ・ファイルのパス名の表示 ・ cpio コマンドの対象にする などです。この場合は、次の形式で使います。 f ind パス名 .. オプション . パス名には、どのディレクトリを起点にファイルを探 パス名は、複数指定できます。その場合は、指定した f ind クトリを起点にファイルを探しだします。 ではカレントディレクトリを、次の例ではホームディレ find すかを指定します。たとえば、 UNIX MAGAZINE 1995.8 すべてのディレクトリの下かオ索されます。次の例では、

10. UNIX MAGAZINE 1995年8月号

連載 /UNIX Communication Notes—O 心として、各セグメントが相互接続されるのである。そ して、現在提供されているスイッチのはとんどすべてが、 10Base-T のインターフェイスで各セグメントを接続す る形態をとる。一見、 10Base-T ハプのようにみえるが、 10Base-T ハプとくらべると、各ポートに接続されたシス テムは Ethernet の性能を最大限に引き出すことができ る。 Ethernet スイッチを使用してホストを孑売した場合、 フレームの衝突ははとんど発生しない。したがって、各ホ ストは IOMbps でスイッチと Point-to-Point 接続され ていると考えられる。このため、従来の Ethernet と比較 してより性能の高い竟を構成できる。この特徴を活かし て、現在は 10Base-T ハプが使われている部分をそっく りそのまま Ethernet スイッチに置き換え、性能を改善す ることもよくおこなわれている。 Ethernet スイッチには、フレーム交換の多重化という 特徴もある。 Ethernet スイッチでは、同時に複数のフレ ームの交換ができる。たとえば、ポート A からポート F まであるスイッチでは、 A から B 、 C から D 、 E から F に 送られる 3 つのフレームか 1 司時にスイッチに至睹しても、 転送先がそれぞれ異なるためにはかのトラフィックには影 響を及ばさない。この多重化が Ethernet スイッチの最 : 大ク米「徴であり、トラフィックか均一な竟ではこの多重 度を活かすことが可能になる。多重度はスイッチによって 異なるが、多くの製品では 6 ~ 7 多重は見している。プ リッジで相万接続していた部分を Ethernet スイッチに置 き換えれは輳回避ができるだけではなく、 TCP/IP 的 にも同一のネットワークとして扱うことができる。 高速なインターフェイスをもっスイッチ Ethernet スイッチは、 Ethernet 竟の構成去を大 きく変え、従来のプリッジカえていた柤妾続されたセ グメント間で報輳状態かオはに景ルあうという問題を完 全に鮹夬した。さらに、フレーム交換の多重化により、さ らに高い性能か得られるという利点もある。 しかし、 Ethernet スイッチにも問題がないわけではな い。図 2 のように、複数のクライアントが 1 台のファイ ルサーバーを共有している場合は、クライアントとファイ ルサーバーのあいだにトラフィックか集中する。こういう 環境では、ファイルサーバーとスイッチとのあいだのリ ンクがポトルネックとなり、 Ethernet スイッチによるフ 44 図 2 不均一なトラフィックが発生する ファイルサー クライアント Ethernet スイッチ ポトルネック 図 3 FDDI/Ethernet スイッチによる問題の解決 ファイルサー クライアント FDDl/Ethernet スイッチ Ethernet FDDI レーム交換の多重化効果か期待できない。フレーム交換の 多重イゞ効力をもつのは異なるホストに対するトラフィッ ク群に対してのみであり、図 2 のように特定のホストにト ラフィックか集中する場合は多重化はおこなわれない。言 い換えれば、 Ethernet スイッチの効力が替軍されるのは、 各ホスト間て均一にトラフィックが発生するような場合で この間題を解決するために、スイッチでありながら、通 常の 10Base-T インターフェイスとそれ以外のより高速 な異なる不頁のデータリンクを用意している製品もある。 たとえば、 Cisco の CataIyst というスイッチには、 1 つの FDDI ポートと複数の Ethernet ポートがある。 のスイッチを使った場合、図 3 のように FDDI ポートに UNIX MAGAZINE 1995.8