1、FTP介绍
- FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。小公司用的多,大企业不用FTP,因为不安全。
- 用rz和sz传文件,文件大小超过4G就会出现问题
- rz把 window 上的文件传输到 linux 上
- sz 把 linux 上的文件传输到 window 上
2、使用vsftpd搭建ftp
在centos上默认自带的ftp服务软件包叫做vsftpd,vsftpd软件包是可以使用系统级别的用户,(也就是假设创建了一个普通用户user1,设置一个密码,这时候就可以用vsftpd启动这个服务,然后用user1这个用户去登陆,登录的形式为ftp,登录进去后会进入到user1这个用户的家目录下,但这样操作会存在安全隐患)
解决隐患的方法:给ftp设置一个虚拟用户,虚拟用户映射成系统中的一个普通用户(也可以映射多个虚拟用户),这个用户即使给了用户和密码你也是没有办法去通过ssh登录到服务器的机器,这样就相对安全了很多
安装vsftpd
[root@aminglinux ~]# yum install -y vsftpd
- 创建虚拟用户,并映射到系统普通用户来使用vsftpd
[root@aminglinux ~]# useradd -s /sbin/nologin virftp
用户名字可以随意取;-s 指定它的shell;/sbin/nologin 表示这个用户不能登录到系统,这么做是为了安全
- 编辑 vim /etc/vsftpd/vsftpd_login 虚拟用户的密码文件,在密码文件中定义用户名和密码;文件格式为:奇数行为用户名,偶数行为密码,多个用户就写多行
[root@aminglinux ~]# vim /etc/vsftpd/vsftpd_login
testuser1
123456
user1
654321
- 给 /etc/vsftpd/vsftpd_login 文件做一个 600的权限设置,为了确保密码文件的安全,防止所有的用户都可以读取
[root@aminglinux ~]# chmod 600 /etc/vsftpd/vsftpd_login
- 将文本的密码文件装换成二进制的密码文件:增加安全性
[root@aminglinux ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
[root@aminglinux ~]# ll /etc/vsftpd/
总用量 36
-rw------- 1 root root 125 8月 3 2017 ftpusers
-rw------- 1 root root 361 8月 3 2017 user_list
-rw------- 1 root root 5030 8月 3 2017 vsftpd.conf
-rwxr--r-- 1 root root 338 8月 3 2017 vsftpd_conf_migrate.sh
-rw------- 1 root root 30 7月 15 16:13 vsftpd_login
-rw-r--r-- 1 root root 12288 7月 15 16:15 vsftpd_login.db
在/etc/vsftpd/目录下,会看到生成了一个vsftpd_login.db文件,它和vsftpd_login文件相比只是多了一个 .db 的后缀;这个vsftpd_login.db密码是不能用 cat命令 查看的,在上面的密码文件是可以自定义的
创建虚拟用户的目录和配置文件
[root@aminglinux ~]# mkdir /etc/vsftpd/vsftpd_user_conf
[root@aminglinux ~]# cd /etc/vsftpd/vsftpd_user_conf
[root@aminglinux vsftpd_user_conf]# vim testuser1
#配置文件内容
local_root=/home/virftp/testuser1 //指定虚拟用户的家目录
anonymous_enable=NO //是否允许匿名用户
write_enable=YES //是否可写
local_umask=022 //创建新文件目录的默认权限
anon_upload_enable=NO //是否允许匿名用户上传
anon_mkdir_write_enable=NO //是否允许匿名用户创建目录和写
idle_session_timeout=600 //连接ftp超时时间(秒)
data_connection_timeout=120 //数据传输的超时时间(秒)
max_clients=10 //最多允许同时几个终端连接
创建虚拟用户testuser1的家目录;并创建一个测试文件
[root@aminglinux vsftpd_user_conf]# mkdir /home/virftp/testuser1
[root@aminglinux vsftpd_user_conf]# touch /home/virftp/testuser1/ftptest.txt
- 修改/home/virftp/的主和组,修改家目录的主和组为virftp
[root@aminglinux vsftpd_user_conf]# chown -R virftp:virftp /home/virftp
- 定义认证的文件/etc/pam.d/vsftpd;文件在最前面加上
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
[root@aminglinux 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
/etc/pam.d/vsftpd,它是一个用来认证的文件,在登录FTP需要有一个认证的过程,认证的过程需要告诉它,通过什么样的形式去认证,认证的时候去哪里找这个密码库
在/etc/pam.d/vsftpd 添加的/lib64/security/pam_userdb.so,centos6中是为了区分版本,分32位和64位,一定要注意这个文件是存在的(lib64或lib32)
编辑 /etc/vsftpd/vsftpd.conf 主配置文件
[root@aminglinux vsftpd_user_conf]# vim /etc/vsftpd/vsftpd.conf
将anonymous_enable=YES 改为 anonymous_enable=NO
将#anon_upload_enable=YES 改为 anon_upload_enable=NO ,并取消注释符
将#anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO ,并取消注释符
并增加以下内容
chroot_local_user=YES
guest_enable=YES //打开虚拟用户映射
guest_username=virftp //映射的用户名
virtual_use_local_privs=YES //告诉服务,我们现在用的虚拟用户
user_config_dir=/etc/vsftpd/vsftpd_user_conf //定义虚拟用户配置文件所在路径
allow_writeable_chroot=YES
- 启动vsftpd服务,并查看进程和监听的端口
[root@aminglinux ~]# systemctl start vsftpd
[root@aminglinux ~]# ps aux |grep vsftpd
root 1850 0.0 0.0 53256 572 ? Ss 01:45 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 1853 0.0 0.0 112720 980 pts/0 S+ 01:46 0:00 grep --color=auto vsftpd
[root@aminglinux ~]# netstat -lntp |grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1850/vsftpd
[root@aminglinux ~]#
3、xshell使用xftp传输文件
- 在xshell按快捷键 ctrl+alt+f ,会自动弹出一个xftp的提示下载界面
- 选择下载以后,会进入一个填写资料的页面,上面的是免费的,下面的收费的,我们选择上面一个填写资料
- 邮箱项,很重要。因为会在你的邮箱里有下载地址和使用教程,是通过邮箱发送,而且最好使用一些比较权威的邮箱;如果是qq邮箱国外发送邮件会有一些延迟;
- 获取到下载地址开始下载,就可以直接下载了
- 下载完成后,直接默认安装,就可以使用了,这时再使用xshell登录主机,按下ctrl+alt+f;就会弹出一个xftp的页面
- 打开之后会进入到root目录下,使用的是ssh协议
- 这时在虚拟机上暂停掉21端口,会发现仍然可以传输文件
- 若是需要下载linux系统里的文件,只需双击,或者直接拖动到左边(桌面)就会有下载的文件
- xftp走的是ssh协议,不属于ftp,这种只要是linux开启了sshd服务就可以用。
- vsftp获取其他ftp软件实现的是ftp服务,windows上可以搭建,linux上也可以搭建
4、使用pure-ftpd搭建ftp服务
- pure-ftpd是一款比vsftpd更轻量化更简便的ftp工具
- 安装pure-ftpd:使用epel源安装:
- yum install -y epel-release
- yum install -y pure-ftpd
- 配置pure-ftpd:先关闭之前启动的vsftpd,因为都是使用21端口,避免端口冲突
[root@aminglinux ~]# vim /etc/pure-ftpd/pure-ftpd.conf
#PureDB /etc/pure-ftpd/pureftpd.pdb //找到这行,把前面的#号注释删掉。
[root@aminglinux ~]# systemctl stop vsftpd //关闭vsftpd
[root@aminglinux ~]# systemctl start pure-ftpd //启动pure-ftpd
[root@aminglinux ~]# netstat -lntp |grep pure-ftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1979/pure-ftpd (SER
tcp6 0 0 :::21 :::* LISTEN 1979/pure-ftpd (SER
[root@aminglinux ~]#
- 创建测试目录,为了给pure-ftpd用户使用,再创建用户 把/data/ftp的属主和属组改成pure-ftp
[root@aminglinux ~]# mkdir /data/ftp //创建ftp共享目录
[root@aminglinux ~]# useradd -u 1010 pure-ftp //指定uid
[root@aminglinux ~]# chown -R pure-ftp:pure-ftp /data/ftp/ //修改目录主和组
- 用pure-pw useradd 命令创建一个用户
- pure-pw useradd [指定用户] -u [指定系统用户] -d [指定虚拟用户的家目录]
[root@aminglinux ~]# pure-pw useradd ftp_user -u pure-ftp -d /data/ftp //用pure-pw创建ftp用户,-u映射到系统用户,-d指定ftp用户的家目
Password:
Enter it again:
- pure-pw mkdb //不执行这一步是无法登录的
[root@aminglinux ~]# pure-pw mkdb
- 测试: 在ftp家目录下创建一个测试文件:touch /data/ftp/abc.txt
[root@aminglinux ~]# touch /data/ftp/abc.txt
[root@aminglinux ~]# lftp ftp_user@127.0.0.1
口令:
lftp ftp_user@127.0.0.1:~> ls
drwxr-xr-x 2 1010 pure-ftp 21 Jul 16 02:20 .
drwxr-xr-x 2 1010 pure-ftp 21 Jul 16 02:20 ..
-rw-r--r-- 1 0 0 0 Jul 16 02:20 abc.txt
lftp ftp_user@127.0.0.1:/>