VSFTP (Very Secure FTP)


VSFTP (Very Secure FTP)

VSFTP (Very Secure FTP)

คุณสมบัติของ VSFTP

VSFTP เป็นเดมอน (daemon) ของเซิร์ฟเวอร์ FTP ที่รันบนระบบปฏิบัติการ Linux/UNIX ซึ่งมีคุณสมบัติหลักอยู่ 3 อย่าง ได้แก่

  • มีความปลอดภัย
  • มีประสิทธิภาพดี
  • มีความมั่นคง

นอกจากนี้โปรแกรม VSFTP ยังมีคุณสมบัติอื่นๆ อีก ได้แก่ เป็นระบบที่มีขนาดเล็ก มีความสามารถในการจัดการ virtual users มีทางเลือกในการทำงานเป็นแบบ stand-alone configuration และแบบผ่านทางเดมอน inetd รวมทั้งสามารถจำกัดปริมาณการรับส่งข้อมูล (bandwidth) ในการให้บริการในเซิร์ฟเวอร์ที่ต้องการควบคุมการใช้งานได้อีกด้วย

ในแง่ของความปลอดภัยนั้น VSFTP ได้ถูกออกแบบมาเพื่อแก้ไขจุดบกพร่องที่พบในการติดตั้ง wu-ftpd, proftpd, และแม้แต่ bsd-ftpd โดยการไม่ใช้บัญชีชื่อ root ซึ่งมีความเสี่ยง และใช้คุณสมบัติด้านความปลอดภัยที่มีประสิทธิภาพอย่าง chroot นอกจากนี้ยังมีการใช้เทคนิคการพัฒนาโปรแกรมอย่างปลอดภัยเพื่อแก้ปัญหาหน่วยความจำล้น (buffer overflows) ด้วย อ่านรายละเอียดเพิ่มเติมเกี่ยวกับความปลอดภัยของ VSFTP ได้ที่เอกสารเผยแพร่ ต่อไปนี้: Overview Design Implementation Trust และนอกจากนี้ยังมีการกล่าวถึง vsftpd ในแง่ของความปลอดภัยมากมาย ดังต่อไปนี้

  • ในเดือนพฤศจิกายน พ.ศ. 2545 ไซต์ ftp.openbsd.org ได้รัน vsftpd ซึ่งเป็นการยืนยันได้ว่า vsftpd มีคุณสมบัติดีเหมาะแก่การใช้เป็นเซิร์ฟเวอร์ FTP
  • vsftpd ไม่มีจุดบกพร่องชื่อ "globbing" ซึ่งมีผลกระทบต่อเซิร์ฟเวอร์ FTP หลายแห่ง สามารถศึกษาเหตุผลของการกำจัดจุดบกพร่องนี้ได้ในเอกสาร Bugtraq posting โดยมีคำอธิบายเหตุผล และหลักการออกแบบโปรแกรมด้วย
  • vsftpd ไม่มีจุดบกพร่องชื่อ "globbling" ที่เกี่ยวข้องกับการโจมตีแบบ denial of service ด้วยเหตุผลคล้ายๆ กัน ศึกษารายละเอียดได้ที่ Bugtraq posting
  • vsftpd ได้รับการสนับสนุนในหน้า Vanderbilt University ITS ภายใต้หัวข้อ "Safe Computing" ศึกษารายละเอียดได้ที่ http://www.vanderbilt.edu/its/security/safe_tools.html
  • vsftpd ได้รับการกล่าวถึงในหัวข้อความปลอดภัยว่า มีประสิทธิภาพดีและปราศจากช่องโหว่ด้านความปลอดภัย ซึ่งตรงกันข้ามกับเซิร์ฟเวอร์ FTP อื่นๆ รวมถึง OpenBSD ด้วย ศึกษารายละเอียดได้ที่ http://www.seifried.org/security/network/20010926-ftp-protocol.html

