1. FTP介绍
FTP 和 NFS 类似,也是文件共享传输相关的一种服务,FTP 是 File Transfer Protocol(文件传输协议) 的英文简称,而中文简称为“文传协议”。用于 Internet 上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的 FTP 应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在 FTP 的使用当中,用户经常遇到两个概念:“下载”(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用 Internet 语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
我们都知道 xshell 支持 rz 和 sz 命令,可以让 windows 和 Linux 机器互相传输文件,但是这种传输方式有限制,例如超过四个 G 的文件就无法传输,又或者通过跳板机登录的一台远程服务器,也无法使用 rz 和 sz 命令来传输文件。这种情况下就可以使用 FTP 来解决这个问题。
我们可以在远程服务器上搭建一个 FTP 服务,如果 Windows 作为客户端就可以下载一个客户端软件,连接上服务器的 FTP 服务,然后就可以进行互传文件了,这种就叫 FTP 服务器。
但是如果在企业应用中,大企业的话是不使用 FTP 的,因为不是很安全,而且对于版本管理上并不是很好,所以一般只有小公司或者个人的网站之类的会使用 FTP。大企业都是使用自动化发布类似于 git 这种能够很好地进行版本控制的服务平台。
2. 使用vsftpd搭建FTP
- centos 上自带的 FTP 软件 vsftpd,默认没有安装,需要用 yum 安装
[root@sc ~]# yum install -y vsftpd
- 安装后,不用配置,可以直接使用,默认支持使用系统账号登录,但是因为安全原因,需要建立账号体系
虽然 vsftpd 可以直接使用系统级别的用户,但是这样做不安全,所以我们要创建虚拟用户去映射这个普通用户,而虚拟用户是可以映射多个的,由于创建普通用户时候指定了 /sbin/nologin,这样的话即便有账户和密码也无法登陆系统,这样能够提高安全性,编辑 vsftpd_login 文件,这是虚拟用户的密码文件。
[root@sc ~]# useradd -s /sbin/nologin virftp #然后创建virftp,作为这个服务的映射用户
[root@sc ~]# vim /etc/vsftpd/vsftpd_login #编写账号、密码文件
test_sc01 #用户名
123 #密码
test_sc02 #用户名
123 #密码
- 保存退出后给这个文件授予 600 权限,因为这是密码文件不能给所有的用户都可以读
[root@sc ~]# chmod 600 /etc/vsftpd/vsftpd_login
- vsftpd 使用的密码不是明文,所以需要生产相对应的库文件
[root@sc ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db #生成库文件
[root@sc ~]# ls -l /etc/vsftpd/
total 36
-rw-------. 1 root root 125 Oct 31 2018 ftpusers
-rw-------. 1 root root 361 Oct 31 2018 user_list
-rw-------. 1 root root 5116 Oct 31 2018 vsftpd.conf
-rwxr--r--. 1 root root 338 Oct 31 2018 vsftpd_conf_migrate.sh
-rw-------. 1 root root 28 May 24 13:54 vsftpd_login
-rw-r--r--. 1 root root 12288 May 24 14:00 vsftpd_login.db #此为生成的库文件密码
- 创建虚拟用户的配置文件所在的目录,进入到该目录
[root@sc ~]# mkdir /etc/vsftpd/vsftpd_user_conf
[root@sc ~]# cd /etc/vsftpd/vsftpd_user_conf
[root@sc vsftpd_user_conf]#
- 创建一个配置文件,这个配置文件的名称必须和你在 vsftpd_login 文件里定义的用户名一致
[root@sc ~]# cd /etc/vsftpd/vsftpd_user_conf
[root@sc vsftpd_user_conf]# vim test_sc01
local_root=/home/virftp/test_sc01 #新建 test_sc01 账号的配置文件
anonymous_enable=NO #是否允许匿名用户
write_enable=YES #是否允许可写
local_umask=022 #创建新目录和文件的权限
anon_upload_enable=NO #是否允许匿名用户上传
anon_mkdir_write_enable=NO #是否允许匿名用户可创建
idle_session_timeout=600 #连接后没有任何操作的超时时间,空闲时间段
data_connection_timeout=120 #数据传输超时时间
max_clients=10 #最大允许连接的 clients 客户端
- 创建账号 test_sc01 的家目录,并在其下面创建新文件
[root@sc vsftpd_user_conf]# mkdir /home/virftp/test_sc01 #定义完虚拟用户的配置文件之后,创建用户的家目录
[root@sc vsftpd_user_conf]# touch /home/virftp/test_sc01/test.txt #在家目录下创建一个文件,等会登录虚拟用户时就能看到这个文件
[root@sc vsftpd_user_conf]# chown -R virftp:virftp /home/virftp #修改 virftp 家目录的权限,因为虚拟用户要映射到这个用户上
[root@sc vsftpd_user_conf]#
- 配置认证文件及路径,按下面增加 2 行语句,注意每行语句后面不能有空格
[root@sc vsftpd_user_conf]# vim /etc/pam.d/vsftpd
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login #新增语句
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login #新增语句
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth