CentOS安装配置pure-ftpd

参考
http://machiel.generaal.net/
http://salogs.com/2010/06/pure-ftpd-deploy/
http://www.fishnote.net/?tag=pure-ftpd
SYSTEM:
CentOS release 6.2
IPADDR:
192.168.78.250

一、安装

1、yum安装

yum -y install pure-ftpd

2、编译安装
下载路径:
http://download.pureftpd.org/pub/pure-ftpd/releases/
PureFTPd有很多的编译配置选项,下面就列出部分主要的配置

--prefix=PREFIX
--with-sysquotas        使用系统磁盘配额 (非虚拟)
--with-altlog           支持选择日志格式(类似Apache)
--with-puredb           支持虚拟用户 (FTP登陆用户而非系统用户)
--with-extauth          支持扩展验证模块
--with-pam              启用PAM验证支持 (默认=禁用)
--with-cookie           启用Cookie支持 (-F 选项)
--with-throttling       支持带宽控制 (默认=禁用)
--with-ratios           支持 上传/下载 速度控制
--with-quotas           支持 .ftpquota 文件(指定磁盘配额使用)
--with-ftpwho           支持pure-ftpwho(查看在线用户的程序)
--with-largefile        支持大于2G的文件
--with-welcomemsg       支持 welcome.msg 向后兼容(已经过时)
--with-uploadscript     上传后允许执行外部脚本 (测试阶段)
--with-virtualhosts     在不同的IP地址提供虚拟服务器功能
--with-virtualchroot    允许在chroot的环境下通过符合连接跳转到外部
--with-diraliases       启用目录别名
--with-nonroot          普通模式或者说是限制模式. 如果你在该服务器上没有root权限
那只有启用该项
--with-peruserlimits    支持每个用户的并发限制
--with-language=        语言支持< english | traditional-chinese | simplified-chinese>
--with-ldap             在LDAP目录中提供用户数据库
--with-mysql            在MySQL数据库中存放用户数据
--with-pgsql            在PostgreSQL数据库中存放用户数据
--with-privsep          启用权限分离
--with-tls              启用 SSL/TLS 支持 (测试阶段, 需要安装 OpenSSL)
--with-certfile=        证书文件 (默认目录: /etc/ssl/private/pure-ftpd.pem)
--with-rfc2640          启用兼容 RFC 2640 支持(UTF-8 编码的文件名,测试阶段,需要安装iconv)
--with-everything       启用大多数选项,编译完功能版本的服务器端。

为了方便起见,我在这里使用了几个基本的编译命令来配置编译一个全功能版本的程序

./configure --prefix=/usr/local/pure-ftpd/ --with-language=simplified-chinese --with-everything
make && make check && make install

二、配置

1、配置 FTP登录账户:
pure-ftp默认采用Linux的root用户。虚拟用户则能够更好的控制访问权限。虚拟用户是和Linux系统用户关联的独立的账户系统。
所以在创建虚拟用户之前最好先创建一个系统的账户和组。创建一个ftpgroup组和ftpuser用户

groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /sbin/nologin ftpuser
mkdir /data/ftpdata
chown ftpuser.ftpgroup /data/ftpdata

2、配置文件

cp /etc/pure-ftpd/pure-ftpd.conf /etc/pure-ftpd/pure-ftpd.conf_bak
vi pure-ftpd.conf
ChrootEveryone              yes
BrokenClientsCompatibility  yes
Daemonize                   yes
MaxClientsPerIP             20
VerboseLog                  yes
DisplayDotFiles             no
AnonymousOnly               no
NoAnonymous                 yes
SyslogFacility              none
DontResolve                 yes
MaxIdleTime                 15
LimitRecursion              2000 8
AnonymousCanCreateDirs      no
MaxLoad                     4
PassivePortRange          45000 50000
#AnonymousRatio                1 10
#UserRatio                 1 10
AntiWarez                   yes
#AnonymousBandwidth            200
UserBandwidth               8  
Umask                       133:02
MinUID                      100  
AllowUserFXP                no   
AllowAnonymousFXP           no    
ProhibitDotFilesWrite       no    
ProhibitDotFilesRead        no   
AutoRename                  yes
AnonymousCantUpload         yes  
AltLog                     clf:/var/log/pureftpd.log
PureDB                     /etc/pure-ftpd/pureftpd.pdb
MaxDiskUsage               99
CreateHomeDir              yes
CustomerProof              yes