ในแง่ของประสิทธิภาพนั้น มีการกล่าวถึงดังนี้

  • ใน usenet มีการอ้างถึง vsftpd ว่าทำงานได้เร็วเทียบเท่ากับ BSD-ftpd (ซึ่งมีประสิทธิภาพสูง ต่างกับ wu-ftpd) ศึกษาเพิ่มเติมได้ที่ http://groups.google.com/groups?hl=en&selm=Pine.BSF.4.31.0202031625080.1082-100000%40atlantis.dp.ua
  • มีการเปรียบเทียบประสิทธิภาพของ vsftpd ว่ามีความเร็วถึง 70 Mbyte/sec ซึ่งมากกว่า TUX (55 Mbyte/sec)
  • มีการกล่าวว่าเครือข่ายของ Linux ที่อยู่บน gigabit ethernet ก็ใช้ vsftpd และมีความเร็วถึง 86 Mbyte/sec ศึกษาเพิ่มเติมได้ที่ http://lists.insecure.org/linux-kernel/2001/Feb/0104.html
  • ในการใช้ vsftpd บน RedHat นั้น Alan Cox กล่าวว่า "ในที่สุดก็มี ftpd ที่เหมาะสำหรับใช้บน Linux แล้ว" ศึกษาเพิ่มเติมได้ที่ http://www.linux.org.uk/diary/

เวอร์ชันล่าสุดของ VSFTP ขณะนี้คือเวอร์ชัน 1.2.0 สำหรับตัวอย่างที่จะกล่าวถึงในบทความนี้เป็นการใช้งาน VSFTP v.1.2.0 บนเซิร์ฟเวอร์ Red Hat 9.0 เคอร์เนลเวอร์ชัน 2.4.20-9


การติดตั้ง

  1. ทำการติดตั้ง VSFTP เช่นเดียวกับการติดตั้งแอพพลิเคชันอื่นๆ บน Linux โดยดาวน์โหลดได้จากเว็บไซต์ ftp://vsftpd.beasts.org/users/cevans/ มาเก็บไว้ในไดเรกทอรี /tmp
  2. ทำการขยายไฟล์ด้วยคำสั่งต่อไปนี้

    # cd /tmp
    # gunzip -dc vsftpd-1.2.0.tar.gz

  3. เข้าสู่ไดเรกทอรีที่ถูกสร้างขึ้นหลังจากขยายไฟล์แล้วซึ่งมีชื่อว่า vsftpd-1.2.0 และรันคำสั่ง make

    # cd vsftpd-1.2.0
    # make

    หากต้องการแก้ไขการตั้งค่า สามารถแก้ไขที่ไฟล์ builddefs.h ก่อนที่จะคอมไพล์ด้วยคำสั่ง make เมื่อคอมไพล์เสร็จจะมีไฟล์ไบนารีชื่อ vsftpd ในไดเรกทอรีนี้

  4. สร้างบัญชีชื่อ nobody ซึ่ง VSFTP ใช้เป็นส่วนหนึ่งของการตั้งค่าโดยดีฟอลต์ โดยปกติระบบปฏิบัติการ Linux/UNIX มีบัญชีชื่อนี้อยู่แล้วโดยดีฟอลต์ แต่ถ้าไม่มี ให้ทำการเพิ่มเข้าไปด้วยคำสั่ง

    # /usr/sbin/useradd nobody

    และกำหนด shell ในไฟล์ /etc/passwd สำหรับบัญชีชื่อ nobody ให้เป็น /sbin/nologin ด้วย เพื่อให้มีความปลอดภัยจากการล็อกอินเข้าใช้ shell ในการโจมตีระบบ ดังนี้

    nobody:x:99:99:Nobody:/:/sbin/nologin

    หากในเครื่องมีขื่อบัญชีนี้อยู่แล้วจะปรากฏผลดังนี้

    useradd: user nobody exists

  5. สร้างบัญชีชื่อ ftp (เฉพาะในกรณีที่ต้องการให้เครื่องเซิร์ฟเวอร์สนับสนุนการ ftp ด้วยการใช้ชื่อ anonymous) โดยต้องกำหนด shell ให้เป็น /sbin/nologin เช่นเดียวกับบัญชีชื่อ nobody ดังนี้

    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

    แต่ถ้าต้องการอนุญาตให้เฉพาะบัญชีผู้ใช้ในเครื่องสามารถ FTP ได้เท่านั้น ก็ไม่ต้องทำขั้นตอนนี้ อย่างไรก็ตามไดเรกทอรีบ้าน (home directory) ของบัญชีผู้ใช้ชื่อ anonymous จะต้องไม่มีเจ้าของเป็นบัญชีชื่อ ftp และผู้ใช้ไม่ควรมีสิทธิในการเขียนในไดเรกทอรีนี้ด้วย โดยกำหนดได้ด้วยคำสั่งต่อไปนี้

    คำสั่ง วัตถุประสงค์
    # mkdir /var/ftp เพื่อสร้างไดเรกทอรี /var/ftp
    # /usr/sbin/useradd -d /var/ftp ftp เพื่อสร้างบัญชีชื่อ "ftp" พร้อมด้วยไดเรกทอรีบ้าน /var/ftp โดยปกติระบบส่วนใหญ่มีบัญชีผู้ใช้นี้อยู่แล้ว
    # chown root.root /var/ftp เปลี่ยนเจ้าของไดเรกทอรี /var/ftp เป็นบัญชีชื่อ "root"
    # chmod og-w /var/ftp จำกัดสิทธิของบัญชีผู้ใช้อื่น และบัญชีที่อยู่ในกลุ่มเดียวกันไม่ให้มีสิทธิในการเขียนลงไดเรกทอรีนี้

  6. ติดตั้งไฟล์เอ็กซีคิวท์ ไฟล์ช่วยเหลือ (help pages) และอื่นๆ ซึ่งถูกสร้างไว้แล้ว โดยเข้าสู่ไดเรกทอรีที่สร้าง vsftpd ไว้และรันคำสั่ง make install

    # cd /tmp/vsftpd-1.2.0
    # make install

  7. สำเนาไฟล์คอนฟิกูเรชันตัวอย่างไปไว้ในไดเรกทอรี /etc ด้วยคำสั่ง

    # cp vsftpd.conf /etc


