เทคนิคการจัดทำ file server ด้วย linux

จาก Wiki Opensource

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

ดูแลโดย WIBOON

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


  • ทดสอบกับ ubuntu 10.04
  • จัดทำให้ MS client สามารถ map network drive ได้ โดยไม่ต้องติดตั้ง SAMBA แต่ใช้ 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. บน MS client ที่ต้องการใช้งานแบบ map network drive ให้เลือกใช้โปรแกรม Dokan หรือ SFTP Net Drive
    ดาวน์โหลดได้จากเว็บ โปรแกรมถ่ายโอนแฟ้มข้อมูล