2012-01-06 9 views
3

私は最近Powerpointスライドを読みましたが、setuidの使い方について明確な概念を得ることはできません。 スライドの内容は次のとおりです。setuidの使い方は?

のsetuid例 - すべてのユーザーがファイルに

  • ユーザーをキューに入れることができますファイルを印刷

    • 目標
    • ソリューション
      • キュー他のユーザーのファイルを削除することはできません所有ディレクトリ
        • ユーザプリンタ
        • のsetuidキュー・ファイルプログラムによって、キューファイルを作成し、ユーザーのプリンタとして
        • コピージョーのデータユーザとしてジョー
      • また、setuidを削除ファイルのプログラム
        • のみを除去することができますファイルのあなたは、ユーザーJoeのキューへのアクセスを仲介
      • ユーザープリンタをキューに入れられました。ここで
  • は私の質問です。 "setuid"でこの問題を解決する方法を明確に理解していません。

    1. まず、ファイルがユーザープリンタで作成されている場合、ユーザーjoeはデータをプリンタが所有するファイルにどのようにコピーしますか。このファイルには一定の権利がありますか?
    2. 第二に、あなたとあなたがキューイングされたファイルとの間の関係を特定する方法について説明します。
    3. ファイルの状態ショーの何かを行いますが、ファイルはrootだけが変更することができ、プリンタ、所有しています。それはファイルのgidと関係がありますか?その場合、他のユーザーのgidもこのファイルに関連する可能性があります。
    4. は、ファイルのコンテキストは、それをキューに入れられた人について何かを示していますか?

    私の質問は混乱しています。私は本当に解決策について明確な概念を持っていません。

    答えて

    3

    のファイルは/var/spool/pqディレクトリに格納されていると仮定しましょう。ディレクトリprinter:printgrp:2700のパーミッション(所有者printer、グループprintgrp、モード2700 - 読み込み、書き込み、所有者のみのために実行し、ディレクトリに設定SGIDビットはそれで作成されたすべてのファイルがグループprintgrpに属していることを意味します)。

    さらに、我々は、印刷キューイングプログラム、pqは、権限printer:printgrp:4511を(setuidをprinterは、誰もがそれを実行することができますが、唯一のprinterまたはrootそれを見ることができます)があることを前提としています。

    Joeがpq /home/joe/fileを実行し、ファイルのアクセス権がjoe:staff:600(Joeのみがファイルを読み書きできる)とします。 Joeのumaskは022に設定されています(ただし、このファイルにはumaskよりも厳しい権限があります)。

    プログラムが実行されるとき、プロセスの実際のUIDはjoeですが、有効なUIDはprinterです。ここでsetgid操作は必要ないので、実際のGIDと有効なGIDはともにstaffです。ジョーの補助グループリストにはprintgrpは含まれていません。

    ファイルへのアクセスを制御するプロセスの実効UIDとGIDであることに注意してください。ジョーは自分自身では、ジョブがプリンターキューに入っているのを見ることができません。表示されたディレクトリのアクセス許可は、ファイルの一覧表示やディレクトリ内のファイルへのアクセスを許可しません。逆のことが言えます。 printerユーザー(またはそのユーザーとして実行中のpqプログラム)はJoeのファイルにアクセスできません。

    pqプログラムは、プリンタのキューディレクトリにファイルを作成できます。おそらくこの要求に対して2つのファイルを作成します。 1つは制御ファイルになり、もう1つは印刷されるファイルのコピーになります。これは、いくつかのメカニズムによってジョブ番号を決定します(12345と言う)と、それは(制限された権限で - 0600あるいは0400)を作成するためのオープン2つのファイルを作成してあります:

    • /var/spool/pq/c.12345 - 制御ファイル
    • /var/spool/pq/d.12345.1を - 最初の(唯一の)データファイル

    有効なUIDを実際のUIDにリセットして、Joeとして実行する必要があります。その後、Joeが印刷を依頼したファイルを開き、それをデータファイルにコピーすることができます。また、制御ファイルに関連する情報(日付、時刻、要求を提出した人物、印刷するファイルの数、特殊な印刷オプションなど)も書き込むことができます。これらのファイルを閉じると、Joeはそれらのファイルにアクセスできなくなります。しかし、プログラムはジョーのファイルをプリントキューにコピーすることができました。

    これは、質問1(許可)と2(制御情報)に対処し、また4(制御情報)にも対処します。

    質問3については、rootは、Unixライクなシステムでは常にワイルドカードです。なぜなら、彼が望むものは何でもできるからです。しかし、残りの答えによって示唆されるように、制御ファイルには、(特に)誰がそれを提出したかなど、印刷要求に関する情報が含まれています。 setuidプログラムの代わりにsetgidプログラムを使うことができます。これらは類似の方法で動作します。しかし、私が仮定したシステムの下では、グループのパーミッションは本質的には現れなかった。 pqプログラムは、制御ファイルとデータファイルに対するアクセス権をグループが読み取れないように設定し、ディレクトリアクセス権もグループアクセスを拒否します。

    我々は2つの以上のプログラムを仮定することができます

    • pqs - プリンタキューの状態
    • pqr - プリンタキューは、これらのプログラムはまた、printer setuidのだろう

    取り除きます。 pqsプログラムは、ディレクトリ内の制御ファイルを読み込み、そこから関連情報をリストすることができます。pqrプログラムは制御ファイルを読み取って、ジョーがジョブ12345の削除を要求したときにジョブ12345を発行したときに、ジョブ12345の削除を確認できます。プログラムが満足すれば、ファイルを削除できます。

    これらのユーザー起動プログラムとは別に、実行中でなければpqによって実行されるデーモンプログラム(このシステムでは通常はpqdという名前の)があります。ディレクトリ内の制御ファイルを読み込み、その情報を使用して実際にデータファイルを関連するプリンタに印刷することになります。異なるプリンタと異なるデータ形式がどのように処理されるかの詳細は、デーモンが処理するための問題です。デーモンもprinter特権で実行され、printerは、プリンタデバイス(ローカルに接続されたプリンタ用)にアクセスできます。また、IPP(インターネットプリンタプロトコル)などのプロトコルでネットワーク経由で通信するように設定されています。 Joeはおそらくプリンタデバイスを直接使用することはできません。

    setuidプログラムには、Joeにはない権限があることに注意してください。彼らはジョーが余分な力を乱用できないように慎重に書かなければなりません。どんなsetuidプログラムもやや危険です。 setuid rootプログラムが致命的になる可能性があります。一般に、setgidプログラムはあまり危険ではありません。しかし、両方のタイプのプログラムについては、そのようなプログラムの作成には細心の注意が必要です。

    +0

    ありがとうございます。でも、私はまだ小さな質問をしていますが、一度ファイルを読み込んだり書いたりすると、ユーザーのプリンタとしてアクセスしたり、読んだり、書き込んだりすることができます。 ? – venuswu

    +0

    もう一度ご協力いただきありがとうございます! – venuswu

    +0

    はい:ファイル記述子が開いたら、プログラムが実効UID(またはGID)を変更しても問題はありません。再開は別の問題です。プログラムは、Joeがスプール領域にファイルを作成する前に、Joeがコマンドラインでファイルにアクセスできるかどうかを確認します。ジョーがコマンドラインで500個のファイルをリストした場合、ファイルディスクリプタを使い果たしてしまうこともないので、いくつかのスタントが前後に切り替えられます(保存されたUID)。ただし、アウトラインは基本的な操作モードです。 –

    関連する問題