18 ตุลาคม 2553

Mount FTP Server บน Linux ด้วย FUSE

เราสามารถ mount FTP Server ให้เป็น directory ใน Linux ซึ่งน่าจะเป็นประโยชน์กับ Programmer ที่ใช้ Linux บ้างนะครับ

Mount FTP Server: แนะนำ FUSE

แนะนำกันก่อนนะครับ FUSE (Filesystem in userland) เป็น userland ที่สร้างขึ้นบน virtual filesystem (ไม่รู้แปลยังไงนะ) ซึ่งช่วยให้เราสามารถจัดการระบบไฟล์ได้จากโปรแกรมที่เราใช้อยู่ได้โดยตรง แล้วก็มีโปรแกรมเมอร์ใจดี Robson Braga Araujo มาช่วยพัฒนาตัวช่วยให้เรา โดยใช้ FUSE และ curl เพื่อให้เราสามารถ mount ftp server เป็น directory ในเครื่องเราได้ ซึ่งก็คือ curlftpfs

Mount FTP Server: ใช้ FUSE แล้วทำอะไรได้บ้าง?

ใช้ FUSE mount FTP แล้วทำได้หมดเลยครับ ทั้ง copy, paste, ย้ายไฟล์, ลบทิ้ง ตราบใดที่โปรแกรมของคุณยังเข้า folder ที่ mount เอาไว้ ก็ทำอะไรก็ได้ครับ สะดวก ไม่ต้องใช้ ftp เพื่อจัดการไฟล์

Mount FTP Server: ทำยังไง?

ก่อนจะ mount ftp มาที่เครื่อง Linux ของคุณ ต้องสร้าง folder ขึ้นมาก่อน
ในตัวอย่างนี้ใช้ myftp

จากนั้นก็ mount ftp server มาที่ folder ที่เราสร้างไว้ โดยใช้คำสั่งนี้เลยครับ
sudo curlftpfs -o allow_other ftp://myusername:mypassword@ftp.mydomain.com myftp
แค่นี้ก็สามารถเข้าเซอร์เวอร์ผ่านโฟลเดอร์ myftp ได้แล้วครับ

Mount FTP Server: แล้วเอาออกยังไง?

การเอา FTP Server ที่ mount เอาไว้ออก ให้ใช้คำสั่งนี้ครับ
sudo umount myftp

Mount FTP Server: ทำให้ง่ายขึ้น..เอาใส่ใน /etc/fstab

จะ mount FTP Server ให้ง่ายขึ้น ก็เพิ่มบรรทัดนี้เข้าไปใน /etc/fstab นะครับ
curlftpfs#myusername:mypassword@ftp.mydomain.com /mnt/myftp fuse allow_other,rw,user,noauto 0 0 
ด้วย noauto ที่อยู่ข้างท้าย ระบบจะไม่ mount FTP Server ให้อัตโนมัติเมื่อรีสตาร์ทเครื่องใหม่ครับ ซึ่งต้อง mount เองนะครับ แต่คราวนี้ไม่ต้องเขียนคำสั่งยาวๆแบบข้างบนแล้วครับ แค่ใช้คำสั่งนี้:
sudo mount /mnt/myftp 
ถ้าสังเกตุดีๆจะเห็น allow_other ด้วยนะครับ ซึ่งจะช่วยให้เราสามารถเข้า /mnt/myftp ได้โดยไม่ต้องเป็น root นะครับ

Mount FTP Server: คนอื่นจะเห็น password มั้ยเนี่ย?

ถ้าใช้คำสั่งนี้
ps aux | grep curlftpfs 
จะทำให้เราเห็น username กับ password ที่ใช้เข้า FTP Server ของเราได้ ซึ่งตามเจ้าของบทความเขียนไว้ เค้าเลยสร้าง .netrc ไว้ใน directory ของ root ดังนี้ครับ

1. สร้าง /root/.netrc แล้วใส่ code ดังนี้ครับ
machine ftp.byexamples.com
login myusername
password mypassword
2. แล้วแก้โหมดของไฟล์ซะใหม่
sudo chmod o-rw /root/.netrc
3. แล้วแก้ /etc/fstab ให้ไม่โชว์ password
curlftpfs#ftp.mydomain.com /mnt/myftp fuse allow_other,rw,user,noauto 0 0
คราวนี้ ถึงแม้ว่า /root/.netrc จะเป็นข้อความ แต่ก็ดูไม่ได้แล้วครับ เพราะต้องเป็น root ถึงจะดูได้

ที่มา - Mounting ftp host to local directory on top of FUSE