การปรับแต่งค่าคอนฟิกูเรชัน

ไฟล์คอนฟิกูเรชันของ vsftpd ประกอบด้วย 3 ไฟล์ ดังนี้

  1. ไฟล์ /etc/vsftpd.banned_emails -- เก็บรายการอี-เมล์ที่ใช้เป็นรหัสผ่านของผู้ใช้ชื่อ anonymous ซึ่งไม่ต้องการอนุญาตให้เชื่อมต่อเข้ามาใช้ ftp ได้
    โดยระบุอี-เมล์แอดเดรสในไฟล์นี้บรรทัดละ 1 รายการเท่านั้น ดังตัวอย่างต่อไปนี้

    mozilla@
    [email protected]

    สำหรับการตั้งค่าคอนฟิกูเรชันของไฟล์นี้มีความสัมพันธ์กับไฟล์ /etc/vsftpd.conf โดยจะต้องนำเครื่องหมาย # ออกจากบรรทัดที่เกี่ยวข้อง ตามที่แสดงไว้ดังต่อไปนี้

    ...
    ...
    # You may specify a file of disallowed anonymous e-mail addresses. Apparently
    # useful for combatting certain DoS attacks.
    deny_email_enable=YES
    # (default follows)
    banned_email_file=/etc/vsftpd.banned_emails
    ...
    ...

  2. ไฟล์ /etc/vsftpd.chroot_list -- เก็บรายชื่อผู้ใช้ในเครื่องที่จะถูกกำหนดให้ใช้งาน ftp ได้ในไดเรกทอรีที่กำหนดเท่านั้น โดยไม่สามารถเปลี่ยนไปเข้าสู่ไดเรกทอรีอื่นได้ (เรียกวิธีนี้ว่า chroot)
    สำหรับการกำหนดการใช้งานลักษณะนี้ จะต้องแก้ไขไฟล์ที่เกี่ยวข้องดังนี้

    - กำหนดรายชื่อที่ต้องการไว้ในไฟล์ /etc/vsftpd.chroot_list บรรทัดละ 1 รายชื่อ ดังนี้

     user1
     user2


    - แก้ไขไฟล์ /etc/passwd โดยเพิ่ม /./ ในไดเรกทอรีบ้าน (home directory) ของบัญชีผู้ใช้ทั้ง 2 บัญชี ดังนี้

     user1:x:500:500::/home/ftp-docs/./:/bin/ftponly
     user2:x:501:500::/home/ftp-docs/./:/bin/ftponly

    - แก้ไขไฟล์ /etc/vsftpd.conf โดยทำการนำเครื่องหมาย # ออกจากบรรทัดที่เกี่ยวข้อง ตามที่แสดงไว้ดังต่อไปนี้

     ...
     ...

     # You may specify an explicit list of local users to chroot() to their home
     # directory. If chroot_local_user is YES, then this list becomes a list of
     # users to NOT chroot().
     chroot_list_enable=YES
     # (default follows)
     chroot_list_file=/etc/vsftpd.chroot_list
     ...
     ... 

     
  3. ไฟล์ /etc/vsftpd.conf -- เป็นไฟล์หลักที่ใช้กำหนดออปชันการตั้งค่าโดยทั่วไป
    โดยปกติ VSFTP จะอ่านไฟล์คอนฟิกกูเรชัน /etc/vsftpd.conf เมื่อมันเริ่มทำงานเท่านั้น ดังนั้นจึงต้องทำการรีสตาร์ท xinetd ทุกครั้งที่มีการแก้ไขไฟล์นี้เพื่อให้การเปลี่ยนแปลงดังกล่าวมีผลต่อการทำงานของ VSFTP ทันที

    ไฟล์นี้มีค่าดีฟอลต์จำนวนหนึ่งที่ควรทราบ ได้แก่

    - โดยดีฟอลต์ VSFTP จะรันเป็นเซิร์ฟเวอร์ anonymous FTP ดังนั้นถ้าไม่ต้องการให้ผู้ใช้จากภายนอกล็อกอินเข้ามายังไดเรกทอรี FTP ที่เป็นดีฟอลต์ (/var/ftp)   โดยใช้ชื่อว่า   "anonymous" และรหัสผ่านเป็นอี-เมล์แอดเดรส ก็ให้ทำการปิดฟีเจอร์นี้โดยใส่เครื่องหมาย #ไว้ที่ต้นบรรทัด "anonymous_enable"     และสามารถเปิดให้ผู้ใช้ภายในสามารถล็อกอินเข้ามาได้โดยนำเครื่องหมาย # ออกจากบรรทัด "local_enable" ดังนี้

      # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
      #anonymous_enable=YES

       #
       # Uncomment this to allow local users to log in.
      local_enable=YES


    - โดยดีฟอลต์ VSFTP จะอนุญาตให้ผู้ใช้ที่ใช้ชื่อ anonymous สามารถดาวน์โหลดได้เท่านั้น ไม่สามารถอัพโหลดไฟล์มายังเซิร์ฟเวอร์ได้
       
        # Uncomment this to enable any form of FTP write command.
      #write_enable=YES
      # Uncomment this to allow the anonymous FTP user to upload files. This only
      # has an effect if the above global write enable is activated. Also, you will
      # obviously need to create a directory writable by the FTP user.
      #anon_upload_enable=YES
      #  


    - โดยดีฟอลต์ VSFTP ไม่อนุญาตให้ผู้ใช้ภายนอกสร้างไดเรกทอรีบนเครื่องเซิร์ฟเวอร์ FTP และมันจะเก็บบันทึกล็อกของการเข้าถึง FTP ไว้ที่ไฟล์   /var/log/vsftpd.log
      
      # Uncomment this if you want the anonymous FTP user to be able to create
      # new directories.
      #anon_mkdir_write_enable=YES
      #
      # Activate logging of uploads/downloads.
      xferlog_enable=YES
      # You may override where the log file goes if you like. The default is shown
      # below.
      xferlog_file=/var/log/vsftpd.log


