⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.pgsql

📁 功能强大的ftp服务器源代码
💻 PGSQL
字号:
       ----------------------- PostgreSQL SUPPORT ------------------------When PostgreSQL is enabled, all account info is fetched from a central Potgresdatabase.To compile the server with PostgreSQL support, you first have to build andinstall the PostgreSQL client libraries. PostgreSQL is freely available fromhttp://www.postgresql.org/ and binary packages are included in many majordistributions. But if you choose a binary form, don't forget to also installthe development packages if they are available separately.Then, configure Pure-FTPd with --with-pgsql and your favorite extra gadgets:    ./configure --with-pgsql --with-cookie --with-throttling --with-ratiosIf your PostgreSQL libraries are installed in a special path, you can specifyit like this:    ./configure --with-pgsql=/opt/pgsqlIn this example, headers (like pgsql.h) will be searched in/opt/pgsql/include and /opt/pgsql/include/pgsql, while related librarieswill be searched in /opt/pgsql/lib and /opt/pgsql/lib/pgsql .Then, install the server as usual:                                 make install ------------------------ PGSQL CONFIGURATION FILE ------------------------           Before running the server, you have to create a configuration file. Why aconfiguration file instead of simple command-line options? you may ask.Because for security reasons, you may want to hide how to connect to yourPostgreSQL server. And as command-line options can be discovered by local users(with 'ps auxwww' for instance), it's more secure to use a configurationfile for sensitive data. Keep it readable only by root (chmod 600) .Here's a sample configuration file:PGSQLServer     localhostPGSQLPort       5432PGSQLUser       rootPGSQLPassword   rootpwPGSQLDatabase   pureftpdPGSQLCrypt      cleartextPGSQLGetPW      SELECT "Password" FROM "users" WHERE "User"='\L'PGSQLGetUID     SELECT "Uid" FROM "users" WHERE "User"='\L'PGSQLGetGID     SELECT "Gid" FROM "users" WHERE "User"='\L'PGSQLGetDir     SELECT "Dir" FROM "users" WHERE "User"='\L'Have a look at the sample pureftpd-pgsql.conf configuration file forexplanations of every keyword.Save the configuration file anywhere. Let's say /etc/pureftpd-pgsql.conf .Then, you have to run the pure-ftpd command with '-l pgsql:' (it's an 'ell'not a 'one') followed by the path of that configuration file. Here's anexample with tcpserver:tcpserver -DHRl0 0 21 /usr/local/bin/pure-ftpd -l pgsql:/etc/pureftpd-pgsql.conf &You can mix different authentication methods. For instance, if you want touse system (/etc/passwd) accounts when an account is not found in a PostgreSQLdatabase, use -l pgsql:/etc/pureftpd-pgsql.conf -l unix     ------------------------ TABLES STRUCTURES ------------------------          Pure-FTPd is very flexible and users can be stored in any way in SQL tables.You just have to have fields with the following info:- The user's login.- The user's password, in plaintext, crypt()ed format or MD5. Pure-FTPd alsoaccepts the "any" value for the PGSQLCrypt field. With "any", all hashingfunctions (not plaintext) are tried.- The system uid to map the user to. This can be a numeric id or an username, looked up at run-time.- The system gid (numeric or not) .- The home directory.Here's a dump of a simple table to handle this:CREATE TABLE "users" (  "User" varchar(16) NOT NULL default '',  "Password" varchar(64) NOT NULL default '',  "Uid" int(11) NOT NULL default '-1',  "Gid" int(11) NOT NULL default '-1',  "Dir" varchar(128) NOT NULL default '',  PRIMARY KEY ("User"));Uid and Gid can be char() instead of int() if you want to use names insteadof values.Then, in the pureftpd-pgsql.conf configuration file, you have to provide SQLtemplates to fetch the needed info.Let's take the previous example:PGSQLGetPW      SELECT "Password" FROM "users" WHERE "User"='\L'PGSQLGetUID     SELECT "Uid" FROM "users" WHERE "User"='\L'PGSQLGetGID     SELECT "Gid" FROM "users" WHERE "User"='\L'PGSQLGetDir     SELECT "Dir" FROM "users" WHERE "User"='\L'For each query:\L is replaced by the login of an user trying to authenticate.\I is replaced by the IP address the client connected to.\P is replaced by the port number the client connected to.\R is replaced by the remote IP address the client connected from.\D is replaced by the remote IPv4 address, as a long decimal number.You can mix all of these to store info in various tables. For instance, with\I, you can have a different table for every domain, so that joe@domain1won't be the same account than joe@domain2 . And with \R, you can restrictone account to one specific address.Please note that a login can only contains common characters: A...Z, a...z,0...9, -, ., _, space, :, @ and  and ' . For security purposes, othercharacters are forbidden.You can also remove uid and gid fields in your tables and use defaultvalues instead (thus saving useless lookups) . Two directives areuseful to serve that purpose: PGSQLDefaultUID and PGSQLDefaultGID.Obvious example:PGSQLDefaultUID 1000PGSQLDefaultGID 1000Using these directives overrides PGSQLGetUID and PGSQLGetGID.     ------------------------ PER-USER SETTINGS ------------------------Individual settings can be set for every user, using optional queries.- PGSQLGetQTAFS is the maximal number of files an user can store in his homedirectory.Example:PGSQLGetQTAFS SELECT "QuotaFiles" FROM "users" WHERE "User"='\L'- PGSQLGetQTASZ is the maximal disk usage, in Megabytes.Example:PGSQLGetQTASZ SELECT "QuotaSize" FROM "users" WHERE "User"='\L'- PGSQLGetRatioUL and PGSQLGetRatioDL are optional ratios.Example:PGSQLGetRatioUL SELECT "ULRatio" FROM "users" WHERE "User"='\L'PGSQLGetRatioDL SELECT "DLRatio" FROM "users" WHERE "User"='\L'- PGSQLGetBandwidthUL and PGSQLGetBandwidthDL are optional upload anddownload bandwidth restrictions. Returned values should be in KB/s.Example:PGSQLGetBandwidthUL SELECT "ULBandwidth" FROM "users" WHERE "User"='\L'PGSQLGetBandwidthDL SELECT "DLBandwidth" FROM "users" WHERE "User"='\L'      ------------------------ ANONYMOUS USERS ------------------------If you want to accept anonymous users on your FTP server, you don't need tohave any 'ftp' user in the PGSQL directory. But you need to have a system'ftp' account on the FTP server.        ------------------------ ROOT USERS ------------------------If a PGSQL user entry has a root (0) uid and/or gid, Pure-FTPd will refuseto log him in.Without this preventive restriction, if your PGSQL server ever getscompromised, the attacker could also easily compromise the FTP server.Security barriers are also implemented to avoid bad implications if wrongdata types (eg. binary blobs instead of plain text) are fetched with SQLqueries.Hint:PostgreSQL supports views and it's common practice to define a new DBuser, e.g., ftpd and a view of the 'real' user database with just thebits that the server needs. E.g., if you have virtual domains youcould use:create view vftpd as select u.vuser, u.domain, u.passwd, d.uid, d.gid,'/virtual/' || u.domain || '/' || u.vuser || '/./' as homedirfrom vusers as u, vdomains as d where u.domain = v.domain;grant select on vftpd to ftpd;The definition of homedir shows how views can be used to enforce acanonical form for home directories - nothing short of defining thisview will allow a user to drop the chroot from their home directory.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -