========ftp系统相关参数说明========================
# 以独立模式启动
listen=YES
#同时允许200客户端连入,每个IP最多允许4个进程
max_clients=200
max_per_ip=4
允许匿名访问,只有下载权限。
禁止本地(系统)用户登录
# Access rights
anonymous_enable=YES
local_enable=NO
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

# 禁止匿名用户下载具有全局读取权限的文件,目录中的用户和组信息列取时都显示为 "ftp".
#被动模式下,服务器端口范围限制在50000~60000
anon_world_readable_only=YES
connect_from_port_20=YES
hide_ids=YES
pasv_min_port=50000
pasv_max_port=60000

# 生成详细的上载和下载日志

xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log

# # #日志控制的几个参数:
log_ftp_protocol 如果启用, 则 要关闭xferlog_std_format 没有启用, 所有的 FTP 请求和应答都会被记录. 此选项将对调试很有用.默认: YES
dual_log_enable 如果启用, 将生成两个相似的日志文件, 默认在 /var/log/xferlog 和 /var/log/vsftpd.log 目录下. 前者是 wu-ftpd 类型的传输日志, 可以用于 标准工具分析. 后者是 vsftpd 自己类型的日志.
xferlog_enable 如果启用, 将会维护一个日志文件, 用于详细记录上载和下载. 默认情况下, 这个日志文件是 /var/log/vsftpd.log. 但是也可以通过配置文件中的 vsftpd_log_file 选项来指定.默认: NO(但是在示例设置中启用了这个选项)
xferlog_std_format 如果启用, 传输日志文件将以标准 xferlog 的格式书写, 如同 wu-ftpd 一样. 这可以用于重新使用传输统计生成器. 然而, 默认格式更注重可读性. 此格式的日志文件默认为 /var/log/xferlog, 但是您也可以通过 xferlog_file 选项来设定.默认: NO

 

# 以节省资源模式运行(针对 Linux 2.4 内核),
#远程客户端最大 FTP 命令间隔超过120秒,或空闲的数据连接超过300秒,都将被断开
#匿名客户端允许的最大数据传输速率50000b/s
one_process_model=YES
idle_session_timeout=120
data_connection_timeout=300
anon_max_rate=50000

参数说明:
anonymous_enable=YES //允许匿名访问,这是匿名服务器必须的
write_enable=YES //全局配置可写
no_anon_password=YES //匿名用户login时不询问口令
anon_umask=077 //匿名用户上传的文件权限是-rw----
anon_world_readable_only=NO ###YES时不能显示FTP空间的内容
anon_upload_enable=YES //允许匿名用户上传文件
anon_mkdir_write_enable=YES //允许匿名用户建立目录
anon_other_write_enable=YES //允许匿名用户具有建立目录,上传之外的权限,如重命名,删除,文件及目录

dirmessage_enable=YES //当使用者转换目录,则会显示该目录下的.message信息
xferlog_enable=YES //记录使用者所有上传下载信息
xferlog_file=/var/log/vsftpd.log //将上传下载信息记录到/var/log/vsftpd.log中
xferlog_std_format=YES //日志使用标准xferlog格式
idle_session_timeout=600 //设置空闲的用户会话中断时间,默认是10分钟
data_connection_timeout=120 //设置数据连接超时时间,默认是120秒
max_clients=100 //最大连接数
max_per_ip=2 //每ip最大连接数
local_max_rate=102400 //本地用户最大传输速度100k
anon_max_rate=10240 //匿名用户最大传输速度10k
ascii_download_enable=YES //是否允许使用ASCII格式来上传和下载文件
ftpd_banner=Welcome to FTP service. //在FTP服务器中设置欢迎登录的信息
listen=YES //使vsftpd 处于独立启动模式
listen_port=10021 //使用非标准端口
listen_address=192.168.1.1 //绑定到网卡的某个ip
tcp_wrappers=YES //使用tcp_wrqppers作为主机访问控制方式
pam_service_name=vsftpd //配置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d目录下
ftp_username=ftp //匿名用户所映射的本地用户名
virtual_use_local_privs=YES //虚拟用户拥有本地系统权限(即可以上传删除等,为NO时虚拟用户为匿名权限)
user_config_dir=/etc/vsftpd/users //设置不同的用户使用不同的配置的目录,用户名作为文件名

chroot_list_enable=YES //启用chroot列表文件
chroot_list_file=/etc/vsftpd/chroot_list //chroot文件位置
当chroot_local_user=YES时不允许除列表外的所有本地用户切换到home以外的目录
当chroot_local_user=NO时允许除列表外的所有本地用户切换到home外的目录(默认)