ความปลอดภัยของ FTP

  1. การควบคุมการเข้าถึงเครื่องให้บริการ FTP

    ก่อนที่จะเริ่มเปิดให้บริการ FTP จะต้องทำการกำหนดสิทธิของการเชื่อมต่อเข้ามาใช้งานก่อน ซึ่งแบ่งวิธีการทำได้ดังนี้

    กรณีรัน inetd


    ทำการแก้ไขไฟล์ /etc/hosts.allow (TCP Wrapper) โดยเพิ่มบรรทัด "vsftpd:" และตามด้วยรายชื่อหมายเลข IP address ที่จะอนุญาตให้เข้ามาได้ ดังตัวอย่างต่อไปนี้

    - เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากตัวเครื่องเซิร์ฟเวอร์เอง ระบุในไฟล์ดังนี้ :

      vsftpd: 127.0.0.1


    - เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากทุกคนในวง IP 192.168.1.0/24 ระบุในไฟล์ดังนี้ :

      vsftpd: 192.168.1.

    - เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากเฉพาะ 2 IP address ระบุในไฟล์ดังนี้ :

      vsftpd: 192.168.1.100 192.168.5.53

     - เพื่ออนุญาตให้ทุกคนสามารถเชื่อมต่อเข้ามาได้ ระบุในไฟล์ดังนี้ :

      vsftpd: ALL

    กรณีรัน xinetd

    สำหรับการรันด้วย xinetd นั้นได้รวมเอาคุณสมบัติควบคุมการเข้าถึงเครื่องให้บริการเหมือนกับ TCP Wrapper ไว้อยู่แล้ว ดังนั้น ทำได้โดยการแก้ไขไฟล์ /etc/xinetd.d/vsftpd โดยเพิ่มบรรทัด "only_from = " และตามต้วยรายชื่อหมายเลข IP address ที่จะอนุญาตให้เข้ามาได้ ดังตัวอย่างต่อไปนี้

    - เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากเฉพาะ 2 IP address ระบุในไฟล์ดังนี้ :

     only_from          = 192.168.1.100 192.168.5.53

    และหากต้องการกำหนด IP address ที่ไม่อนุญาตให้เข้าถึง ก็ระบุในไฟล์ดังนี้ :

     no_access          = 192.168.4.22

  2. การอัพโหลดโดยการ ftp แบบ anonymous

    ถ้าต้องการให้ผู้ใช้จากภายนอกสามารถเขียนข้อมูลลงบนเครื่องเซิร์ฟเวอร์ FTP ได้ ควรจะสร้างไดเรกทอรีที่อนุญาตให้เขียนได้อย่างเดียวภายใต้ไดเรกทอรี /var/ftp/pub การทำเช่นนี้จะเป็นการอนุญาตให้ผู้ใช้ทำการอัพโหลดได้แต่ไม่สามารถเข้าถึงไฟล์อื่นที่อัพโหลดโดยผู้ใช้คนอื่น ซึ่งทำได้ดังนี้

    # mkdir /var/ftp/pub/upload
    # chmod 733 /var/ftp/pub/upload

    หมายเหต: ต้องทำการแก้ไขที่ไฟล์ /etc/vsftpd.conf ให้อนุญาตการเขียนไฟล์ลงบนเซิร์ฟเวอร์ด้วย ดังนี้

    # Uncomment this to enable any form of FTP write command.
    write_enable=YES
    ...
    # Uncomment this to allow the anonymous FTP user to upload files. This only
    # has an effect if the above global write enable is activated. Also, you will
    # obviously need to create a directory writable by the FTP user.
    anon_upload_enable=YES

  3. การแก้ไขแบนเนอร์ของ FTP

    การเปลี่ยนแปลงแบนเนอร์สำหรับเป็นข้อความต้อนรับเมื่อผู้ใช้ล็อกอินเข้ามาใช้งาน ftp นั้น สามารถแก้ไขได้ในไฟล์ /etc/vsftpd.conf เพื่อไม่ให้ผู้ไม่ประสงค์ดีรู้ว่าระบบที่ใช้เป็นประเภทใด ดังนี้

    # You may fully customise the login banner string:
    ftpd_banner= New Banner Here

    (ในที่นี้ใช้ประโยค "Welcome to My FTP service, authorized access only" ดังปรากฎในหัวข้อ "ตัวอย่างการล็อกอินเพื่อทดสอบการ FTP")

  4. การใช้ SCP แทน FTP

    ข้อเสียอย่างหนึ่งของ FTP คือ ไม่มีการเข้ารหัสชื่อผู้ใช้และรหัสผ่านสำหรับล็อกอิน ทำให้มีจุดอ่อนต่อการโจมตีโดยผู้อื่นที่จะสามารถดักขโมยชื่อผู้ใช้และรหัสผ่านไปได้จากการเชื่อมต่อเครือข่าย ดังนั้นขอแนะนำให้ทำการแลกเปลี่ยนไฟล์ด้วยวิธี Secure Copy (SCP) ซึ่งมีการเข้ารหัสแทนการใช้ FTP แต่ทั้งนี้ SCP ไม่สนับสนุนบริการ ftp ด้วยการใช้ชื่อ anonymous

