作者:【吴业亮】
博客:https://wuyeliang.blog.youkuaiyun.com/
1、FTP的传输有两种方式
-
ASCII传输方式 假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝。
-
二进制传输模式 在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果传输二进制文件,所有的位都是重要的。)
FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式:
- 主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口。
- 被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。
说明 大多数FTP客户端都在局域网中,没有独立的公网IP地址,且有防火墙阻拦,主动模式下FTP服务器成功连接到客户端比较困难。因此,如无特殊需求,建议您将FTP服务器配置为被动模式。
FTP支持以下三种认证模式:
- 匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。
- 本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。
- 虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问
2、安装vsftpd
# yum -y install vsftpd
3、备份配置文件/etc/vsftpd/vsftpd.conf
# cp -a /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
4、配置/etc/vsftpd/vsftpd.conf内容如下:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
local_root=public_html
use_localtime=YES
seccomp_sandbox=NO
参数解释:
- anonymous_enable=YES 是否允许匿名ftp(默认为YES),如否则选择NO,基于用户名与密码的访问
- anon_upload_enable=YES 是否允许匿名ftp 用户上传(默认被注释即不支持)
- chroot_list_enable=YES 是否将系统用户限制在自己的home目录下
- chroot_list_file=/etc/vsftpd/chroot_list 如果chroot_list_enable=YES 那么在/etc/vsftpd/chroot_list 中列出的是被限制的用户的列表,这个和上面的连用。
- ftpd_banner=Welcome to blah FTP service. 定制欢迎信息
- local_enable=YES 是否允许本地用户登录
- local_umask=022 默认的umask码 配置文件里面没有anon_umask,其实可以用这条, 权限掩码,比如umask是 022,你创建一个文件本来是666 就要 -022 = 644
- connect_from_port_20=YES 是否确信端口传输来自20(ftp-data)
- chown_username=username 是否改变上传文件的属主, 如果是需要输入一个系统用户名, 你可以把上传的文件都改成root 属主
- xferlog_file=/var/log/vsftpd.log ftp 传输日志的路径和名字默认是/var/log/vsftpd.log
- xferlog_std_format=YES 是否使用标准的ftp xferlog 模式
- idle_session_timeout=600 设置默认的断开不活跃session的时间
- data_connection_timeout=120 设置数据传输超时时间
- ascii_upload_enable=YES 是否使用ascii码方式上传文件
- ascii_download_enable=YES 是否使用ascii码方式下载文件
- userlist_enable=YES 在/etc/vsftpd/user_list 文件中列出用户不能访问FTP 服务器
- tcp_wrappers=YES 是否支持tcp_wrappers
5、创建用户
在/etc/vsftpd/chroot_list中写入可以登录的用户
admin
由于vsftp上述配置操作系统默认必须用改用户。
新建用户
# useradd admin
修改密码
# passwd admin
Changing password for user admin.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
6、配置防火墙
# firewall-cmd --add-service=ftp --permanent
success
# firewall-cmd --reload
success
7、配置selinux
# setsebool -P ftpd_full_access on
8、启动服务并设置开机启动
# systemctl start vsftpd
# systemctl enable vsftpd