สร้างพื้นที่ให้ share ใช้งานกันภายใน group

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 5-08-2555

ดูแลโดย WIBOON

เขียนครั้งแรกโดยคุณวิภัทร ศรุติพรหม


  • ทดสอบกับ ubuntu 10.04
  • เป็นพื้นที่ให้ share ใช้งานกันภายใน group ที่สามารถเขียนอ่านได้
  • โดยทั่วไประบบอนุญาตให้ user สามารถมองเห็นพื้นที่นอก home ของตนเอง ในบันทึกนี้เป็นเทคนิคการจัดทำที่ทำให้ user ไม่สามารถเห็นนอก home ของตนเอง
    ผลข้างเคียงคือ user ผู้นั้นเข้าใช้งานด้วย ssh ไม่ได้ แต่ใช้ sftp ได้
  • สมมติว่าต้องการสร้างพื้นที่ /sftp/share/gstaff ให้สมาชิกของ group ชื่อ staff ที่มี user จำนวน 2 คน คือ lazy และ baby


  1. สร้าง group ชื่อ sftponly สำหรับเฉพาะผู้ใช้ network drive ขึ้นมาใหม่ด้วยคำสั่ง
    sudo groupadd sftponly
  2. สร้างพื้นที่ /sftp สำหรับเป็นพื้นที่เริ่มต้นของ network drive ด้วยคำสั่ง
    sudo mkdir -p /sftp
  3. สร้างพื้นที่ /sftp/home เพื่อให้เป็น home ของผู้ใช้ network drive ด้วยคำสั่ง
    sudo mkdir -p /sftp/home
  4. สร้างพื้นที่ /sftp/share เพื่อให้เป็นแบ่งปันกันใช้งาน share network drive ด้วยคำสั่ง
    sudo mkdir -p /sftp/share
  5. ตั้งค่าให้ห้ามลบแฟ้มข้อมูลที่ตนเองไม่ใช้เป็นเจ้าของ ด้วยคำสั่ง
    sudo chmod +t /sftp/share
  6. แก้ไขแฟ้ม /etc/ssh/sshd_config ไปที่ประมาณบรรทัด 75 ข้อมูลเดิมว่า Subsystem sftp ....
    ให้แก้ไขเปลี่ยนเป็นว่า Subsystem sftp internal-sftp
    แล้วไปท้ายสุด เพิ่มบรรทัดต่อท้ายว่า
    Match Group sftponly
    ChrootDirectory /sftp
    ForceCommand internal-sftp
    แล้วสั่งให้ sshd ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/ssh reload
  7. สร้าง group ชื่อ staff ใช้คำสั่งว่า
    sudo groupadd staff
  8. สร้างพื้นที่ /sftp/share/gstaff สำหรับให้ share ใช้งานภายใน group ด้วยคำสั่ง
    sudo mkdir -p /sftp/share/gstaff
  9. ตั้งค่าให้ group staff เป็นเจ้าของ directory ด้วยคำสั่ง
    sudo chgrp -Rv staff /sftp/share/gstaff
  10. ตั้งค่าให้ user ใน group staff สามารเขียนอ่านได้ ด้วยคำสั่ง
    sudo chmod g+rws,o-rwx /sftp/share/gstaff
  11. ตอนนี้ก็ได้พื้นที่ share กันใช้งานแล้ว ตรวจสอบดูว่าพื้นที่พร้อมใช้งาน
    ลองคำสั่ง ls -ld /sftp/share/ ได้ผลประมาณว่า drwxr-xr-t 3 root root 4096 2012-01-19 17:10 /sftp/share/
    ลองคำสั่ง ls -ld /sftp/share/* ได้ผลประมาณว่า drwxrws--- 2 root staff 4096 2012-01-19 17:10 /sftp/share/gstaff
  12. สร้าง user ชื่อ lazy ให้มี home อยู่ที่ /sftp/home/lazy ด้วยคำสั่ง
    sudo useradd -m -b /sftp/home -s /bin/bash lazy
    แล้วตั้งรหัสผ่านด้วยคำสั่งว่า
    sudo passwd lazy
    ปิดให้ผู้ใช้อื่นเห็นพื้นที่ /sftp/home/lazy ด้วยคำสั่ง
    sudo chmod -R o-rwx /sftp/home/lazy
  13. สร้าง user ชื่อ baby ให้มี home อยู่ที่ /sftp/home/baby ด้วยคำสั่ง
    sudo useradd -m -b /sftp/home -s /bin/bash baby
    แล้วตั้งรหัสผ่านด้วยคำสั่งว่า
    sudo passwd baby
    ปิดให้ผู้ใช้อื่นเห็นพื้นที่ /sftp/home/baby ด้วยคำสั่ง
    sudo chmod -R o-rwx /sftp/home/baby
  14. ตั้งค่าให้ lazy และ baby เข้าใปในสมาชิกของ group staff ด้วยคำสั่งว่า
    sudo gpasswd -M lazy,baby staff
  15. ตั้งค่าให้ lazy และ baby เข้าใปในสมาชิกของ group stponly ด้วยคำสั่งว่า
    sudo gpasswd -M lazy,baby sftponly
  16. ถึงตอนนี้ให้ลองใช้โปรแกรม filezilla ติดต่อเข้ามาใช้บริการ server ได้เลย
    หากต้องการให้เป็น network drive ก็จำเป็นต้องใช้ sshfs หรือ sftp network drive ช่วย
    การ share แบบนี้ ผู้ใช้จะมองเห็น directory อื่นด้วย แล้วแต่สิทธิ์ที่กำหนดของแต่ละพื้นที
    ผลข้างเคียงคือสมาชิกของ group sftponly เข้าใช้งานเฉพาะ sftp เท่านั้น แต่ ssh เข้ามาทำงานไม่ได้
  17. หากต้องการ share ที่ละเอียดซับซ้อนมากขึ้นเช่นการต้องการ share พื้นที่ให้ user ที่ไม่ได้อยู่ใน group นี้เข้ามาใช้ด้วย ต้องใช้ Access Control List
    ให้ติดตั้งโปรแกรม acl ด้วยคำสั่ง sudo apt-get install acl
    ต้องแก้ไขให้ file system รองรับ acl ด้วย ให้แก้ไขแฟ้ม /etc/fstab
    ตัวอย่างบรรทัดเดิมว่า
    UUID=437d2425-9487-4b20-8ae5-fce3f8c6eb1c / ext4 errors=remount-ro 0 1
    ให้เปลี่ยนเป็นว่า
    UUID=437d2425-9487-4b20-8ae5-fce3f8c6eb1c / ext4 acl,errors=remount-ro 0 1
    เสร็จแล้วให้ reboot server ใหม่ หรือลอง remount ใหม่โดยไม่ต้อง reboot ใหม่ด้วยคำสั่ง sudo mount -o remount /
  18. ตัวอย่างการสร้าง user ชื่อ susa ขึ้นมาที่สามารถ อ่านและเขียนพื้นที่ /sftp/share/gstaff ได้ ให้ทำดังนี้
    สร้าง user ชื่อ susa ให้มี home อยู่ที่ /sftp/home/susa ด้วยคำสั่ง sudo useradd -m -b /sftp/home -s /bin/bash susa
    แล้วตั้งรหัสผ่านด้วยคำสั่งว่า sudo passwd susa
    เพิ่มให้ susa เข้าใปในสมาชิกของ group stponly ด้วยคำสั่งว่า sudo gpasswd -a susa sftponly
    ปิดให้ผู้ใช้อื่นเห็นพื้นที่ /sftp/home/susa ด้วยคำสั่ง sudo chmod -R o-rwx /sftp/home/susa
    เพิ่มให้ susa สามารถอ่านและเขียนพื้นที่ /sftp/share/gstaff ได้ ด้วยคำสั่ง sudo setfacl -m u:baba:rw /sftp/share/gstaff
    ดูค่า acl เดิมที่ตั้งไว้ของ /sftp/share/gstaff ด้วยคำสั่ง getfacl /sftp/share/gstaff
  19. หากต้องการใช้โปรแกรมจัดการแบบ GUI ให้ใช้โปรแกรม nautilus
  20. แก้ปัญหาโปรแกรม nautilus ไม่สามารถจัดการ suid, sgid และ sticky ได้สมบูรณ์
    ต้องติดตั้งโปรแกรม xfe เพิ่มเติมด้วยคำสั่ง sudo apt-get install xfe
    ใช้โปรแกรม xfe ด้วยคำสั่ง xfe ไปยังแฟ้มที่ต้องการ แล้วคลิกปุ่มขวาของเมาส์ เลือกหัวข้อ Properties (อยู่ล่างสุด) แล้วเลือกแถบ Permissions
  21. แก้ปัญหาโปรแกรม nuatilus สามารถใช้จัดการแฟ้มแบบ GUI ได้ แต่ใช้ ACL ไม่ได้
    ต้องติดตั้งโปรแกรม eiciel เพิ่มเติมด้วยคำสั่ง sudo apt-get install eiciel
    ลองใช้โปรแกรม nautilus ด้วยคำสั่ง nautilus เปิดไปยังแฟ้มที่ต้องการ
    แล้วคลิกปุ่มขวาของเมาส์ เลือกหัวข้อ Properties (อยู่ล่างสุด) แล้วเลือกแถบ Access Contol List
    หากต้องการให้ nautilus แก้ไขได้ทุกพื้นที่ ให้ทำงานด้วยคำสั่ง sudo nautilus