วิธีเริ่มต้นการทำงานของ VSFTP

VSFTP สามารถรันได้ 2 โหมด ได้แก่

  1. โหมด stand-alone
  2. โหมด inetd/xinetd

การรันผ่านเดมอน inetd หรือ xinetd สามารถควบคุมการทำงานของโปรแกรมได้ง่ายกว่า และเป็นวิธีที่ควรใช้มากกว่าแบบ stand-alone สิ่งสำคัญที่ต้องคำนึงถึงคือ ในการตั้งค่าของ VSFTP นั้น มันจะรับการเชื่อมต่อแบบ anonymous เท่านั้น (สมมติว่าได้สร้างบัญชีชื่อ "ftp" ไปก่อนหน้านี้แล้ว) ดังนั้นถ้าต้องการอนุญาตให้บัญขีผู้ใช้ในเครื่องสามารถเชื่อมต่อเข้ามาใช้งาน ftp ได้ จะต้องทำการตั้งค่า Pluggable Authentication Modules (PAM) ซึ่งจะกล่าวถึงต่อไปด้วย

  1. การทำงานแบบ stand-alone
    สิ่งที่ต้องทำสำหรับการรัน VSFTP ในโหมด stand-alone ได้แก่
    - เพิ่มประโยค "listen = YES"ไว้ในบรรทัดสุดท้ายของไฟล์ /etc/vsftpd.conf
    - รันคำสั่ง # /usr/local/sbin/vsftpd &

  2. การใช้ xinetd
    เนื่องจากในที่นี้ได้ทำการทดสอบและใช้งานบนระบบ Red Hat 9 (ซึ่งใช้ xinetd) ดังนั้นจะเน้นที่การดำเนินการติดตั้งในโหมด xinetd
  • กรณีรัน inetd
    - เพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/inetd.d
      ftp stream tcp nowait root /usr/local/sbin/vsftpd

    - รีสตาร์ทเดมอน inetd ด้วยคำสั่ง
      # kill -SIGHUP <pid of inetd>

  • กรณีรัน xinetd
    - ไฟล์คอนฟิกกูเรชันสำหรับการเริ่มต้นทำงานของ VSFTP ในเครื่องที่รัน xinetd นั้น อยู่ภายใต้ไดเรกทอรี /etc/xinetd.d โดยมีชื่อว่า vsftpd หากไม่พบไฟล์ดังกล่าว ให้ทำการสำเนาจากตัวอย่างของ vsftpd ที่มากับ VSFTP distribution (/tmp/vsftpd-1.2.0/xinetd.d/vsftpd) มาไว้ในไดเรกทอรีนี้ ในไฟล์ vsftpd นี้ มีพารามิเตอร์จำนวนหนึ่งภายใต้ "service ftp" ซึ่งระบุให้ทราบวิธีการทำงานของเซิร์ฟเวอร์ VSFTP ดังต่อไปนี้

    พารามิเตอร์
    ค่าที่กำหนด
    ความหมาย
    socket_type stream เป็นชนิดของ TCP socket ที่ใช้สำหรับโพรโตคอลนี้ นั่นคือ FTP เป็น TCP stream
    wait no เกี่ยวกับความสามารถสำหรับ socket ที่จะรับข้อความ
    user root ผู้ใช้ที่จะเป็นผู้เปิดให้บริการ ftp คือใคร (ในที่นี้คือ root) หมายเหตุ : VSFTP จะลดสิทธิลงทันทีที่เริ่มทำงาน
    server /usr/local/sbin/vsftpd เป็นตำแหน่งของโปรแกรมเซิร์ฟเวอร์ที่เกี่ยวข้องกับไฟล์คอนฟิกกูเรชันนี้ ถ้ามีการตั้ง vsftpd ในไดเรกทอรีที่แตกต่างออกไปก็ต้องแก้ไขเปลี่ยนแปลงค่านี้
    nice 10 ออปชันนี้ใช้แก้ไขลำดับตารางเวลาดีฟอลต์สำหรับโพรเซส โดย 10 คือค่าดีฟอลต์ ส่วนค่าสูงสุดคือ 20
    disable no เซอร์วิสนี้ไม่ถูกปิด หรืออีกนัยหนึ่งคือ มันควรเริ่มทำงานทันที เมื่อ xinetd เริ่มต้นทำงาน
    per_source 5 เป็นการระบุจำนวนของการเชื่อมต่อเข้ามาใช้งานในเวลาเดียวกันจากหมายเลข IP เดียวกัน โดยเพื่อความปลอดภัย ควรตั้งค่าไว้เป็น 5
    instances 200 กำหนดจำนวนสูงสุดของการเชื่อมต่อ FTP ไปยังเซิร์ฟเวอร์ในเวลาเดียวกัน ซึ่งมีประโยชน์ต่อการกำหนดโหลดการทำงานของเซิร์ฟเวอร์ โดยเพื่อความปลอดภัยควรตั้งค่าไว้เป็น 200
    no_access No default เป็นการระบุรายการ IP address ที่ไม่อนุญาตให้เข้าถึงเซอร์วิสนี้ เช่น 192.168.1.4

    - เมื่อปรับแก้ไฟล์ /etc/xinetd.d/vsftpd เรียบร้อยแล้วให้ทำการรีสตาร์ท xinetd ด้วยคำสั่ง

    # /etc/init.d/xinetd restart

    หรือ

    # service xinetd restart