tcp_wrappers使用/etc/hosts.allow和/etc/hosts.deny两个配置文件实现访问控制
vsftpd:主机表:setenv VSFTPD_LOAD_CONF 配置文件路径
vsftpd:192.168.1.0/24,192.168.2.0/24:DENY

chown_uploads=YES
chown_username=daemon //上传文件的属主
ftpd_banner=Welcome to d-1701.com FTP service. //FTP欢迎信息
anon_max_rate=80000 //这是匿名用户的下载速度为80KBytes/s
check_shell=NO //不检测SHELL

 

====================================================================
为VSFTPD配置虚拟用户(系统默认文本方式)

1.6.1创建虚拟与用户数据库
创建loguser.txt,格式如下:
userid
pass
比如我创建两个用户:tony 密码为tonypass,etony密码为etonypass 则loguser.txt的内容如下:
tony
tonypass
etony
etonypass
安装数据库生成工具:
# aptitude install libdb3-util
生成数据库:
# db_load -T -t hash -f loguser.txt /etc/vsftpd_login.db
设置数据库文件的访问权限:
# chmod 600 /etc/vsftpd_login.db
配置PAM文件
修改/etc/pam.d/vsftpd 内容如下:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

为虚拟用户创建本地系统用户
useradd -d /home/ftpsite virtual
mkdir /home/ftpsite
chown virtual.virtual /home/ftpsite
ls -ld /home/ftpsite
drwxr-sr-x 2 virtual virtual 48 2006-08-18 05:48 /home/ftpsite
在目录下创建一些内容
echo "etony's vsftpd server" > /home/ftpsite/msg
chown virtual.virtual /home/ftpsite/msg

修改/etc/vsftpd/vsftpd.conf
但要确保含有一下设置:
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=virtual //这两行的意思是采用虚拟用户形式
listen=YES
listen_port=21
pasv_min_port=30000
pasv_max_port=30999
1.6.2 启动vsftpd
/etc/init.d/vsftpd start|restart
1.6.3测试
========================================================================
=======================================================================
为VSFTPD配置虚拟用户(mysql数据库方式)

安装:pam_mysql
wget http://downloads.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz?use_mirror=nchc
安装: gcc gcc-c++ pam-devel mysql-devel 一般系统已自带

tar xzvf pam_mysql-0.7RC1.tar.gz -C /tmp/
cd /tmp/pam_mysql-0.7RC1/
./configure --with-mysql=/usr/local/mysql ##如果mysql自定义安装则需加上后面的with-mysql。如果系统自带则不用加,否则编译报错。
make;make install

找到pam_mysql.so文件目录
ll /usr/lib/security/pam_mysql.so
ln -s /usr/lib/security/pam_mysql.so /lib/security/

创建虚拟用户对应的系统用户
useradd -d /home/virtual -s /sbin/nologin virtual
chown virtual:virtual /home/virtual
chmod 700 /home/virtual


创建存储虚拟用户的数据库和表。
mysql> create database ftpdb;
use ftpdb;
create table ftpusers(name char(20),password char(20));

####################
CREATE TABLE log (`msg` VARCHAR(128),`user` VARCHAR(128), `pid` INT, `host` VARCHAR(128),
`rhost` VARCHAR(128), `time` TIMESTAMP );#####可不用这个,将日志文件记录在数据库中。
如果用了,在认证文件就该成:
auth required pam_mysql.so user=vsftp passwd=redhat host=192.168.122.101 db=vsftp table=account usercolumn=user passwdcolumn=passwd crypt=0 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time
account required pam_mysql.so user=vsftp passwd=redhat host=192.168.122.101 db=vsftp table=account usercolumn=user passwdcolumn=passwd crypt=0 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time
#######################

mysql> insert into ftpusers(name,password) values ('user1','user1');
mysql> insert into ftpusers(name,password) values ('user2','user2');
mysql>grant select on ftpdb.ftpusers to virtual@localhost identified by 'ipanel';

修改vsftp主配置文件:采用虚拟用户形式
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/xferlog
vsftpd_log_file=/var/log/vsftpd.log
dual_log_enable=YES
use_localtime=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
anon_world_readable_only=NO ###YES时不能显示FTP空间的内容

注释掉原来的认证
#pam_service_name=vsftpd
最下面添加:
pam_service_name=vsftpd.virtual 添加虚拟认证方式
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/userconfig 配置每个用户配置文件的目录
userlist_enable=YES
tcp_wrappers=YES 支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)

建立pam认证文件
vi /etc/pam.d/vsftpd.virtual

auth required /lib/security/pam_mysql.so user=virtual passwd=ipanel host=localhost db=ftpdb table=ftpusers usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=virtual passwd=ipanel host=localhost db=ftpdb table=ftpusers usercolumn=name passwdcolumn=password crypt=0

