記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索

    Jail

    2012年06月09日03:13いってきた: 第8回 FreeBSD勉強会

    五反田駅であわてて入場しようとしたら、むこうから来た出場する人と改札ですれ違い。ゲートは閉らなかったけど、ちゃんと入場できたか心配しながら有楽町で出ようとすると「窓口へ」と表示が。残念ながら入場記録がないようだ。

    K3410182

    麹町駅の3番出口からでてすぐ。となりのビルにmozilla japanの文字が。

    DSC04280DSC04281DSC04279

    受付でアカウントが見つけられずちょっと手間取ってしまった。

    Jail機構と資源制御 / 佐藤広生

    (資源制御の話)

    • RACCT/RCTLが新しく導入されたやつ。
    • UNIXでファイルじゃないもの: CPU時間、メモリ、IPCなど。ほんとうは全部ファイルにするつもりだった。
    • 一台の物理マシンを共有できるようにするのがUNIX: ユーザ/グループが管理単位。
    • ユーザ単位で分けられている資源: ユーザランドプロセス空間と使用中のハードウェア(/dev/*)。
    • 限界が許すかぎり早い者勝ち。ただしムダが少なくなるようにがんばる。
    • 「資源使用量を細かく管理しよう」という考えはとぼしい。人間が細かく指定するとムダがでる→ハードウェアのキャパを大きくすればいいよね!
    • Subject--(Action)-->Object
    • ルール:{S,A,O}=許可or拒否 という形で記述する。カーネルががんばって監視する。
    • アクセス制御リストはファイルの許可属性に書いてあるが、ファイル以外はrootかどうかで判断。
    • もっと強力な権限制御はMACをつかう。
    • Disc Quotas (Diskではない!)
      • S=プロセスのUID
      • O=ファイルシステム上の使用量(ブロック・ファイル)
      • A=ファイルへの書き込みアクセス
      • ACL=quotaファイル
      • 資源監視=カーネルがファイルシステムアクセスを監視
      • 4.2BSDで追加。
      • デフォルトは無効。
      • リブートすると使用量を調べなおしという無駄。
    • setrlimit
      • プロセスが使用可能な共有資源の使用制限
      • 4.2BSDで追加。
      • POSIXにも採用されたのでだいたいつかえる。
      • FreeBSDでは/etc/login.confで設定されている。(ログインクラス)
      • ログインクラスはユーザ単位にケーパビリティを定義する仕組。
      • setrlimitはプロセス単位なのでログインプロセスを設定することで子孫プロセス全部に制限がかかる。
      • 欠点: ユーザ単位でしかできない。複数のユーザ/プロセスの集合に対して最大値を決めたいとか複雑なのはできない。

    (環境の分割の話)

    • 環境=ユーザプロセスの集合体
    • カーネルは要求に応じて資源を分配するだけ。
    • 分配に必要な情報はカーネルの外(ディスクとか)にあることがほとんど。
    • 複数の環境を1つにまとめてもカーネルはその機能を失わない。
    • chroot: 昔からある方法
      • unixでは資源をファイルで管理しているので見えるファイルを制限すればいいのでは!
      • この種の環境の分割=「名前空間の分離」
      • セキュリティ対策として使われることがしばしばだが、抜け道はいつくか存在する。
      • できないこと: ファイルとして管理されてないもの(プロセスとか)。別ユーザだけどuidが同じとか。ネットワークとか。
    • Jail: もっと分離したい!
      • 分離されたもの: sysctl MIB, proc list, PID空間 (pid+jailIDで管理)
      • uidは分離されていない。
      • rootはファイルシステムは特権ありだが、mountとかファイルシステムの垣根は越えられないように(基本)。
      • jail外部環境に影響をあたえるようなものは拒否。
      • jailもchrootもプロセスに効くので/etc/rc.confに書いて自動的につくる。
      • 作成や環境維持にはsysutils/ezjailが人気。
      • jail(2)とjail_attach(2)をつかう。ABI emulationは親プロセスを継承する。CentOS4もだいたいは動くよ。
      • Linux版のunameはuname -aの出力にはLinuxとFreeBSDがまざって表示される。
      • yumもほぼ動く。
    • VIMAGE (VNET)
      • さらなる拡張。ネットワークを完全独立でネットワークスタックを用意する。ループバックデバイスとか..
      • まだバグがちょっと残っているのでデフォルトではoff。
    • KVMのようなカーネルを複数立ちあげるタイプとはちがう。
    • Jail単位でつかわれている資源量はカーネルはわかってない!
    • setrlimitの欠点
      • ユーザ単位での制限がむつかしい
      • アクションを変えられない
      • 設定後に自由に変更できない。

    RACCT

    • RACCT:資源使用量をカーネルが把握するためのフレームワーク
    • RCT: ACL風のルールで指定
    • デフォルトはoffだが特に理由はなくてFreeBSD9.0はゼロだし導入に慎重になっただけ。深刻な不具合報告もない。
    • 書き方: subject:subject-id:resoure:action=amount/per
      • rctl -huで現在の使用値を表示
      • subject=user,process,loginclass,jail がえらべる。
      • action=deny,log,devctl,sig*
      • amount/perはsubject単位でつかえる資源量を指定する。subjectとperは同じでなくてもよい。
      • 1g/userと指定すると1ユーザあたり1Gまで。
    • RACCTでプロセス数を制限すれば学生のフォーク爆弾に有効。
    • なぜかルールの一覧表示はできない。理由不明。技術的にはむつかしくないはず。
    • action=devctlをつかうとdevd経由でいろいろできる。
      • メモリリークするプロセス(e.g. postgresql)があった場合、スワップ使用量が閾値を越えたらdevdから再起動するなど。

    QA:

    • ルールの評価順序は上から順番に。

    DSC04260

    5分でわかる「開発者支援精度」(とCloudCore VPS) / KDDI 斉藤

    • エンジニアがやりたいことをやってみた。
    • さくらとちょっとにてる。
    • 月額1000円で。嫁を説得できる価格。945円で。嫁に怒られないVPSが完成!
    • 申込フォームから申込で3日程度で。
    • FreeBSD9.0も簡単にインストールできるよ。

    DSC04288DSC04289

    DSC04262DSC04264

    Reborn:FreeBSD勉強会 / 後藤

    • KDDIウェブコミュニケーションズ提供
    • 月一でサクサクいくよ。
    • 第9回は 7/20 18:30-20:30
    • 次回テーマは紙にかいて! ハッシュタグをみるのはめんどくさい。

    DSC04290

    DSC04267DSC04268DSC04269DSC04270DSC04271DSC04272DSC04274DSC04275DSC04276DSC04277DSC04278

    そのほか

    後藤さんに今回これだけ人が集まったのは何か仕掛があったのかきいてみたところ、ATNDにしたのが効いたのではないかとのこと。技評の告知ページだと1週間くらいしか出せないので人があつまりにくいとか、ユーザー登録するのが面倒だとかあるが、ATNDならtwitterかGoogleのアカウントがれば簡単に申し込める。

    DSC04265



    このエントリーをはてなブックマークに追加
    2011年01月14日18:48FreeBSD勉強会 第6回 Jailにしなきゃ危ないよ 〜JAIL環境の構築と運用〜 にいってきた

    46156331.jpg

    • http://gihyo.jp/event/01/freebsd/2011/0113
    • 発表: 河部展さん
    • 場所: 株式会社Speee セミナールーム
    • 日時: 2011-01-13 20:00〜22:40
    • 募集が直前だったのにもかかわらず17人ほどが参加。
    • ustream配信は機器故障のため行なわれずビデオ録画のみ。後日アップロードされるとのこと。
    • 当日の資料も多少手直ししたものが公開されるとのこと。

    はじめに

    • あっという間に今回の話がきまった。迂闊なことをいうと発表者にされちゃうよ!
    • JAILの利用はホスティングやセキュリティ確保のために利用されることがおおい。
    • またクラックされた..
      • WordPressがやられた..
      • Apacheの実行権限が盗られた。
      • rm をしかけられたためコンテンツが全滅。
      • ckrootkitで調べたところシロだったが何をされたかわからない。
      • これはまずい! → JAILで分離しよう!
    • 意外とJAILについてちゃんと書かれている記事がない。たいていはちょっと使ってみたところで話が終わっている。

    JAILとは

    • 仮想化ではないのでパフォーマンスはいいけど、OSがFreeBSDに限定されるので利用者を増やすことにはつながらない。
    • ふつうにJAILをつくるとuid/gidがホストとかぶる。/etc/pw.confでminuid,maxuid,mingid,maxgidを設定することで変えることは可能。
    • 用語: ホスト環境、JAIL環境。
    • JAILでできないこと
      • ipv6 ((いまはできるっぽい))
      • icmp (raw socketがひらけない)
      • bcast (netmask 255.255.255.255に設定するため)
      • loopback ((いまのはjailのアドレスに読みかえてくれるっぽい?))
      • NFS (デーモンを起動するときにjailアドレスを指定できないので)
      • SYSV IPC
      • mount/umount (ezjailからはzfsを操作できるらしい)

    JAIL環境の構築

    • ハンドブックにしたがってJAILをつくるには((http://www.freebsd.org/doc/handbook/jails-build.html)):
    • make installworld DESTDIR=... でインスールされて
    • make distribution DESTDIR=... で/etcの下が調整される。installworldではまだからっぽの状態。
    • この段階でduでみる200MBくらい消費している。これを多いとみるか少ないとみるか...
    • devfsもmountしないとps(1)がうごかない。kvmをつかうので。

    JAIL環境の複製

    • /usr/objをとっておく。必要なだけmake installworld+distributionする。
    • cpする。ハードリンクが展開されてしまう問題がある。
      • やってみると /rescue の下が膨れ上がった。205MBだったのだ834MBに。
    • tarする。chflagsがおちる問題がある。

    JAIL環境の設定

    • /etc/passwdにはいらないアカウントがあるので削る。
    • /etc/pw.confをつくっておくとuid/gidの範囲を指定できる。
      • adduser/rmuserはpwコマンドをつかったスクリプト。
      • ただし、一部のportsでは決め打ちでuid/gidを指定するものがあるので、そういうのには無力。
    • /etc/wall_cmos_clock、/etc/localtimeも設定する。

    JAILあれこれ

    • JAILにアドレスをつけなくてもよくなっているが、つけないとどうなる? どいういう利用法があるのか?
      • [goto] IPv4,IPv6スタックを完全分離する過程でJAILにアドレスをつけなくてもよくなった。それだけっぽい。
    • jlsは動いているJAILしか見えない。設定だけして動かしていないものは出てこない。
      • ezjail-admin listではみえるよ!
    • ホスト環境からcpするとオペミスする原因 (パスを間違えてホスト環境を上書きする可能性)
      • ネットワークを介してやるとか
      • プロンプトをかえておくとか
    • ネットワーク・デーモンはホスト環境・JAIL環境共にbind(2)で明示的にアドレスを制限しないとポートがぶつかってしまう。
    • /etc/rc.d/jail start hogehoge でJAIL hogehogeだけを起動できる。
    • /etc/rc.d/jail start hogehoge したあとに jail -l -u root hogehoge /bin/shするとおなじ環境がもういっこできてしまう?
      • JAILホスト名とJAILアドレスは同じだがJAILIDが違うものが複数できるということ。
    • JAILホスト名はFQDNの方がいい。文句をいうデーモンがある。
    • sh /etc/shutdownだと/bin/shがのこる。
      • jkillとか。
      • pkill -j JDIとか。
      • killall -j JIDとかもよい。ただ/var/run/jail_HOST_JIDがのこるけど。

    「梅」

    • handbookどおり
    • namedを動かしたいだけで200MBも使うのはムダ。

    「竹」

    • du | xdu でみると /usr/libとか/usr/shareとかが大きい。
    • /usr/includeはいらないだろうし。
    • jail-remove.txtというのがある。消してもよいファイルの一覧。
      • でも6.x-RELEASEでメンテがおわっている。
      • つかいかた: cat jail-remove.txt | xargs rm -rf
      • ホスト環境ではやらないように!
      • 消せファイルは chflags noschg FILENAME でフラグをおとしてからrm。
    • /sbin にあるのハード制御系のコマンドもいらない。
    • geom/ifocnfig/zfsなどもいらない。
    • /usr/libdataはいらない
    • *_p.aはプロファイル用なのでこれもいらない。
    • *.aもいらない。
    • そもそもgccとかいらない。
    • lddで使われているライブラリをさがす。消しすぎてしまったらもどす。の繰り返し。
    • 実はifconfigは必要だったり。
    • これはとっても時間がかかる作業。
      • ディスクは251円/GB。
      • 近所のマクドナルドは800円/h。
      • ということは1GBを削るのは20分くらいの労働時間に相当する...
    • 結局33MBくらいまで減らせた!
    • くわしいことはここで: http://hk-tech.homeip.net/pcserver/jail.html

    JAILでアプリケーション管理

    • 必要なのをpackageにしてftpでインストールするのが簡単。
    • portsで入れるなんてありえないよねー ((すみません、うちんところでは個々のJAILでmake+make installしてます))

    運用・作業を省力化してくれるコマンド

    ezjailかqjailがおすすめ。

    • ezjail
      • 設定は/usr/local/etc/ezjail.confに書く。
      • JAILにつけるアドレスは/etc/rc.confに書く必要がある。ezjailの外でしなければいけない唯一の設定。
      • ${ezjail_jaildir}/flavours/ezjail.flavour
        • ここにスクリプトを書いておくとcreateのときに実行してくれる。
        • zshをinstallするのにつかっている。
    • qjail
      • いちばんあたらしいやつ。まだportsにはいってない
      • "q"はquick。
      • なんかよくわからんが、第4世代らしい。
      • 100のオーダーのJAILを扱うのを想定している。
      • zone(グループみたいなの)があり、zone単位で起動する機能がある。
      • qjail create -D 10 -I JAILNAME JAILIP を実行すると、いきなり10個できる。
        • ホスト名は JAILNAME-1 〜 JAILNAME-10 という風に振られる。
        • アドレスも JAILIP+1 〜 JAILIP+10 という風に。

    [goto]ベースシステムにもそのうち何かしら入るとのこと。ezjailを元にしてqjailのように沢山のJAILを管理する機能がついたものになるそう。

    そのほか 質疑応答 雑談 など

    • jail -m でJAIL環境に接続できる。((jexecとおなじ?))
    • JAILは仮想化とはちがって、JAILから外を見えないようにしているだけ。
    • まだマージされてないが VPS (Virtual Private System) というもの開発されている
      • solaris containerみたいなもの。zfsもあるし、open solarisの人たちをFreeBSDにひっぱりこめないか?
    • CentOSをJAILで動かすのはむつかしくない。linux emulatorが実際の差を吸収している。
      • unameを実行するとちゃんとcentosという。CentOSのunameコマンドを実行しているだけ。
      • もともとはXENよりもお手軽にたくさんの環境をつくりたかったという動機らしい。
    • リソース配分機能というのがあったらしいがマージされなかったそうな。
    • PC-BSD由来のPBIは便利。portsをベースにしてインストールの仕方を工夫しているらしい。/optの下にインストールされる。そもそも/usr/localの下にインストールするのは *BSD では少数派。Linuxみたいに/usrにぶちこむのは論外。
    • /etc/rc.dの下のスクリプトは手で起動しない。環境変数がブート時とは違ってしまうため。service(8)をつかおう。
    • nullfsはマウント先(covered)のファイルシステムを隠す。足し算するのはunionfs。unionfsは安定しているはずだが、VFSの仕様に敏感なのでおかしくなるかも。


    このエントリーをはてなブックマークに追加