สร้างพื้นที่ให้ share ใช้งานกันภายใน group
- ทดสอบกับ ubuntu 10.04
- เป็นพื้นที่ให้ share ใช้งานกันภายใน group ที่สามารถเขียนอ่านได้
- โดยทั่วไประบบอนุญาตให้ user สามารถมองเห็นพื้นที่นอก home ของตนเอง ในบันทึกนี้เป็นเทคนิคการจัดทำที่ทำให้ user ไม่สามารถเห็นนอก home ของตนเอง
ผลข้างเคียงคือ user ผู้นั้นเข้าใช้งานด้วย ssh ไม่ได้ แต่ใช้ sftp ได้
- สมมติว่าต้องการสร้างพื้นที่ /sftp/share/gstaff ให้สมาชิกของ group ชื่อ staff ที่มี user จำนวน 2 คน คือ lazy และ baby
- สร้าง group ชื่อ sftponly สำหรับเฉพาะผู้ใช้ network drive ขึ้นมาใหม่ด้วยคำสั่ง
sudo groupadd sftponly
- สร้างพื้นที่ /sftp สำหรับเป็นพื้นที่เริ่มต้นของ network drive ด้วยคำสั่ง
sudo mkdir -p /sftp
- สร้างพื้นที่ /sftp/home เพื่อให้เป็น home ของผู้ใช้ network drive ด้วยคำสั่ง
sudo mkdir -p /sftp/home
- สร้างพื้นที่ /sftp/share เพื่อให้เป็นแบ่งปันกันใช้งาน share network drive ด้วยคำสั่ง
sudo mkdir -p /sftp/share
- ตั้งค่าให้ห้ามลบแฟ้มข้อมูลที่ตนเองไม่ใช้เป็นเจ้าของ ด้วยคำสั่ง
sudo chmod +t /sftp/share
- แก้ไขแฟ้ม /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
- สร้าง group ชื่อ staff ใช้คำสั่งว่า
sudo groupadd staff
- สร้างพื้นที่ /sftp/share/gstaff สำหรับให้ share ใช้งานภายใน group ด้วยคำสั่ง
sudo mkdir -p /sftp/share/gstaff
- ตั้งค่าให้ group staff เป็นเจ้าของ directory ด้วยคำสั่ง
sudo chgrp -Rv staff /sftp/share/gstaff
- ตั้งค่าให้ user ใน group staff สามารเขียนอ่านได้ ด้วยคำสั่ง
sudo chmod g+rws,o-rwx /sftp/share/gstaff
- ตอนนี้ก็ได้พื้นที่ 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
- สร้าง 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
- สร้าง 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
- ตั้งค่าให้ lazy และ baby เข้าใปในสมาชิกของ group staff ด้วยคำสั่งว่า
sudo gpasswd -M lazy,baby staff
- ตั้งค่าให้ lazy และ baby เข้าใปในสมาชิกของ group stponly ด้วยคำสั่งว่า
sudo gpasswd -M lazy,baby sftponly
- ถึงตอนนี้ให้ลองใช้โปรแกรม filezilla ติดต่อเข้ามาใช้บริการ server ได้เลย
หากต้องการให้เป็น network drive ก็จำเป็นต้องใช้ sshfs หรือ sftp network drive ช่วย
การ share แบบนี้ ผู้ใช้จะมองเห็น directory อื่นด้วย แล้วแต่สิทธิ์ที่กำหนดของแต่ละพื้นที
ผลข้างเคียงคือสมาชิกของ group sftponly เข้าใช้งานเฉพาะ sftp เท่านั้น แต่ ssh เข้ามาทำงานไม่ได้
- หากต้องการ 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 /
- ตัวอย่างการสร้าง 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
- หากต้องการใช้โปรแกรมจัดการแบบ GUI ให้ใช้โปรแกรม nautilus
- แก้ปัญหาโปรแกรม nautilus ไม่สามารถจัดการ suid, sgid และ sticky ได้สมบูรณ์
ต้องติดตั้งโปรแกรม xfe เพิ่มเติมด้วยคำสั่ง sudo apt-get install xfe
ใช้โปรแกรม xfe ด้วยคำสั่ง xfe ไปยังแฟ้มที่ต้องการ แล้วคลิกปุ่มขวาของเมาส์ เลือกหัวข้อ Properties (อยู่ล่างสุด) แล้วเลือกแถบ Permissions
- แก้ปัญหาโปรแกรม nuatilus สามารถใช้จัดการแฟ้มแบบ GUI ได้ แต่ใช้ ACL ไม่ได้
ต้องติดตั้งโปรแกรม eiciel เพิ่มเติมด้วยคำสั่ง sudo apt-get install eiciel
ลองใช้โปรแกรม nautilus ด้วยคำสั่ง nautilus เปิดไปยังแฟ้มที่ต้องการ
แล้วคลิกปุ่มขวาของเมาส์ เลือกหัวข้อ Properties (อยู่ล่างสุด) แล้วเลือกแถบ Access Contol List
หากต้องการให้ nautilus แก้ไขได้ทุกพื้นที่ ให้ทำงานด้วยคำสั่ง sudo nautilus