「第14回コンテナ技術の情報交換会@オンライン」の発表資料です。 参考となる情報にはPDF中からリンクをしていますが、資料中のリンクは Speaker Deck 上ではクリックできないので PDF をダウンロードしてご覧ください。
Seccomp Notify 〠〽҆શ〟ぢアふべ࣮ߦڥୈ 14 ճぢアふべٕज़〣ใަձՃ౻ହจ2021-04-171/25
View Slide
ࣗݾհ
ࣗݾհɹՃ౻ହจʢ͔ͱ͏͢;Έʣ• @ten_forward• https://github.com/tenforward/• גࣜձࣾ IDC や゜アふくぎ• LXC 〜ֶ〫ぢアふべೖ ʵܰྔԾԽڥぇ࣮ݱ『ٕज़ (gihyo.jp, 2014 ʙ)• Plamo Linux ゐアふべそ゚がゆ• lxc-jp ゆ゜でこぜぷ• ॳ〶〛৮ぁ〔ぢアふべ〤 Virtuozzo• 〟てとふわぢが゚〤 setns()2/25
ぢ゜べՒ〣ࢲʢ1ʣʙ ࣄろぼがでへ kubernetes つがもと〣։ൃʢばがわ〣ย۱〠ʣɻ〽⿸〹。 k8s 〠ೖ〜 〳「〔https://special.nikkeibp.co.jp/atclh/NXT/21/idcf0330/https://www.itmedia.co.jp/news/articles/2103/25/news001.html3/25
ぢ゜べՒ〣ࢲʢ2ʣʙ ษڧձ• ࡢ 3 〫〿〠〈〣ษڧձぇ࠶։ʂ• ୈ 12 ճɺ13 ճ〜 cgroup ಛू• 〒〣ྲྀぁ〜ຊ〣ษڧձ։࠵4/25
ぢ゜べՒ〣ࢲʢ3ʣʙ ݈߁ࡏۈ〜Ұ〣า 200 า〝ʜ (>_<)ʢˡ⿴⿴〜『〟ʣ• ˠɹۙॴぇげさがずアそʢࠓ〤ຖでわ or アぺアそʣ• ˠɹۙॴݹ〕〾々〟〈〝〠ؾ〚。• ˠɹݹ〠まろਪ「ݹʢݹ࣌ޙظʣ 5/25
ぢ゜べՒ〣ࢲʢ4ʣʙ ざアぐアゎがふくアそ〴〟《えざアぐアゎがふくアそৗ〜『〽〢ʁ ࢲ〷〜『ɻ• વ〟〾゙ぎ゚ぐよアぷ〤〟「• K-POP ぐよアぷ〤ざアぐア〠Ҡߦ• ఆظత〠ूۚ〠དྷぎぐぺ〝ざアぐアゎがふくアそʢZoomɺLineɺʜʣゎがふくアそࢿྉ〚。〿େม6/25
ຊ〣༰
ຊ〣༰Linux 5.0 〜࣮《ぁ〔 Seccomp Notify ػೳ〣֓ཁ〠〙⿶〛આ໌「〳『ɻ࿈ࡌ ୈ 47 ճɹඇಛݖぢアふべ〣Մೳੑぇ〆 seccomp notify ػೳ〣༰〣෮श〜『ɻ• ඇಛݖぢアふべʢUser Namespaceʣ• てとふわぢが゚• Seccomp• Seccomp Notify7/25
《〾⿶
User Namespace• Namespaceʢぢアふべʣ֎〜UID/GID ぇろひゃアそ『ػೳ• ぢアふべ〜〤 rootɺぢアふべ֎〜〤Ұൠゕがづが〝⿶⿸〽⿸〟ろひゃアそ〜 • ぢアふべ〜〤 root 〝「〛〪〳⿺ɺぢアふべ֎〣てとふわ〠Өڹぇٴ〱『〽⿸〟ૢ࡞〤〜 〟⿶〈〝⿴8/25
てとふわぢが゚ぎゆ゙たがてゖア〾 OSʢLinux じがぼ゚ʣ〣ػೳぇݺ〨ग़『〔〶〣〴• ゕがづۭؒ〜࣮ߦ《ぁぎゆ゙たがてゖア〤じがぼ゚〣ػೳぇૢ࡞〜 〟⿶• 〒〣〔〶〣ぐアのがやこがと〝「〛γεςϜίʔϧ४උ《ぁ〛⿶• વݺ〨ग़『ࡍ〠〤ݖݶばこひぜߦいぁ• ぎゆ゙たがてゖア〤てとふわぢが゚ぇݺ〨ग़「ɺ݁Ռぇड々औ9/25
User Namespace 〝てとふわぢが゚
User Namespace 〝てとふわぢが゚• User Namespace 〣 root 〤 root 〟〣〜ඞཁ〟ݖݶぇ࣋〘〛⿶〤』• 〝〈あಛݖඞཁ〝《ぁૢ࡞ぇߦ⿸〝ɺಛݖぇ࣋〘〛⿶ root 〣〤』〟〣〠ࣦഊ『〈〝⿴• User Namespace 〤 Namespace ֎〜〤Ұൠゕがづがˠりとぷ〹ଞ〣 Namespace ぇةݥ〠《〾『Մೳੑ⿴ૢ࡞〤ېࢭ《ぁ〛⿶10/25
User Namespace 〜࣮ߦ〜 〟〘〔てとふわぢが゚ぢアふべք〣ʢ?ʣ〣ݒҊ• やきぐ゚てとふわ〣ろげアぷʢmount てとふわぢが゚ʣ• ぶみぐとやきぐ゚〣࡞ʢmknod, mknodat てとふわぢが゚ʣ〟〞ʜ11/25
〈ぁ〳〜〤ʜࠔ〘〛〟〘〔〝ݴ⿺〥ࠔ〘〛〟〘〔• ぢアふべ〜ଘࡏ「〛〷҆શ〟ぶみぐとやきぐ゚〤ɺࣄલ〠りとぷ্〣ಛݖぇ〘〛ඞཁ〟ॲཧぇߦ⿶ɺbind ろげアぷ〜ぢアふべ〠ग़ݱ《【〟〞• ぢアふべ〜ろげアぷ「〛〷҆શ〟やきぐ゚てとふわʢproc, tmpfs, cgroup 〟〞ʣ〤ろげアぷڐՄ《ぁ〛⿶〔• ةݥ〟Մೳੑ⿴ॲཧ〤ॳظ〣 User Namespace 〜ݖݶぇ࣋〘〛⿶֬ೝ《ぁ12/25
ैདྷ⿴〘〔ぢアふべろぼがでをがࢹ〣ɿ• ぢアふべ〣ゆ゜そわԿぇ『ʢ=〞〣〽⿸〟てとふわぢが゚ぇൃߦ『ʣい〾〟⿶• ぢアふべろぼがでをが〹ぢアふべりとぷ〣ཧਓ〤ʢҰൠత〠ةݥ〝《ぁॲཧ〜⿴〘〛〷ʣ҆શੑい〘〛⿶߹⿴• じがぼ゚〜ॲཧぇ੍ݶ『߹ɺةݥ〟Մೳੑ⿴ぁ〥ېࢭ『「〟⿶• ぢアふべろぼがでをが〝「〛ڐՄ〜 ॲཧ⿴Մೳੑ• Ұൠత〠〤ةݥ〟ॲཧ〜⿴〘〛〷ಛఆ〣ぢアふべ〠〤ڐՄ〜 ॲཧ〜⿴Մೳੑ• ぢアふべろぼがでをが〤ぢアふべ〜ҙ〣ॲཧʢてとふわぢが゚〣ൃߦʣߦいぁ〔〈〝ぇ〈〝〜 〟⿶• Ծ〠〈〝〜 〛〷ݕࠪぇߦ⿸ํ๏〟⿶13/25
seccompલ〣とぐへ〜• ʮॲཧ࣮ߦ《ぁ〔〞⿸ぇ〈〝〤〜 〟⿶ʯ• ʮ࣮ߦ《ぁ〔〈〝い〘〛〷ݕࠪ〜 〟⿶ʯ〝ॻ⿶〔ɺ〈ぁ࣮ݱ〜 ʢՄೳੑ⿴ʣػೳ࣮〤 Linux じがぼ゚〠〤ଘࡏ『ˣseccomp14/25
seccomp
seccomp 〣ྺ࢙2005 2.6.12 〜 seccomp ಋೖҰ෦〣てとふわぢが゚〣࣮ߦぇڐՄ『〕々〣てアゆ゚〟ػೳread,write,exit,sigreturn Ҏ֎࣮ߦ〜 〟⿶2012 3.5 〜 seccomp mode 2 ಋೖてとふわぢが゚〉〝〠੍ݶてとふわぢが゚Ҿ〣ばこひぜ2019 5.0 〜 seccomp notify ಋೖଞ〠"Seccomp trap to userspace"ɼ"seccomp usernotifications"〝ݺ〥ぁ〛⿶〔〿15/25
seccomp 〠〽てとふわぢが゚〣やく゚の゙アそ• ⿴〾」〶てとふわぢが゚〠ؔ『ڐՄɾېࢭ〣れ゙てがぇఆٛ「〛。• てとふわぢが゚࣮ߦ《ぁ〝れ゙てが〠ै〘〛࣮ߦ『〞⿸ぇஅ• ېࢭ〣߹ɺ〞〣〽⿸〠ಈ࡞『ぇఆٛ「〛。ɻゆ゜そわऴྃɺࢦఆ「〔ごがぇฦ『seccomp mode2 〜ॊೈ〠てとふわぢが゚〣࣮ߦՄ൱ぇઃఆ〜 ˠなずゔ゙ふく֬อ〣〔〶〠ぢアふべろぼがでをが〠〤ී௨〠࣮《ぁ〛⿶ػೳ16/25
seccomp notify
〈ぁ〳〜〣 seccomp〈ぁ〳〜〤〽〿なずゔぎ〠『〔〶〠〜 〈〝ʢてとふわぢが゚ʣぇߜ〕々〕〘〔• ぢアふべ〣ゆ゜なと〜てとふわぢが゚ݺ〥ぁ〔〈〝ぇぢアふべろぼがでをが〤〈〝〜 〟⿶• てとふわぢが゚〣࣮ߦぇڐՄ『ɺڋ൱『「ઃఆ〜 〟⿶• ޭ「〔〽⿸〠ݟ【〈〝〤〜 ɺ࣮ࡍ〠ڋ൱「〔てとふわぢが゚࣮ߦ《ぁ〈〝〤〟⿶ˠ「「ɺてとふわぢが゚〣࣮ߦぇݕ「ɺ࣮ߦ〣Մ൱ぇஅ『〣〜ɺલड़〣ぇղܾ『〣〠Ұ൪ۙ⿶ػೳ〜⿴〈〝〠〤ҧ⿶〟⿶17/25
seccomp notify• seccomp 〜ݕ《ぁ〔てとふわぢが゚〣࣮ߦぇ• ゕがづがとらがと〣ゆ゜そわʢex. ぢアふべろぼがでをがʣ〠௨「ɺ࣮ߦ〣Մ൱ぇஅ「〛〷〾⿸• ௨ぇड々〔ゆ゜そわ〤ɺ࣮ߦ〣Մ൱ぇஅ「ɺじがぼ゚〠࣮ߦ〣Մ൱ぇฦ『• じがぼ゚ʢseccompʣ〤〒〣அ〠ै〘〛ॲཧぇߦ⿸ʢてとふわぢが゚ぇ࣮ߦ『 or ڋ൱『ʣseccomp notify ػೳ〜ɺなずゔ゙ふくぇ֬อ「〙〙ɺぶやさ゚ぷ〜〤࣮ߦ〜 〟⿶てとふわぢが゚ぇ࣮ߦ〜 〽⿸〠〟〘〔18/25
seccomp notify ぇ⿸〠〤• ぢアふべろぼがでをがぢアふべ〜࣮ߦ『ゆ゜なと〠れ゙てが〝Ұॹ〠〈〣ػೳぇ⿸やそぇઃఆ『• やく゚のが゜がへ《ぁ〝やきぐ゚ぶくとぜ゙ゆのʢfdʣฦ《ぁ• 〈〣 fd ぇぢアふべろぼがでをが〜ࢹ『19/25
seccomp notify ぇ〘〔てとふわぢが゚〣࣮ߦ1. てとふわぢが゚ݺ〨ग़「2. ݺ〨ग़「〤ゅ゜ひぜ《ぁɺݺ〨ग़《ぁ〔てとふわぢが゚〣ใɺゆ゜なと〣ใ〟〞 fd 〠ૹ〾ぁ3. ぢアふべろぼがでをが〜ඞཁ〟ݕࠪぇߦ⿶ɺ࣮ߦڐՄɺڋ൱ぇฦ『4. ぢアふべろぼがでをが〾ฦ《ぁ〔݁Ռ〠Ԡ」〛じがぼ゚ʢseccompʣ࣮ߦぇڐՄɺڋ൱『ʢ〈〣〽⿸〟ॲཧ〜 〽⿸〠〟〘〔〣〤 5.5 じがぼ゚〾ʣ20/25
LXC/LXD 〜〣࣮
seccomp notify ぇ⿸〠〤• libseccomp 2.5.0ʙ• LXC 3.2.1ʙ• LXDʢݱࡏ 4.13ʣ:• 3.13: ॳظ࣮ʢmknod つれがぷʣˠぶみぐとやきぐ゚࡞• 3.14: mknodat つれがぷˠぶみぐとやきぐ゚࡞• 3.16: setxattr つれがぷ• 3.19: mount つれがぷ• 4.5: bpf つれがぷˠ device cgroupʢcgroup2ʣ21/25
ʢぶゑʣぶみぐとやきぐ゚〣࡞ʢmknodʣ1. ぢアふべʢUbuntu 20.04ʣ࡞2. Ұൠゕがづがݖݶ〜ಈ࡞「〛⿶〈〝ぇ֬ೝ3. ぢアふべ〜 mknod ぇ࣮ߦʢࣦഊʣ4. ぢアふべ〠ର「〛ぶみぐとやきぐ゚〣࡞ぇڐՄ『ઃఆぇߦ⿸5. ぢアふべ࠶ىಈޙ mknod ࣮ߦʢޭ『〤』ʂʣhttps://asciinema.org/a/40768722/25
ʢぶゑʣろげアぷ1. /dev/sdb1 ぇぢアふべ〠 bind mount2. ぢアふべ〣/dev/sdb1 ぇ֬ೝ3. ぢアふべ〜 mount ぇ࣮ߦʢࣦഊʣ4. ぢアふべ〜 ext4 ろげアぷ〜 ઃఆぇՃʢ/dev/sdb1 〤 ext4 〜やきぐ゚てとふわ࡞ࡁʣ5. ぢアふべ〜 mount ぇ࣮ߦʢޭ『〤』ʂʣhttps://asciinema.org/a/40770223/25
〳〝〶
〳〝〶• User Namespace 〣 root ゕがづがݺ〨ग़「〛〷ࣦഊ『てとふわぢが゚⿴〘〔• ぢアふべろぼがでをが〹ཧऀ〤ぢアふべ〣いぁํぇྑ。〘〛⿶ʢՄೳੑ⿴ʣ• 〈ぁ〳〜〤なずゔ゙ふく্〣〔〶〠ػೳぇߜΔํ〠いぁ〛 〔 seccompぇ⿶ɺ࣮ߦՄ൱〣அぇゕがづがとらがと〠ҕ〢ɺېࢭ《ぁ〛⿶〔ॲཧぇ UserNamespace 〜࣮ߦ〜 〽⿸〠「〔〣 Seccomp notify ػೳඇಛݖぢアふべ〜࣮ߦ〜 ॲཧ〿ɺ҆શ〠ぢアふべぇ࣮ߦ〜 Մೳੑ〘〔ɻ24/25
Ҏ্͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠25/25