複数のIDのマッピング
ここまでの例では,ubuntu
ユーザのIDのみを,1
にしていました。
この場合,ubuntu
ユーザでマッピングファイルへの書き込みができました。自身で起動したプロセスに対する操作ですので権限があるためです。
マッピングファイルに書き込む値の
コンテナを使う場合,
このような一般ユーザでのコンテナの利用の際のマッピングの問題を解決するために,
この
このusermod
コマンドの-v
オプション-w
オプション
たとえば,test
ユーザにUID/
# usermod -v 200000-265535 -w 200000-265535 test
この定義は/etc/
と/etc/
に保存されます。
# grep test /etc/subuid test:200000:65536 # grep test /etc/subgid test:200000:65536
ちなみにUbuntuではインストール時に作成したubuntu
ユーザに対して,
この状態で新たにユーザを追加すると,
- ※)
- Ubuntu 14.
04 LTS と 14. 10 で確認
$ sudo adduser test Adding user `test' ... Adding new group `test' (1001) ... Adding new user `test' (1001) with group `test' ... Creating home directory `/home/test' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: : (略) $ grep test /etc/subuid test:165536:65536 $ grep test /etc/subgid test:165536:65536
このサブUIDとサブGIDを使ってマッピングを作成するには,
$ sudo apt-get install uidmap $ ls -l /usr/bin/new?idmap -rwsr-xr-x 1 root root 33688 Jul 18 23:29 /usr/bin/newgidmap -rwsr-xr-x 1 root root 33688 Jul 18 23:29 /usr/bin/newuidmap
インストールすると,newuidmap
コマンドとnewgidmap
コマンドがインストールされます。
では,newuidmap
コマンドを使って複数のIDをユーザ名前空間に対してマッピングしてみましょう。
ここでは実験のためにデフォルトで定義されているサブUID以外にさらに定義を追加します。
$ sudo usermod -v 1000-1001 ubuntu $ cat /etc/subuid ubuntu:100000:65536 ubuntu:1000:2
1000と1001の2つがubuntu
ユーザで使えるようになりました。
新しいユーザ名前空間で起動しているPID=1777のシェルに対してマッピングを定義します。名前空間内のUID=0と1を名前空間外のUID=1000と1001にそれぞれマッピングします。
$ newuidmap 1777 0 1000 2 $ cat /proc/1777/uid_map 0 1000 2
newuidmap
コマンドには,uid_
,gid_
ファイルと似ていますね。
それではユーザ名前空間内で実効UIDを1に変えてみましょう。
$ echo $$ 1777 $ whoami root $ python Python 2.7.8 (default, Oct 20 2014, 15:05:19) [GCC 4.9.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> os.seteuid(1) >>> os.getpid() 1800
以上のようにPythonを起動し,seteuid
してみました。Pythonのpid=1800ですので,
$ ls -ld /proc/1800 dr-xr-xr-x 9 1001 ubuntu 0 Dec 1 20:13 /proc/1800 $ grep '[U|G]id' /proc/1800/status Uid: 1000 1001 1000 1001 Gid: 1000 1000 1000 1000
以上のように実効UID=1001で実行されているのがわかります。
LXCでは,newuidmap
とnewgidmap
コマンドを使って,
まとめ
今回は一般ユーザでコンテナを操作する際に使うLinuxカーネルの機能であるユーザ名前空間について説明しました。
次回はUbuntu上での一般ユーザでのコンテナの操作について説明したいと思います。
最近のLXC関連の動き
この記事の原稿を書いている間にLXC 1.
これまでLXC関連のプロジェクトはLXCとcgroupを管理するためのCGManagerの2つでしたが,
当初は文書だけでコードはない状態でしたが,
また,
この新しいサイトも12月の初めには正式に公開されました。URLは変わっていません。
英語のコンテンツはまだとりあえず揃えただけという感が強いですが一通りのコンテンツが揃いました。日本語の翻訳もとりあえず私が一通り行い,
言語独自のコンテンツを追加することも特に問題なさそうですので,
誰でもGitHub上でforkして変更や追加を行ってプルリクエストを送れますので,