您的位置:首页 > 编程语言 > PHP开发

VSFTP 配置详解

2012-06-06 13:48 211 查看
一、VSFTP 安装(略)

二、用户访问方式

1、匿名用户形式:

在默认安装的情况下,系统只提供匿名用户访问

2、本地用户形式:

以/etc/passwd中的用户名为认证方式

如果你在一台激活了PAM的设备上运行VSFTPD,你需要提供一个 /etc/pam.d/ftp 文件。否则非匿名用户将无法登录服务器。(注:如果你的PAM版本比较老,那么这个文件也许是 /etc/pam.conf).

做为一个标准设置,你可以拷贝一个已提供的范例文件,(cp RedHat/vsftpd.pam /etc/pam.d/ftp )

3、虚拟用户形式:

支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。

4、访问模式:

ftp 分主动模式(PORT MODE)及被动模式(PASV MODE)两种访问模式

主动模式下,客户连接 TCP/21,服务器通过 TCP/20 连接客户,client 防火墙开放端口

主动FTP:

命令连接:客户端>1023端口 ――> 服务器 21端口

数据连接:客户端 >1023端口 <―― 服务器 20端口

=================================================================================

被动模式(PASV)下,客户连接 TCP/21,客户再通过其他端口连接服务器的随机端口,server 防火墙开放端口

被动FTP:

命令连接:客户端 >1023端口――> 服务器 21端口

数据连接:客户端 >1023端口――> 服务器 >1023端

vsftp.conf 配置

pasv_enable=yes

pasv_min_port=50000

pasv_max_port=60000

-A RH-Firewall-1-INPUT -p tcp --dport 50000:60000 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

================================================================================

三、配置实战

相关配置文件

vsftp.conf

1、匿名用户形式:

1.1创建用户

anonymous 用户无须创建

1.2相关配置

anon_root=/var/www/ftp

anonymous_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_world_readable_only=YES

anon_max_rate=80000

mkdir -p /var/www/ftp/pub

chmod 775 /var/www/ftp

chmod o+w /var/www/ftp/pub

2、本地用户形式:

2.1创建用户

cp /etc/localtime /etc/skel/

useradd -g ftp -d /aaa -s /sbin/nologin ttt

passwd ttt

chmod 777 /aaa

2.2相关配置

local_enable=YES

write_enable=YES

local_umask=022

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

pam_service_name=vsftpd

#/etc/vsftpd/ftpusers 禁止登陆用户列表,高优先级

userlist_enable=YES #用户访问控制列表有效,文件是/etc/vsftpd/user_list

#userlist_deny=YES #/etc/vsftpd/user_list里的用户不能登录

userlist_deny=NO #只有/etc/vsftpd/user_list用户才可以登录

user_config_dir=/etc/vsftpd/vsftpd_user_conf

mkdir /etc/vsftpd/vsftpd_user_conf

echo "local_root=/var/www/html" > /etc/vsftpd/vsftpd_user_conf/ttt

3、虚拟用户形式

3.1创建用户

useradd -g ftp -s /sbin/nologin vsftpdvirtual

3.2相关配置

guest_enable=YES

guest_username=vsftpdvirtual

virtual_use_local_privs=YES|NO

当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。所有虚拟用户的权限使用local参数。

当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,所有虚拟用户的权限使用anon参数。

这两者种做法相比,后者更加严格一些。

密码文件方式:

vi ftppasswd

username1

passwd1

username2

passwd2

db_load -T -t hash -f ftppasswd /etc/vsftpd/account.db

chmod 600 /etc/vsftpd/account.db

cat /etc/pam.d/vsftpd.db

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account

account required /lib/security/pam_userdb.so db=/etc/vsftpd/account



cat /etc/pam.d/vsftpd.db

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/account

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/account

sed -i -e "s/pam_service_name=*/pam_service_name=vsftpd.db/" /etc/vsftpd/vsftpd.conf

mysql数据库方式:

安装pam_myql

mysql -uroot -p

mysql>;create database vsftpdvirtual;

mysql>;use vsftpdvirtual;

mysql>;create table users(name char(16) binary,passwd char(16) binary);

mysql>;insert into users (name,passwd) values ('win',password('123456'));

mysql>;insert into users (name,passwd) values ('wingger',password('123456'));

mysql>;grant select on vsftpdvirtual.users to vsftpdvirtual@localhost identified by '123456';

