นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
เครือข่าย
สมาชิก · ติดตาม: 0 · ผู้ติดตาม: 16

อ่าน: 1940
ความเห็น: 0

ก้าวย่าง ทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: chroot (jail) vs CentOS 6 ตอนที่ ๓

We fight all the time, You and I... that's alright, We're the same soul, I don't need... I don't need to hear you say, That if we weren't so alike, You'd like me a whole lot more

มาต่อกันในตอนที่ ๓ กับเรื่องของ chroot นะครับ

ในบันทึกที่แล้วพูดถึงการตั้งค่าสำหรับสภาพแวดล้อมแบบ chroot ในแฟ้มข้อมูล sshd_config ในโฟลเดอร์ /etc/ssh โดยการ

  • กำหนดให้ระบบเรียกใช้บริการ sftp จากฟังก์ชันภายในระบบเอง (internal-sftp) แทนกาารเรียกใช้บริการจาก sftp-server ของ OpenSSH (Subsystem sftp internal-sftp)
  • ระบุ group ของผู้ใช้ที่จะจำกัดให้อยู่ในสภาพแวดล้อมแบบ chroot ในตัวอย่างนี้กำหนดให้ผู้ใช้ที่เป็นสมาชิกใน group sftponly ถูกจำกัดให้อยู่ในสภาพแวดล้อมแบบ chroot (Match Group sftponly)
  • ระบุไดเรคทอรี (โฟลเดอร์) ที่จะให้เป็นไดเรคทอรีราก (root directory) สำหรับผู้ใช้ใน group ที่กำหนดข้างต้น
  • ตั้งค่า AllowTCPForwarding และ X11Forwarding เป็น no (AllowTCPForwarding no, X11Forwarding no)
  • และ/ หรือ กำหนดให้บังคับใช้ ForceCommand internal-sftp เพิ่มอีกก็ได้

หลังจากตั้งค่าระบบสำหรับสภาพแวดล้อมแบบ chroot แล้ว หรือก่อนที่จะตั้งค่าสภาพแวดล้อมแบบ chroot ให้ทำการสร้าง (เพิ่ม) group สำหรับผู้ใช้ที่ต้องการจำกัดให้อยู่ในสภาพแวดล้อมแบบ chroot

เช่นสร้าง group sftponly ที่มี Group ID เป็น 600 ด้วยคำสั่ง

#groupadd -g600 sftponly

ทั้งนี้ค่าปกติที่ตั้งไว้ของระบบปฏิบัติการจะกำหนดให้ user ID ของผู้ใช้ (ทั่วๆไปที่ไม่ใช่บัญชีผู้ใช้ของระบบ) ในระบบเริ่มจากค่า 500 เป็นต้นไป ดังนั้นเราอาจจะกำหนด group ID เป็นค่าอื่นที่เป็นค่าก่อน 500 เช่น 400 เป็นต้น

หลังจากนั้นสร้างบัญชีรายชื่อผู้ใช้ที่ต้องการจำกัดให้อยู่ในสภาพแวดล้อมแบบ chroot โดยกำหนดให้ home directory ของผู้ใช้อยู่ภายในไดเรคทอรีที่กำหนดให้เป็นไดเรคทอรีรากของผู้ใช้ในสภาพแวดล้อมแบบ chroot และกำหนดให้เป็นสมาชิกของ group sftponly พร้อมทั้งเป็นโหมด (chmod) ของไดเรคทอรีให้เป็น 755 และเปลี่ยนเจ้าของ (owner - chown) เป็น root และ group sftponly

เช่น

#useradd -m -d /userhome/kitty -s /bin/bash -g600 kitty
#chmod /userhome/kitty 755
#chown root:sftponly /userhome/kitty

เริ่มบริการ (service) ssh ใหม่โดยใช้คำสั่ง

#service sshd restart

เท่านี้เราก็สร้างสภาพแวดล้อมแบบ chroot ให้กับ user ที่ต้องการแล้ว

ข้อสังเกตเพิ่มเติม

ในการสร้างบัญชีผู้ใช้ (user) เพิ่มเข้าไปในระบบนั้น ในกรณีที่เป็นผู้ใช้ที่กำหนดให้อยู่ในสภาพแวดล้อมแบบ chroot และให้เข้าถึง server โดยผ่านทาง sftp เพียงอย่างเดียวนั้น (ไม่อนุญาตให้เข้าถึง server ด้วยสภาพแวดล้อมแบบ shell) ก็ไม่จำเป็นต้องกำหนดสภาพแวดล้อมแบบ shell ให้กับผู้ใช้นั้นๆ ก็ได้

