7 Debian とステータス

えとー      
___________________________________________________________________________________________________________________________

7.1 statoverride とは?

ス テ ー タ ス 情 報 を 操 作 す る インターフェースファイル、 ディレクトリ、 デバイスファイルなど dpkg が扱え る フ ァイ ル シ ス テ ム オ ブ ジ ェク ト な ら な ん で も 扱 う こ と が で き る 。

7.2 歴史

dpkg-statoverride の前には dh_suidregister というのがあった。 その suidregister の幾つかの問題を解決したも の と な って い る 。 2000 年のことなのですでに 5 年以上の歴史のある古いものになっているが今だ有効な 仕組み。 *24

7.3 どんな風に使われている?

7.3.1 メンテナ編

ま ず は 身 近 な postfix で用いられているメンテナスクリプトから抜粋してみましょう。

postinst

1 dpkg-statoverride --remove \$POSTDROP >/dev/null 2>&1 || true
2 dpkg-statoverride --remove /var/spool/postfix/public >/dev/null 2>&1 || true
3 dpkg-statoverride --remove /usr/sbin/postqueue >/dev/null 2>&1 || true
4 dpkg-statoverride --update --add root postdrop 02555 \$POSTDROP
5 dpkg-statoverride --update --add postfix postdrop 02710 /var/spool/postfix/public
6 dpkg-statoverride --update --add root postdrop 02555 /usr/sbin/postqueue

postrm

1 dpkg-statoverride --remove /usr/sbin/postdrop >/dev/null 2>&1 || true
2 dpkg-statoverride --remove /var/spool/postfix/public >/dev/null 2>&1 || true
3 dpkg-statoverride --remove /usr/sbin/postqueue >/dev/null 2>&1 || true
  1. dpkg-statoverride –remove /usr/sbin/postdrop >/dev/null 2>&1 —— true

    /usr/sbin/postdrop statoverride の設定を削除する

  2. dpkg-statoverride –remove /var/spool/postfix/public >/dev/null 2>&1 —— true

    /var/spool/postfix/public statoverride の設定を削除する

  3. dpkg-statoverride –remove /usr/sbin/postqueue >/dev/null 2>&1 —— true

    /usr/sbin/postqueue statoverride の設定を削除する

  4. dpkg-statoverride –update –add root postdrop 02555 $POSTDROP

    ユーザ「root」 グループ「postdrop」 で実行時にグループ ID のユーザで起動、 読み取りと 実行をオーナユーザ、 オーナグループ、 その他に許可したものを/usr/sbin/postdrop に付与 する。

  5. dpkg-statoverride –update –add postfix postdrop 02710 /var/spool/postfix/public

    ユーザ postfix グループ postdrop で実行時にグループ ID を指定した、 オーナユーザ には読み、 書き、 実行を、 オーナグループには実行を、 その他にはなにも出来ない権限 /var/spool/postfix/pubulic に付与する。

  6. dpkg-statoverride –update –add root postdrop 02555 /usr/sbin/postqueue

    ユーザ root グループ postdrop で実行時にグループ ID を指定した、 読み取りと実行をオー ナユーザ、 オーナグループ、 その他に許可したものを/usr/sbin/postqueue に付与する。

以上のように、 プログラムにデフォルトのパーミッションを付与したい場合に用いることがで きる。

パッケージメンテナがこれを利用したほうがよいのには理由がある。

debian のポリシーマニュアルでは標準のパーミッションなどが規定されている、 しかし、 規定されてい るものでは却って不便になってしまうものがあり、 ポリシーから離れてパーミッションなどを変更する場 合にあとからユーザがポリシーにない状態の確認を容易にするために用いるインターフェースとして利便 性のためである。

別の例を上げてみよう。

    for i in /usr/bin/foo /usr/sbin/bar
    do
      if ! dpkg-statoverride --list $i >/dev/null
      then
        dpkg-statoverride --update --add sysuser root 4755 $i
      fi
    done

第二に postinst などで chmod,chown などを使う場合でもユーザの都合でオーナーやパーミッションを 変更させることがありうるが、 たとえ変更したとしてもパッケージの再インストール時やアップグレード 時などにパッケージ標準のオーナとパーミッションに上書きされてしまう可能性がある。 これを防ぐた めにパッケージ標準のオーナ及びパーミッションを設定可能にしておくのがよいかと思わ れる。

パーミッションをごたごた言う BTS を減らすためにも statoverride は活用しましょう!

7.3.2 ユーザ編

サーバ管理者などはパッケージにより提供されているオーナやパーミッションでは目的が達成できない場 合がある、 アップデートの少ない stable を使ったとしてもセキュリティアップデートなどで update がか かった場合にどうしても上書きされてしまい、 初期の値に戻されてしまうことになる。 これを回避す るためには、 dpkg-statoverride を使うことによりパッケージの上書きを回避してユーザ設 定のオーナとパーミッションをアップグレードしても無関係に用いることができるように なる。

GUI 環境がある場合は dsys を使ってみてください。

7.4 使い方

7.5 一般的な用法

  1. ステータスの追加

    # dpkg-statoverride –add ユーザ名グループ名パーミッションファイル名

  2. ステータスの即時追加]

    # dpkg-statoverride –update –add ユーザ名グループ名パーミッションファイル名

  3. ステータスの削除

    # dpkg-statoverride –remove ファイル名

  4. ステータスの変更

    # dpkg-statoverride –remove ファイル名# dpkg-statoverride –update –add ユーザ名グ ループ名パーミッションファイル名

  5. ステータスの確認

    # dpkg-statoverride –list パターン

7.6 マニアックな用法

–admindir オプションを使いホームディレクトリの . (ドット) ファイルのパーミッションを制御 する。

7.7 パッケージアップグレード

  1. postinst などで statoverride が使われているものを管理者などが statoverride の設定を変 更した場合

    postinst などで設定を –remove してから –add している場合などにはシステム管理者が statoverride を設定しても postinst などの設定に書き換えられてしまう。 (postfix など)

    postinst などで –add のみの場合は管理者などが設定した statoverride の設定になる

  2. postinst などで statoverride をセットされているが管理者が chownchmod などをした 場合

    statoverride の設定に従ってパーミションが変更される

  3. postinst などで chown chmod しているものを管理者などが statoverride の設定を変更 した場合

    システム管理者が statoverride を設定してもパッケージの postinst などの chownchmod で書き換えられてしまう。

  4. postinst などでは statoverride chonwchmod も使われていないものを statoverride 設定を行なった場合

    statoverride の設定に従ってファイルのパーミッションが変更される

  5. postinst などで chown chmod しているものを管理者などが chown chmod で設定を 変更した場合

    システム管理者が chown chmod で設定してもパッケージの postinst などの chown chmod で書き換えられてしまう。

7.8 おわりに

statoverride alternatives と比べると単純な機能ではシンプルなものだし知名度は更に低いが、 メンテ ナもユーザも楽になれるツールなので是非活用していただきたいと思う。

東 京 エ リ ア Debian 勉強会 2005 _________________________________________________________

PIC