หลายท่านที่ใช้ Docker Container มักจะสร้าง Dockerfile ของตัวเองที่ติดตั้ง OpenSSH Server แล้วสั่ง expose port 22 เอาไว้เพื่อสั่ง ssh เข้าไปใน Container ซึ่งวิธีการแบบนี้ทางผู้พัฒนา Docker ไม่แนะนำให้ใช้ เนื่องจากจะเป็นการเปิด port ไว้ให้โจมตีได้ถึงตัว Container และ Docker Host วิธีการที่ทาง Docker แนะนำให้ใช้คือใช้ nsenter เรียกใช้ shell ผ่าน namespace โดยที่ Container ไม่ต้องมี OpenSSH ติดตั้งอยู่

วิธีการใช้งาน nsenter ก็ง่ายมาก เรียกใช้ผ่าน Docker Hub ได้เลยดังนี้

docker run -v /usr/local/bin:/target jpetazzo/nsenter

nsenter จะติดตั้งอยู่ใน /usr/local/bin ของเราจากนั้นก็ใช้งานได้เลย หากต้องการติดตั้งก็ติดตั้งลงในเครื่องจริงๆ ก็ติดตั้งได้จากแพคเกจ util-linux ได้เช่นกัน

วิธีการใช้งาน เราต้องทราบ PID ของ Container ที่ทำงานอยู่ก่อน โดยใช้คำสั่ง

PID=$(docker inspect --format {{.State.Pid}} )

จากนั้นเราถึงจะเรียก shell ของ container นั้นได้ดังนี้

nsenter --target $PID --mount --uts --ipc --net --pid

การใช้งาน nsenter จะคล้ายกับการ chroot นั่นเอง

Comments are closed.