注意:
crypt= n
crypt=0: 明文密码
crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
crypt=2: 使用MYSQL中的password()函数加密
crypt=3:表示使用md5的散列方式

 

 

创建每个用户的配置文件目录
cd /etc/vsftpd/
mkdir userconfig
为每个用户写入相关配置:
vi userconfig/user1
写入
local_root=/var/ftp/user1 #指定用户的登陆目录
anon_upload_enable=YES ###是否可以上传
anon_mkdir_write_enable=YES ###是否可以建目录
anon_other_write_enable=YES ###是否可以删除文件及目录

vi userconfig/user2
写入
local_root=/var/ftp/user2
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES

创建用户的登陆目录
mkdir -p /var/ftp/user1
mkdir -p /var/ftp/user2
chown -R virtual:virtual /var/ftp

测试:# ftp localhost

查找14天以前的文件并且直接删除shell
find /path/ -type f -mtime +14 -exec rm -f {} \;
=======================================

4、为FTP增加磁盘配额,从而避免恶意用户用垃圾数据塞满你的硬盘 我首先要说的是这个功能是系统自带的,而不是vsftp 的功能之一,千万别搞混了。好了,我们先假设我们的系统用户ftpd的主目录是/home/ftpd,它是建立在/home分区中,那么如果我们要对ftpd用户进行磁盘限额,那我们需要修改/etc/fstab中根分区的记录,将/home分区的第4个字段改成defaults,usrquota,如下: LABEL=/home /home ext3 defaults,usrquota 1 2 # reboot //重新启动系统使设置生效 也可以用 # mount -o remount /dev/sda6 ///dev/sda6的挂接点就是/home,这样可以不用启动系统。 这里我还要说明一下,如果我们对一个组进行磁配额,那我们需要增加参数grpquota,例如 LABEL=/home /home ext3 defaults,grpquota 1 2 也可以 LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2 你想怎么限制都可以,自己组合参数吧。 # quotacheck -avu 说明:a-自动开启挂载文件系统的配额,v-显示信息,u-启用用户配额or g-启用组配额 # edquota ftpd //为用户ftpd设置磁盘配额 OR # edquota -g grp //为组grp设置磁盘配额 系统会自动打开配额文件,如下: Disk quotas for user ftpd (uid 502): Filesystem blocks soft hard inodes soft hard /dev/sda6 424 0 0 13 0 0 第一列是启用了配额的文件系统的名称。第二列显示了用户当前使用的块数,单位为KB。随后的两列用来设置用户在该文件系统上的软硬块限度。inodes 列显示了用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度.硬限是用户或组群可以使用的磁盘空间的绝对最大值。达到了该限度后,磁盘空间就不能再被用户或组群使用了。软限定义可被使用的最大磁盘空间量。和硬限不同的是,软限可以在一段时期内被超过。这段时期被称为过渡期(grace period),默认七天的超越。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。如果以上值中的任何一个被设置为 0,那个限度就不会被设置。我设置了硬块限度为1KB,是为了测试方便。 # quotaon -avu //打开磁盘配额监控进程,u是用户g是组,这里我没设置g参数 要校验用户的配额是否被设置,我们可以使用以下命令: # quota ftpd Disk quotas for user ftpd (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 424* 0 1 13 0 0 # edquota –t(-g)来设置过渡期(grace period) //当然只针对软限制而言 和另一个 edquota 命令相似,这个命令也会在文本编辑器中打开当前的文件系统配额: Grace period before enforcing soft limits for users: Time units may be: days, hours, minutes, or seconds Filesystem Block grace period Inode grace period /dev/sda6 7days 7days 按你的需要修改后存盘退出 用以下命令显示磁盘配额使用状态 # repquota -a 或 repquota /dev/sda6(用户配额) # repquota -g -a 或 repquota -a /dev/sda6 (组的配额) 如果一切按照你的意思实施了,那么我们就进行测试了!如下图4 我们传了一个>1k的文件,没有成功,这样我们就成功的为用户ftpd增添了磁盘配额,要是哪一天你不想加磁盘配额了,怎么办?参看如下命令: 取消某个文件系统的配额限制 #quotaoff -vug /dev/sda6 //删除home分区的磁盘限额 #删除/etc/fstab中设置配额的部分 修改软配额的最大超越时间 注意: /,/boot/,/proc,/mnt/cdrom等不要使用配额,没用。而且磁盘配额不适合FAT和FAT32系统。 以后当新设置了某个用户的配额,可以使用如下命令,马上生效。 # quotacheck -auvgm --是不尝试重新挂载文件系统