mysql>;quit

cat /etc/pam.d/vsftpd.mysql

auth required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2

account required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2

sed -i -e "s/pam_service_name=*/pam_service_name=vsftpd.mysql/" /etc/vsftpd/vsftpd.conf

4、访问管理

隐藏文件的所有者和组信息,匿名用户看到的文件的所有者和组全变为ftp

hide_ids=YES

==========================================================================

#ssl 访问

ssl_enable=YES

rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem

force_local_logins_ssl=NO

force_local_data_ssl=NO

cd /etc/pki/tls/certs/

make vsftpd.pem

umask 77 ; \

PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \

PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \

/usr/bin/openssl req -utf8 -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \

cat $PEM1 > vsftpd.pem ; \

echo "" >> vsftpd.pem ; \

cat $PEM2 >> vsftpd.pem ; \

rm -f $PEM1 $PEM2

==========================================================================

#允许使用/etc/hosts.allow和/etc/hosts.deny文件来限制对ftp的访问控制

tcp_wrappers=YES

# echo "vsftpd:127.0.0.1" >> /etc/hosts.allow

# echo "vsftpd:192.168.0." >> /etc/hosts.allow

# echo "vsftpd:ALL" >> /etc/hosts.deny

四、磁盘配额

我们先假设我们的系统用户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 --是不尝试重新挂载文件系统

五、附录

1、vsftpd配置参数详细整理

############## 基础配置

#绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式

listen=YES

#绑定到某个IP,其它IP不能做为vsftp服务被访问

listen_address=192.168.0.2

#绑定到某个端口

#listen_port=2121

#允许使用pasv模式

pasv_enable=YES

#使vsftpd在pasv命令回复时跳转到指定的IP地址.(服务器联接跳转?)

pasv_address=(none)

#pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。

pasv_max_port=0

#pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。

pasv_min_port=0

#关闭安全检查,小心呀.

#pasv_promiscuous+NO

#PAVS请求超时

ACCEPT_TIMEOUT=60

#允许使用port模式

#port_enable=YES

#关闭安全检查

#prot_promiscuous

#PROT模式连接超时

connect_timeout=60

#数据传输端口

#ftp_data_port=2020

#使用标准的20端口来连接ftp

connect_from_port_20=YES

#开启日记功能

xferlog_enable=YES

#使用标准格式

xferlog_std_format=YES

#当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.

#log_ftp_protocol=NO

#日志文件位置

xferlog_file=/var/log/vsftpd.log

#目录信息文件

message_file=.message

#定义登录信息文件的位置

banner_file=/etc/vsftpd/banner

#login时显示欢迎信息.如果设置了banner_file则此设置无效

ftpd_banner=欢迎来到湖南三辰Fake-Ta FTP 网站.

#允许为目录配置显示信息,显示每个目录下面的message_file文件的内容

dirmessage_enable=YES

#显示会话状态信息,关!

#setproctitle_enable=YES

#空闲连接超时

idle_session_timeout=600

#数据传输超时

data_connection_timeout=120

#接受建立联机的超时设定

accept_timeout=60

#可接受的最大client数目

max_clients=100

#每个ip的最大client数目

max_per_ip=5

#允许使用"async ABOR"命令,一般不用,容易出问题

async_abor_enable=YES

#管控是否可用ASCII 模式上传。默认值为NO。

ascii_upload_enable=YES

#管控是否可用ASCII 模式下载。默认值为NO。

ascii_download_enable=YES

#是否能使用ls -R命令以防止浪费大量的服务器资源

#ls_recurse_enable=YES

#是否使用单进程模式

#one_process_model

#显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果

use_localtime=NO

#测试平台优化

#use_sendfile=YES

#可以上传(全局控制).

write_enable=YES

#上传文件的权限配合umask使用

#file_open_mode=0666

############# 匿名用户配置

#接受匿名用户

anonymous_enable=YES

anon_umask=022

#匿名用户login时不询问口令

no_anon_password=YES

#匿名用户主目录

anon_root=(none)

#定义匿名登入的使用者名称。默认值为ftp。

ftp_username=FTP

#匿名用户的传输比率(b/s)

anon_max_rate=51200

#匿名用户登陆后的根目录

anon_root=/var/ftp

#匿名用户可以上传

anon_upload_enable=NO

#匿名用户可以建目录

anon_mkdir_write_enable=NO