ในตัวอย่างการสร้างบัญชีผู้ใช้ kitty

#useradd -m -d /userhome/kitty -s /bin/bash -g600 kitty

จะเห็นว่ามีการกำหนด shell ให้กับผู้ใช้ kitty ด้วยคือ bash shell (-s /bin/bash) เราอาจจะกำหนดให้ผู้ใช้ (ที่อยู่ใน group sftponly) ใช้ shell เป็น false ก็ได้ (เนื่องจากไม่จำเป็นต้องใช shell) หรือจะใช้ nologin ????

หากจะใช้ false ก็กำหนดเป็น -s /bin/false

#useradd -m -d /userhome/kitty -s /bin/false -g600 kitty

ในกรณีที่กำหนด shell เป็น false นั้น มีบางกรณีที่ระบุว่าเป็นเหตุให้ความปลอดภัยของระบบลดลงได้ เนื่องจากทำให้เกิดรูโหว่ของระบบความปลอดภัยของระบบ

ทางแก้ไขก็คือการปิดการทำ port forwarding

การกำหนดสภาพแวดล้อมแบบ chroot ในข้างต้นนั้นได้ทำการปิดการทำ forwarding แล้ว (AllowTCPForwarding และ X11Forwarding เป็น no) และตั้งค่า PermitTunnel เป็น no (กำหนดค่าใน sshd_config)

ส่วนให้ shell ของผู้ใช้ชี้ไปที่ /bin/nologin นั้นผมยังไม่ได้ทดลองทำกับผู้ใช้ในสภาพแวดล้อมแบบ chroot เลยยังไม่ทราบผลว่ายังสามารถใช้ sftp ได้อีกหรือไม่ แต่ถ้าเป็นการกำหนดค่า shell ให้กับผู้ใช้ในสภาพแวดล้อมปกติ ผู้ใช้ที่มี shell เป็น /bin/nologin ไม่สามารถลอกอินเข้าระบบได้

การกำหนดโหมดของ user home directory 755

ในกรณีที่กำหนดให้ chroot directory เป็น /userhome/%u นั้นคือให้ไดเรคทอรีราก (root directory หรือ /) เป็น home directory ของผู้ใช้แต่ละคน

เช่น ในตัวอย่างนี้ ไดเรคทอรีรากของผู้ใช้ kitty จะเป็น /userhome/kitty หรือ /userhome/kitty = /

โดยปกติแล้วไดเรคทอรีราก (/) จะมีเจ้าของ (owner) เป็น root (บัญชีผู้ใช้ที่เป็นผู้ยิ่งใหญ่ในระบบ) และ group root ซึ่งจะสอดคล้องกับการกำหนดหรือเป็นเจ้าของ home directory ของผู้ใช kitty เป็น root เพียงแต่ group เป็น sftponly ไม่ใช่ root อย่างค่าปกติของระบบ

ซึ่งหากไม่กำหนดความเป็นเจ้าของของ home directory ของผู้ใช้ ให้ root เป็นเจ้าของแล้ว ผู้ใช้ kitty จะไม่สามารถลอกอินเข้าระบบได้ และเมื่อ home directory ของผู้ใช้คนนั้น (kitty) ผู้ใช้ไม่ได้เป็นเจ้าของไดเรคทอรีนั้น ผู้ใช้ก็จะไม่สามารถที่จะเข้าถึงไดเรคทอรีนั้นได้ (rwx - read, write, execute) หากไม่ได้รับอนุญาตจากเจ้าของไดเรคทอรี

นั่นคือผู้ใช้ไม่สามารถเปลี่ยนไดเรคทอรี (change directory) ไปยัง home directory ของผู้ใช้ได้ (/userhome/kitty) จึงทำให้ลอกอินเข้าระบบไม่ได้นั่นเอง (ทำการ authen เข้าระบบได้แต่ไม่สามารถเข้าถึงโฟลเดอร์ต่างๆ ได้ จึงเสมือนกับลอกอินเข้าระบบไม่ได้ แต่ระบบยังไม่ตัด session ที่ติดต่อกับ server ลอกอินได้เพียงครึ่งๆ กลางๆ)

ถ้าให้ผมเทียบว่า home directory ของผู้ใช้คืออะไรหรืออะไรที่เป็นรูปธรรมชัดเจน ก็คงต้องให้นึกถึงสิ่งที่คุ้นหน้าคุ้นตาเราๆ ท่านๆ ทั้งหลายก็คือระบบปฏิบัติการวินโดว์นั่นเอง

เมื่อเปิดเครื่องคอมพิวเตอร์ระบบปฏิบัติการจะเปิดตัวเองขึ้นทำงานแล้วไปหยุดอยู่ที่ "desktop" อันนี้ยังไม่ใช่ลักษณะของ home directory แต่ถ้ามองถึงระบบปฏิบัติการวินโดว์รุ่นเก่าๆ สักนิด home directory ก็คงหมายถึง "My Documents" นั่นเอง เวลาจะบันทึกไฟล์โดยเฉพาะจากโปรแกรมในชุดออฟฟิต เมื่อสั่งบันทึกจะบันทึกที่โฟลเดอร์ "My Documents" เป็นค่าปกติ

ซึ่งจริงๆ แล้วก็คือโฟลเดอร์ c:\Documents and Settings\user_name นั่นเอง และโฟลเดอร์ "My documents" ก็อยู่ภายใต้โฟลเดอร์ c:\Documents and Settings\user_name นั่นเอง

หรือในระบบปฏิบัติการวินโดว์รุ่นใหม่ๆ จะเป็น c:\Users\user_name นั่นเอง

กลับเข้าเรื่องของเรากันต่อนะครับ

โดยค่าปกติแล้วไดเรคทอรีที่ถูกสร้างขึ้นโดย root หรือโปรแกรม/ คำสั่ง ผ่านผู้ใช้ที่เป็น root แล้ว ไดเรคทอรีนั้นๆ จะถูกกำหนด mode ให้เป็น 755 หรือ 644 สำหรับแฟ้มข้อมูล หรือถ้าเป็น home directory ของผู้ใช้จะถูกกำหนดให้เป็น 700

เรามาดูเรื่องของโหมด (mode) หรือการกำหนดสิทธิ์ต่างๆ (Permission) (rwx -> read, write, execute) ในระบบปฏิบัติการ Linux กันนะครับ

การกำหนดสิทธิ (Permission) โดยทั่วไป (ไม่รวมสิทธิแบบพิเศษนะครับ อันนี้ต้องถามเอาจากผู้รู้จริงกันเอาเองนะครับ) จะแบ่งการกำหนดสิทธิออกเป้น ๓ ส่วนคือ

  • owner
  • group
  • other

โดยเรียงสิทธิต่อกันเป็น ๓ ชุดคือ owner-group-other (ไม่มีเครื่องหมาย - คั่นนะครับ) หรือเป็น rwxrwxrwx

  • rwxrwxrwx หมายถึงผู้ใช้ทุกคนมีสิทธิที่จะ read write และ execute ได้
  • rwx------ หมายถึงเฉพาะผู้ใช้ที่เป็นเจ้าของเท่านั้นที่สามารถ read write และ execute ได้
  • rwxr----- หมายถึงผู้ใช้ที่เป็นเจ้าของมีสิทธิที่จะ read write และ execute ได้และให้สิทธิผู้ใช้ที่อยู่ในกลุ่ม(ที่กำหนดให้) สามารถ read ได้ แต่ไม่อนุญาตให้ผู้ใช้อื่นๆ (ที่ไม่ใช่เจ้าของและ/ หรือผู้ใช้ที่เป็นสมาชิกของกลุ่ม (ที่ระบุ)) ทำการ read write หรือ execute ได้
  • rwxr-xr-- หมายถึงให้สิทธิผู้ใช้ที่เป็นเจ้าของ read write หรือ execute ได้ รวมถึงให้สิทธิกับผู้ใช้ที่เป็นสมาชิกของกลุ่ม (ที่กำหนด) สามารถ read หรือ execute ได้แต่ห้าม (ไม่อนุญาตให้) write และให้สิทธิกับผู้ใช้อื่นๆสามารถ read ได้เพียงอย่างเดียว

ผู้ใช้ที่เป็นสมาชิกของกลุ่ม (ที่กำหนด) หมายถึง ผู้ใช้ที่เป้นสมาชิกของกลุ่มที่กำหนดให้เป็นเจ้าของร่วมกับเจ้าของไดเรคทอรี (หรือไฟล์) นั้นจริงๆ ซึ่งเกิดจากคำสั่ง chown นั่นเอง