上面使用的配置文件说明

ChrootEveryone              yes         # 启用chroot
BrokenClientsCompatibility  yes         # 兼容不同客户端
Daemonize                   yes         # 后台运行
MaxClientsPerIP             20          # 每个ip最大连接数
VerboseLog                  yes         # 记录日志
DisplayDotFiles             no          # 显示隐藏文件
AnonymousOnly               no          # 只允许匿名用户访问
NoAnonymous                 yes         # 不允许匿名用户连接
SyslogFacility              none        # 不将日志在syslog日志中显示
DontResolve                 yes         # 不进行客户端DNS解析
MaxIdleTime                 15          # 最大空闲时间
LimitRecursion              2000 8      # 浏览限制,文件2000,目录8层
AnonymousCanCreateDirs      no          # 匿名用户可以创建目录
MaxLoad                     4           # 超出负载后禁止下载
PassivePortRange          45000 50000   # 被动模式端口范围
#AnonymousRatio                1 10     # 匿名用户上传/下载比率
UserRatio                 1 10          # 所有用户上传/下载比率
AntiWarez                   yes         # 禁止下载匿名用户上传但未经验证的文件
#AnonymousBandwidth            200      # 匿名用户带宽限制(KB)
UserBandwidth               8           # 所有用户最大带宽(KB)
Umask                       133:022     # 创建文件/目录默认掩码
MinUID                      100         # 验证登录用户的最小UID
AllowUserFXP                no          # 仅运行用户进行FXP传输
AllowAnonymousFXP           no          # 对匿名用户和非匿名用户允许进行匿名 FXP 传输
ProhibitDotFilesWrite       no          # 不能删除/写入隐藏文件
ProhibitDotFilesRead        no          # 禁止读取隐藏文件
AutoRename                  yes         # 有同名文件时自动重新命名
AnonymousCantUpload         yes         # 不允许匿名用户上传文件
AltLog                     clf:/var/log/pureftpd.log                # clf格式日志文件位置
PureDB                     /usr/local/pure-ftpd/etc/pureftpd.pdb        # 用户数据库文件
MaxDiskUsage               99           # 当磁盘使用量打到99%时禁止上传
CreateHomeDir              yes          # 如果虚拟用户的目录不存在则自动创建#需要ftp根目录权限为755 chmod 775 /data/ftpdata/
CustomerProof              yes          # 防止命令误操作

完整pure-ftpd.conf配置文件说明

# 将每个用户限制在自己的home目录下
ChrootEveryone              yes
 
# 兼容ie等比较非正规化的ftp客户端。默认:no
BrokenClientsCompatibility  yes
 
# 最大用户连接数。默认:50
MaxClientsNumber            2000
 
# 后台模式(守护进程模式)
Daemonize                   yes
 
# 同一个IP允许连接数(可以防止迅雷、快车等程序疯狂开线程)。默认:8
MaxClientsPerIP             20
 
# 如果要记录所有的客户端命令,请设置为‘yes’该选项可以将日志同步复制到日志服务器。默认:no
VerboseLog                  yes
 
# 显示隐藏文件。默认:yes
DisplayDotFiles             yes
 
# 不允许验证用户。只作为匿名ftp服务器。默认:no
AnonymousOnly               no
 
# 不允许匿名用户连接。只允许验证用户连接。默认:no
NoAnonymous                 no
 