- และเพื่อให้ xinetd เริ่มทำงานทุกครั้งที่เครื่องรีสตาร์ท ให้ใช้คำสั่งต่อไปนี้

# chkconfig --add xinetd
# chkconfig --level 345 xinetd on

หมายเหตุ : ถ้าก่อนหน้านี้ตั้งเป็นโหมด stand-alone ต้องทำการลบบรรทัด "listen =YES" จากไฟล์ /etc/vsftpd.conf ออกด้วย มิฉะนั้นเซอร์วิส vsftpd จะไม่ทำงาน เมื่อ xinetd รีสตาร์ท

หลังจากเสร็จสิ้นกระบวนการแล้ว ไม่ว่าจะเป็นการรันในโหมดใดก็ตาม สามารถตรวจสอบดูให้แน่ใจว่า VSFTP เริ่มทำงานจริงได้โดยใช้คำสั่ง netstat -a และจะต้องได้ผลดังต่อไปนี้ :

# netstat -a | grep ftp
tcp 0 0 *:ftp *:* LISTEN

หมายเหตุ : ในส่วนของผลลัพธ์ที่ได้อาจแสดงเป็น ftp หรือหมายเลขพอร์ต 21


การตั้งค่า Pluggable Authentication Modules (PAM)

การติดตั้งเซิร์ฟเวอร์ FTP เพื่อแจกจ่ายซอฟต์แวร์ให้ผู้ใช้ใดๆ เชื่อมต่อเข้ามานั้น มีประโยชน์มาก แต่บางครั้งอาจต้องทำการควบคุมการเข้าถึงทรัพยากรบางอย่าง เช่น ต้องการให้เพียงลูกค้าเท่านั้นสามารถใช้งาน FTP ได้

