ProFTPDの設定方法



●インストール(CentOS 7で動作せず)

 最新版はProFTPDのサイトからダウンロード出来ます。概要はProFTPD - Wikipediaを参照してください。
 今回はProFTPDサイトのDocs indexを参照して、下記モジュールが有効になるように設定します。
  • SFTP support (mod_sftp)
  • SSL/TLS support (mod_tls)
  • LDAP support (mod_ldap)
  • Quota support (mod_quotatab)
 では、実際にインストールします。
# cd /usr/local/src
# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.3f.tar.gz
# tar zxvf proftpd-1.3.3f.tar.gz
# cd proftpd-1.3.3f
# ./configure --enable-openssl --with-modules=mod_sftp:mod_tls:mod_ldap:mod_quotatab
# make
# make install
 configureの進行状況は下記のとおりです。

checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1966080
checking whether the shell understands some XSI constructs... yes
checking whether the shell understands "+="... yes
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for ar... ar
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking for shl_load... no
checking for shl_load in -ldld... no
checking for dlopen... no
checking for dlopen in -ldl... yes
checking whether a program can dlopen itself... yes
checking whether a statically linked program can dlopen itself... yes
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking whether make sets $(MAKE)... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... 64
checking whether the C compiler accepts -Wall... yes
checking for getopt... yes
checking getopt.h usability... yes
checking getopt.h presence... yes
checking for getopt.h... yes
checking for getopt_long... yes
checking which extension is used for runtime loadable modules... .so
checking which variable specifies run-time module search path... LD_LIBRARY_PATH
checking for the default library search path... /lib /usr/lib /usr/lib/atlas /usr/lib/ctapi /usr/lib/mysql /usr/lib/qt-3.3/lib /usr/lib/xulrunner-1.9.2
checking for library containing dlopen... -ldl
checking for dlerror... yes
checking for shl_load... (cached) no
checking for shl_load in -ldld... (cached) no
checking for dld_link in -ldld... no
checking for _ prefix in compiled symbols... no
checking whether deplibs are loaded by dlopen... yes
checking for argz.h... yes
checking for error_t... yes
checking for argz_add... yes
checking for argz_append... yes
checking for argz_count... yes
checking for argz_create_sep... yes
checking for argz_insert... yes
checking for argz_next... yes
checking for argz_stringify... yes
checking if argz actually works... yes
checking whether libtool supports -dlopen/-dlpreopen... yes
checking for standalone crypt... no
checking for crypt in -lcrypt... yes
checking for standalone gethostbyname... yes
checking for standalone inet_aton... yes
checking for standalone nsl functions... yes
checking for standalone socket functions... yes
checking for _pw_stayopen variable... no
checking krb.h usability... no
checking krb.h presence... no
checking for krb.h... no
checking login.h usability... no
checking login.h presence... no
checking for login.h... no
checking prot.h usability... no
checking prot.h presence... no
checking for prot.h... no
checking usersec.h usability... no
checking usersec.h presence... no
checking for usersec.h... no
checking hpsecurity.h usability... no
checking hpsecurity.h presence... no
checking for hpsecurity.h... no
checking for hpsecurity.h workaround... no
checking for dirent.h that defines DIR... yes
checking for library containing opendir... none required
checking for ANSI C header files... (cached) yes
checking for sys/wait.h that is POSIX.1 compatible... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking sys/ioctl.h usability... yes
checking sys/ioctl.h presence... yes
checking for sys/ioctl.h... yes
checking sys/resource.h usability... yes
checking sys/resource.h presence... yes
checking for sys/resource.h... yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking junistd.h usability... no
checking junistd.h presence... no
checking for junistd.h... no
checking for memory.h... (cached) yes
checking shadow.h usability... yes
checking shadow.h presence... yes
checking for shadow.h... yes
checking for struct spwd.sp_warn... yes
checking for struct spwd.sp_inact... yes
checking for struct spwd.sp_expire... yes
checking for security/pam_appl.h... no
checking for security/pam_modules.h... no
checking for pam/pam_appl.h... no
checking linux/capability.h usability... yes
checking linux/capability.h presence... yes
checking for linux/capability.h... yes
checking for cap_init in -lcap2... no
checking for cap_init in -lcap... yes
checking whether to enable mod_cap... yes
checking bstring.h usability... no
checking bstring.h presence... no
checking for bstring.h... no
checking crypt.h usability... yes
checking crypt.h presence... yes
checking for crypt.h... yes
checking ctype.h usability... yes
checking ctype.h presence... yes
checking for ctype.h... yes
checking execinfo.h usability... yes
checking execinfo.h presence... yes
checking for execinfo.h... yes
checking iconv.h usability... yes
checking iconv.h presence... yes
checking for iconv.h... yes
checking for inttypes.h... (cached) yes
checking langinfo.h usability... yes
checking langinfo.h presence... yes
checking for langinfo.h... yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking for string.h... (cached) yes
checking for strings.h... (cached) yes
checking stropts.h usability... no
checking stropts.h presence... no
checking for stropts.h... no
checking sys/file.h usability... yes
checking sys/file.h presence... yes
checking for sys/file.h... yes
checking sys/mman.h usability... yes
checking sys/mman.h presence... yes
checking for sys/mman.h... yes
checking for sys/types.h... (cached) yes
checking sys/ucred.h usability... no
checking sys/ucred.h presence... no
checking for sys/ucred.h... no
checking sys/uio.h usability... yes
checking sys/uio.h presence... yes
checking for sys/uio.h... yes
checking for sys/param.h... yes
checking for sys/mount.h... yes
checking netdb.h usability... yes
checking netdb.h presence... yes
checking for netdb.h... yes
checking netinet/in.h usability... yes
checking netinet/in.h presence... yes
checking for netinet/in.h... yes
checking whether netdb.h requires _USE_IRS... no
checking for netinet/in_systm.h... yes
checking for netinet/ip.h... yes
checking netinet/tcp.h usability... yes
checking netinet/tcp.h presence... yes
checking for netinet/tcp.h... yes
checking arpa/inet.h usability... yes
checking arpa/inet.h presence... yes
checking for arpa/inet.h... yes
checking libintl.h usability... yes
checking libintl.h presence... yes
checking for libintl.h... yes
checking for sys/stat.h... (cached) yes
checking errno.h usability... yes
checking errno.h presence... yes
checking for errno.h... yes
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking sys/termios.h usability... yes
checking sys/termios.h presence... yes
checking for sys/termios.h... yes
checking sys/termio.h usability... no
checking sys/termio.h presence... no
checking for sys/termio.h... no
checking sys/statvfs.h usability... yes
checking sys/statvfs.h presence... yes
checking for sys/statvfs.h... yes
checking sys/un.h usability... yes
checking sys/un.h presence... yes
checking for sys/un.h... yes
checking sys/vfs.h usability... yes
checking sys/vfs.h presence... yes
checking for sys/vfs.h... yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking termios.h usability... yes
checking termios.h presence... yes
checking for termios.h... yes
checking dirent.h usability... yes
checking dirent.h presence... yes
checking for dirent.h... yes
checking ndir.h usability... no
checking ndir.h presence... no
checking for ndir.h... no
checking sys/ndir.h usability... no
checking sys/ndir.h presence... no
checking for sys/ndir.h... no
checking sys/dir.h usability... yes
checking sys/dir.h presence... yes
checking for sys/dir.h... yes
checking vmsdir.h usability... no
checking vmsdir.h presence... no
checking for vmsdir.h... no
checking ucred.h usability... no
checking ucred.h presence... no
checking for ucred.h... no
checking ucontext.h usability... yes
checking ucontext.h presence... yes
checking for ucontext.h... yes
checking utime.h usability... yes
checking utime.h presence... yes
checking for utime.h... yes
checking utmpx.h usability... yes
checking utmpx.h presence... yes
checking for utmpx.h... yes
checking regex.h usability... yes
checking regex.h presence... yes
checking for regex.h... yes
checking syslog.h usability... yes
checking syslog.h presence... yes
checking for syslog.h... yes
checking curses.h usability... yes
checking curses.h presence... yes
checking for curses.h... yes
checking ncurses.h usability... yes
checking ncurses.h presence... yes
checking for ncurses.h... yes
checking for tzname global variable... yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for uid_t in sys/types.h... yes
checking for pid_t... yes
checking for size_t... yes
checking for mode_t... yes
checking for off_t... yes
checking type of array argument to getgroups... gid_t
checking for timer_t... yes
checking whether time.h and sys/time.h may both be included... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking for short... yes
checking size of short... 2
checking for int... yes
checking size of int... 4
checking for long... yes
checking size of long... 4
checking for long long... yes
checking size of long long... 8
checking for off_t... (cached) yes
checking size of off_t... 8
checking for size_t... (cached) yes
checking size of size_t... 4
checking for time_t... yes
checking size of time_t... 4
checking for mode_t... (cached) yes
checking for ino_t... yes
checking for intptr_t... yes
checking for socklen_t... yes
checking utmp.h usability... yes
checking utmp.h presence... yes
checking for utmp.h... yes
checking whether struct utmp has ut_user... yes
checking whether struct utmp has ut_host... yes
checking whether struct utmp has ut_exit... yes
checking whether syslog.h defines LOG_CRON... yes
checking whether syslog.h defines LOG_FTP... yes
checking for d_fd in DIR structure... no
checking for dd_fd in DIR structure... no
checking for __dd_fd in DIR structure... no
checking for working alloca.h... yes
checking for alloca... yes
checking for alloca in -lucb... no
checking whether gcc needs -traditional... no
checking whether setpgrp takes no argument... yes
checking return type of signal handlers... void
checking for vprintf... yes
checking for _doprnt... no
checking for bcopy... yes
checking for crypt... yes
checking for fdatasync... yes
checking for fgetgrent... yes
checking for fgetpwent... yes
checking for fgetspent... yes
checking for flock... yes
checking for fpathconf... yes
checking for freeaddrinfo... yes
checking for futimes... yes
checking for getpgid... yes
checking for getpgrp... yes
checking for nl_langinfo... yes
checking for gai_strerror... yes
checking for iconv... yes
checking for dirfd... yes
checking for getaddrinfo... yes
checking for getcwd... yes
checking for getenv... yes
checking for getgrouplist... yes
checking for getgrset... no
checking for gethostbyname2... yes
checking for gethostname... yes
checking for getnameinfo... yes
checking for gettimeofday... yes
checking for hstrerror... yes
checking for inet_aton... yes
checking for inet_ntop... yes
checking for inet_pton... yes
checking for loginrestrictions... no
checking for memcpy... yes
checking for mempcpy... yes
checking for mkdir... yes
checking for mkstemp... yes
checking for mlock... yes
checking for mlockall... yes
checking for munlock... yes
checking for munlockall... yes
checking for pathconf... yes
checking for putenv... yes
checking for regcomp... yes
checking for rmdir... yes
checking for select... yes
checking for setgroups... yes
checking for socket... yes
checking for statfs... yes
checking for strchr... yes
checking for strcoll... yes
checking for strerror... yes
checking for strsep... yes
checking for strtol... yes
checking for strtoull... yes
checking for setprotoent... yes
checking for setspent... yes
checking for endprotoent... yes
checking for vsnprintf... yes
checking for snprintf... yes
checking for setsid... yes
checking for setgroupent... no
checking for seteuid... yes
checking for setegid... yes
checking for setenv... yes
checking for setpgid... yes
checking for siginterrupt... yes
checking for tzset... yes
checking for uname... yes
checking for unsetenv... yes
checking for setpassent... no
checking for struct cmsgcred.cmcred_uid... no
checking for struct sockcred.sc_uid... no
checking for struct sockaddr_in.sin_len... no
checking whether struct addrinfo is defined... yes
checking whether struct sockaddr_storage is defined... yes
checking whether ss_family is defined... yes
checking whether ss_len is defined... no
checking whether __ss_len is defined... no
checking sys/acl.h usability... yes
checking sys/acl.h presence... yes
checking for sys/acl.h... yes
checking acl/libacl.h usability... yes
checking acl/libacl.h presence... yes
checking for acl/libacl.h... yes
checking which POSIX ACL implementation to use... Linux
checking for perm_copy_fd in -lacl... yes
checking which sendfile() implementation to use... Linux
checking sys/sendfile.h usability... yes
checking sys/sendfile.h presence... yes
checking for sys/sendfile.h... yes
checking whether setgrent returns void... yes
checking for initscr in -lcurses... yes
checking for initscr in -lncurses... yes
checking for setproctitle... no
checking libutil.h usability... no
checking libutil.h presence... no
checking for libutil.h... no
checking for setproctitle in -lutil... no
checking sys/pstat.h usability... no
checking sys/pstat.h presence... no
checking for sys/pstat.h... no
checking whether __progname and __progname_full are available... yes
checking which argv replacement method to use... writeable
checking whether printf supports %llu format... yes
checking for duplicate module build requests... no
checking whether linking with OpenSSL functions succeeds... no
checking whether linking with OpenSSL functions requires -ldl... yes
checking whether linking with OpenSSL functions requires -lz... yes
configure: creating ./config.status
config.status: creating include/Makefile
config.status: creating lib/Makefile
config.status: creating locale/Makefile
config.status: creating modules/Makefile
config.status: creating src/Makefile
config.status: creating src/prxs
config.status: creating src/ftpdctl.8
config.status: creating src/proftpd.8
config.status: creating src/xferlog.5
config.status: creating tests/Makefile
config.status: creating utils/Makefile
config.status: creating utils/ftpcount.1
config.status: creating utils/ftpscrub.8
config.status: creating utils/ftpshut.8
config.status: creating utils/ftptop.1
config.status: creating utils/ftpwho.1
config.status: creating Makefile
config.status: creating Make.rules
config.status: creating config.h
config.status: executing libtool commands
config.status: executing default commands
=== configuring in contrib/mod_sftp (/usr/local/src/proftpd-1.3.3f/contrib/mod_sftp)
configure: running /bin/sh ./configure '--prefix=/usr/local' '--enable-openssl' '--with-modules=mod_sftp:mod_tls:mod_ldap:mod_quotatab' --cache-file=/dev/null --srcdir=.
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for AIX... no
checking for library containing strerror... none required
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking for ANSI C header files... (cached) yes
checking for stdlib.h... (cached) yes
checking for unistd.h... (cached) yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking whether OpenSSL has crippled AES support... no
checking whether OpenSSL supports SHA256... yes
checking whether OpenSSL supports SHA512... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating mod_sftp.h

 makeの進行状況は下記のとおりです。