# 该选项是说将何种类型的日志同步写入到syslog中。
# 类型包括(auth, authpriv, daemon, ftp, security, user, local*)
# 默认是"ftp"如果不想将ftp的日志显示在/var/log/message中。则禁用即可: "none"
SyslogFacility              none
 
# 显示 cookies
# FortunesFile              /usr/share/fortune/zippy
 
# 在日志文件中不解析主机名。日志越详细所需要的带宽也就越大。如果服务器的
# DNS解析有问题或者服务器的负载过大,建议将该选项配置yes。默认为:yes
DontResolve                 yes
 
# 最大空闲时间。单位:分钟 (默认 = 15 分钟)
MaxIdleTime                 15
 
# LDAP 配置文件
# LDAPConfigFile                /etc/pureftpd-ldap.conf
 
# MySQL 配置文件 (详情见 README.MySQL)
# MySQLConfigFile               /etc/pureftpd-mysql.conf
 
# Postgres 配置文件 (详情见 README.PGSQL)
# PGSQLConfigFile               /etc/pureftpd-pgsql.conf
 
# PureDB 用户数据库 (详情见 README.Virtual-Users)
# PureDB                        /etc/pureftpd.pdb
 
# pure-authd 的 socket 路径 (详见 README.Authentication-Modules)
# ExtAuth                       /var/run/ftpd.sock
 
# 如果要使用PAM验证,取消下面行的注释
# PAMAuthentication             yes
 
# 如果要使用/etc/passwd 文件验证。取消下面行的注释
# UnixAuthentication            yes
 
# 注意:LDAPConfigFile, MySQLConfigFile, PAMAuthentication 与 UnixAuthentication
# 只能启用一个,但他们可以联合使用。例如:你启用了 MySQLConfigFile 之后又启用了
# UnixAuthentication那么同一时刻只有SQL server 可用。如果SQL authentication 失败,
# 例如用户没有找到,那么系统会重试其他的方式来验证,这时候它就会找/etc/passwd 和
# /etc/shadow文件. 如果通过 SQL 验证的结果是因为密码错误,那么就不会在进行下面的
# 验证了。由此得知,验证方法可以写多个,但同一个时刻只有一个工作,且当验证时找不
# 到信息时才会进行下一个验证方式。但当验证错误时就终止验证了。
 
# 'ls' 递归限制。第一个参数是最大可显示的文件数。第二个参数是子文件夹深度
LimitRecursion              2000 8
 
# 匿名用户是否可以创建新文件夹
AnonymousCanCreateDirs      no
 
# 如果系统负载超过下面所给的数字,那么匿名用户将无法下载
MaxLoad                     4
 
# 在被动连接模式下为其分配的端口范围。便于制定防火墙配置。
PassivePortRange          45000 50000
 
# 强制某个IP地址工作在 PASV/EPSV/SPSV 模式. - for NAT.
# ForcePassiveIP                192.168.0.1
 
# 匿名用户上传/下载比率
# AnonymousRatio                1 10
 
# 所有用户 上传/下载 比率。该选项可以取代上面的选项
# UserRatio                 1 10
 
# 禁止下载所有者为‘ftp’的文件。例如:那些匿名用户上传后未被本地管理员验证的文件。
AntiWarez                   yes
 
# 用来监听的IP地址和端口 (默认=所有 IP 和 21 端口).
# Bind                      127.0.0.1,21
 
# 匿名用户最大带宽限制,单位 KB/s
AnonymousBandwidth            200
 
# 所有用户的最大带宽限制(包括匿名)单位 KB/s
# 没有必要同时开启 AnonymousBandwidth 和 UserBandwidth
# UserBandwidth             8
 
# 新建文件默认掩码. <文件掩码>:<目录掩码>
# 为了安全起见可以设置为 177:077
Umask                       133:022
 
# 验证登录用户的最小UID
MinUID                      100
 