โดยปกติแล้วผู้ใช้คนใดสร้างไฟล์หรือไดเรคทอรีเอง สิทธิการเป็นเจ้าของไฟลืหรือโฟลเดอร์นั้นๆ ก็จะเป็นผู้ที่สร้างและ group ที่ผู้ใช้สร้างไฟลืหรือโฟลเดอร์นั้นๆ เป็นสมาชิกอยู่เป็นเจ้าของร่วม

เช่น ถ้าผู้ใช้ที่ชื่อ kitty ที่เป็นสมาชิกใน group sftponly สร้างไฟล์หรือไดเรคทอรีใดๆ ขึ้นมาแล้ว ไฟลืหรือไดเรคทอรีนั้นจะมีเจ้าของ (owner) คือ kitty และผู้ใช้ใน group sftponly เป็นเจ้าของร่วม แต่เจ้าของร่วมจะได้รับสิทธิอะไรบ้างนั้นขึ้นอยู่กับการกำหนดสิทธิโดยเจ้าของอีกครั้งนึง

เช่น

drwxr-xr-x.  7 kitty sftponly   4096 Nov  6  2011 data01

มีความหมายว่า ไดเรคทอรี data01 มีเจ้าของ (owner) คือ kitty วึ่งเป้นสมาชิกในกลุ่ม sftponly  หรือให้สิทธิแก่ผู้ใช้ที่เป็นสมาชิกของ group sftponly เป็นเจ้าของร่วม โดยกำหนดสิทธิการเข้าถึงไดเรคทอรีคือ drwxr-xr-x.

d หมายถึง directory หากเป็นไฟล์จะเป็นเครื่องหมาย - แทนตัวอักษร d

drwxr-xr-x.  จึงหมายถึงไดเรคทอรีนี้ (data01) เจ้าของ (kitty) มีสิทธิที่จะ read write หรือ execute ได้ และกำหนดสิทธิให้ผู้ใช้ที่เป็นสมาชิกใน group sftponly มีสิทธิ read หรือ execute ได้ แต่ไม่มีสิทธิ write ส่วนผู้ใช้อื่นๆ (ที่ไม่ใช่ kitty หรือผู้ใชคนอื่นที่ไม่ได้เป็นสามชิกใน group sftponly) มีสิทธิ read หรือ execute ได้แต่ไม่มีสิทธิ write เช่นเดียวกับสมาชิกใน group sftponly

หรือการกำหนดสิทธิจะกำหนดสิทธิในรูปของตัวเลขก็ได้ กล่าวคือ

0    ---
1    --x
2    -w-
3    -wx
4    r--
5    r-x
6    rw-
7    rwx

ถ้าให้ทุกสิทธิ (read write execute) ก็จะมีค่าเป็น 7 แต่ถ้าให้สิทธิ read เพียงอย่างเดียวก็จะเป็น 4 หรือให้ execute อย่างเดียวก็จะเป็น 1 หรือไม่ให้สิทธิใดเลยก็จะเป็น 0

ดังนั้นการกำหนดสิทธิจากคำสั่ง

#chmod /userhome/kitty 755

จึงหมายถึงให้ root ที่เป็นเจ้าของไดเรคทอรี /userhome/kitty มีสิทธิทุกอย่าง และให้สิทธิแก่ผู้ใช้ที่เป็นสมาชิกใน group (ที่กำหนด) มีสิทธิเป็น 5 หรือคือมีสิทธิ read และ execute (ไม่มีสิทธิ write) และผู้ใช้อื่นๆ มีสิทธิในการ read และ execute ได้เช่นเดียวกัน

การกำหนดความเป็นเจ้าของ (owner) หรือเปลี่ยนความเป็นเจ้าของ ทำผ่านคำสั่ง chown

#chown user:group file/ directory

เช่นตัวอย่างข้างต้น

#chown root:sftponly /userhome/kitty

หมายถึงกำหนดให้ ไดเรคทอรี /userhome/kitty มี root เป็นเจ้าของและให้ผู้ใช้ที่เป็นสมาชิกใน group sftponly เป็นเจ้าของร่วม

ที่เหลือคงต้องยกยอดไปบันทึกหน้าแล้วล่ะครับ

เราเอง

หมวดหมู่บันทึก: พัฒนางานประจำ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 07 มิถุนายน 2555 02:45 แก้ไข: 07 มิถุนายน 2555 02:45 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 DaDa, Ico24 Ikkyu, และ 6 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 34.237.138.69
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