架过很多次了,但每次总有几张铁板一直踢到...所以决定把纪录留下来,避免到时候又忘了...

  1. 练习用的FTP站规划:
    • 架设一个有登入网域限制的FTP站(允许192.168.1.0/24)。
      相关档案:/etc/proftpd/proftpd.conf, /etc/xinetd.d/proftpd
     
    • 开放两个帐号(ftpuser1, ftpuser2),但不允许实体用户(Real User)及匿名用户(Anonymous)登入。
      相关档案:/etc
      /proftpd/proftpd.conf, /etc/proftpd.passwd, /etc/proftpd.group
     
    • 埠号(port)设定为1226。
      相关档案:/etc
      /proftpd/proftpd.conf, /etc/services

  2. 发行版:
    • Linux Ubuntu 2.6.32-33

  3. 重要档案说明:
    • /etc/proftpd/proftpd.conf
      这就是ProFTPD主要设定档,里面包山包海管很大。
     
    • /etc/services
      里面纪录著各种service常用的埠号,如果你的service要用其他埠号,就要来这里确认不会占用到其他service的埠号,并把原service的设定注解掉,最后在# Local service下方新增你要用的service名称及埠号。不要去改service名称,否则ftp就算可以登入,进入passive mode后也无法顺利连线!
     
    • /etc/xinetd.d/proftpd
      (自行创建)xinetd(super daemon)将会按照此设定档的内容来启动ProFTPD。务必使本档内的service名称与/etc/services中所列的名称一致,否则会出现「找不到可用的service port」的错误讯息(见/var/log/syslog)。
     
    • /etc/proftpd.passwd
      (自行用ftpasswd(shell script)创建,Optional)如果你要使用Virtual User来使用FTP,要用这个档案来放User资讯,暂时代替passwd。
     
    • /etc/proftpd.group
      (自行创建ftpasswd,Optional)如果你要使用Virtual User来使用FTP,要用这个档案来放Group资讯,暂时代替group。
     
    • /etc/ftpusers
      禁用FTP的用户名单,倘若以所列之帐号登入会被拒绝连线。本教学不更动此档案,而在proftpd.conf中加入对应的AuthUserFile, AuthGroupFile与AuthOrder参数亦可达到相同效果!

  4. 步骤:
    • 安装xinetd及ProFTPD:
      为求方便&不在意反应速度,我想要用xinetd来管理proftpd(也就是用super daemon管daemon),因此安装proftpd时,请选择inetd,而非standalone,我用Synaptic依序安装好xinetd及proftpd之后,
     
    • 先设定好Virtual user及Virtual Group:
      # 查询ftp这个user的uid及其group的gid
      $ cat /etc/passwd | grep ftp
      ftp:x:118:65534::/home/ftp:/bin/false
      $ cat /etc/group | grep 65534
      nogroup:x:65534:

      # 建立ftpuser1及ftpuser2的在FTP的家目录
      $ sudo mkdir -p /home/ftp/ftpuser1 /home/ftp/ftpuser2
      $ sudo chown ftp:nogroup /home/ftp/ftpuser1 /home/ftp/ftpuser2

      # 语法:建立新ftp使用者,并储存到proftpd.passwd
      # sudo ftpasswd --passwd --name=$virtual_user --gid=$real_user_gid --uid=$real_user_uid --home=$virtual_user_home --shell=/bin/false --file=/output_file/proftpd.passwd
      $ sudo ftpasswd --passwd --name=ftpuser1 --uid=118 --gid=65534 --shell=/bin/false --home=/home/ftp/ftpuser1 --file=/etc/proftpd.passwd
      $ sudo ftpasswd --passwd --name=ftpuser1 --uid=118 --gid=65534 --shell=/bin/false --home=/home/ftp/ftpuser2 --file=/etc/proftpd.passwd

      # 语法:建立新ftp群组,并储存到proftpd.group
      # sudo ftpasswd --group --name=$virtual_group --gid=$real_user_gid --member=virtual_user --file=/output_file/proftpd.group
      # 如果你跟我一样想使用系统原group就好,则忽略以下这一行!
      $ sudo ftpasswd --group --name=nogroup --gid=65534 --member=ftpuser1 --member=ftpuser2 -file=/etc/proftpd.group
     
    • 接著就来设定/etc/proftpd/proftpd.conf,确认以下的设定:
      # 由xinetd管理
      ServerType            inetd
      DefaultServer            on

      # 使用自制的passwd档
      AuthUserFile            /etc/proftpd.passwd

      # 使用自制的group档
      # AuthGroupFile            /etc/proftpd.group

      # 只使用自制的passwd及group档
      AuthOrder                       mod_auth_file.c

      # 不需要有效的shell也能登入FTP,方便Virtual user登入
      RequireValidShell        off

      Port                1226
     
    • 到/etc/xinetd.d建立proftpd起始设定:
      $ sudo vim /etc/xinetd.d/proftpd
      # 键入以下设定
      service ftp
      {
          disable                 = no
          flags                    = REUSE
          socket_type         = stream
          wait                     = no
          user                     = root
          server                  = /usr/sbin/proftpd
          server_args          = -c /etc/proftpd/proftpd.conf
          log_on_success    += DURATION USERID
          log_on_failure       += USERID
      }
     
    • 再进入/etc/services,注解掉原service port设定,在最后一行输入设定新port:
      $ sudo vim /etc/services

      ...........
      #ftp        21/tcp
      ...........
      ...........

      # Local services
      ftp        1226/tcp    # ProFTPD (ftp daemon),不要用其他service name!
     
    • 重新启动xinetd吧~这样proftpd就会被跟著启动了:
      $ sudo /etc/initd.d/xinetd restart
      $ sudo netstat -tlnp | grep 1226
      tcp    0    0 0.0.0.0:1226    0.0.0.0:*    LISTEN    1171/xinetd
     
    • 一定要设定好防火墙,你可以用Firstarter图形介面设定其实蛮容易的,如果没有Firestarter再用iptable的指令:
      $ iptable -A INPUT -s 192.168.1.0/24 -p tcp --dport 1226 -j ACCEP
     

  5. 参考资料:
    • 鸟哥的Linux私房菜
      xinetd(super deamon):http://linux.vbird.org/linux_basic/0560daemons.php
      ProFTPD:http://linux.vbird.org/linux_server/0410proftpd.php
      iptables:http://linux.vbird.org/linux_server/0250simple_firewall.php#netfilter
    • ProFTPD 虚拟帐号@ 创造心理的感动:http://gisanfu.pixnet.net/blog/post/6501095-proftpd-%E8%99%9B%E6%93%AC%E5%B8%B3%E8%99%9F
    • proftpd 如何建立独立帐号:/moto.debian.tw/viewtopic.php?p=35579 

  6. 延伸资料:
    • 鸟哥的Linux私房菜
      Virtual Host:
      http://linux.vbird.org/linux_server/0360apache.php#www_adv_virtual
相关文章