ดังนั้นการทำเช่นนี้กับ VSFTP ทำได้โดยใช้ PAM ในการพิสูจน์ตัวตน ซึ่งคล้ายกับเครื่อง Red Hat ส่วนใหญ่ ซึ่งไฟล์ที่เกี่ยวข้องชื่อ pam.conf หรือไดเรกทอรีชื่อ pam.d สำหรับ VSFTP นั้นมีการตั้งค่า PAM ตัวอย่างไว้แล้ว อยู่ในไดเรกทอรีย่อยชื่อ RedHat ของโปรแกรมที่ขยายออกมาในตอนแรกก่อนการติดตั้ง (/tmp/vsftpd-1.2.0/RedHat/vsftpd.pam) ให้ทำการเปลี่ยนชื่อและทำสำเนาไปไว้ในไดเรกทอรี pam.d ซึ่งสามารถทำได้ดังนี้

#cp vsftpd.pam /etc/pam.d/ftp

จากนั้นทำการกำหนดเพื่ออนุญาตให้ผู้ใช้ภายในสามารถล็อกอินได้ โดยแก้ไขที่ไฟล์ /etc/vsftpd.conf และเอาเครื่องหมาย # ออกจากบรรทัด "local_enable=YES" เมื่อผู้ใช้เชื่อมต่อเข้ามาก็จะเข้าสู่ไดเรกทอรีบ้าน (home directory) ของผู้ใช้คนนั้นทันที


ตัวอย่างการตั้งค่าในไฟล์ /etc/vsftpd.conf เพื่ออนุญาตให้ผู้ใช้สามารถเข้าถึงไดเรกทอรีที่แชร์ไว้ในลักษณะอ่านได้อย่างเดียว