# 仅允许认证用户进行 FXP 传输
AllowUserFXP                no
 
# 对匿名用户和非匿名用户允许进行匿名 FXP 传输
AllowAnonymousFXP           no
 
# 用户不能删除/写入隐藏文件,即便是文件的拥有者也不允许。
# 如果 TrustedGID 选项为 enabled 文件所属组用户可以访问隐藏文件
ProhibitDotFilesWrite       no
 
# 禁止读取隐藏文件 (如 .history, .ssh...)
ProhibitDotFilesRead        no
 
# 永不覆盖文件。如果上传的文件已经存在,系统会自动将其命名为file.1, file.2, file.3, ...
AutoRename                  yes
 
# 不允许匿名用户上传文件 (no = 允许上传)
AnonymousCantUpload         no
 
# 仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公
# 网IP来提供匿名FTP,而保留一个私有的防火墙保护的IP来进行远程管理。你
# 还可以只允许一内网地址进行认证,而在另外一个IP上提供纯匿名的FTP服务。
#TrustedIP                  10.1.1.1
 
# 如果你要在登陆日志的每一行添加PID标记,去掉下行的注释
#LogPID                     yes
 
# 使用类似于Apache格式创建一个附加的日志文件,如:
# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# 这个日志文件可以被www流量分析工具来处理
AltLog                     clf:/var/log/pureftpd.log
 
# 使用优化过的格式为统计报告创建一个额外的日志文件
# AltLog                     stats:/var/log/pureftpd.log
 
# 使用标准的W3C格式创建一个额外的日志文件。(与大部分的商业日志分析器兼容)
# AltLog                     w3c:/var/log/pureftpd.log
 
# 不允许使用chmod命令.用户不能修改他们上传文件的属性
#NoChmod                     yes
 
# 允许用户恢复和上传文件,但不能够上除他们
#KeepAllFiles                yes
 
# 用户主目录不存在的话,自动创建目录
#CreateHomeDir               yes
 
# 启用虚拟磁盘配额。第一个参数是最大文件数,第二个参数是总共的大小,单位是MB
# 如: 1000:10 限制每个用户最大文件1000个且不能超过10MB
#Quota                       1000:10
 
# 如果你在编译 pure-ftpd 时加入了‘standalone’选项,那么你可以更改pid文件位置
# 默认目录 /var/run/pure-ftpd.pid
#PIDFile                     /var/run/pure-ftpd.pid
 
# 如果你在编译 pure-ftpd 时加入了 pure-uploadscript 选项,这个指令将会使
# pure-ftpd 发送关于新上传的情况信息到 /var/run/pure-ftpd.upload.pipe,
# 这样 pure-uploadscript 就能读然后调用一个脚本去处理新的上传。
#CallUploadScript yes
 
# 这个选项对于匿名上传的服务器是很有用的。/var/ftp 在 /var 里时,需要保留一定
# 磁盘空间来保护日志文件。当所在磁盘分区使用超过百分之 X 时,将不在接受新的上传。
MaxDiskUsage               99
 
# 如果不想让用户来重命名文件,请将其设置为yes
#NoRename                  yes
 
# 'customer proof' : 选项可以阻止普通用户因误操作而执行的错误命令
# 如:'chmod 0 public_html', 这是有效的命令,但执行完命令之后用户
# 就将他们自己的文件锁定了,这时你的麻烦就来了,你需要给用户解决这
# 些由于用户而造成的愚蠢问题。如果你确信的你用户都具有一些unix基础
# 知识的话,那么该选项就没有必要设置,否则建议启用它。
CustomerProof              yes
 
# 所有用户都做同样的限制。只有编译时加入了--with-peruserlimits 选项
# 才可以启用。格式为: <每一个用户最大许可的进程>:<匿名用户最大进程>
# 例如:3:20 同一个认证用户最大可以有3个同时活动的进程。而且同时最多
# 只能有20个匿名用户进程
# PerUserLimits            3:20
 
