vsftpd,tftp安装配置


一、 对比
共同点:都包含ftp
不同点:
1)vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。你可以通过ftp客户端上传下载软件。可设置访问用户名密码,或匿名anonymous登陆。默认端口是TCP:21
2)TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为UDP:69。 路由器,交换机等网络设备升级硬件系统可用,PXE安装系统需要配置tftp服务。
3)FTP 是完整、面向会话、常规用途文件传输协议。而 TFTP 用作 bones bare - 特殊目的文件传输协议。
4)交互使用 FTP。 TFTP 允许仅单向传输的文件。
5)FTP 提供身份验证。而TFTP 不。
搭建ftp应用只能选择vsftp。
VSFTP是FTP的服务段,而TFTP是不加密的FTP,这2个不是一回事
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。
安全性是编写VSFTP的初衷,除了这与生俱来的安全特性以外,高速与高稳定性也是VSFTP的两个重要特点。
在速度方面,使用ASCII代码的模式下载数据时,VSFTP的速度是Wu-FTP的两倍,如果Linux主机使用2.4.*的内核,在千兆以太网上的下载速度可达86MB/S。
在稳定方面,VSFTP就更加的出色,VSFTP在单机(非集群)上支持4000个以上的并发用户同时连接,根据Red Hat的Ftp服务器(ftp.redhat.com)的数据,VSFTP服务器可以支持15000个并发用户
TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。



二、CentOS 6.4 下安装vsftpd 

概述:

vsftpd是Linux下比较著名的FTP服务器,搭建FTP服务器当然首选这个。

本文介绍了在CentOS 6.4下安装vsftpd、配置虚拟用户登录FTP的过程。

正文:

一:安装vsftpd

查看是否已经安装vsftpd

rpm -qa | grep vsftpd

如果没有,就安装,并设置开机启动

yum -y install vsftpd
chkconfig vsftpd on

二:基于虚拟用户的配置

所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟用户不能登录CentOS系统。

修改配置文件

打开/etc/vsftpd/vsftpd.conf,做如下配置

anonymous_enable=NO //设定不允许匿名访问
local_enable=YES //设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
chroot_list_enable=YES //使用户不能离开主目录
ascii_upload_enable=YES
ascii_download_enable=YES //设定支持ASCII模式的上传和下载功能
pam_service_name=vsftpd //PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证

以下这些是关于vsftpd虚拟用户支持的重要配置项,默认vsftpd.conf中不包含这些设定项目,需要自己手动添加

guest_enable=YES //设定启用虚拟用户功能
guest_username=ftp //指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
user_config_dir=/etc/vsftpd/vuser_conf //设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名

进行认证

首先,安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包。

yum install db4 db4-utils

然后,创建用户密码文本/etc/vsftpd/vuser_passwd.txt ,注意奇行是用户名,偶行是密码

test
123456

接着,生成虚拟用户认证的db文件

db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

随后,编辑认证文件/etc/pam.d/vsftpd,全部注释掉原来语句,再增加以下两句:

auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd

最后,创建虚拟用户配置文件

mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/test  //文件名等于vuser_passwd.txt里面的账户名,否则下面设置无效

内容如下

local_root=/home/xxx //虚拟用户根目录,根据实际情况修改
write_enable=YES  //可写
anon_umask=022 //掩码
anon_world_readable_only=NO 
anon_upload_enable=YES 
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

设置Selinux

setsebool -P ftp_home_dir=1   //设置ftp可以使用home目录
setsebool -P allow_ftpd_full_access=1   //设置ftp用户可以有所有权限

设置FTP根目录权限

mkdir /home/xxx  //创建目录
chmod R 755 /ftp
chmod R 777 /home/xxx

最新的vsftpd要求对主目录不能有写的权限所以ftp为755,主目录下面的子目录再设置777权限

设置防火墙

打开/etc/sysconfig/iptables

在“-A INPUT –m state --state NEW –m tcp –p –dport 22 –j ACCEPT”,下添加:

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

然后保存,并关闭该文件,在终端内运行下面的命令,刷新防火墙配置:

service iptables restart

OK,运行“service vsftpd start”,你就可以访问你的FTP服务器了。

配置PASV模式

vsftpd默认没有开启PASV模式,现在FTP只能通过PORT模式连接,要开启PASV默认需要通过下面的配置

打开/etc/vsftpd/vsftpd.conf,在末尾添加

pasv_enable=YES   //开启PASV模式
pasv_min_port=40000   //最小端口号
pasv_max_port=40080   //最大端口号
pasv_promiscuous=YES

在防火墙配置内开启40000到40080端口

-A INPUT -m state --state NEW -m tcp -p tcp --dport 40000:40080 -j ACCEPT

重启iptabls和vsftpd

iptables-save
service iptables restart
service vsftpd restart

现在可以使用PASV模式连接你的FTP服务器了~

------------------------------------------------------------------------------------------------------------------

CentOS 7中默认使用Firewalld做防火墙,所以修改iptables后,在重启系统后,根本不管用。

Firewalld中添加端口方法如下:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

参考: http://os.51cto.com/art/201008/221842_all.htm

 


三、Vsftp配置文件详解
    Vsftp配置文件详解
     
    FTP 分为两类,一种为PORT FTP,也就是一般的FTP﹔另一类是PASV FTP,分述如下: 
      www.2cto.com  
        PORT FTP 这是一般形式的FTP,首先会建立控制频道,默认值是port 21,也就是跟port 21 建立联机,并透过此联机下达指令。第二,由FTP server 端会建立数据传输频道,默认值为20,也就是跟port 20 建立联机,并透过port 20 作数据的传输。 
     
        PASV FTP 跟PORT FTP 类似,首先会建立控制频道,默认值是port 21,也就是跟port 21 建立联机,并透过此联机下达指令。第二,会由client 端做出数据传输的请求,包括数据传输port 的数字。 
      www.2cto.com  
    这两者的差异为何?PORT FTP当中的数据传输port是由FTP server 指定,而PASV FTP的数据传输port是由FTP client决定。通常我们使用PASV FTP,是在有防火墙的环境之下,透过client 与server 的沟通,决定数据传输的port。 
     
    BOOLEAN OPTIONS
     
    allow_anon_ssl
        如果ssl_enable是active的,设置为yes的话,匿名用户则可以使用SSL连接,默认No
    anon_mkdir_write_enable
        如果设置为yes,匿名用户则在一定的条件下(write_enable是active,并且在父目录有写权限)可以创建目录,默认No
     
    PORT FTP 这是一般形式的FTP,首先会建立控制频道,默认值是port 21,也就是跟port 21 建立联机,并透过此联机下达指令。第二,由FTP server 端会建立数据传输频道,默认值为20,也就是跟port 20 建立联机,并透过port 20 作数据的传输。 
    PASV FTP 跟PORT FTP 类似,首先会建立控制频道,默认值是port 21,也就是跟port 21 建立联机,并透过此联机下达指令。第二,会由client 端做出数据传输的请求,包括数据传输port 的数字。 
    这两者的差异为何?PORT FTP 当中的数据传输port 是由FTP server 指定,而PASV FTP 的数据传输port 是由FTP client 决定。通常我们使用PASV FTP,是在有防火墙的环境之下,透过client 与server 的沟通,决定数据传输的port。 
     
    BOOLEAN OPTIONS
     
    allow_anon_ssl
        如果ssl_enable是active的,设置为yes的话,匿名用户则可以使用SSL连接,默认No
    anon_mkdir_write_enable
        如果设置为yes,匿名用户则在一定的条件下(write_enable是active,并且在父目录有写权限)可以创建目录,默认No
    anon_other_write_enable 
        如果设置为yes,匿名用户除了有upload和创建目录权限外,还有写操作权限,如:删除或者重命名文件,默认No
    anon_upload_enable
        如果设置为yes,匿名用户在一定的条件下(write_enable必须是active,匿名用户必须有写权限)可以上传文件,默认No
    anon_world_readable_only
        如置为yes,匿名用户则可以下载可读的文档,默认Yes
    anonymous_enable
        是否允许匿名用户可以登录ftp,如果设置为yes,ftp和anonymous用户都可以作为匿名用户登录,默认Yes
    ascii_download_enable
        如果开启,则以ASCII模式下载数据,默认No
    ascii_upload_enable
        如果开启,则以ASCII模式上传数据,默认No
    async_abor_enable
        如果开启,则一个特殊的ftp命令会被开启,类似于'async ABOR',是否允许客户端使用rsync,默认No
    background
        如果开启,vsftp将以监听(listen)模式启动,默认No
    check_shell
        只有在PAM没有嵌入vsftp的时候起作用,如果禁止,vsftp则不会在/etc/shells中检查本地用户的shell,默认Yes
    chmod_enable
        如果开启,则允许使用'SITE CHMOD'命令,这个只针对本地用户有效,对匿名用户无效。默认Yes
    chown_uploads
        如果开启,所有的匿名用户........................
    chroot_list_enable
        如果开启,你需要提供一个本地用户列表以指定谁在chroot()中,如果chroot_local_user设置为Yes,则这个列表表示哪些用户不在chroot()中,默认列表文件是/etc/vsftpd.chroot_list,你也可以通过chroot_list_file参数重置。默认No
    chroot_local_user
        如果开启,则本地用户默认使用chroot(),默认No
    connect_from_port_20
        控制在PORT模式下,数据连接是否使用20端口。默认是No
    debug_ssl
        如果开启,openssl连接诊断会在记录在vsftp日志中,默认No
    delete_failed_uploads 
        如果开启,任何上传失败的文件都会被删除,默认No
    deny_email_enable
     
    dirlist_enable
        如果关闭,所有的列目录命令都会被禁止,默认Yes
    dirmessage_enable
        如果开启,则在用户第一次进入一个目录时,会显示该目录下的.message文件的内容信息,你可以通过message_file重置该文件的设置,默认No
    download_enable
        
    dual_log_enable
        如果开启,两个日志文件会被同时产生,/var/log/xferlog和/var/log/vsftpd.log,前者是wu-ftpd类型日志,后者是vsftp自己风格的日志,默认No
    force_dot_files
        如果开启,以'.'开头的文件和目录会被列出来,即使没有使用a标记(ls -a),也就是显示隐藏文件,默认No
    force_anon_data_ssl
        只在ssl_enable是active时有效,如果设置为yes,则所有的匿名用户都被强制要求使用ssl发送和接收数据,默认No
    force_anon_logins_ssl
        只在ssl_enable是active时有效,如果设置为yes,则所哟的匿名用户都被强制要求使用ssl发送密码,默认No
    force_local_data_ssl
         只在ssl_enable是active时有效,如果设置为yes,所有的非匿名用户都被强制要求使用ssl发送和接收数据,默认Yes
    force_local_logins_ssl
         只在ssl_enable是active时有效,如果设置为yes,所有的非匿名用户都被强制要求使用ssl发送密码,默认Yes
    guest_enable
         如果开启,所有的非匿名用户以'guest'登录,一个'guest'登录后,会映射到guest_username指定文件中的用户上面,默认No
    hide_ids
        如果开启,所有的用户和组信息在目录中被显示时,都会显示为ftp,默认No
    implicit_ssl
     
    listen
        如果开启,vsftp则运行在standalone模式,默认No
    listen_ipv6
        类似listen,不过使用IPv6 socket代替IPv4,和listen参数互相排斥,默认No
    local_enable
        控制是否允许本地登录,如果开启,则在/etc/passwd中的用户都可以登录,默认No
    lock_upload_files
        如果开启,则所有的上传进程在上传文件时都会有一个写锁,所有的下载进程在下载文件时共享读锁,默认Yes
    log_ftp_protocol
        如果开启,假如xferlog_std_format参数没有开启,则所有的ftp请求和回应都会被记录进日志,默认No
    ls_recurse_enable
        如果开启,则允许用户使用'ls -R'命令,默认No
    mdtm_write
        如果开启,则允许MDTM修改文件访问时间,默认Yes    
    no_anon_password
        如果开启,则阻止vsftp询问匿名用户密码,匿名用户会直接登录,默认No
    no_log_lock
        如果开启,则阻止vsftp在写日志文件时获取文件锁,默认No
    passwd_chroot_enable
     
    pasv_addr_resolve
        如果你想在pasv模式使用主机名,则可以设置为yes,默认No
    pasv_enable
        如果你想关闭PASV模式,则设置no,默认Yes
    pasv_promiscuous
        如果你想关闭PASV模式的安全检查(它保证数据连接和控制连接源自同一个ip),可以设置为yes,默认No
    port_enable
        如果你想禁止通过PORT方法获取数据连接,可以设置为No,默认Yes 
    port_promiscuous
        如果你想禁止PORT模式的安全检查(确保出去的数据连接可以连接到客户端),则可以设置为Yes,默认No
    require_cert
        如果设置为yes,则所有的客户端ssl连接需要提供一个客户端证书,默认No
    syslog_enable
        如果开启,则所有记录到/var/log/vsftpd.log的日志都会记录到system log中,默认No
    tcp_wrappers
        如果开启,vsftp支持tcp_wrappers,默认No
    text_userdb_names
                 
    tilde_user_enable
     
    use_localtime
        如果开启,vsftp将会在显示目录时显示你的本地时间,默认No
    use_sendfile
         一个内部用来测试sendfile()系统调用效果的参数,默认Yes
    userlist_deny
        如果userlist_enable选项开启,则会检查这个选项,如果设置为no,只有在userlist_file中指定的用户会被允许登录,默认Yes
    userlist_enable
        如果开启,vsftp会加载userlist_file指定的用户列表,如果用户使用列表中的用户名登录,则会被拒绝掉,默认No
    validate_cert
        如果开启,所有的ssl客户端证书必须是验证ok的,而自己签名的证书则不会通过认证,默认No
    virtual_use_local_privs
        如果开启,虚拟用户则会和本地用户具有相同的权限,默认情况下,虚拟用户和匿名用户具有的权限一样,默认No
    write_enable
        是否允许FTP命令改变文件系统,这些命令是:STOR, DELE,RNFR, RNTO, MKD, RMD, APPE and SITE,默认No
    xferlog_enable
        如果开启,一个日志文件会维护上传和下载的详细信息,默认记录在/var/log/vsftpd.log,可以通过vsftpd_log_file重置,默认No
    xferlog_std_format
        如果开启,传输日志则会采用标准的xferlog格式,默认是/var/log/xferlog,可以通过xferlog_file重置,默认No
     
     
    NUMERIC OPTIONS
     
    accept_timeout 
        远程客户端使用PASV模式时,建立数据连接的超时时间,默认60s
    anon_max_rate
        最大数据传输速率,默认0(不限制)
    anon_umask
        匿名用户创建一个文件的umask值,默认077
    chown_upload_mode
         匿名用户上传文件的mode值,默认0600
    connect_timeout
        远程客户端使用PORT模式时,响应数据连接的超时时间,默认60s
    data_connection_timeout
        一个允许数据传输粗略的超时时间,默认300s
    delay_failed_login
        暂停报告之前失败的登录,默认1s
    delay_successful_login
        暂停之前一个成功的登录,默认1s
    file_open_mode
        上传的文件具有的权限,默认0666
    ftp_data_port
        PORT模式的连接端口,默认20
    idle_session_timeout
        在两次输入ftp命令之间的空闲时间,默认300s
    listen_port
        如果vsftp工作在standalone模式,该端口监听进入的连接,默认21
    local_max_rate
        本地用户的最大数据传输速率,默认0(不限制)
    local_umask
        本地用户创建一个文件锁具有的umask,默认077
    max_clients
        如果vsftp工作在standalone模式,有多少用户可以连接进来,默认0(不限制)
    max_login_fails
        多少次登录失败后,kill这个连接,默认3
    max_per_ip
        如果vsftp工作在standalone模式,同一个ip源地址可以有多少个连接进来,默认0(不限制)
    pasv_max_port
        在PASV模式下,可以分配给数据连接的最大端口号,默认0(可以使用任何端口)
    pasv_min_port
        在PASV模式下,可以分配给数据连接的最小端口号,默认0(可以使用任何端口)
    trans_chunk_size
        一般不会改变该参数的值,不过你可以设置为8192试试,默认0
     
     
    STRING OPTIONS
     
    anon_root
        在匿名用户成功登录后,跳转到那个目录,默认none
    banned_email_file
        该文件包含了哪些匿名的e-mail 密码是不允许登录的,如果deny_email_enable被开启,则会检查这个参数,默认/etc/vsftpd.banned_emails
    banner_file
        当一个用户登录后,显示的信息,如果设置了该文件,则会覆盖ftpd_banner的设置,默认none
    ca_certs_file
        加载的CA文件的名称,默认none
    chown_username
         匿名用户上传文件所具有的owner,只有在chown_uploads被设置的时候有效,默认root
     
    chroot_list_file
        该文件包含哪些本地用户使用chroot(),只有在chroot_list_enable被开启的时候起作用,如果chroot_local_user开启,则列表文件变成哪些用户不使用chroot(),默认/etc/vsftpd.chroot_list
    cmds_allowed
        该选项用逗号分割一个允许执行的ftp命令列表(例如在POST模式下,cmds_allowed=USER, PASS,QUIT),默认none
    cmds_denied
        该选项用逗号分割一个不允许执行的ftp命令列表,默认none
    deny_file
      设置一个文件名模式,该匹配的文件都不许被访问,例如deny_file={*.mp3,*.mov,.private},默认none
    dsa_cert_file
        ssl加密连接中使用的DSA文件的位置,默认none
    dsa_private_key_file
        DSA私钥的位置,默认none
    ftp_username
        使用该帐号处理匿名登录的情况,默认ftp
    ftpd_banner
        可以使用该选项替换第一次登陆时显示的默认欢迎语句,默认none
    guest_username
        把一个真实用户映射到guest user上面,默认ftp
    hide_file
     
    listen_address
        如果vsftp工作在standalone模式,则可以通过该选项替换默认监听地址,默认none
    listen_address6
        和listen_address一样,替换ipv6
    local_root
        在本地用户登录后,vsftp跳转到那个目录,默认none
    message_file
        如果dirmessage_enable开启,该选项设置默认的信息文件,默认.message
    nopriv_user
        该用户完全没有特权,默认nobody
    pam_service_name
        vsftp使用的PAM服务的名称,默认vsftpd
    secure_chroot_dir
        该选项设置一个空目录名称,该目录不能被ftp用户有写权限,该目录作为一个安全的chroot()环境,vsftp不需要文件系统访问它
    ssl_ciphers
        ssl加密算法,默认DES-CBC3-SHA
    user_config_dir      
        允许你覆盖任何配置文件中的选项,它是基于每一个用户的配置,如果你设置user_config_dir为/etc/vsftpd_user_conf,当你用chris用户登录时,vsftp会申请加载/etc/vsftpd_user_conf/chris文件在该会话期内,不是所有的参数都在个人配置文件中生效的,默认none
    user_sub_token    www.2cto.com  
        用来连接虚拟账户,它会为每个虚拟帐号自动生成家目录,例如设置guest_username为/home/virtual/$USER,user_sub_token为$USER,当fred虚拟账户登录时,fred的家目录为/home/virtual/fred,默认none
    userlist_file
        当userlist_enable开启的时候,会加载该参数设置的文件,默认/etc/vsftpd.user_list
    vsftpd_log_file
        在xferlog_enable被设置,并且xferlog_std_format没有设置的时候,来指定vsftp风格的日志写到哪个文件中,如果你设置了syslog_enable,则日志会写入系统日志文件中,默认/var/log/vsftpd.log
    xferlog_file
        在xferlog_enable和xferlog_std_format被设置的时候,wu-ftpd风格的传输日志写入哪个文件中,默认/var/log/xferlog
     

四、Tftp配置过程方法
配置:
FTP服务vsftp配置过程
1、安装FTP服务器
rpm -qa|grep vsftpd //查找vsftpd有没有安装,若没安装可用yum install vsftpd 进行安装fedora 11环境下)。
2、配置相关文件
在安装好ftp会产生几个文件:
  /etc/vsftpd/vsftpd.conf 主配置文件
  /etc/vsftpd.ftpusers 指定哪些用户不能访问FTP服务器
  /etc/vsftpd.user_list 文件中指定的用户是否可以访问ftp服务器由vsftpd.conf文件中的userlist_deny的取值来决定。
使用命令:vi /etc/vsftpd/vsftpd.conf。利用vi编辑器编辑vsftpd的配置文件vsftpd.conf。将vsftpd.conf文件中的主要设置如下:
anonymous_enable=YES   是否允许匿名用户登录
local_enable=YES              是否允许本地用户登录
write_enable=YES             是否允许本地用户上传
anon_upload_enable=YES
anon_mkdir_write_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
connect_from_port_20=YES 启用FTP数据端口连接
listen_port=端口号 设置FTP工作的端口号,默认的为21
注意要将配置项前面的#去掉,配置才生效。
3、设置ftp的pub目录属性中的权限。根目录下的var文件夹下的ftp文件夹是用户登录到ftp的目录,而ftp目录下的pub目录是用户上传或下载文件的目录,如果要允许用户上传文件那么就要将这个目录的属性中的权限设置为可写。
4、启动ftp服务器。利用命令service vsftpd start就可以启动ftp服务器了。若让系统自动开机启动在ntsysv命令下选中vsftpd选项。
5、关闭ftp服务器。利用命令service vsftpd stop。

二、tftp服务配置过程
1、首先使用ntsysv命令查看xinetd是否已安装,若没安装则要先安装xinetd-2.3.14-15.fc8.i386.rpm,然后安装tftp-hpa-5.0.tar.gz,
安装tftp-hpa-5.0.tar.gz,即先解压,然后执行./Configure 、  make 、make install的顺序过程。

2、把/etc/xinet.d/下新建一个名字为tftp的文件,器内容为:
service tftp
{
socket_type              =dgram      
protocol                     =udp      
wait                              =yes      
user                             =root      
server                       =/usr/sbin/in.tftpd      
server_args              =-s /tftpboot/ -c      
disable                     =no       /*yes为开启*/
per_source                =11      
cps                              =100 2      
flags                          =IPv4
}

3、在使用ntsysv命令下,去掉iptable选项,选中tftp选项。
4、在/root/.bashrc(隐藏文件)中加入一句in.tftpd -l /tftpboot,即完成tftp的安装。

 








原文地址:https://www.cnblogs.com/timssd/p/4570687.html