all-in-one 7 (multisite proftpd)

Topic: 
 

ทำ ftp ใช้ proftpd

ที่ทำเป็น คือใช้ proftpd (ตัวอื่นทำ VirtualHost ไม่เป็น หรืออาจทำยาก)
เนื่องจากเรามี 2 โดเมน คือ example.com และ example.org เราต้องการทำ ftp ทั้งสองโดเมน จึงต้องทำเรื่อง VirtualHost

แต่เนื่องจากระบบ VirtualHost ใน proftpd ไม่เหมือนใน apache2 เสียทีเดียว เนื่องจากเขาไม่ถือชื่อโฮสต์เป็นสำคัญ แต่จะถือไอพีและพอร์ตเป็นตัวจำแนกแทน ดังนั้นถ้าเราต้องการแยกไดเรกทอรี่ระหว่าง example.com และ example.org เราจะต้องใช้พอร์ตเป็นตัวแยกแทน

สมมุติฐานมีดังนี้คือ

  • Anonymous user ให้ไปใช้ที่ /var/ftp/pub/ โดยให้ ftp เป็นเจ้าของ อยู่ในกลุ่ม nogroup ใช้พอร์ตมาตรฐาน คือ 21
  • example.com - anonymous ใช้ที่ /var/ftp/example.com/ ให้ user1:comgroup เป็นเจ้าของ ใช้พอร์ต 10021
  • example.org - anonymous ใช้ที่ /var/ftp/example.org/ ให้ user2:orggroup เป็นเจ้าของ ใช้พอร์ต 10022
  • ผู้ใช้ในระบบ จะสามารถเข้าถึงได้ทุกแชร์ มีสิทธิ์อ่านเขียนตามสิทธิ์ในระบบลินุกซ์
  • Anonymous จะถูกขังในกรงของแต่ละโดเมนเท่านั้น อ่านได้อย่างเดียว
  • ไฟล์ทั้งหมดจะถูกสำรอง นั่นคือไฟล์ตัวจริงอยู่ภายใต้ /sys1/sysb/var/ftp

เตรียมผู้ใช้และกลุ่ม
เพิ่มกลุ่ม ftpusers สำหรับพอร์ตกลาง และ comgroup กับ orggroup สำหรับพอร์ตพิเศษ
# groupadd ftpusers
# groupadd comgroup
# groupadd orggroup

แก้ไขผู้ใช้ ftpuser1 ให้เข้ามาเป็นสมาชิกของ comgroup และ ftpuser2 ให้เข้ามาเป็นสมาชิกของ orggroup
# useradd -g ftpusers -G comgroup -m -d /home/ftpuser1 ftpuser1
# useradd -g ftpusers -G orggroup -m -d /home/ftpuser2 ftpuser2
# passwd ftpuser1
# passwd ftpuser2

ป้อนรหัสผ่านตามปกติ

เตรียมไดเรกทอรี่
# mkdir -p /sys1/sysb/var/ftp/{pub,example.com,example.org}
# ln -sf /sys1/sysb/var/ftp /var
# chown ftpuser1:comgroup /var/ftp/example.com
# chown ftpuser2:orggroup /var/ftp/example.org
# chown ftp:ftpusers /var/ftp/pub
# chmod 775 /var/ftp/*

ติดตั้ง
# aptitude install proftpd

Run proftpd from inetd or standalone? <<<--- standalone

แก้ไขเรื่อง IPv6 ไม่ให้แสดงรายงานความผิดพลาด
และแก้ไขงานของ Anonymous โดยเอาจากตัวอย่างในไฟล์
และเพิ่มให้อ่านไฟล์คอนฟิกของ example.com และ example.org
# vi /etc/proftpd/proftpd.conf

...
#UseIPv6             on
UseIPv6             off
...

# A basic anonymous configuration, no upload directories.

