トップ «前の日記(2009-10-18) 最新 次の日記(2009-10-20)» 編集

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ToDo:


2009-10-19

_ SELinux

なーんとなくおぼろげにつかめてきた。 カンで書く。

  • SELinux とは。 linux kernel でなんかプロセスのやることにセキュリティコンテキストベースで制限とかがかけられる。
  • ls -Z とか ps Z でどいうセキュリティコンテキストのファイル/プロセスかがわかる。
  • ポリシーを手動でセットしていくのは大変なので hoge.te, hoge.fc を書くことによって make で作れたりするようになってる。
  • さらに reference 設定として配布されてるものがあって、かつそれは distribution が改造して適当に配布している。
  • strict mode では基本全てのプロセスが何もできないのがデフォルトだけど、それは結構真剣に不便なので targeted mode とかいうヤツが普通のディストリビューションでは使われていて、それだと特定のプロセス(要はサーバ)だけできることを減らす、というような感じでできる。
  • targeted で特に何も指定してないプロセスは unconfined_t とかいうのがついて、何でもできる。
  • あとたぶん MLS とかいうのもある、がなんか軍とかで機密データは大佐以上がアクセス可、とかそいうヤツぽい。
  • プロセスのやることを制限する書式は基本的に whitelist 方式。

さて、やりたいことは unconfined_t からほんの少しだけ権限を奪った、 つまり blacklist な感じの policy を作りたいんだけど、 あんま簡単ではなさそうなんだよな。 unconfined_domain_noaudit ってマクロが /usr/share/selinux/default/include/system/unconfined.if にあるから、 これをコピってから必要な制約だけつけないようにする、って感じかなぁ。

なんか allow kern_unconfined ~{ setpgid } とかそいうのかも

(05:19)

_ ゴルフ場 sandbox

前回までのあらすじ: SELinux はたいへん難しかった

メンテ性考えても kernel module の方が はるかにマシなんじゃないかという結論に至り、 その方向でやってみたい。 方針としてはややこしいのを書くと 大変なことになりそうなので、 間違えようのないくらい簡単なものにする。

  • setuid, setgid, setsid, setpgid は root 以外は EPERM 。
  • accept, bind, listen, socket あたりは…禁止したいけど、 execution server 自身の通信ができなくなるんだよな。とりあえず保留かな。
  • exec の実行回数を記録しておく。
  • getpriority(1764, __NR_execve) で exec の実行回数が帰るようにしておく。
  • setpriority(1764, __NR_setuid, 0) とかで EPERM な system call が実行されたかをリセットして getpriority で取得。
  • setpriority(1764, __NR_getpid, pid) で setpid 。
  • setpriority(1764, __NR_setpriority, 0) だけは禁止。これのカウントで exec 回数の記録が捏造されてないかをチェック。

こんな感じでどうかなぁ。 やってみよう

(22:46)

お名前:
E-mail:
コメント:
人生、宇宙、すべての答え
本日のリンク元

2009年
10月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1.shinh(2014-05-24 01:31) 2.ょゎ(2014-05-24 01:31) 3.shinh(2014-05-24 01:31)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h