#匿名用户其它的写及删除权利

anon_other_write_enable=NO

#如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES。

anon_world_readable_only=YES

所有匿名上传的文件的所属用户将会被更改成chown_username

chown_uploads=YES

匿名上传文件所属用户名

chown_username=lightwiter

#如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录

deny_email_enable=YES

#禁止使用的匿名用户登陆时作为密码的电子邮件地址

banned_email_file=/etc/vsftpd.banned_emails

############ 本地用户 配置

#接受本地用户

local_enable=YES

#本地用户主目录

local_root=(none)

#local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk

#本地用户上传文件的umask

local_umask=022

#本地用户的传输比率(b/s)

local_max_rate=5120000

#定义用户配置文件的目录

user_config_dir=/etc/vsftpd/userconf

#定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的.

#定义限制/允许用户登录的文件

userlist_file=/etc/vsftpd/vsftpd.user_list

########## 虚拟用户

guest_enable=YES|NO

#若是启动这项功能,所有的非匿名登入者都视为guest

guest_username=ftp

#定义VSFTPD的guest用户在系统中的用户名。默认值为ftp

############## 用户访问安全

#定义PAM 所使用的名称,预设为vsftpd。

pam_service_name=vsftpd

#仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录

check_shell=YES

#若启用此选项,userlist_deny选项才被启动

userlist_enable=YES

#若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录

userlist_deny=NO

#如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录(这个不是很清楚,很哪位熟悉的指点一下)

passwd_chroot_enable=NO

#定义不能更改用户主目录的文件

chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

#如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录

chroot_list_enable=YES

#这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当vsftpd 不需要file system 的权限时,就会将使用者限制在此数据夹中。默认值为/usr/share/empty

secure_chroot_dir=/usr/share/empty

#将本地用户锁定在自家目录中。当此项被激活时,chroot_list_enable和chroot_local_users参数的作用将发生变化,chroot_list_file所指定文件中的用户将不被锁定在自家目录。本参数被激活后,可能带来安全上的冲突,特别是当用户拥有上传、 shell访问等权限时。因此,只有在确实了解的情况下,才可以打开此参数。默认值为NO。

chroot_local_users=YES|NO

#是否隐藏文件的所有者和组信息。YES,当用户使用"ls -al"之类的指令时,在目录列表中所有文件的拥有者和组信息都显示为ftp。默认值为NO

hide_ids=YES|NO

#开启tcp_wrappers支持

tcp_wrappers=YES

#当服务器运行于最底层时使用的用户名

nopriv_user=nobody

#当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。

text_userdb_names=NO

########################################

别外,如果要对每个用户进行单独的控制,只需要在user_config_dir中建立username文件,内容为数据传输和用户权利里面设置个人的合适的选项,用户自定义文件同样适合用pam支持的虚拟用户

2、 FTP 数字代码的意义

110 重新启动标记应答。

120 服务在多久时间内ready。

125 数据链路埠开启,准备传送。

150 文件状态正常,开启数据连接端口。

200 命令执行成功。

202 命令执行失败。

211 系统状态或是系统求助响应。

212 目录的状态。

213 文件的状态。

214 求助的讯息。

215 名称系统类型。

220 新的联机服务ready。

221 服务的控制连接埠关闭,可以注销。

225 数据连结开启,但无传输动作。

226 关闭数据连接端口,请求的文件操作成功。

227 进入passive mode。

230 使用者登入。

250 请求的文件操作完成。

257 显示目前的路径名称。

331 用户名称正确,需要密码。

332 登入时需要账号信息。

350 请求的操作需要进一部的命令。

421 无法提供服务,关闭控制连结。

425 无法开启数据链路。

426 关闭联机,终止传输。

450 请求的操作未执行。

451 命令终止:有本地的错误。

452 未执行命令:磁盘空间不足。

500 格式错误,无法识别命令。

501 参数语法错误。

502 命令执行失败。

503 命令顺序错误。

504 命令所接的参数不正确。

530 未登入。

532 储存文件需要账户登入。

550 未执行请求的操作。

551 请求的命令终止,类型未知。

552 请求的文件终止,储存位溢出。

553 未执行请求的的命令,名称不正确。

参考文章:《vsftp配置大全---超完整版,首发CU之FTP区

http://bbs.chinaunix.net/thread-561183-1-1.html

http://www.chinaunix.net/jh/4/484844.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息