#<Anonymous ~ftp>
<Anonymous /var/ftp/pub>
  User              ftp 
  Group             nogroup
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias         anonymous ftp 
  # Cosmetic changes, all files belongs to ftp user
  DirFakeUser   on ftp
  DirFakeGroup on ftp

  RequireValidShell     off 

  # Limit the maximum number of anonymous logins
  MaxClients            10

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin          welcome.msg
  DisplayFirstChdir     .message

  # Limit WRITE everywhere in the anonymous chroot
  <Directory *>
    <Limit WRITE>
      DenyAll
    </Limit>
  </Directory>

  # Uncomment this if you're brave.
  # <Directory incoming>
  #   # Umask 022 is a good standard umask to prevent new files and dirs
  #   # (second parm) from being group and world writable.
  #   Umask             022  022 
  #            <Limit READ WRITE>
  #            DenyAll
  #            </Limit>
  #            <Limit STOR>
  #            AllowAll
  #            </Limit>
  # </Directory>

</Anonymous>

Include /etc/proftpd/example.com.conf
Include /etc/proftpd/example.org.conf

สร้างไฟล์ example.com.conf ให้มาใช้พอร์ต 10021
# vi /etc/proftpd/example.com.conf

<VirtualHost ftp.example.com>
    ServerName              "Example.com's FTP site"
    DefaultRoot             ~
    AllowOverwrite          on
    Umask                   002
    User                    ftpuser1
    Group                   comgroup
    MaxClients              10
    Port                    10021

    <Anonymous /var/ftp/example.com>
      User                                ftp
      Group                               nogroup
      # We want clients to be able to login with "anonymous" as well as "ftp"
      UserAlias                   anonymous ftp
      # Cosmetic changes, all files belongs to ftp user
      DirFakeUser on ftp
      DirFakeGroup on ftp

      RequireValidShell           off

      # Limit the maximum number of anonymous logins
      MaxClients                  10

      # We want 'welcome.msg' displayed at login, and '.message' displayed
      # in each newly chdired directory.
      DisplayLogin                welcome.msg
      DisplayFirstChdir           .message

      # Limit WRITE everywhere in the anonymous chroot
      <Directory /var/ftp/example.com>
      </Directory>
      <Directory *>
        <Limit WRITE>
          DenyAll
        </Limit>
      </Directory>
    </Anonymous>

</VirtualHost>

สร้าง example.org.conf ให้มาใช้พอร์ต 10022
# vi /etc/proftpd/example.org.conf

<VirtualHost ftp.example.org>
    ServerName              "Example.org's FTP site"
    DefaultRoot             ~
    AllowOverwrite          on
    Umask                   002
    User                    ftpuser2
    Group                   orggroup
    MaxClients              10
    Port                    10022

    <Anonymous /var/ftp/example.org>
      User                                ftp
      Group                               nogroup
      # We want clients to be able to login with "anonymous" as well as "ftp"
      UserAlias                   anonymous ftp
      # Cosmetic changes, all files belongs to ftp user
      DirFakeUser on ftp
      DirFakeGroup on ftp

      RequireValidShell           off

      # Limit the maximum number of anonymous logins
      MaxClients                  10

      # We want 'welcome.msg' displayed at login, and '.message' displayed
      # in each newly chdired directory.
      DisplayLogin                welcome.msg
      DisplayFirstChdir           .message

      # Limit WRITE everywhere in the anonymous chroot
      <Directory /var/ftp/example.org>
      </Directory>
      <Directory *>
        <Limit WRITE>
          DenyAll
        </Limit>
      </Directory>
    </Anonymous>

</VirtualHost>

เริ่ม protftpd ใหม่
# /etc/init.d/proftpd restart

เสร็จแล้ว
ผู้ใช้งานสามารถใช้งานผ่าน

  • ftp://ftp.example.com หรือ ftp://ftp.example.org ซึ่งจะไปที่ /var/ftp/pub
  • ftp://ftp.example.com:10021/ จะไปที่ /var/ftp/example.com
  • ftp://ftp.example.org:10022/ จะไปที่ /var/ftp/example.org
  • ผู้ใช้ในระบบ ดูรายชื่อไฟล์ในระบบได้ทั่ว
หมายเหตู
 

Syndicate

Subscribe to Syndicate

Who's online

There are currently 0 users online.