読者です 読者をやめる 読者になる 読者になる

TenForward

技術ブログ。はてなダイアリーから移転しました

Linux 3.8 の User Namespace 機能 (3)

Linux Container

3.8 で実装が完了した! ということで楽しみにしていたユーザ名前空間 (User Namespace) ですが,3.8 の時点ではカーネルのかなりの機能を無効にしないと有効に出来ない状態でした.これでは手元のカーネルをユーザ名前空間を有効にして make できないなあと思って放置していました (テスト用の環境作れよ > オレ :p).なので 前回 までは lxc の実装からユーザ名前空間の機能を追ってみるという企画になっていました.

ちなみに 3.8 の時点でオフにする必要があったのは以下 USER_NS が依存している UIDGID_CONVERTED の関係でした.

config UIDGID_CONVERTED
        # True if all of the selected software conmponents are known
        # to have uid_t and gid_t converted to kuid_t and kgid_t
        # where appropriate and are otherwise safe to use with
        # the user namespace.
        bool
        default y

        # Networking
        depends on NET_9P = n

        # Filesystems
        depends on 9P_FS = n
        depends on AFS_FS = n
        depends on CEPH_FS = n
        depends on CIFS = n
        depends on CODA_FS = n
        depends on GFS2_FS = n
        depends on NCP_FS = n
        depends on NFSD = n
        depends on NFS_FS = n
        depends on OCFS2_FS = n
        depends on XFS_FS = n
(3.8.5 の init/Kconfig)

ファイルシステム方面で uid, gid でのチェックが入る所の実装が大幅に済んでなかった (というかソレ用のパッチがマージされなかった?) というわけです.3.9 ではこれらの実装部分がマージされ,これが大幅に減りました (この辺り? > Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace).

        # Filesystems
        depends on XFS_FS = n
(3.9 の init/Kconfig)

XFS は残念ながらお引き取り頂いて,早速ユーザ名前空間有効のカーネルを作ってみました.

CONFIG_USER_NS=y
CONFIG_UIDGID_CONVERTED=y
CONFIG_UIDGID_STRICT_TYPE_CHECKS=y

この辺りですね.:-)

で,起動すると

root@enterprise:~# cd /proc/1/ns
root@enterprise:/proc/1/ns# ls -l
合計 0
lrwxrwxrwx 1 root root 0  5月  7日  19:41 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0  5月  7日  19:41 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0  5月  7日  19:41 net -> net:[4026531955]
lrwxrwxrwx 1 root root 0  5月  7日  19:41 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0  5月  7日  19:41 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0  5月  7日  19:41 uts -> uts:[4026531838]

ちゃんと user というファイルが出来ていますね! (このファイルに関しては Linux 3.8 で改良された Namespace 機能と lxc-attach コマンド - TenForwardの日記 をどうぞ :-)

はい.今日はほぼ中身がありませんが,ここで時間切れです (^^;)

(Linux 3.8 の User Namespace 機能 (4) - TenForwardの日記へ続く)