~沉%淀~

一切有为法,如梦幻泡影,如露亦如电,应作如是观

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

命令端口:

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,访问成功

 

 

 

posted on 2021-02-05 17:03  ~沉%淀~  阅读(388)  评论(0编辑  收藏  举报