命令端口:
listen_port=21
注意:该信息默认没有,使用的话,需要用户自己添加。默认是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(这两项定义了可以同时执行下载链接的数量。)
注意: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
注意:虚拟用户默认是会禁锢的,所以,映射的用户所登录得目录是不可以有写权限的。