分12前回の最後で「次回以降はしばらく私ではなくudzuraさんにお書きいただく予定です」と書きました。Calendarの存在をすっかり忘れていたことに気づきました。Calendarに参加していましたので今年も何か参加しようと思って登録だけはしました。v2関連でしたので,これは連載の記事にしよう思いました。いうわけで今回も前回までに続いて加藤による記事となります。2018の14日目の記事です。v2に追加された機能について紹介します。v2のマウント方法を紹介しました。v2をマウントする際に指定できるオプションはありませんでした。その後,4.13カーネルでnsdelegateというマウントオプションがひとつだけ追加されました。v2のマウントで指定できるオプションは,このnsdelegateのみです。v2をマウントするときのみ指定できます。v2をマウントしている場合は,再マウントするにより有効にできます。それ以外の名前空間でマウントしても無視されます。v2文書では「cgroup名前空間を権限委譲の境界とみなします」と書かれています。このように,この連載の第34回で紹介したcgroup名前空間と連携して動作します。それでは,この「権限委譲の境界とみなす」とはどういうことなのかを説明していきましょう。cgroup間のプロセスの移動cgroup名前空間は第34回で説明したとおり,新しく作成した名前空間内では,プロセスが所属しているcgroupがツリーのrootに見えるという機能でした。詳しくは第34回を参照していただくとして,簡単に紹介しておきましょう。cgroupに登録し,その子プロセスで新たにcgroup名前空間を作成します。,"/test01"にいるはずのプロセスから所属しているcgroupを確認すると,root(/)にいるように見えました。(自分が所属するcgroupを確認)0::/念のため,作成した名前空間の外から確認してみると次のように確かに"/test01"にいることが確認できます。v2をマウントしていますので,そのままおさらいとして,第34回でも紹介したように,"test01"と同じ階層に作成した"test02"というcgroupにプロセスを移動して,所属するcgroupを確認してみましょう。(現在のcgroupを確認)0::/../test02元々,root直下の"/test01"にいたプロセスを,同じくroot直下の/test02に移動させました。すると,名前空間内から自身が所属するcgroupを確認すると"/../test02"に所属していると表示されました。cgroupに所属しているということで,少し変な所属に見えます。名前空間を作るという操作は,コンテナを作成するということですから,実際のケースでは,コンテナをまたいでプロセスを移動させるという操作は考えづらいです。上の例のようにコンテナをまたいでプロセスを移動できました。このような不自然な動きを拒否するのに,新たに追加されたnsdelegateオプションが使えます。v2をマウントしている場合,再マウントを行い,nsdelegateオプションを指定してマウントできます。cgroupにプロセスを追加してみまし,cgroup名前空間を作成してみましょう。(自分が所属するcgroupを確認)0::/ここまでは先のnsdelegateを指定していないときの例と同じです。それではカレントシェルのPIDを"test02"に移動させてみましょう。directory"とエラーになりました。cgroupは存在しています。"/test01"をrootとしてcgroup名前空間が作られているので,その名前空間の中からは,rootを超えて,つまり名前空間の境界を超えて,別階層のcgroupにプロセスを移動できなくなっているというわけです。これがnsdelegateオプションが持つ機能のひとつです。ちなみに,cgroup名前空間の外からであれば,権限があれば上記の操作はエラーになることなく移動できます。v2では一般ユーザがcgroupを管理する場合,次のような権限が必要でした。root内に存在するコントローラ関連のファイルには書き込み権限を与えません。図2のように,コンテナにリソースを割り当てるのは,あくまでコンテナが稼働しているホストの管理者であるという考え方です。リソース分配の権限この権限委譲を行うには,従来は第40回で説明したように,アクセス権を管理者自身が設定する必要がありました。v2をマウントするという方法が採れるようになりました。nsdelegateオプションを指定しない場合まずはnsdelegateを指定しない方法を改めて紹介します。ここではあえて対象となるcgroupで,一般ユーザに全権限を与えるようにしてみます。v2をマウントし,子cgroupでio,pids,memoryコントローラが使えるように設定します。(設定された)このあたりの操作は第38回で紹介したとおりです。cgroupを作成します。一般ユーザである"gihyo"ユーザに対して,"test01"ディレクトリとディレクトリ内に存在するファイルすべてにアクセス権を与えます。/sys/fs/cgroup/test01/*(ディレクトリ内のファイル所有権をgihyoに)通常はディレクトリとcgroup.procsファイルにのみアクセス権を与えることが一般的です。ここでは,あとのnsdelegateオプションを指定した場合との比較のためにあえてこのようにしています。cgroupに登録します。(カレントシェルをtest01に登録)4352ここでユーザ名前空間とともにcgroup名前空間を作成します。現在のユーザである"gihyo"ユーザをユーザ名前空間内の"root"ユーザにマッピングするために--map-root-userオプションを指定しています。(cgroup名前空間内でrootにいることを確認)0::/ここではpids.maxに制限を設定することにして,このファイルと"test01"ディレクトリに書き込み権があることと,cgroup名前空間内にいることを確認します。その後,pids.maxファイルに制限値を設定してみます。50(書き込めたことを確認)無事にファイルに制限値を書き込めたことが確認できました。アクセス権から考えて予想できる動きではないかと思います。v2をマウントして試してみましょう。マウント後,先の例と同じように,子cgroupでio,pids,memoryコントローラが使えるようにします。cgroupを作成し,ディレクトリ内のファイルの所有権を一般ユーザである"gihyo"ユーザにします。cgroup内のすべてのファイルにアクセス権を与えました。カレントシェルを登録します。(カレントシェルをtest01に登録)4399次に,先の例と同じくユーザ名前空間とcgroup名前空間を作成します。(cgroup名前空間内でrootにいることを確認)所有権を設定していますので"test01"直下に存在するpid.maxファイルには書き込み権があります。permitted(書き込めない)上の例のように,cgroup名前空間内のrootにあたるcgroup内に存在するコントローラ用のファイルに書き込もうとするとエラーになります(EPERMが返ります⁠)⁠。v2著者プロフィール加藤泰文(かとうやすふみ)2009年頃にLinuxカーネルのcgroup機能に興味を持って以来,Linuxのコンテナ関連の最新情報を追っかけたり,コンテナの勉強会を開いたりして勉強しています。英語力のない自分用にLXCのmanページを日本語訳していたところ,あっさり本家にマージされてしまい,それ以来日本語訳のパッチを送り続けています。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。