# 当文件上传时,服务器上之前已经有一个同名的文件时,旧的文件既不会被移动
# 也不会被删除。在新文件上传完毕之前会将上传的部分暂时放到一个临时的文件
# 中,当上传完毕之后会自动的切换到新上传的文件。例如:当服务器上有一个PHP
# 脚本正在执行,但我现在要上传一个新的PHP脚本,那么当我在上传完毕之后才将
# 旧的文件切换到新的文件。而不是像某些程序那样在开始上传的时候就将旧的文件
# 覆盖掉了,这样做的目的就是可以最大程度的减少正在运行中的程序错误。该选项
# 与虚拟配额不能同时使用。
# NoTruncate               yes
 
# 该选项可以接受3个可选值:
# 0 : 禁用 SSL/TLS 加密层 (默认).
# 1 : 同时接受传统的和加密的连接
# 2 : 拒绝没有经过 SSL/TLS 安全验证的连接,包括匿名连接
# 在没有确定下面三个问题之前不要盲目的取消注释:
# 1) 编译PureFTPd时是否启用了 SSL/TLS 支持 (--with-tls),
# 2) 系统中是否包含一个有效的证书
# 3) 开启后只有兼容的客户端才能登陆
# TLS                      1
 
# 在 standalone 模式下只监听IPV4的地址 (与禁用 IPv6 相同)
# 默认是IPV4与IPV6同时监听
# IPV4Only                 yes
 
# 在 standalone 模式下只监听IPV6的地址 (与禁用 IPv4 相同)
# IPV6Only                 yes
 
# 文件名的UTF-8支持
# FileSystemCharset big5
# ClientCharset     big5

三、用户管理

1、添加用户

pure-pw useradd lily -u ftpuser -g ftpgroup -d /data/ftpdata/lily
Password: 
Enter it again: 
pure-pw mkdb -> 当使用pure-pw 生成虚拟用户之后一定要使用pure-pw mkdb命令生成数据库文件,

否则pure-ftp启动之后也无法验证虚拟用户
第一个用户,需要手动建立文件

pure-pw命令的格式

pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
-D/-d <home directory> [-c <gecos>]
[-t <download bandwidth>] [-T <upload bandwidth>]
[-n <max number of files>] [-N <max Mbytes>]
[-q <upload ratio>] [-Q <download ratio>]
[-r <allow client host>[/<mask>][,...]
[-R <deny client host>[/<mask>][,...]
[-i <allow local host>[/<mask>][,...]
[-I <deny local host>[/<mask>][,...]
[-y <max number of concurrent sessions>]
[-z <hhmm>-<hhmm>] [-m]

使用-z参数可以指定用户只能在一天中的某个时间段可以登陆ftp服务器。例如 -z 0900-1800那么joe只能在早上9点和下午6点这个时间段登陆。
注意:如果设置登陆时间的用户已经通过验证登陆到ftp服务器上了,那么所做的登陆时间限制只能在他下次登陆验证的时候才能生效。
-r 与 -R 参数是约束用户从哪些IP登陆的。可以使用IP/mask的形式,如-r 192.168.1.0/24多个段用逗号隔开,
如:-r 192.168.1.0/24,10.1.0.0/16,127.0.0.1/32 。单独的IP:-r 192.168.1.4,10.1.1.5主机名:-r bla.bla.net,yopcitron.com。
以及一些相兼容的格式。
-y 参数是限制同一时刻一个用户最多能发起多少个会话(sessions)。''或0 代表无限制。该选项可以降低系统负载。效果同配置文件中的 MaxClientsPerIP

cat /usr/local/pure-ftpd/etc/pureftpd.passwd
joe:$1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/:501:501::/home/ftpusers/joe/./::::::::::::

密码字段是经过加密的。

2、更改用户信息
虚拟用户创建之后,你也可以通过pure-pw命令来修改其相关的信息,如限制下载
带宽、磁盘配额、用户全名、下载上传率等等
例如:我要修改用户joe的最大文件数为1000个,大小为10MB,命令如下:

pure-pw usermod joe -n 1000 -N 10

查看一下虚拟用户列表文件

cat /etc/pure-ftpd/pureftpd.passwd
lily:$1$gH6aMxg0$he9g3F/HHFwvipEozvU4G0:505:504::/data/ftpdata/lily/./::::::::::::

3、重置用户属性
要禁用文件数配额,执行 pure-pw usermod -n ''
要禁用文件大小配额,执行 pure-pw usermod -N ''
要禁用上传/下载比率,执行 pure-pw usermod -q '' -Q ''
要禁用下载带宽限制,执行 pure-pw usermod -t ''
要禁止上传带宽限制,执行 pure-pw usermod -T ''
要禁止IP地址过滤,使用 pure-pw usermod <-i,-I,-r or -R> ''
要禁止登陆时间限制,执行 pure-pw usermod -z ''
要禁止最大并发数控制,执行 pure-pw usermod -y ''

4、删除用户
使用pure-pw userdel 命令可以删除一个已经存在的用户
pure-pw userdel [-f ] [-m]
如:pure-pw userdel joe
用户home目录中的文件不会被删除,需要手动删除

5、更改密码
更改用户密码的命令

pure-pw passwd <login> [-f <passwd file>] [-m]

6、利用pure-pw命令查看用户信息

pure-pw show lily
 
Login : lily
Password : $1$gH6aMxg0$he9g3F/HHFwvipEozvU4G0
UID : 505 (ftpuser)
GID : 504 (ftpgroup)
Directory : /data/ftpdata/lily/./
Full name : 
Download bandwidth : 0 Kb (unlimited)
Upload bandwidth : 0 Kb (unlimited)
Max files : 0 (unlimited)
Max size : 0 Mb (unlimited)
Ratio : 0:0 (unlimited:unlimited)
Allowed local IPs : 
Denied local IPs : 
Allowed client IPs : 
Denied client IPs : 
Time restrictions : 0000-0000 (unlimited)
Max sim sessions : 0 (unlimited)

四、使用数据管理

1、导入数据

mysql -uroot -p < script.mysql

sql脚本内容

--
-- Create MySQL user called 'ftp'
-- Login = ftp
-- Password = tmppasswd
-- Host = 127.0.0.1
--
 
#INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES('127.0.0.1','ftp',PASSWORD('tmppasswd'),'Y','Y','Y','Y','N','N','N','N','N','N','N','N','N','N');
 
#FLUSH PRIVILEGES;
 
CREATE DATABASE ftpusers;
 
USE ftpusers;
 
--
-- Table structure for table 'admin'
--
 
CREATE TABLE admin (
  Username varchar(35) NOT NULL default '',
  Password char(32) binary NOT NULL default '',
  PRIMARY KEY  (Username)
) TYPE=MyISAM;
 
--
-- Data for table 'admin'
--
 
 
INSERT INTO admin VALUES ('Administrator',MD5('tmppasswd'));
 
--
-- Table structure for table 'users'
--
 
CREATE TABLE users (
  User char(16) NOT NULL default '',
  Password char(32) binary NOT NULL default '',
  Uid int(11) NOT NULL default '14',
  Gid int(11) NOT NULL default '5',
  Dir char(128) NOT NULL default '',
  QuotaFiles int(10) NOT NULL default '500',
  QuotaSize int(10) NOT NULL default '30',
  ULBandwidth int(10) NOT NULL default '80',
  DLBandwidth int(10) NOT NULL default '80',
  PRIMARY KEY  (User)
) TYPE=MyISAM;
 
--
-- Data for table 'users'
--
INSERT INTO users VALUES ('diege',MD5('1111'),14,5,'/data/ftpdata/diege/',500,30,80,5);
grant all on ftpusers.* to 'ftp'@'localhost' identified by 'tmppasswd';
FLUSH PRIVILEGES;

2、配置

vim pure-ftpd.conf
ChrootEveryone              yes
BrokenClientsCompatibility  yes
Daemonize                   yes
MaxClientsPerIP             20
VerboseLog                  yes
DisplayDotFiles             no
AnonymousOnly               no
NoAnonymous                 yes
SyslogFacility              none
DontResolve                 yes
MaxIdleTime                 15
LimitRecursion              2000 8
AnonymousCanCreateDirs      no
MaxLoad                     4
PassivePortRange          45000 50000
AntiWarez                   yes
Umask                       133:02
MinUID                      100  
AllowUserFXP                no   
AllowAnonymousFXP           no    
ProhibitDotFilesWrite       no    
ProhibitDotFilesRead        no   
AutoRename                  yes
AnonymousCantUpload         yes  
AltLog                     clf:/var/log/pureftpd.log
MySQLConfigFile             /etc/pure-ftpd/pureftpd-mysql.conf
MaxDiskUsage               99
CreateHomeDir              yes
CustomerProof              yes
vim pureftpd-mysql.conf

修改
MYSQLUser ftp
MYSQLPassword tmppasswd
MYSQLDatabase ftpuser
MYSQLCrypt md5

3、重启

/etc/init.d/pure-ftpd restart

4、详细配置mysql
ULBandwidth 上传速度
DLBandwidth 下载数据
默认mysql配置只有用户认证,其他功能需要开启
打开上传下载速度控制

vim /etc/pure-ftpd/pureftpd-mysql.conf
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User='\L'
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User='\L'

五、使用GUI管理

http://machiel.generaal.net/有一个php的管理程序,在RHCE5,FREEBSD8都可以使用,在RHEL6(PHP5.3)上有问题
准备有空用django开发一个GUI管理工具

六、脚本

1、vsftpd添加用户shell脚本

#!/bin/bash
#Created on 2012-08-17
#@author: Jin
 
fusername=$1
fpasswd=$2
ch_list=/etc/vsftpd/chroot_list
vuserdir="/etc/vsftpd/vconf"
vuserfile=${vuserdir}/vir_user
vuserdb=${vuserdir}/vir_user.db
if [ $# -eq 2 ];then
        grep -q $fusername $vuserfile
        code="$?"
        if [ $code -eq 0 ];then
                echo "${fusername} exist!" && exit 1
        fi
        mkdir /opt/${fusername} && chown ftpuser:ftpuser /opt/${fusername}
        echo "${fusername}" >> ${ch_list}
        echo "${fusername}" >> $vuserfile && echo "${fpasswd}" >> $vuserfile
        exitcode="$?"
        if [ $exitcode -eq 0 ];then
                /usr/bin/db_load -T -t hash -f $vuserfile ${vuserdb}
        fi
        if [ -f ${vuserdir}/${fusername} ];then
                echo "${vuserdir}/${fusername} exist!"
        else
                cp ${vuserdir}/default ${vuserdir}/${fusername} && sed -i s/default/${fusername}/g ${vuserdir}/${fusername}
        fi
else
        echo "Please give ftpusername and ftppassword!"
fi

2、pure-ftpd添加删除账号,修改账号python脚本

#!/bin/env python
'''
Created on 2012-11-7
 
@author: Jin
 
'''
import os
import sys
import optparse
import subprocess
 
 
#ftproot='/disk3/biftp/dump/'
ftproot='/data/ftpdata/'
reload_cmd='/usr/bin/pure-pw mkdb'
 
def addftpuser(ftpusername):
        userftpdir=ftproot+ftpusername
        cmd='/usr/bin/pure-pw useradd '+ftpusername+' -u ftpuser -g ftpgroup -d '+userftpdir
        '''
        print "ftproot is:%s\n" % ftproot
        print "user is:%s\n" % ftpusername
        print "userftpdir is:%s\n" % userftpdir
        print "cmd is:%s\n" % cmd
        print "reload_cmd is:%s\n" % reload_cmd
        '''
        try:
                pstat=subprocess.Popen(cmd,shell=True,stderr=subprocess.PIPE)
        except StandardError,e:
                print "Add ftpuser (%s) failed:: %d (%s)" % (ftpusername,e.errno, e.strerror)
                sys.exit(1)
        else:
                pstat.wait()
                if pstat.returncode == 0:
                        retcode=subprocess.call(reload_cmd,shell=True)
                        if retcode==0:
                                print "Add ftpuser (%s) Successful" % ftpusername
                        else:
                                print "Add ftpuser (%s) Successful,But reload puredb failed,Pleae rum command 'pure-pw mkdb' in shell" % ftpusername
                else:
                        print "Add ftpuser (%s) failed,exit code is %s,With reason <%s>" % (ftpusername,pstat.returncode,pstat.stderr.read().rstrip('\n'))
 
def delftpuser(ftpusername):
        cmd='/usr/bin/pure-pw userdel '+ftpusername 
        try:
                pstat=subprocess.Popen(cmd,shell=True,stderr=subprocess.PIPE)
        except StandardError,e:
                print "Delete ftpuser (%s) failed:: %d (%s)" % (ftpusername,e.errno, e.strerror)
                sys.exit(1)
        else:
                pstat.wait()
                if pstat.returncode == 0:
                        retcode=subprocess.call(reload_cmd,shell=True)
                        if retcode==0: 
                                print "Delete ftpuser (%s) Successful" % ftpusername
                        else:
                                print "Delete ftpuser (%s) Successful,But reload puredb failed,Pleae rum command 'pure-pw mkdb' in shell" % ftpusername
                else:
                        print "Delete ftpuser (%s) failed,exit code is %s,With reason <%s>" % (ftpusername,pstat.returncode,pstat.stderr.read().rstrip('\n'))
 
 
def changepwd(ftpusername):
        cmd='/usr/bin/pure-pw passwd '+ftpusername 
        try:
                pstat=subprocess.Popen(cmd,shell=True,stderr=subprocess.PIPE)
        except StandardError,e:
                print "Change ftpuser (%s) password failed:: %d (%s)" % (ftpusername,e.errno, e.strerror)
                sys.exit(1)
        else:
                pstat.wait()
                if pstat.returncode == 0:
                        retcode=subprocess.call(reload_cmd,shell=True)
                        if retcode==0: 
                                print "Change ftpuser (%s) password Successful" % ftpusername
                        else:
                                print "Change ftpuser (%s) password Successful,But reload puredb failed,Pleae rum command 'pure-pw mkdb' in shell" % ftpusername
                else:
                        print "Change ftpuser (%s) password failed,exit code is %s,With reason <%s>" % (ftpusername,pstat.returncode,pstat.stderr.read().rstrip('\n'))
 
def main():
        p=optparse.OptionParser(description="'ftpuser' is command add or delete ftp user or change ftp user password",prog="ftpuser",version="0.0.1",usage="%prog [-a|--add|-d|--delete|-p|--passwd] ftpusername")
        p.add_option("--add",'-a',action='store_true',help="Add ftp user")
        p.add_option("--delete","-d",action='store_true',help="Delete ftp user")
        p.add_option("--passwd","-p",action='store_true',help="Change ftp user password")
        options,arguments=p.parse_args()
        if len(arguments)==1 and options:
                if options.add:
                        addftpuser(arguments[0])
                elif options.delete:
                        delftpuser(arguments[0])
                elif options.passwd:
                        changepwd(arguments[0])
                else:
                        p.print_help()
        else:
            p.print_help()
 
 
if __name__ == '__main__':
      main()

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 73 queries in 0.076 seconds