echo \#define BUILD_STAMP \"`date +"%a %b %e %Y %H:%M:%S %Z"`\" > include/buildstamp.h
cd lib/ && make lib
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/lib' に入ります
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c pr_fnmatch.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c sstrncpy.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c strsep.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c vsnprintf.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c glibc-glob.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c glibc-hstrerror.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c glibc-mkstemp.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c pr-syslog.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c pwgrent.c
ar rc libsupp.a pr_fnmatch.o sstrncpy.o strsep.o vsnprintf.o glibc-glob.o glibc-hstrerror.o glibc-mkstemp.o pr-syslog.o pwgrent.o
ranlib libsupp.a
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/lib' から出ます
cd src/ && make src
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/src' に入ります
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c main.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c timers.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c sets.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c pool.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c privs.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c str.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c table.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c regexp.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c dirtree.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c expr.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c support.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c netaddr.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c inet.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c child.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c parser.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c log.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c lastlog.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c xferlog.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c bindings.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c netacl.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c class.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c scoreboard.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c help.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c feat.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c netio.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c cmd.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c response.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c data.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c modules.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c display.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c auth.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c fsio.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mkhome.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c ctrls.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c event.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c var.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c throttle.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c session.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c trace.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c encode.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c proctitle.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c filter.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c pidfile.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c env.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c version.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c wtmp.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c ftpdctl.c
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/src' から出ます
cd modules/ && make static
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/modules' に入ります
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_core.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_xfer.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_auth_unix.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_auth_file.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_auth.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_ls.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_log.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_site.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_delay.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_facts.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_ident.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_tls.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_ldap.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_quotatab.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_cap.c
srcdir=. ./glue.sh mod_core.o mod_xfer.o mod_auth_unix.o mod_auth_file.o mod_auth.o mod_ls.o mod_log.o mod_site.o mod_delay.o mod_facts.o mod_ident.o mod_sftp.o mod_tls.o mod_ldap.o mod_quotatab.o mod_cap.o
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c module_glue.c
make[2]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/contrib/mod_sftp' に入ります
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c mod_sftp.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c msg.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c packet.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c cipher.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c mac.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c compress.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c kex.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c keys.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c crypto.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c utf8.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c session.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c service.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c kbdint.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c auth-hostbased.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c auth-kbdint.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c auth-password.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c auth-publickey.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c auth.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c disconnect.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c rfc4716.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c keystore.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c channel.c
channel.c:88: 警告: this decimal constant is unsigned only in ISO C90
channel.c: In function ‘handle_channel_window_adjust’:
channel.c:1108: 警告: this decimal constant is unsigned only in ISO C90
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c blacklist.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c interop.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c tap.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c fxp.c
gcc -DHAVE_CONFIG_H -DLINUX -I. -I../.. -I../../include -O2 -Wall -c scp.c
ar rc mod_sftp.a mod_sftp.o mod_sftp.o msg.o packet.o cipher.o mac.o compress.o kex.o keys.o crypto.o utf8.o session.o service.o kbdint.o auth-hostbased.o auth-kbdint.o auth-password.o auth-publickey.o auth.o disconnect.o rfc4716.o keystore.o channel.o blacklist.o interop.o tap.o fxp.o scp.o
ranlib mod_sftp.a
make[2]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/contrib/mod_sftp' から出ます
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/modules' から出ます
test -z """" -a -z """" || (cd modules/ && make shared)
test -z """" || (cd locale/ && make locale)
/bin/sh ./libtool --mode=link --tag=CC gcc -L./lib -o proftpd src/main.o src/timers.o src/sets.o src/pool.o src/privs.o src/str.o src/table.o src/regexp.o src/dirtree.o src/expr.o src/support.o src/netaddr.o src/inet.o src/child.o src/parser.o src/log.o src/lastlog.o src/xferlog.o src/bindings.o src/netacl.o src/class.o src/scoreboard.o src/help.o src/feat.o src/netio.o src/cmd.o src/response.o src/data.o src/modules.o src/display.o src/auth.o src/fsio.o src/mkhome.o src/ctrls.o src/event.o src/var.o src/throttle.o src/session.o src/trace.o src/encode.o src/proctitle.o src/filter.o src/pidfile.o src/env.o src/version.o src/wtmp.o modules/mod_core.o modules/mod_xfer.o modules/mod_auth_unix.o modules/mod_auth_file.o modules/mod_auth.o modules/mod_ls.o modules/mod_log.o modules/mod_site.o modules/mod_delay.o modules/mod_facts.o modules/mod_ident.o modules/mod_cap.o modules/mod_quotatab.o modules/mod_ldap.o modules/mod_tls.o modules/module_glue.o contrib/mod_sftp/mod_sftp.a -lsupp -lcrypt -ldl -ldl -lz -lssl -lcrypto -lssl -lcrypto -lcap -lldap -llber -lssl -lcrypto
libtool: link: gcc -o proftpd src/main.o src/timers.o src/sets.o src/pool.o src/privs.o src/str.o src/table.o src/regexp.o src/dirtree.o src/expr.o src/support.o src/netaddr.o src/inet.o src/child.o src/parser.o src/log.o src/lastlog.o src/xferlog.o src/bindings.o src/netacl.o src/class.o src/scoreboard.o src/help.o src/feat.o src/netio.o src/cmd.o src/response.o src/data.o src/modules.o src/display.o src/auth.o src/fsio.o src/mkhome.o src/ctrls.o src/event.o src/var.o src/throttle.o src/session.o src/trace.o src/encode.o src/proctitle.o src/filter.o src/pidfile.o src/env.o src/version.o src/wtmp.o modules/mod_core.o modules/mod_xfer.o modules/mod_auth_unix.o modules/mod_auth_file.o modules/mod_auth.o modules/mod_ls.o modules/mod_log.o modules/mod_site.o modules/mod_delay.o modules/mod_facts.o modules/mod_ident.o modules/mod_cap.o modules/mod_quotatab.o modules/mod_ldap.o modules/mod_tls.o modules/module_glue.o -L/usr/local/src/proftpd-1.3.3f/lib contrib/mod_sftp/mod_sftp.a -lsupp -lcrypt -ldl -lz -lcap -lldap -llber -lssl -lcrypto
contrib/mod_sftp/mod_sftp.a(fxp.o): In function `fxp_handle_create':
fxp.c:(.text+0x9c0b): warning: the use of `mktemp' is dangerous, better use `mkstemp'
cd utils/ && make utils
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/utils' に入ります
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c ftpcount.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c scoreboard.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c misc.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c ftpscrub.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c ftpshut.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c ftptop.c
gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c ftpwho.c
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/utils' から出ます
gcc -L./lib -o ftpcount utils/ftpcount.o utils/scoreboard.o utils/misc.o -lsupp -lcrypt -ldl -ldl -lz
gcc -L./lib -o ftpdctl src/ftpdctl.o src/pool.o src/str.o src/netaddr.o src/log.o src/ctrls.o -lsupp -lcrypt -ldl -ldl -lz -lssl -lcrypto -lssl -lcrypto -lcap -lldap -llber -lssl -lcrypto
gcc -L./lib -o ftpscrub utils/ftpscrub.o utils/scoreboard.o utils/misc.o -lsupp -lcrypt -ldl -ldl -lz
gcc -L./lib -o ftpshut utils/ftpshut.o -lsupp -lcrypt -ldl -ldl -lz
gcc -L./lib -o ftptop utils/ftptop.o utils/scoreboard.o utils/misc.o -lncurses -lsupp -lcrypt -ldl -ldl -lz
gcc -L./lib -o ftpwho utils/ftpwho.o utils/scoreboard.o utils/misc.o -lsupp -lcrypt -ldl -ldl -lz

 make installの進行状況は下記のとおりです。

cd lib/ && make lib
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/lib' に入ります
make[1]: `lib' に対して行うべき事はありません.
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/lib' から出ます
cd src/ && make src
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/src' に入ります
make[1]: `src' に対して行うべき事はありません.
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/src' から出ます
cd modules/ && make static
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/modules' に入ります
make[2]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/contrib/mod_sftp' に入ります
ar rc mod_sftp.a mod_sftp.o mod_sftp.o msg.o packet.o cipher.o mac.o compress.o kex.o keys.o crypto.o utf8.o session.o service.o kbdint.o auth-hostbased.o auth-kbdint.o auth-password.o auth-publickey.o auth.o disconnect.o rfc4716.o keystore.o channel.o blacklist.o interop.o tap.o fxp.o scp.o
ranlib mod_sftp.a
make[2]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/contrib/mod_sftp' から出ます
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/modules' から出ます
test -z """" -a -z """" || (cd modules/ && make shared)
test -z """" || (cd locale/ && make locale)
/bin/sh ./libtool --mode=link --tag=CC gcc -L./lib -o proftpd src/main.o src/timers.o src/sets.o src/pool.o src/privs.o src/str.o src/table.o src/regexp.o src/dirtree.o src/expr.o src/support.o src/netaddr.o src/inet.o src/child.o src/parser.o src/log.o src/lastlog.o src/xferlog.o src/bindings.o src/netacl.o src/class.o src/scoreboard.o src/help.o src/feat.o src/netio.o src/cmd.o src/response.o src/data.o src/modules.o src/display.o src/auth.o src/fsio.o src/mkhome.o src/ctrls.o src/event.o src/var.o src/throttle.o src/session.o src/trace.o src/encode.o src/proctitle.o src/filter.o src/pidfile.o src/env.o src/version.o src/wtmp.o modules/mod_core.o modules/mod_xfer.o modules/mod_auth_unix.o modules/mod_auth_file.o modules/mod_auth.o modules/mod_ls.o modules/mod_log.o modules/mod_site.o modules/mod_delay.o modules/mod_facts.o modules/mod_ident.o modules/mod_cap.o modules/mod_quotatab.o modules/mod_ldap.o modules/mod_tls.o modules/module_glue.o contrib/mod_sftp/mod_sftp.a -lsupp -lcrypt -ldl -ldl -lz -lssl -lcrypto -lssl -lcrypto -lcap -lldap -llber -lssl -lcrypto
libtool: link: gcc -o proftpd src/main.o src/timers.o src/sets.o src/pool.o src/privs.o src/str.o src/table.o src/regexp.o src/dirtree.o src/expr.o src/support.o src/netaddr.o src/inet.o src/child.o src/parser.o src/log.o src/lastlog.o src/xferlog.o src/bindings.o src/netacl.o src/class.o src/scoreboard.o src/help.o src/feat.o src/netio.o src/cmd.o src/response.o src/data.o src/modules.o src/display.o src/auth.o src/fsio.o src/mkhome.o src/ctrls.o src/event.o src/var.o src/throttle.o src/session.o src/trace.o src/encode.o src/proctitle.o src/filter.o src/pidfile.o src/env.o src/version.o src/wtmp.o modules/mod_core.o modules/mod_xfer.o modules/mod_auth_unix.o modules/mod_auth_file.o modules/mod_auth.o modules/mod_ls.o modules/mod_log.o modules/mod_site.o modules/mod_delay.o modules/mod_facts.o modules/mod_ident.o modules/mod_cap.o modules/mod_quotatab.o modules/mod_ldap.o modules/mod_tls.o modules/module_glue.o -L/usr/local/src/proftpd-1.3.3f/lib contrib/mod_sftp/mod_sftp.a -lsupp -lcrypt -ldl -lz -lcap -lldap -llber -lssl -lcrypto
contrib/mod_sftp/mod_sftp.a(fxp.o): In function `fxp_handle_create':
fxp.c:(.text+0x9c0b): warning: the use of `mktemp' is dangerous, better use `mkstemp'
cd utils/ && make utils
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/utils' に入ります
make[1]: `utils' に対して行うべき事はありません.
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/utils' から出ます
/usr/bin/install -c -s -o root -g root -m 0755 proftpd /usr/local/sbin/proftpd
if [ -f /usr/local/sbin/in.proftpd ] ; then \
rm -f /usr/local/sbin/in.proftpd ; \
fi
ln -s proftpd /usr/local/sbin/in.proftpd
chown -h root:root /usr/local/sbin/in.proftpd
test -z """" -a -z """" -a -z "contrib/mod_sftp" || (cd modules/ && make install)
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/modules' に入ります
test -z """" || /bin/sh ../libtool --mode=install --tag=CC /usr/bin/install -c -s -o root -g root -m 0755 "" /usr/local/libexec
make[2]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/contrib/mod_sftp' に入ります
/usr/bin/install -c -o root -g root -m 0644 dhparams.pem /usr/local/etc/dhparams.pem
/usr/bin/install -c -o root -g root -m 0644 blacklist.dat /usr/local/etc/blacklist.dat
if [ -f mod_sftp.la ] ; then \
/bin/sh ../../libtool --mode=install --tag=CC /usr/bin/install -c -s -o root -g root -m 0755 mod_sftp.la /usr/local/libexec ; \
fi
make[2]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/contrib/mod_sftp' から出ます
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/modules' から出ます
/usr/bin/install -c -s -o root -g root -m 0755 ftpcount /usr/local/bin/ftpcount
/usr/bin/install -c -s -o root -g root -m 0755 ftpdctl /usr/local/bin/ftpdctl
/usr/bin/install -c -s -o root -g root -m 0755 ftpscrub /usr/local/sbin/ftpscrub
/usr/bin/install -c -s -o root -g root -m 0755 ftpshut /usr/local/sbin/ftpshut
/usr/bin/install -c -s -o root -g root -m 0755 ftptop /usr/local/bin/ftptop
/usr/bin/install -c -s -o root -g root -m 0755 ftpwho /usr/local/bin/ftpwho
/usr/bin/install -c -o root -g root -m 0755 src/prxs /usr/local/bin/prxs
if [ ! -f /usr/local/etc/proftpd.conf ] ; then \
/usr/bin/install -c -o root -g root -m 0644 \
./sample-configurations/basic.conf \
/usr/local/etc/proftpd.conf ; \
fi
/usr/bin/install -c -o root -g root -m 0644 ./src/ftpdctl.8 /usr/local/share/man/man8
/usr/bin/install -c -o root -g root -m 0644 ./src/proftpd.8 /usr/local/share/man/man8
/usr/bin/install -c -o root -g root -m 0644 ./utils/ftpscrub.8 /usr/local/share/man/man8
/usr/bin/install -c -o root -g root -m 0644 ./utils/ftpshut.8 /usr/local/share/man/man8
/usr/bin/install -c -o root -g root -m 0644 ./utils/ftpcount.1 /usr/local/share/man/man1
/usr/bin/install -c -o root -g root -m 0644 ./utils/ftptop.1 /usr/local/share/man/man1
/usr/bin/install -c -o root -g root -m 0644 ./utils/ftpwho.1 /usr/local/share/man/man1
/usr/bin/install -c -o root -g root -m 0644 ./src/xferlog.5 /usr/local/share/man/man5
cd lib/ && make install
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/lib' に入ります
make[1]: `install' に対して行うべき事はありません.
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/lib' から出ます
/usr/bin/install -c -o root -g root -m 0644 config.h /usr/local/include/proftpd/config.h
cd include/ && make install
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/include' に入ります
make[1]: ディレクトリ `/usr/local/src/proftpd-1.3.3f/include' から出ます
/usr/bin/install -c -o root -g root -m 0644 proftpd.pc /usr/local/lib/pkgconfig/proftpd.pc
test -z """" || (cd locale/ && make install)

●インストール(CentOS 7)

 LDAPとも連携をしたいのでproftpd-ldapもインストールします。
# yum install install proftpd proftpd-ldap
 LDAPの設定は「●ldap上のアカウントを使用して認証する」を参照してください。
 また、LDAP上のアカウントでログインできない場合、「●SSHでログインできるか確認する」を参照してください。

●設定

 ProFTPD をインストールするとデフォルトの設定ファイルproftpd.confが作成されます。ProFTPDの実行にはこの設定ファイルを使います。
インストール方法によりディレクトリが異なるので読み替えること
※ソースからインストールした場合
# vi /usr/local/etc/proftpd.conf
※パッケージでインストールした場合
# vi /etc//proftpd.conf
# This is a basic ProFTPD configuration file (rename it to 
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.
#ServerName			"ProFTPD Default Installation" ← コメントアウト
#ServerName			"ProFTPD Server" ← サーバ接続時に表示される
ServerIdent                     on "BIGBANG ProFTPD Server"
 ↑ 「ServerName」ではProftpdのバージョンが表示されてしまうので、この方法を選択
ServerType			standalone
DefaultServer			on
# Port 21 is the standard FTP port.
Port				21
# Don't use IPv6 support by default.
UseIPv6				off
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask				022
# 場合によっては下記の設定の方がよいかも
# Umask				077
# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances			30
# Set the user and group under which the server will run.
User				nobody
#Group				nogroup ← コメントアウト
Group				nobody
 ↑ nogroupグループは存在しないためnobodyグループに変更
# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~
DefaultRoot ~ !wheel
 ↑ wheelグループ以外のユーザにはホームディレクトリ以下だけアクセスを許可
# Normally, we want files to be overwriteable.
AllowOverwrite		on
# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
  DenyAll
</Limit>
MasqueradeAddress www.bigbang.dyndns.org
 ↑ Passiveモードでクライアントに知らせるサーバーのIPアドレス(ホスト名)
PassivePorts 65500 65535 ← Passiveモードで使用するポート番号の最小値と最大値
UseReverseDNS off ← DNSの逆引きをしない。時間短縮にはさほど効果なし
IdentLookups off ← リモートユーザー名を確認しない。時間短縮に効果絶大
ListOptions “-a” ← LIST コマンドオプション(ドットファイルを見せる場合)
TimesGMT off ← 日本時間を表示する
##### 詳細ログの取得設定 ここから #####
##### 新たにログを出力するよう設定した場合、ローテーションの設定も変更すること #####
##### # mkdir /var/log/proftpd としてディレクトリを作成する(存在する場合は不要) #####
LogFormat allinfo "%t :  %u (%a [%h]) : [%s], %T, %m (%f)"
LogFormat write "%t : %u : %F (%a)"
LogFormat read "%t : %u : %F (%a)"
LogFormat auth "%t : %u (%a [%h])"
Systemlog /var/log/proftpd/proftpd.log ← /var/log/messagesから変更
ExtendedLog /var/log/proftpd/xferlog ALL allinfo
ExtendedLog /var/log/proftpd/writelog WRITE write
ExtendedLog /var/log/proftpd/readlog  READ read
ExtendedLog /var/log/proftpd/authlog AUTH auth
##### 詳細ログの取得設定 ここまで #####
<IfModule mod_tls.c>
  TLSEngine on ← TLS接続を行う
  TLSLog /var/log/proftpd.log ← ログファイルを指定する
  TLSProtocol SSLv23 ← SSL/TLSプロトコルのバージョンを指定する
  TLSCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
 ↑ 暗号化方式を設定する
  TLSRequired on ← TLS接続のみ行う
  TLSVerifyClient off ← クライアント証明書を使用しない
  TLSRSACertificateFile /usr/local/etc/ssl.crt/server.crt ← 証明書を指定する
  TLSRSACertificateKeyFile /usr/local/etc/ssl.key/server.key ← 秘密鍵を指定する
</IfModule>
##### LDAPとの連携関連 ここから #####
LDAPServer 127.0.0.1
LDAPDNInfo cn=Manager,dc=bigbang,dc=dyndns,dc=org *********
LDAPDoAuth on "dc=bigbang,dc=dyndns,dc=org"
CreateHome on skel /etc/skel
##### LDAPとの連携関連 ここまで #####
# A basic anonymous configuration, no upload directories.  If you do not
# want anonymous users, simply delete this entire <Anonymous> section.
<Anonymous ~ftp> ← Anonymous FTP を許可しない場合は以下をコメントアウト
#  User				ftp
#  Group				ftp
  # We want clients to be able to login with "anonymous" as well as "ftp"
#  UserAlias			anonymous ftp
  # 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
#  DisplayChdir			.message
  # Limit WRITE everywhere in the anonymous chroot
#  <Limit WRITE>
#    DenyAll
#  </Limit>
#</Anonymous>
 「proftpd.conf」 に記述ミスがないかをチェックします。
# proftpd -t -c /usr/local/etc/proftpd.conf 
Checking syntax of configuration file
Syntax check complete.

●その他の設定

Anonymous FTPの設定方法

 Turbolinux 11 Server の /etc/proftpd.conf には、すでに匿名 FTP サイトを公開するための設定がコメントとして記述されています。以下のように、<Anonymous ~ftp>と</Anonymous>で囲まれた箇所が匿名FTPサイトを公開するための記述です。ただし、初期設定では匿名FTPサイトは機能していません。解説する手順に従い、匿名FTPサイトを有効にする必要があります。
<Anonymous ~ftp>
  User                          ftp
  Group                         ftp
  AccessGrantMsg                "Anonymous login ok, restrictions apply."
  RequireValidShell             off
  UserAlias                     anonymous ftp
  MaxClients                    10 "Sorry, max %m users -- try again later"
  DisplayLogin                  /welcome.msg
  DisplayFirstChdir             .message
  DisplayReadme                 README*
  DirFakeUser                   on ftp
  DirFakeGroup                  on ftp
  <Limit WRITE SITE_CHMOD>
    DenyAll
  </Limit>
  WtmpLog                       off
  ExtendedLog           /var/log/proftpd/access.log WRITE,READ default
  ExtendedLog           /var/log/proftpd/auth.log AUTH auth
</Anonymous>
 匿名FTPサイトを有効にするには、上記行のコメント記号(#)削除します。次にRequireValidShellディレクティブの値をoffとして追記します。
RequireValidShell     off
 次に変更を反映するためにproftpdを再起動します。
# /etc/init.d/proftpd restart
 これで、匿名FTP  サイトへのアクセスが有効になりました。FTPクライアントで匿名FTPサーバーへログインするには、ユーザー名にanonymousまたはftp、パスワードには慣例としてE-mailアドレスを入力します。以下は、lftpクライアントでログインした例です。
$ lftp ftp@ftp.example.com
Password:
drwxr-xr-x   4 ftp      ftp          4096 Nov  6 06:00 .
drwxr-xr-x   4 ftp      ftp          4096 Nov  6 06:00 ..
drwxr-xr-x   2 ftp      ftp          4096 Oct 19 10:59 pub
d-wx-wx--x   2 ftp      ftp          4096 Nov 14 00:52 uploads
-rw-r--r--   1 ftp      ftp           224 Jun 19 09:34 welcome.msg
 ユーザーのログインディレクトリは、/var/ftpとなります。proftpdは、このディレクトリにchrootするため、匿名FTPサイトにログインしたユーザーは、/var/ftpディレクトリがルートディレクトリに見えます。
 もし、匿名FTPサイトだけを提供したいのであれば、server configコンテキストに以下のLimitディレクティブを記述します。
<Limit LOGIN>
 DenyAll
</Limit>
 次に、Anonymousディレクティブ内に以下のLimitディレクティブを記述します。
<Limit LOGIN>
  AllowAll
</Limit>
 これにより、Turbolinux 11 Serverにアカウントを持つユーザーであっても、自分のホームディレクトリへのログインは拒否されるようになります。
 その他、Anonymousディレクティブで使用されているディレクティブの意味は以下の通りです。

Anonymous root-directory
 匿名FTPサイトとして公開するルートディレクトリをroot-directoryに指定します。~を記述した場合は、続くユーザーのホームディレクトリを意味します。この例では、~ftpと指定されていますので、ftpユーザーのホームディレクトリをあらわします。Turbolinux 11 Serverの/etc/passwdファイルには以下のように記述されているため、/var/ftpディレクトリが匿名FTPサイトのルートディレクトリとなります。
    ftp:x:14:50:FTP User:/var/ftp:

User userid / Group groupid
 ProFTPDのサーバープロセスを実行するユーザーとグループを指定します。この例では、ftpと指定されていますので、ユーザーが匿名FTPユーザーでログインすると、proftpdデーモンのUIDとGIDはftpに切り替わります。

UserAlias login-user userid
 システムに存在するユーザーに対するエイリアスを指定することができます。login-userで指定したユーザー名でFTPサーバーにログインすると、あたかも実際のユーザーであるuseridでログインしたかのように動作します。この例では、ftpユーザーに anonymousというエイリアスを定義していますので、anonymousユーザーで匿名FTPサイトへログインできるようになります。

RequireValidShell on|off
 ProFTPDの初期設定では、ユーザーのログインシェルが/etc/passwdに設定されていなければログインを拒否しますが、この設定をoffにするとログインは許可されます。匿名FTPサイトを有効にするには記述します。

MaxClients number|none [message]
 Anonymous FTPサーバーへログインすることが可能なクライアントの最大数を指定しています。Turbolinux 11 Serverの初期設定では、10が指定されています。この数を超えるクライアントがログインを試みたときには、以下のメッセージを表示し切断します。
    Sorry, max 10 users -- try again later

DisplayLogin filename
 ユーザーがログインしたときに表示するメッセージを記述したテキストファイル名を指定します。初期設定は、/var/ftp/welcome.msgです。

DisplayFirstChdir filename
 ディレクトリを変更したときに表示するメッセージを記述したテキストファイル名を指定します。初期設定は、.messageです。

Limit command [command2 ..]
 Limitディレクティブは、FTPコマンドにアクセス制限をかけるために使用します。この例では、ディレクトリへの書き込みを完全に拒否する設定をしています。

/var/ftp/uploadsディレクトリについて

 匿名FTPサイトを有効にすると、Anonymousディレクティブの指定に従い、ftpユーザーのホームディレクトリ/var/ftpがルートディレクトリとして公開されます。Turbolinux 11 Serverでは、このディレクトリに以下2つのディレクトリがあらかじめ存在しています。
drwxr-xr-x 2 root root 4096 2007-10-19 19:59 pub/
d-wx-wx--x 2 ftp  ftp  4096 2007-11-14 09:52 uploads/
 この中で、uploadsディレクトリは、匿名FTPユーザーにファイルのアップロードを許可するディレクトリとして使用されることがあります。一般的には、不特定多数のユーザーにファイルのアップロードを許可することはありませんが、必要に応じて、このディレクトリを利用することも可能です。Turbolinux 11 Serverの初期設定では、以下の記述がコメントとして用意されています。アップロードを許可するには、<Directory uploads/*>から</Limit>のコメント記号を削除します。
<Anonymous ~ftp>
省略...
  <Limit WRITE>
    DenyAll
  </Limit>
  <Directory uploads/*>
    AllowOverwrite              no
    <Limit READ>
      DenyAll
    <</Limit>
    <Limit STOR>
      AllowAll
    </Limit>
  </Directory>
</Anonymous>
 <Directory uploads/*>>でuploadsディレクトリに対する設定を行うことを定義しています。そして、このDirectoryディレクティブのLimitディレクティブでは、ファイルの読み出しを行うFTPコマン(READ)を全て拒否しています。しかし、次のLimitディレクティブでファイルのアップロード(STOR)に関するコマンドを許可しています。したがって、この設定例では、匿名FTPユーザーがuploadsディレクトリへファイルをアップロードすることを可能にしますが、uploadsディレクトリにアップロードされたファイルを読み出す権限までは与えていないことになります。

アクセスユーザの制限

 localhostと192.168.0.0/24, 192.168.1.0/24からのみアクセスを許可し、それ以外は拒否するように設定。
<Limit LOGIN>
 Order allow, deny
  Allow from 127.0.0.1, 192.168.0.0/24, 192.168.1.0/24
  Deny from all
</Limit LOGIN>

Resume機能のサポート

 大きなサイズのファイルのダウンロードやアップロード中に回線断等のトラブルにより転送が中断してしまった場合、クライアントがサポートしていれば、中断点から再開できるのが、Resume機能です。ダウンロードはデフォルトで機能が有効になっていますが、アップロードは無効になっています。有効にしたい場合は下記設定を追加します。
 ただし、アップロードを許可すると言うことは、RESTコマンドによって再開するので、クライアントのオペミス(同一名称のままアップロード)で、先に保存されたファイルが壊れたりすることがあります。特にanonymousでは絶対に使用しないほうが良いでしょう。
# Allow clients to resume downloads (default on)
AllowRetrieveRestart on
# Allow clients to resume uploads (default off)
AllowStoreRestart on

アップロード中断ファイルの自動削除

 大きなファイルをアップロードすることがない場合は意味がありませんが、アップロード中に回線断等ではなく、クライアント操作で転送を中断(ABORコマンドによる中断)した場合に、下記設定をしておくと中途半端なファイルを自動的に削除します。上記のAllowStoreRestartとは背反です。
# Enable automatic deletion of partially uploaded files (default off)
DeleteAbortedStores on

同一ホストからの同時接続数の制限

 ダウンロードツール等を使用した場合、複数セッションを設定して高速でダウンロードできるようになりますが、特定ユーザに細い回線を占有されてしまいます。これを制限するのが下記の設定で、数字は同時接続数で、デフォルトは無制限です。制限されたときは、下記メッセージが返送されます。
# The maximum number of clients allowed to connect per host.(default none: no limit)
MaxClientsPerHost 1
[デフォルトメッセージ]
 Results in: 530 Sorry, the maximum number clients (%m)
                         from your host are already connected.
 (%mは制限値)

アップロードファイル容量の制限

 アップロードを許可している場合、大容量のファイルをアップロードや、anonymousによるいたずらを防止することができます。最悪はHDDを使い切ってシステムロックすることも考えられますので、設定しておいたほうが良いでしょう。
 ただし、この設定で制限できるのはファイルの大きさだけなので、quotaでHDDの使用量制限を併用することを推奨します。なお、ダウンロードの制限もMaxRetrieveFileSizeで可能ですが、あまり意味はありません。
 下記の上の例は全てを3MByteに制限する例であり、下の例はanonymousのみ50KByteに制限する例である。単位は、"Gb"、"Mb"、"Kb"、"B"(bytes)です。
# Restrict upload to only 3 megabytes
MaxStoreFileSize 3 Mb
# Restrict anonymous uploads to 50k, but allow unlimited upload size for everyone else
MaxStoreFileSize 50 Kb user anonymous
MaxStoreFileSize *

タイマ関係の設定

 タイマ関係としては、以下が設定可能ですが、家庭内で使用するには基本的にデフォルト値で問題ないなので、特に追加記述は不要です。各自の動作環境を想定して変更すると良い。変更する場合は、TimeoutStalledで、ストール(止まった)したままでいつまでも繋いでおく必要もないので、10分(600)程度で自動切断する方がよい。トータル時間を制限するなら、TimeoutSessionを指定することにより、転送の遅いユーザを切断することもできます。
 なお、ここで無制限としても、巨大なファイルを細い回線で時間をかけて転送している場合、転送が切れてしまう(転送完了後に切断されることが多いはず)ことがある。これは、クライアントの実装にもよりますが、データ転送中は制御コネクションにデータが流れないためルータのNATテーブルが消えてしまうことから発生します。制御コネクションのKeepaliveとしてNOOPコマンドを投げているクライアントもあります。
  • TimeoutIdle(default:600)--制御・データコネクションのいずれかからもデータを全く受け取らないまま、接続を維持している時間。
  • TimeoutLogin(default:300)--クライアントが認証に最大何秒間費やせるかを指定。
  • TimeoutNoTransfer(default:600)--認証後に、データ転送(ファイル転送やリストを取得)をしないで、最大何秒間接続していられるかを指定。
  • TimeoutSession(default:none)--認証後に、制御コネクションを保持している時間を指定。デフォルトは無制限。
  • TimeoutStalled(default:0 {no limit})-- サーバとFTPクライアント間で、実際のデータ転送をしない(つまり、止まったまま)で最大何秒間データコネクションを維持していられるかを指定。デフォルトは無制限の"0"。
# Sets the idle connection timeout (default: 600)
TimeoutIdle 600
# Sets the login timeout (default: 300)
TimeoutLogin 300 
#  Sets the connection without transfer timeout (default: 600)
TimeoutNoTransfer 600
# Sets a timeout for an entire session (default: none)
TimeoutSession none
# Sets the timeout on stalled downloads (default: 0 {no limit})
TimeoutStalled 600 

転送量の制御

 従来、転送量の制御は、RateRead*とRateWrite*で行えるようになっていましたが、1.2.8rc1から本ディレクティブは廃止されTransferRate というディレクティブに変更、集約されました。
 TransferRateディレクティブのパラメータは以下のとおりであり、コンテキストはserver config、<VirtualHost>、<Global>、<Anonymous>、<Directory>、.ftpaccessなので、制御単位に合わせて適宜設定します。
TransferRate [ cmds] [ kilobytes-per-sec[:free-bytes]] [ ["user"|"group"|"class" expression]]
  • cmds -- 制御対象のコマンドを指定する。対象コマンドは、RETR、STOR、STOU、APPEであり、複数指定する場合は「,」区切りで記述する。ダウンロード系は「RETR」を、アップロード系は「STOR,STOU,APPE」とすればよい。
  • kilobytes-per-sec -- 読んで字のごとく、転送制御量をKByte/s単位で指定する。
  • free-bytes -- 本パラメータは、「kilobytes-per-sec」に続けて、「:1024」のようにコロンを挟んで指定する。このパラメータが指定されていると、ここで指定した容量まではkilobytes-per-sec による転送量制御が効かなくなる。一般的には、転送量制御は大きなファイルの転送を平均化するのが目的のため、このパラメータで小さなファイルは一気に送ってしまうことができる。
  • "user"|"group"|"class" expression -- 転送量制御の対象を、user、group、class で指定する。それぞれ、後ろに対象を記述する。「group !wheel」とすれば、wheel グループ以外が対象となる。classについては、別途 class ディレクティブで対象を指定する。
 下記設定例では、ダウンロードにおいてwheelグループ以外は、5KByte/sに転送量を制限されますが、1Kbyte以下のファイルはこの限りではないとなります。
 TransferRate RETR 5.0:1024 group !wheel
[ Class ディレクティブ]

 Class ディレクティブは、server configに下記のように記述します。
Class [ "name" limit|regex|ip value]
  • name -- クラスを識別するための適当な名前を指定
  • limit value -- コネクションの最大数を指定。(デフォルト:100)
  • regex value -- このクラスとして扱うホスト名を指定。ワイルドカード可。
  • ip value -- このクラスとして扱うネットワークを IP/ネットマスクで指定
 下記の例では、localとdefaultの二つのクラスを作成しています。この設定では、デフォルトは最大10コネクションしか張れませんが、ホスト名が *.hoge.comで、かつ、アドレスが172.16.1.*の場合、最大100コネクション張れることになります。
Classes on
Class local limit 100
Class default limit 10
Class local regex *.hoge.com
Class local ip 172.16.1.0/24

帯域の制御

 下記の設定例では、/tmp/frpdir2ディレクトリ内のファイルをダウンロードしようとすると、おおよそ最大1000KByte/sに制限されます。
<Directory /tmp/frpdir2>
  TransferRate RETR 1000
</Directory>
 下記の設定例では、wheelグループ以外は最大5KByte/sに制限されますが、1kbyte以下のファイルはこの限りではないということを示します。
TransferRate RETR 5.0:1024 group !wheel


●サーバ証明書の作成

 ProFTPDのSSL/TLS暗号化通信を有効にするために必要なサーバ証明書を作成します。必要なファイルは、CSRファイル(サーバの証明書発行の署名要求)と秘密鍵と証明書ですが、このうちの証明書は自己署名した電子証明書を使うこととします。
 SSL証明書の作成方法は下記を参照してください。
 サーバ証明書の作成

●SSLへの対応

 参考URL:proftpd.confの設定

 /etc/proftpd.confのSSLに関係する設定を下記のようにしました。
# vi /etc/proftpd.conf
(・・途中省略・・)
# TLS (http://www.castaglia.org/proftpd/modules/mod_tls.html)
# SSL/TLSで接続するための設定です
# 静的にmod_tlsを組み込んでいるのでLoadModuleの設定はしていません。
<IfModule mod_tls.c>
# SSL/TLS protocol engineの使用許可
  TLSEngine                     on
# SSL/TLSを強制しない。通常のFTP接続も接続可能。
  TLSRequired                   off
# 証明書と秘密鍵を指定。
  TLSRSACertificateFile         /etc/pki/tls/certs/proftpd.crt
  TLSRSACertificateKeyFile      /etc/pki/tls/certs/server.key
# NoCertRequest:証明書の警告を表示させない。
# NoSessionReuseRequired:SSLセッションの再利用を許可しない。
  TLSOptions      NoCertRequest NoSessionReuseRequired
# SSL/TLS 接続の暗号強度を上げます
  TLSCipherSuite 		HIGH:!ADH:!DES
# SSL/TLSプロトコルバージョンを指定。SSLv3及びTLSv1の両方を許可する互換性モードを指定。
  TLSProtocol                   SSLv23
# TLSv1のみとする場合。
#  TLSProtocol                   TLSv1
  TLSOptions                    NoCertRequest
# クライアント証明書を使用しない。
  TLSVerifyClient               off
# 1つのファイルをデータ転送中にリネゴシエーションを行なわない。
  TLSRenegotiate none
# mod_tlsのログを取得。
  TLSLog                        /var/log/proftpd/tls.log
# TLSSessionCacheをファイルとして設定します。
  <IfModule mod_tls_shmcache.c>
    TLSSessionCache             shm:/file=/var/run/proftpd/sesscache
  </IfModule>
</IfModule>
(・・途中省略・・)
 FFFTPからの接続確認は「●ftps接続の確認」を参照してください。
 また、ファイアーウォールを設定している時はパッシブポートで接続できるように設定してください。

●起動

 ProFTPD の自動起動スクリプトは ProFTPD のソースファイル(contrib/dist/rpm/proftpd.init.d)に含まれています。これを/etc/rc.d/init.d/proftpdファイルとしてコピーします。
# cp contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd
# chmod 755 /etc/rc.d/init.d/proftpd
# chkconfig --add proftpd
# service proftpd start
Starting proftpd: 127.0.0.1 - 127.0.0.1:21 masquerading as 192.168.0.1
                                                           [  OK  ]

●ldap上のアカウントを使用して認証する

 前提条件はldapサーバーが構築済みで、ldapサーバーの設定は以下とします。
ldapサーバーのIPアドレス:192.168.0.1
ldapドメイン名:bigbang.dyndns.org
 /etc/proftpd.confを編集します。
# /etc/proftpd.conf
LDAPServer LDAPサーバーのipアドレス
LDAPDNInfo ldapとのbindに使用するldapユーザー情報 パスワード
LDAPDoAuth on "ldapドメイン名"
例:
LDAPServer 192.168.0.1
LDAPDNInfo uid=admin,ou=Users,dc=bigbang,dc=dyndns,dc=org password
LDAPDoAuth on "dc=bigbang,dc=dyndns,dc=org"
 proftpdを再起動します。
# service proftpd restart
 LDAP上のアカウントでログインできない場合、「●SSHでログインできるか確認する」を参照してください。

ディレクティブ意味
LDAPServer LDAPサーバーのホスト名または IPアアドレスを指定。「10.1.1.15:636」 のような記述も可。スペースで区切り複数のサーバーを指定すると、応答がない場合は記述順に参照する(冗長化)。
LDAPAuthBinds on(default)の場合、接続しようとするユーザーの DN と入力されたパスワードに基づいて認証を行う。off の場合、匿名で全てのユーザー情報を取り出した後、それらの userPasswowrd と、入力されたパスワードをローカルで crypt ハッシュ値で計算して比較する。
LDAPDoAuth on の場合、mod_ldap モジュールを使用して認証を行う(Default off)。2つ目の引数は検索に使用する base suffix を指定、3つ目の引数には検索フィルタを指定。 検索フィルタの Defaultは、(&(uid=%v)(objectclass=posixAccount)) が使用される。
LDAPDoGIDLookups on の場合、グループID を LDAP エントリーの posixGroup から検索する(Default は off)。
LDAPDoUIDLookups on の場合、ユーザーID を LDAP エントリーの posixAccount から検索する(Default は off)。
LDAPDefaultAuthScheme LDAPAuthBinds が off の場合の、パスワードのハッシュ値を指定する。crypt と clear のみ指定可能(Default は crypt)。
LDAPDefaultGID LDAP から gidNumber を取得できなかった場合に、ユーザーに割り当てるグループID。
LDAPDefaultUID LDAP から uidNumber を取得できなかった場合に、ユーザーに割り当てるユーザーID。
LDAPForceDefaultGID on にすると、LDAP から gidNumber を取得できた場合でも、強制的に 「LDAPDefaultGID」 を割り当てる(Default は off)。
LDAPForceDefaultUID on にすると、LDAP から uidNumber を取得できた場合でも、強制的に 「LDAPDefaultUID」 を割り当てる(Default は off)。
CreateHome on の場合、ユーザーのホームディレクトリが存在しない場合に、LDAP エントリーの homeDirectory 属性に従って作成する(Default は off)。「CreateHome on 0755 skel /etc/skel」 のように記述すると、ホームディレクトリのモードを 「0755」、「/etc/skel」 以下のファイルをコピーする。モードの指定をしなければ Default で 0700 になる。skel を指定しなければ、何もコピーされない。
LDAPGenerateHomedir ユーザーのホームディレクトリが存在しない場合に、LDAP エントリーの homeDirectory 属性に従って作成する(Default は off)。但し、「CreateHome」 がなければ作成されない。この 「LDAPGenerateHomedir」 は、LDAP エントリーの homeDirectory の値を適用するために必要なようだが、実際にはこの 「LDAPGenerateHomedir」 がなくても、「CreateHome」 があれば、ホームディレクトリは作成される。


●ログイン時にユーザのホームディレクトリが存在しない場合

 ログインしたユーザのホームディレクトリが存在しない場合、下記のようになります。

CreateHome off のとき
# ftp remotepc
Connected to remotepc (192.168.0.111).
220 BIGBANG ProFTPD Server
Name (remotepc:test1001): test1001
331 Password required for test1001
Password:
530 Login incorrect.
Login failed.
421 Service not available, remote server has closed connection
ftp>
/var/log/messageのログ
Nov 12 21:06:09 remotepc proftpd[3941]: 127.0.0.1 (192.168.0.111[192.168.0.111])
	 - FTP session opened.
Nov 12 21:06:25 remotepc proftpd[3941]: 127.0.0.1 (192.168.0.111[192.168.0.111])
	 - notice: unable to use '~/'
	 [resolved to '/home/test1001/']: No such file or directory
Nov 12 21:06:25 remotepc proftpd[3941]: 127.0.0.1 (192.168.0.111[192.168.0.111])
	 - Preparing to chroot to directory '~/'
Nov 12 21:06:25 remotepc proftpd[3941]: 127.0.0.1 (192.168.0.111[192.168.0.111])
	 - chroot to '~/' failed for user 'test1001': Operation not permitted
Nov 12 21:06:25 remotepc proftpd[3941]: 127.0.0.1 (192.168.0.111[192.168.0.111])
	 - error: unable to set default root directory
Nov 12 21:06:25 remotepc proftpd[3941]: 127.0.0.1 (192.168.0.111[192.168.0.111])
	 - FTP session closed.
CreateHome on のとき
# ftp remotepc
Connected to remotepc (192.168.0.111).
220 BIGBANG ProFTPD Server
Name (remotepc:test1001): test1001
331 Password required for test1001
Password:
230 User test1001 logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
/var/log/messageのログ
Nov 12 21:11:19 nezumi proftpd[4181]: 127.0.0.1 (192.168.0.111[192.168.0.111])
		 - FTP session opened.
Nov 12 21:11:28 nezumi proftpd[4181]: 127.0.0.1 (192.168.0.111[192.168.0.111])
		 - Preparing to chroot to directory '/home/test1001'


●「ホストへの経路がありません」とエラーが表示される

 参考URL:Linuxといろいろ

 ログイン後ディレクトリ内のリストを表示させようとlsコマンドを実行させると下記のようなエラーが表示されます。
ftp> ls
227 Entering Passive Mode (192,168,0,1,255,234).
ftp: connect: ホストへの経路がありません
 下記の対応が必要です。
# modprobe ip_conntrack_ftp
# modprobe ip_nat_ftp
 再起動のたびに、モジュールをロードするのは面倒なので自動でモジュールをロードするためにrc.localを編集します。
# vi /etc/rc.d/rc.local
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp