命令端口:
listen_port=21 ,如果需要改成其他的端口比如1121,首选需要改这个端口
注意:该信息默认没有,使用的话,需要用户自己添加。默认是21。
主动模式端口:
connect_from_port_20=YES 主动模式端口为20(该项配置文件默认已经添加)
ftp_data_port=20 指定主动模式的端口
注意:如果要修改主动模式的链接端口,只需要修改"ftp_data_port"的配置,不需要修改"connect_from_port_20=YES"的配置,有点儿诡异。另外"ftp_data_port"man帮助中并没有说明。
被动模式端口范围:
pasv_min_port=6000 (0为随机分配)
pasv_max_port=6010(这两项定义了可以同时执行下载链接的数量。)
pasv_address
当使用PASV命令时,vsftpd会用这个地址进行反馈。需要提供一个数字化的IP地址。
默认值:无(地址将取自进来(incoming)的连接的套接字)
注意:linux客户端默认使用被动模式,windows 客户端默认使用主动模式。
注意:在ftp客户端中执行"passive"来切换数据通道的模式。也可以使用"ftp -A ip"直接使用主动模式。
注意:"ss -nt"显示已建立的链接;
注意:主动模式、被动模式是有客户端来指定的。
注意:有的时候,重启服务的时候,需要杀死正在连接的进程,如果该进程不断,那么就不能重启服务。也就造成重启服务特别慢,尤其是在实际生产中,建议使用reload。
使用当地时间:
use_localtime=YES 使用当地时间(默认为NO,使用GMT,建议设置成YES。)
匿名用户:
anonymous_enable=YES:支持匿名用户(默认yes,支持匿名链接)
no_anon_password=YES:匿名用户略过口令检查(默认NO)
注意:匿名用户登录,默认情况下,只可以下载pub下的文件,不允许上传,需要使用上传权限,还需要开启下面的选项。
anon_world_readable_only:只能下载全部读的文件 (默认YES)
anon_upload_enable=YES:允许匿名上传文件;
注意:该项配置中就有,不过被注释掉了。
注意:仅仅开启"anon_upload_enable"项是不够的,因为ftp进程的执行者的身份是服务端中的"ftp"用户,所以,要保证该用户在文件系统中有指定的权限;此项"anon_upload_enable"关闭的话,上传文件的报错是"Permission denied.",打开"anon_upload_enable"后,上传文件,报错是"Could not create file.",这是因为ftp目录在pub目录上,没有"w"权限。建议使用acl。
注意:下载的时候,是使用nobody的身份的,所以要保证nobody用户有该文件的"r"权限。
anon_mkdir_write_enable=YES:允许匿名建立文件夹(默认也被注释了)
anon_other_write_enable=YES:可删除和修改上传的文件;
注意:匿名用户上传文件使用的是匿名ftp用户的身份,但是删除的时候,使用的是nobody用户的权限。所以在ftp客户端上,如果想要删除文件,还要打开该项配置,并且还要保证文件系统上nobody的权限。(注意:删除的权限是ftp的父进程nobody删除的!)
anon_umask=077:指定匿名上传umask(默认没有该行)
注意:如果想要让ftp用户可以上传文件、也可以下载该文件,可以添加"anon_umask=022"。
chown_uploads=YES:(默认NO)指定上传文件的默认的所有者和权限;
chown_username=wang:指定匿名用户上传文件的所属者是"wang"
chown_upload_mode=0644:指定匿名用户上传文件的权限。
注意:不允许ftp用户的"家目录"有写权限。禁止登录并报错"421 Service not available, remote server has closed connection"
注意:删除、下载操作是以nobody用户执行的。
Linux系统用户:
guest_enable=YES:开启用户身份映射;
guest_username=ftp:映射登录的用户的身份为guest用户,配合上面选项生效;
注意:开启映射功能之后,用户登录的时候。就是以该guest用户的身份运行的。只是在登录的时候,用到了系统用户的用户名和密码。
注意:将系统用户映射成为ftp用户的话,同样不允许ftp用户对他的家目录有"w"权限。
local_enable=YES:是否允许linux用户登录;
write_enable=YES:允许linux用户上传文件(默认已经有了该项);
local_umask=022:指定系统用户上传文件的默认权限;
local_root=/ftproot:非匿名用户登录的时候所在目录,默认是自己的家目录。
注意:此时是不禁锢用户的,用户可以随意切换目录配合"guest_enable、guest_username"两个选项,可以实现将所有非匿名用户禁锢在特定的明目下。
注意:设置的默认登录的目录,要保证该用户对该目录有"x"权限。如果有"w"权限,是禁止用户登录的。
注意:匿名用户上传数据,不仅需要文件系统上对该目录有"w"权限,还需要ftp服务开启允许匿名上传的功能。而系统用户,只要保证对该目录有"w"权限即可上传文件。
禁锢所有系统用户在家目录中:
chroot_local_user=YES:(默认NO,不禁锢)禁锢系统用户
注意:禁锢用户的目录,要保证该用户没有"w"权限。而没有写权限,就没有办法上传文件,所以,可以在禁锢的目录下,新创建一个目录,付给该用户"w"权限,就可以上传文件了。
注意:匿名用户本身就是禁锢的;
禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
当chroot_local_user=YES时,则chroot_list中用户不禁锢
当chroot_local_user=NO时,则chroot_list中用户禁锢
wu-ftp日志:默认启用
xferlog_enable=YES:(默认)启用记录上传下载日志
xferlog_std_format=YES:(默认)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog:(默认)文件可自动生成
vsftpd日志:默认不启用
dual_log_enable=YES:使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log:(默认)文件可自动生成
登录提示信息:
ftpd_banner="welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt:优先上面项生效
注意:"cat test.txt"时显示颜色的方法,就是"echo -e "\033[31mwarning!!!\033[0m" > test.txt"
注意:建议不要写"welcome",免得引起法律纠纷。
访问目录的提示信息:
dirmessage_enable=YES:(默认)
message_file=.message:(默认)信息存放在指定目录下.message
使用pam(Pluggable Authentication Modules)完成用户认证
pam_service_name=vsftpd:该配置默认就有
/etc/vsftpd/ftpusers:默认文件中用户拒绝登录
pam配置文件:/etc/pam.d/vsftpd
是否启用控制用户登录的列表文件:
userlist_enable=YES:默认有此设置
userlist_deny=YES:(默认值)黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list:此为默认值
连接限制:
max_clients=0:最大并发连接数
max_per_ip=0:每个IP同时发起的最大连接数
vsftpd服务指定用户身份运行:
nopriv_user=nobody
传输速率:字节/秒
anon_max_rate=0:匿名用户的最大传输速率
local_max_rate=0:本地用户的最大传输速率
注意:建议设置一下限速。
注意:可以使用wget --ftp-user=wang --ftp-password=centos ftp://ip/f1测试
连接时间:秒为单位
connect_timeout=60:主动模式数据连接超时时长
accept_timeout=60:被动模式数据连接超时时长
data_connection_timeout=300:数据连接无数据输超时时长
idle_session_timeout=60:无命令操作超时时长
优先以文本方式传输:(不建议使用)
ascii_upload_enable=YES
ascii_download_enable=YES
注意:ftp中下载有两种方式,binary模式(二进制模式、默认),ascII模式(asc码模式)。
注意:不同的操作系统的编码机制是不同的,所以,在windows中编写的脚本,拿到linux中运行是执行失败的。可以使用"cat -A 文件名"查看。如果使用ascII模式上传/下载,就会自动做一下转换。
centos6中配置FTP服务以非独立服务方运行:
首先修改配置文件/etc/vsftpd/vsftpd.conf,添加一条
listen=NO
默认是"yes",以独立服务运行;
然后安装xined服务(yum install telnet-server),并创建一个vsftpd的配置文件:
#cat /etc/xinetd.d/vsftpd
service ftp
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_failure += USERID
disable = no
}
实现基于SSL的FTPS:
ftp服务,默认是不加密的,基于安全考虑,可以使用类似于https的方式tls(http),使用ftps=tls(ftp)。
查看是否支持SSL:
ldd `which vsftpd`:查看到libssl.so
创建自签名证书:
cd /etc/pki/tls/certs/
make vsftpd.pem
注意:生成的私钥文件和证书文件混在一起。
openssl x509 -in vsftpd.pem -noout –text
建议将vsftpd.pem证书文件,拷到执行目录下"/etc/vsftpd/"目录下。
配置vsftpd服务支持SSL:/etc/vsftpd/vsftpd.conf
ssl_enable=YES:启用SSL
allow_anon_ssl=NO:匿名不支持SSL
force_local_logins_ssl=YES:本地用户登录加密
force_local_data_ssl=YES:本地用户数据传输加密
在配置文件中添加这一行:
rsa_cert_file=/etc/vsftpd/vsftpd.pem
用filezilla等工具测试(注意:客户端的ftp工具是无法使用加密的。)。
vsftpd虚拟用户:
虚拟用户:
所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录;
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定;
虚拟用户帐号的存储方式:
文件:编辑文本文件,此文件需要被编码为hash格式,文件的格式为奇数行为虚拟用户的用户名,偶数行为密码。
运行命令:db_load -T -t hash -f vusers.txt vusers.db
注意:"*.db"格式的数据库是伯克利大学开发的数据库格式。我们需要创建一个文本文件,里面记录着用户名和密码,然后使用"db_load -T -t hash -f vusers.txt vusers.db"命令,将文本文件生成为数据库文件。
注意:建议将文件权限设置成600;
注意:如果是要添加虚拟用户的话,只能更改文本文件中的记录,然后再创建成vusers.db文件。使用该方法不是很便利,所以建议使用mysl数据库的方式存储虚拟用户的用户名。
关系型数据库中的表中:
实时查询数据库完成用户认证;
mysql库:pam要依赖于pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README
注意:虚拟用户默认是会禁锢的,所以,映射的用户所登录得目录是不可以有写权限的。
==============================================================================
资料二:
详细资料参考:http://www.linuxidc.com/Linux/2011-03/33410.htm
FTP工作方式简介
FTP的工作方式有两种,一种是PORT FTP,另一种是PASV FTP。下面介绍其工作方式。
二者的区别在于PORT FTP的数据传输端口是由FTP服务器指定的,而PASV FTP则是由FTP客户端指定的,而且每次数据连接所使用的端口号都不同。正因为如此,所以在CuteFTP等FTP客户端软件中,其连接类型设置项中有PORT和PASV两种选择。
当FTP服务器设置为PASV工作模式时,客户端也必须设置为PASV连接类型。若客户端连接类型设置为PORT,则能建立FTP连接,但在执行ls或get等需要数据请求的命令时,将会出现无响应并最终报告无法建立数据连接。
(2)与端口相关的配置
listen_port=21
// 设置FTP服务器建立连接所侦听的端口,默认值为21。
连接非标准端口示例:ftp www.linuxidc.com 7000
connect_from_port_20=YES
// 默认值为YES,指定FTP数据传输连接使用20端口。若设置为NO,则进行数据连接时,所使用的端口由ftp_data_port指定。
ftp_data_port=20
//设置PORT方式下FTP数据连接所使用的端口,默认值为20。
pasv_enable=YES|NO
//若设置为YES,则使用PASV工作模式;若设置为NO,使用PORT模式。默认为YES,即使用PASV模式。
pasv_max_port=10000
//设置在PASV工作方式下,数据连接可以使用的端口范围的上界。默认值为0,表示任意端口。
pasv_mim_port=20000
//设置在PASV工作方式下,数据连接可以使用的端口范围的下界。默认值为0,表示任意端口。
10.设置传输模式
FTP在传输数据时,可使用二进制(Binary)方式,也可使用ASCII模式来上传或下载数据。
ascii_download_enable=YES //设置是否启用ASCII模式下载数据。默认为NO。
ascii_upload_enable=YES //设置是否启用ASCII模式上传数据。默认为NO。
11.设置上传文档的所属关系和权限
(1)设置匿名上传文档的属主
chown_uploads=YES
//用于设置是否改变匿名用户上传的文档的属主。默认为NO。若设置为YES,则匿名用户上传的文档的属主将被设置为chown_username配置项所设置的用户名。
chown_username=whoever
//设置匿名用户上传的文档的属主名。只有chown_uploads=YES时才有效。建议不要设置为root用户。 但系统默root
(2)新增文档的权限设定
local_umask=022
//设置本地用户新增文档的umask,默认为022,对应的权限为755。umask为022,对应的二进制数为000 010 010,将其取反为111 101 101,转换成十进制数,即为权限值755,代表文档的所有者(属主)有读写执行权,所属组有读和执行权,其他用户有读和执行权。022适合于大多数情况,一般不需要更改。若设置为077,则对应的权限为700。
anon_umask=022 //设置匿名用户新增文档的umask。默认077
file_open_mode=0755 //设置上传文档的权限。权限采用数字格式。 默认0666
12.日志文件
xferlog_enable=YES //是否启用上传/下载日志记录。默认为NO
xferlog_file=var/log/vsftpd.log //设置日志文件名及路径。需启用xferlog_enable选项
xferlog_std_format=YES //日志文件是否使用标准的xferlog日志文件格式(与wu-ftpd使用的格式相同) 。默认为NO
13.其他设置
text_userdb_names=NO
//设置在执行ls命令时,是显示UID、GID还是显示出具体的用户名或组名称。默认为NO,以UID和GID方式显示,若希望显示用户名和组名称,则设置为YES。
ls_recurse_enable=YES
//若设置为YES,则允许执行“ls –R”这个命令,默认值为NO。在配置文件中该配置项被注释掉了,与此类似的还有一些配置,需要启用时,将注释符去掉并进行YES或NO的设置即可。
详细资料参考:http://www.linuxidc.com/Linux/2011-03/33410.htm
================================================================================================================
资料二: 重要参数
完整配置
listen=yes listen_port=21 max_clients=100 max_per_ip=10 local_max_rate=5120000 anonymous_enable=no local_enable=yes write_enable=no chroot_local_user=yes chroot_list_enable=yes chroot_list_file=/etc/vsftpd/chroot_list guest_enable=yes guest_username=kingsoft virtual_use_local_privs=yes user_config_dir=/etc/vsftpd/user_config pasv_enable=yes pasv_min_port=4500 pasv_max_port=5000 tcp_wrappers=yes xferlog_enable=yes xferlog_file=/var/log/ftp/vsftpd.log idle_session_timeout=600 data_connection_timeout=120 accept_timeout=60 connect_timeout=60 connect_from_port_20=no local_umask=022 pam_service_name=vsftpd.vu pasv_address=本机ip pasv_addr_resolve=yes
说明:
主动模式
Port_enable=YES 开启主动模式 Connect_from_port_20=YES 当主动模式开启的时候 是否启用默认的20端口监听 Ftp_date_port=%portnumber% 上一选项使用NO参数是 指定数据传输端口
被动模式 PASV_enable=YES 开启被动模式 PASV_min_port=%number% 被动模式最低端口 PASV_max_port=%number% 被动模式最高端口
iptables中开放这段端口
service iptables start 打开防火墙
iptables -I INPUT -p tcp --dport 10020:10040 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
在被动模式,服务器做了NAT,例如云主机,这时候我们用特定的IP访问机器,其实还转了一层。FTP客户端访问机器可能会没响应。具体情况为登录成功,但是list目录和文件的时候卡住。
这时候我们用lsof -i:21
vsftpd 22411 nobody 0u IPv4 68905 0t0 TCP 10.140.41.65:ftp->10.10.10.98:43380 (ESTABLISHED) vsftpd 22411 nobody 1u IPv4 68905 0t0 TCP 10.140.41.65:ftp->10.10.10.98:43380 (ESTABLISHED)
这时候可以看到机器的真正IP。
我们需要设置
pasv_address=本机ip【就是我们能访问的外网IP】 pasv_addr_resolve=yes
这样ftp客户端就可以解析IP,访问成功