root が読む書き込み可能パス
root 権限のサービス、sudo で実行するスクリプト、timer が、低権限ユーザーの書けるパスを読む場合、そのパスが権限境界になる。探索コマンドはファイルとディレクトリ権限にまとめた。timer から呼び出される場合は定期実行の設定と照合する。
find <APP_DIR> -maxdepth 5 -writable -ls 2>/dev/nullnamei -l <APP_DIR>/<FILE>stat <APP_DIR>/<FILE>- root 権限のサービス、sudo で実行するスクリプト、timer が、低権限ユーザーの書けるディレクトリ内のファイルを読む。
- symlink、
.pth、plugin、checkpoint、archive、log、一時ファイルが入力として使える。
grep -RniE 'open|read|glob|plugins|checkpoint|load|source|include|cat|cp|mv|chmod|chown' <APP_DIR>findmnt -no TARGET,OPTIONS <MOUNTPOINT>- 目的: ファイルがいつ、誰の権限で、どの API に渡るかを確認する。
- 前提条件: 書き込み検証は状態変更である。先に
stat、namei、コードを読む。 - 出力の解釈:
glob("*.pt")とtorch.load、site.addsitedir()と group-writable directory、symlink 検査のあとに行うcatは、それぞれ信頼境界になる。 - 失敗した場合の切り分け: 実行前に別処理で止まる、mtime の順が違う、mount の
nosuidやnoexec、ACL、container と host の path 差。 - 代替:
inotifywaitがあれば観察する。なければ timestamp と log を見る。 - 状態変更: ファイルへの書き込み、シンボリックリンクの作成、
chmodは変更内容として記録し、後片付けする。
ファイルを置くだけでは境界にならない。高権限処理がそれを読むことと、読む API が何をするかまでをつなぐ。
- group writable な plugin directory の
.pthを、root のsite.addsitedir()が起動時に処理する。 - log 用ディレクトリの symlink は複数段になる。閲覧処理が検査するのは1段目だけのことがある。
- 共有 mount 上の checkpoint を、root の学習ジョブが読む。container 内の
chmodが、host 側の書き込み可否を変える。 - root 権限の HTTP サーバがスクリプトを実行する公開ディレクトリに、変換結果がスクリプトとして保存される。
読む API までの線は独自コードの信頼境界に図がある。

