Apparmor Profile Generator สำหรับคอนเทนเนอร์ Docker โดยพื้นฐานแล้วโปรไฟล์ Apparmor ที่ดีกว่าการสร้างด้วยมือเพราะใครจะทำเช่นนั้น
"การตรวจสอบคำขอดึงโปรไฟล์ Apparmor คือ ความหายนะ ของการดำรงอยู่ของฉัน"
Jess Frazelle
สารบัญ
การติดตั้ง
ไบนารี
ผ่านไป
การใช้งาน
ไฟล์ globbing
ไฟล์กำหนดค่า
การติดตั้งโปรไฟล์
โปรไฟล์ที่สร้างขึ้นมีลักษณะอย่างไร?
การรวมเข้ากับ Docker
สำหรับคำแนะนำในการติดตั้งจากไบนารีโปรดไปที่หน้ารีลีส
$ get get github.com/genuinetools/bane
$ bane -hbane -ตัวสร้างโปรไฟล์ Apparmor ที่กำหนดเองสำหรับ Docker containersusage: bane <mommand> flags: -d เปิดใช้งานการบันทึกการบันทึก (ค่าเริ่มต้น: false) -ไดเรกทอรี profile -dir สำหรับการบันทึกโปรไฟล์ (ค่าเริ่มต้น: /etc/apparmor.d/containers) คำสั่ง: เวอร์ชันแสดงข้อมูลเวอร์ชัน
Sample.toml เป็นแอพมาร์สตัวอย่างการกำหนดค่าสำหรับ nginx ในคอนเทนเนอร์
ตัวอย่างลูกโลก | คำอธิบาย |
---|---|
/dir/file | จับคู่ไฟล์เฉพาะ |
/dir/* | จับคู่ไฟล์ใด ๆ ในไดเรกทอรี (รวมถึงไฟล์ dot) |
/dir/a* | จับคู่ไฟล์ใด ๆ ในไดเรกทอรีที่เริ่มต้นด้วยไฟล์ |
/dir/*.png | จับคู่ไฟล์ใด ๆ ในไดเรกทอรีที่ลงท้ายด้วย. png |
/dir/[^.]* | จับคู่ไฟล์ใด ๆ ในไดเรกทอรียกเว้นไฟล์ dot |
/dir/ | จับคู่ไดเรกทอรี |
/dir/*/ | จับคู่ไดเรกทอรีใด ๆ ภายใน /dir / |
/dir/a*/ | จับคู่ไดเรกทอรีใด ๆ ภายใน / dir / เริ่มต้นด้วย |
/dir/*a/ | จับคู่ไดเรกทอรีใด ๆ ภายใน / dir / สิ้นสุดด้วยไฟล์ |
/dir/** | จับคู่ไฟล์หรือไดเรกทอรีใด ๆ ในหรือด้านล่าง /dir / |
/dir/**/ | จับคู่ไดเรกทอรีใด ๆ ในหรือต่ำกว่า /dir / |
/dir/**[^/] | จับคู่ไฟล์ใด ๆ ในหรือด้านล่าง /dir / |
/dir{,1,2}/** | จับคู่ไฟล์หรือไดเรกทอรีใด ๆ ในหรือด้านล่าง /dir /, /dir1 /, และ /dir2 / |
ตอนนี้เรามีไฟล์กำหนดค่าของเราจากด้านบนให้ติดตั้ง bane
จะติดตั้งโปรไฟล์โดยอัตโนมัติในไดเรกทอรี /etc/apparmor.d/containers/
และเรียกใช้ apparmor_parser
$ sudo bane sample.toml# การติดตั้งโปรไฟล์สำเร็จแล้วคุณสามารถเรียกใช้โปรไฟล์ได้ด้วย# `Docker Run-Security-opt =" Apparmor: Docker-Nginx-Sample "# ตอนนี้มารัน nginx $ docker run -d-ความปลอดภัย -OPT = "AppArmor: Docker-Nginx-Sample" -p 80:80 Nginx
การใช้โปรไฟล์ Apparmor ที่กำหนดเองไม่เคยง่ายกว่านี้เลย!
ตอนนี้ลองทำกิจกรรมที่เป็นอันตรายด้วยโปรไฟล์ตัวอย่าง:
$ Docker Run-Security-opt = "Apparmor: Docker-Nginx-Sample" -p 80:80--rm -it nginx bashroot@6da5a2a930b9: ~# ping 8.8.8.8ping: ขาดสิทธิ์ :/# topbash:/usr/bin/top: การอนุญาต deniedroot@6da5a2a930b9: ~# touch ~/thingtouch: ไม่สามารถสัมผัส 'สิ่ง': การอนุญาต deniedroot@6da5a2a930b9:/# shbash:/bin/sh: การอนุญาต deniedroot@6da5a2a930b9:/# dashbash:
ตัวอย่างเอาต์พุต dmesg
เมื่อใช้ LogOnWritePaths
:
[ 1964.142128] type=1400 audit(1444369315.090:38): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="docker-nginx" pid=3945 comm="apparmor_parser" [ 1966.620327] type=1400 audit(1444369317.570:39): apparmor="AUDIT" operation="open" profile="docker-nginx" name="/1" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624381] type=1400 audit(1444369317.574:40): apparmor="AUDIT" operation="mkdir" profile="docker-nginx" name="/var/cache/nginx/client_temp/" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624446] type=1400 audit(1444369317.574:41): apparmor="AUDIT" operation="chown" profile="docker-nginx" name="/var/cache/nginx/client_temp/" pid=3985 comm="nginx" requested_mask="w" fsuid=0 ouid=0 [ 1966.624463] type=1400 audit(1444369317.574:42): apparmor="AUDIT" operation="mkdir" profile="docker-nginx" name="/var/cache/nginx/proxy_temp/" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624494] type=1400 audit(1444369317.574:43): apparmor="AUDIT" operation="chown" profile="docker-nginx" name="/var/cache/nginx/proxy_temp/" pid=3985 comm="nginx" requested_mask="w" fsuid=0 ouid=0 [ 1966.624507] type=1400 audit(1444369317.574:44): apparmor="AUDIT" operation="mkdir" profile="docker-nginx" name="/var/cache/nginx/fastcgi_temp/" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624534] type=1400 audit(1444369317.574:45): apparmor="AUDIT" operation="chown" profile="docker-nginx" name="/var/cache/nginx/fastcgi_temp/" pid=3985 comm="nginx" requested_mask="w" fsuid=0 ouid=0 [ 1966.624546] type=1400 audit(1444369317.574:46): apparmor="AUDIT" operation="mkdir" profile="docker-nginx" name="/var/cache/nginx/uwsgi_temp/" pid=3985 comm="nginx" requested_mask="c" fsuid=0 ouid=0 [ 1966.624582] type=1400 audit(1444369317.574:47): apparmor="AUDIT" operation="chown" profile="docker-nginx" name="/var/cache/nginx/uwsgi_temp/" pid=3985 comm="nginx" requested_mask="w" fsuid=0 ouid=0
สำหรับ sample.toml
ด้านบน TOML โปรไฟล์ที่สร้างขึ้นนั้นมีอยู่เป็นตัวอย่าง Docker-Nginx-Sample
นี่เป็นข้อพิสูจน์แนวคิดสำหรับสิ่งที่หวังว่าจะกลายเป็นโปรไฟล์ความปลอดภัยดั้งเดิมในเครื่องยนต์ Docker สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ดู Docker/Docker#17142