Net::FTPServer::PWP - The FTP server for PWP (personal web pages) service.
ftpd [-d] [-v] [-p port] [-s] [-S] [-V] [-C conf_file]
Net::FTPServer::PWP is a Net::FTPServer server personality. This personality implements a complete FTP server with special features to support an environment we call PWP.
Net::FTPServer::PWP
What we call PWP (Personal Web Pages) is a particular scenario where possibly millions of users share a pool of "stateless" FTP servers that access filesystems where their personal web pages are stored. In this scenario, it is impractical to assign a unique user-id to each user for permission control. Also, the authentication depends on an external AAA server, which in our case is a RADIUS server.
We based the implementation in the Net::FTPServer framework, which provides complete FTP server functionality. Our architecture is discussed later.
The features provided include:
Directory quotas
Authentication using the RADIUS protocol
Configurable root directory, supplied through the RADIUS server
We chose to implement a direct RADIUS authentication rather than using a service such as PAM, because we wanted to get back from the RADIUS server some of the operational parameters, such as the user quota and the home directory.
For this, we use Vendor-Specific Attributes with an arbitrarily chosen vendor identifier of 582. Of course, you can change this id in the dictionaries involved and the config file, and nobody should complain.
Please take a look at the pwp-dictionary file that was distributed along this module, in order to see the actual attributes used.
This is based on Maildir++. It consist on maintaining a file (.pwpquota by default) with the size of each file in the user's directory. Every time a file is stored in the FTP space, a line is added to the .pwpquota file. The file is invalidated after a number of operations or after a given time period.
.pwpquota
This implementation is gentle to the NFS servers we use in our network to host users' FTP space.
Currently, the recovery of space through the use of DELE commands doesn't work reliably, as the size of the deleted file is not available at the time the quota hook is called. However, a later version will most likely correct this problem.
Net::FTPServer::PWP provides a complete implementation for the FTP server we required for our PWP scenario. It was built by extending the existing Net::FTPServer classes, as follows:
Net::FTPServer::PWP::Server
Inherits from Net::FTPServer. Through the overloading of some key methods, introduces the user authentication and the quota mechanisms.
Net::FTPServer
Net::FTPServer::PWP::FileHandle
Inherits from Net::FTPServer::Full::FileHandle. Does not provide any methods. It's there just for academic completeness.
Net::FTPServer::Full::FileHandle
Net::FTPServer::PWP::DirHandle
Inherits from Net::FTPServer::Full::DirHandle. Overrides the ->delete() method to provide a work-around for a bug found in Darwin.
Net::FTPServer::Full::DirHandle
->delete()
The complete class hierarchy is shown below. The interesting classes or modules, are the ones marked with an asterisk.
Net::FTPServer | + Net::FTPServer::Handle | | | +-Net::FTPServer::PWP::Handle (*) | +-Net::FTPServer::PWP::Server (*) | +-Net::FTPServer::Full | +-Net::FTPServer::Full::Server | +-Net::FTPServer::Full::DirHandle | | | +-Net::FTPServer::PWP::DirHandle (*) | +-Net::FTPServer::Full::FileHandle | +-Net::FTPServer::PWP::FileHandle (*)
Note that Net::FTPServer::PWP::FileHandle and Net::FTPServer::PWP::DirHandle also inherit from Net::FTPServer::PWP::Handle. Net::FTPServer::PWP::Handle inherits from Net::FTPServer::Handle.
Net::FTPServer::PWP::Handle
Net::FTPServer::Handle
This double inheritance is used to implement a jail, similar to the use of chroot(), which prevents users from interacting with files or directories outside their PWP space.
chroot()
A few config file entries have been added. Please see Net::FTPServer::PWP::Server for a detailed discussion on the new entries.
/etc/ftpd.conf
$Id: PWP.pm,v 1.11 2003/04/01 15:50:41 lem Exp $
Original version; created by h2xs 1.21 with options
-ACOXcfkn Net::FTPServer::PWP -v1.00 -b 5.5.0
We can now hide the mount point from the client if instructed to do so in the configuration file.
Varios quota-related changes. See Net::FTPServer::PWP::Server for specific info.
Fixed typo in the docs that was causing POD errors.
Luis Munoz <luismunoz@cpan.org>, Manuel Picone <mpicone@cantv.net>
Copyright (c) 2002, Luis Munoz and Manuel Picone
Net::FTPServer(3), Net::FTPServer::PWP::Server(3), perl(1)
To install Net::FTPServer::PWP::Server, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::FTPServer::PWP::Server
CPAN shell
perl -MCPAN -e shell install Net::FTPServer::PWP::Server
For more information on module installation, please visit the detailed CPAN module installation guide.