えとー
___________________________________________________________________________________________________________________________
ス テ ー タ ス 情 報 を 操 作 す る インターフェースファイル、 ディレクトリ、 デバイスファイルなど dpkg が扱え る フ ァイ ル シ ス テ ム オ ブ ジ ェク ト な ら な ん で も 扱 う こ と が で き る 。
dpkg-statoverride の前には dh_suidregister というのがあった。 その suidregister の幾つかの問題を解決したも の と な って い る 。
2000 年のことなのですでに 5 年以上の歴史のある古いものになっているが今だ有効な
仕組み。 ま ず は 身 近 な
postfix で用いられているメンテナスクリプトから抜粋してみましょう。
postinst
postrm
/usr/sbin/postdrop の statoverride の設定を削除する
/var/spool/postfix/public の statoverride の設定を削除する
/usr/sbin/postqueue の statoverride の設定を削除する
ユーザ「root」 グループ「postdrop」 で実行時にグループ ID のユーザで起動、 読み取りと
実行をオーナユーザ、 オーナグループ、 その他に許可したものを/usr/sbin/postdrop に付与
する。
ユーザ postfix グループ postdrop で実行時にグループ ID を指定した、 オーナユーザ
には読み、 書き、 実行を、 オーナグループには実行を、 その他にはなにも出来ない権限
を/var/spool/postfix/pubulic に付与する。
ユーザ root グループ postdrop で実行時にグループ ID を指定した、 読み取りと実行をオー
ナユーザ、 オーナグループ、 その他に許可したものを/usr/sbin/postqueue に付与する。
以上のように、 プログラムにデフォルトのパーミッションを付与したい場合に用いることがで
きる。
パッケージメンテナがこれを利用したほうがよいのには理由がある。
debian のポリシーマニュアルでは標準のパーミッションなどが規定されている、 しかし、 規定されてい
るものでは却って不便になってしまうものがあり、 ポリシーから離れてパーミッションなどを変更する場
合にあとからユーザがポリシーにない状態の確認を容易にするために用いるインターフェースとして利便
性のためである。
別の例を上げてみよう。
第二に postinst などで chmod,chown などを使う場合でもユーザの都合でオーナーやパーミッションを
変更させることがありうるが、 たとえ変更したとしてもパッケージの再インストール時やアップグレード
時などにパッケージ標準のオーナとパーミッションに上書きされてしまう可能性がある。 これを防ぐた
めにパッケージ標準のオーナ及びパーミッションを設定可能にしておくのがよいかと思わ
れる。
パーミッションをごたごた言う BTS を減らすためにも statoverride は活用しましょう!
サーバ管理者などはパッケージにより提供されているオーナやパーミッションでは目的が達成できない場
合がある、 アップデートの少ない stable を使ったとしてもセキュリティアップデートなどで update がか
かった場合にどうしても上書きされてしまい、 初期の値に戻されてしまうことになる。 これを回避す
るためには、 dpkg-statoverride を使うことによりパッケージの上書きを回避してユーザ設
定のオーナとパーミッションをアップグレードしても無関係に用いることができるように
なる。
GUI 環境がある場合は dsys を使ってみてください。
# dpkg-statoverride –add ユーザ名グループ名パーミッションファイル名
# dpkg-statoverride –update –add ユーザ名グループ名パーミッションファイル名
# dpkg-statoverride –remove ファイル名
# dpkg-statoverride –remove ファイル名# dpkg-statoverride –update –add ユーザ名グ
ループ名パーミッションファイル名
# dpkg-statoverride –list パターン
–admindir オプションを使いホームディレクトリの . (ドット) ファイルのパーミッションを制御
する。
postinst などで設定を –remove してから –add している場合などにはシステム管理者が
statoverride を設定しても postinst などの設定に書き換えられてしまう。 (postfix など)
postinst などで –add のみの場合は管理者などが設定した statoverride の設定になる
statoverride の設定に従ってパーミションが変更される
システム管理者が statoverride を設定してもパッケージの postinst などの chown、 chmod
で書き換えられてしまう。
statoverride の設定に従ってファイルのパーミッションが変更される
システム管理者が chown や chmod で設定してもパッケージの postinst などの chown、
chmod で書き換えられてしまう。
statoverride は alternatives と比べると単純な機能ではシンプルなものだし知名度は更に低いが、 メンテ
ナもユーザも楽になれるツールなので是非活用していただきたいと思う。
東 京 エ リ ア
Debian 勉強会 2005 夏_________________________________________________________
7.3 どんな風に使われている?
7.3.1 メンテナ編
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
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
do
if ! dpkg-statoverride --list $i >/dev/null
then
dpkg-statoverride --update --add sysuser root 4755 $i
fi
done
7.3.2 ユーザ編
7.4 使い方
7.5 一般的な用法
7.6 マニアックな用法
7.7 パッケージアップグレード
7.8 おわりに