ในตัวอย่างนี้ ไม่อนุญาตให้ผู้ใช้ใช้ชื่อ anonymous แต่อนุญาตให้เฉพาะผู้ใช้ภายในที่ต้องการดาวน์โหลดไฟล์จากไดเรกทอรีที่แชร์ไว้เท่านั้นสามารถ ftp ได้ ขั้นตอนการทำมีดังนี้ :

  1. ปิดการล็อกอินด้วยผู้ใช้ชื่อ anonymousโดยใส่เครื่องหมาย # ไว้ที่ต้นบรรทัด "anonymous_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้

    # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
    #anonymous_enable=YES

  2. เปิดให้ผู้ใช้ภายในแต่ละคนล็อกอินได้ โดยนำเครื่องหมาย # ออกจากต้นบรรทัด "local_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้

    # Uncomment this to allow local users to log in.
    local_enable=YES

  3. สร้างกลุ่มผู้ใช้ (user group) และ ไดเรกทอรีที่แชร์ไว้ สำหรับกรณีนี้จะสร้าง "/home/ftp-docs" เป็นไดเรกทอรีที่แชร์ไว้และกลุ่มผู้ใช้เป็น "ftp-users" สำหรับผู้ใช้ที่จะล็อกอินเข้ามาดาวน์โหลด

    # groupadd ftp-users
    # mkdir /home/ftp-docs


  4. สร้างไดเรกทอรีที่เข้าถึงได้จากผู้ใช้ในกลุ่ม ftp-users

    # chmod 750 /home/ftp-docs
    # chown root:ftp-users /home/ftp-docs


  5. สร้างบัญชีชื่อผู้ใช้ และไดเรกทอรีดีฟอลต์ชื่อ /home/ftp-docs

    # useradd -g ftp-users -d /home/ftp-docs user1
    # useradd -g ftp-users -d /home/ftp-docs user2
    # passwd user1
    # passwd user2


  6. ทำสำเนาไฟล์สำหรับดาวน์โหลดไปไว้ที่ไดเรกทอรี /home/ftp-docs
  7. เปลี่ยนสิทธิการเข้าถึงไฟล์ภายใต้ไดเรกทอรี /home/ftp-docs ให้สามารถอ่านได้อย่างเดียวโดยผู้ใช้ในกลุ่ม ftp-users

    # chown root:ftp-users /home/ftp-docs/*
    # chmod 740 /home/ftp-docs/*

    เมื่อถึงขั้นตอนนี้แล้ว ผู้ใช้จะสามารถล็อกอินผ่าน ftp ไปยังเซิร์ฟเวอร์โดยใช้ชื่อและรหัสผ่านใหม่นี้ได้ ถ้าไม่ต้องการให้ผู้ใช้เขียนหรืออัพโหลดไฟล์ในไดเรกทอรีใดๆ ให้ใส่เครื่องหมาย # ที่ต้นบรรทัด "write_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้

    # Uncomment this to enable any form of FTP write command.
    #write_enable=YES


  8. รีสตาร์ท vsftp เพื่อให้การแก้ไขไฟล์ /etc/vsftpd.conf มีผลต่อการทำงานทันที ดังนี้

    # /etc/init.d/xinetd restart
    Stopping xinetd: [ OK ]

    Starting xinetd: [ OK ]
    #

สำหรับรายละเอียดของการตั้งค่าสำหรับออปชันอื่นๆ ในไฟล์ /etc/vsftpd.conf นี้ สามารถศึกษาเพิ่มเติมได้จากไฟล์ vsftpd.conf.5 (ในที่นี้อยู่ในไดเรกทอรี /usr/share/man/man5 )


ตัวอย่างการล็อกอินเพื่อทดสอบการ FTP

  1. เชื่อมต่อมาที่เซิร์ฟเวอร์โดยผ่านทาง FTP

    c:\>ftp 192.168.9.124
    Connected to 192.168.9.124.
    220 Welcome to My FTP service, authorized access only.
    User (192.168.9.124:(none)): user1
    331 Please specify the password.
    Password:
    230 Login successful.
    ftp>


  2. ผู้ใช้จะไม่สามารถอัพโหลดไฟล์ "file_4_upload" ได้ ตามที่ได้ตั้งค่าไว้ ดังนี้

    ftp> put file_4_upload
    200 PORT command successful. Consider using PASV.
    550 Permission denied.

    ftp>

  3. ตรวจสอบไฟล์ที่ต้องการดาวน์โหลดว่ามีอยู่จริงหรือไม่

    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    file_4_download

    226 Directory send OK.
    ftp: 10 bytes received in 0.00Seconds 10000.00Kbytes/sec.
    ftp>

  4. และทำการดาวน์โหลดไฟล์ที่ต้องการ ดังนี้

    ftp> get file_4_download
    200 PORT command successful. Consider using PASV.
    150 Opening BINARY mode data connection for file_4_download (8294 bytes).
    ####
    226 File send OK.
    ftp: 8294 bytes received in 0.01Seconds 829.40Kbytes/sec.
    ftp>


  5. เมื่อทดสอบเชื่อมต่อด้วยการ ftp โดยใช้ชื่อ anonymous จะไม่สามารถทำได้เนื่องจากได้จำกัดไว้ตั้งแต่ต้นแล้ว

    C:\>ftp 192.168.9.124
    Connected to 192.168.97.124.
    220 Welcome to My FTP service, authorized access only.
    User (192.168.9.124:(none)): anonymous
    331 Please specify the password.
    Password:
    530 Login incorrect.
    Login failed.
    ftp> bye
    221 Goodbye

อ้างอิงจาก : thaicert

คำสำคัญ (Tags): #vsftp (very secure ftp)
หมายเลขบันทึก: 107640เขียนเมื่อ 30 มิถุนายน 2007 17:25 น. ()แก้ไขเมื่อ 1 มิถุนายน 2012 09:20 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

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

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท