自己动手搭建FTP服务

FTP连接方式

控制连接:标准端口为21,用于发送FTP命令信息数据连接:标准端口为20,用于上传、下载数据

数据连接的建立类型

主动模式:服务端从20端口主动向客户端发起连接命令连接:客户端 >1023端口 -> 服务器 21端口数据连接:客户端 >1023端口 <- 服务器 20端口

被动模式:服务端在指定范围内的某个端口被动等待客户端发起连接命令连接:客户端 >1023端口 -> 服务器 21端口数据连接:客户端 >1023端口 -> 服务器 >1023端口

主动模式与被动模式FTP优缺点

主动FTP对FTP服务器的管理有利,但对客户端的管理不利,因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利,因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞,虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

FTP用户的类型

匿名用户:anonymous或ftp //匿名用户登陆FTP无需密码本地用户:帐号名称、密码等信息保存在passwd、shadow文件中虚拟用户:使用独立的帐号/密码数据文件

FTP软件包安装

RPM安装方式:rpm –ivh vsftpd-2.2.2-6.e16.x86_64.rpmYUM安装方式:yum –y install vsftpd

FTP服务相关的配置文件与服务脚本

主配置文件:/etc/vsftpd/vsftpd.conf服务名称:vsftpd

用户控制列表文件

/etc/vsftpd/ftpusers //禁止登录FTP服务器的本地用户列表文件,该文件中的本地用户将被拒绝登录FTP服务器/etc/vsftpd/user_list //该文件中包含的本地用户可能被禁止登录FTP服务器,也可能被允许登录,具体是由主配置文件vsftpd.conf中决定当存在userlist_enable=yes的配置项时user_list文件生效,如果配置userlist_deny=yes,则仅禁止user_list中的用户登录如果配置userlist_deny=no,则仅允许user_list中的用户登录

常见配置项及含义说明

anonymous_enable=YES //是否允许匿名用户ftp或anonymous登录anon_root=/var/ftp //设置匿名用户的FTP根目录(缺省为/var/ftp)anon_umask=022 //设置匿名用户所上传文件的默认权限掩码值anon_world_readable_only=no //允许匿名用户浏览下载文件的权限anon_upload_enable=YES //是否允许匿名用户上传文件(若开启了selinux功能,则要将sftpd_anon_write的布尔值设为on)anon_mkdir_write_enable=YES //是否允许匿名用户有创建目录的权利anon_other_write_enable=YES //是否允许匿名用户有其他写入权限,如对文件改名、覆盖、及删除文件anon_max_rate //限制匿名用户的最大传输速率(0为无限制),单位为字节dirmessage_enable=YES //是否显示目录说明文件,默认是YES但需要手工创建.message文件local_enable=YES //是否允许本地用户登录local_umask=022 //设置本地用户所上传文件的默认权限掩码值local_root=/var/ftp //设置本地用户的FTP根目录(缺省为用户的宿主目录)local_max_rate //限制本地用户的最大传输速率(0为无限制)单位为字节chroot_local_user=yes //是否将FTP本地用户禁锢在宿主目录中listen_port 21 //设置监原FTP服务的端口号write_enable=yes //启用任何形式的写入权限(如上传、删除文件等)都需要开启此项download_enable=yes //是否允许下载文件(建立仅限于浏览、上传的FTP服务器时可将其设为no)xferlog_enable=YES //是否记录ftp传输过程,即启用FTP日志,默认记录到/var/log/xferlog文件中xferlog_std_format=yes //启用标准的xferlog日志格式,若禁用此项,将使用vsftpd自已的日志格式connect_from_port_20=YES //是否确信端口传输来自20端口chown_upload=YES、chown_username=username //是否改变上传文件的属主,如果是需要输入一个系统用户名,你可以把上传的文件都改成root属主pasv_enable=yes //允许被动模式连接pasv_max_port=24600 //设置用于被动模式的服务器最大端口号pasv_min_port=24500 //设置用于被动模式的服务器最小端口号pam_service_name=vsftpd //设置用于用户认证的PAM文件位置(/etc/pam.d目录中对应的文件名)userlist_enable=yes //是否启用user_list用户列表文件userlist_deny=yes //是否禁止user_list列表文件中的用户账号max_clients=0 //最多允许多少个客户端同进连接FTP服务器(0为无限制)max_per_ip=0 //对来自相同IP地址的客户端,最多允许多少个并发连接(0为无限制)tcp_wrappers=yes //是否启用tcp_wrappers访问控制idle_session_timeout=600 //设置默认的断开不活跃session的时间accept_timeout=60 将客户端空闲断开时间,单位:秒

实例一、实现匿名用户上传FTP

#mkdir /var/ftp/upload //创建用于上传的目录

设置匿名用户(ftp)对upload目录的写权限,有两种常用方法

方法1: #chown ftp /var/ftp/loadup //将upload目录的属主修改为ftp用户方法2:# setfacl -m g:ftp:r /var/ftp/upload //通过acl设置ftp组账号对upload目录的w权限

1. 本例采用方法2实现对upload目录的写权限,如下图所示:

2. 修改/etc/vsftpd/vsftpd.conf配置文件打开允许匿名用户上传功能,如下图所示

#vi /etc/vsftpd/vsftpd.conf

3. 修改selinux允许匿名用户上传

4. iptables防火墙规则设置

实例二:实现本地用户登录FTP服务器

1:修改selinux允许本地用户登录

2:修改selinux允许本地用户上传

3:禁锢本地用户在其宿主目录内

ID:snmp161