[開発日誌] デバイス関連のアクセス制御続き
端末デバイス調査
端末に関連したデバイスを見てみる。
- 普通の端末
- man 4 tty
- /dev/tty(数字)
- これのいずれかをユーザの端末として使う。ロールに基づいたタイプが付与される。
- /dev/tty0
- 現在の端末を表す。
- /dev/tty
- 現在の端末を表す。加えて、これをioctlすることで、端末の制御が可能。
- TIOCNOTTYという制御端末から切り離すioctlは/dev/ttyからしかできない。
- 疑似端末
- Xtermやsshでログインした時に作られる端末
- /dev/pts以下に端末を開くたびにファイルができる。ロールに基づいたタイプが付与される。
- /dev/ptmx
- 通常world read/writable
- /dev/ptmxを開くと/dev/ptsに自分の端末が作られる。端末が欲しい時はまずは/dev/ptmxを開くことになっている。
- /dev/console
- システムコンソール (Documentation/devices.txtより)
The console device, /dev/console, is the device to which system
messages should be sent, and on which logins should be permitted in
single-user mode.
-
- システムとして使う端末か。
端末にアクセスされると何が困る?
- 各自の端末へのアクセス(/dev/tty1- /dev/pts/*)
- 作業を邪魔される
- 例:
echo "hoge" > 他人の端末
とすると、他人の端末に文字表示。
cat 他人の端末ファイル
とすると、他人の端末の入力を横取り。
(他人の端末では、文字のエコーバックがないし、何も入力できないように見えるので、キーロガーにはなりにくいとは思うけど)
なお、他人の端末にアクセスするには、root権限が必要。
なので、SELinuxでは端末にロールに応じたラベルをつけている。
→今まで通りallowtty,pts <ロール>相当のものを設ける
- ラベル付けされていない /dev/tty*と /dev/ptmx , /dev/tty, /dev/ttyS0
- 消去されない限り、特に困らない。
→ 今まではallowtty/pts generalで設定していたが、それを使う。「noowner」にしようかな。
- /dev/console
システムログの一部が閲覧される。
/dev/console経由で変なメッセージ(?)
→/dev/consoleは普通にファイル単位のアクセス制御が可能なので、そちらで。
- /dev/vcsへのアクセス
スクリーンショットを取られることで、もしかしたら情報漏洩。
端末への文字表示で作業を邪魔。
→対策:
/dev/vcsxxxというファイル名を使ってファイルのallow文でアクセス制御可能だが、
ファイル数が多くなるので,allow文での設定は困難
結局/dev/tty(数字)全てにアクセスと同じ意味。
これは、allowtty 「global」と同じ操作になるので、allowtty globalにまとめる。
allowtty allowptsをallowdevに整理
allowtty,allowptsはallowdevにまとめた。
で、上の考察を踏まえ、以下のように
- allowdev -tty|-pts|-allterm open;
- 独自の端末を開くことを許可。roleブロック内でしか意味がない。
- allowdev -tty|-pts|-allterm <ロール> r,w;
- ロールが作った端末を読み書き
- allowdev -tty|-pts|-allterm <ロール> admin;
- ロールが作った端末の持ち主を変える
- -ttyは/dev/tty*の端末。-ptsは/dev/ptsの端末。-alltermは両方。
- <ロール>をgeneralにすると、ラベル付けされてない端末。globalにすると、全端末ファイルおよび/dev/vcs*