本文将介绍如何在Linux中实现文件传输,这里主要使用FTP、SFTP。
FTP
直接进入正题,需要注意,FTP采用Client/Server架构,并且有两个信道(控制信道、数据信道)。 当Client发起连接时,目标端口为TCP/21 ,Server对其身份验证通过后,建立连接,也就是控制信道,此信道用于Client传输FTP指令,例如ls、cd、get、put, user等; 当Server收到指令后,在本端分析将结果传输至Client,注意此时传输的命令执行后的内容是需要另建连接,也就是数据信道。 根据数据信道发起者的身份不同分为,FTP将其分为主动模式、被动模式: 1. 主动模式: Server端主动与Client建立连接。 - 控制信道建立: Client 与 Server建立三次握手后,Client将自己的地址、监听端口发送至Server , (a , b ,c ,d) 为IP地址,e*256+f 为端口。 - 数据信道建立: Server主动发起连接,源端口TCP/20, 目标端口为Client发送的端口(e*256+f)。
** 2. 被动模式:Server端随机生成一串数字作为Server端的端口等待客户端连接。** a. 控制信道建立: Client与Server建立三次握手后,Client发送FTP指令PASV 表示采用被动模式,等待Server的地址(a,b,c,d)、端口信息(e*256+f)。 b. 数据信道建立: Client收到Server的地址、端口信息后,Client发起连接,源端口随机,目标端口(e*256+f )。
-
vsftpd
FTP仅是一种协议、规范,而vsftpd就是众多FTP协议、规范中的一种实现,其在安全方面较为优秀。
1.通过YUM方式安装VSFTPD
[root@localhost ~]# yum -y install vsftpd
2.VSFTPD程序文件结构:
/etc/vsftpd/vsftpd.conf #主配置文件
/etc/vsftpd/ftpuser #用于pam验证用户身份,拒绝其中用户访问
/etc/vsftpd/user_list #用于vsftpd验证用户身份,默认拒绝其中用户
/etc/pam.d/vsftpd #FTP通过pam对用户进行认真
/var/ftp #ftp用户的家目录,默认vsftpd定义的共享目录
3.创建一个匿名FTP下载站点:
/myftp/pub #共享目录,所有用户都可以创建、删除、修改
a. 首先关闭防火墙、SELinux 避免影响实验
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
b. 创建相应目录并修改其权限:
[root@localhost ~]$ mkdir -pv /myftp/{doc,pub}
mkdir: created directory ‘/myftp’
mkdir: created directory ‘/myftp/pub’
[root@localhost ~]# cp /etc/fstab /myftp/pub/
[root@localhost ~]# chown -R ftp /myftp/
c. 修改配置文件
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}
[root@localhost ~]# cp /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf /etc/vsftpd/vsftpd.conf
[root@localhost ~]# systemctl restart vsftpd
d. 修改ftp用户的家目录,因为匿名用户实际上是访问映射至ftp用户的家目录。
[root@localhost ~]# vim /etc/passwd
ftp:x:14:50:FTP User:/myftp:/sbin/nologin /
e. 验证匿名ftp是否配置成功
```
![](https://s1.51cto.com/images/blog/201807/25/e6ef295fc3600aa9cf7e16900fdf0ac7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
** 注意事项:**
i. 匿名用户不能被chroot,否则会报错,如果不需要本地用户,建议如下配置: chroot_local_user=NO local_enable=NO ii.自vsftpd 2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。 Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 解决方法: chmod a-w /var/ftp -R 去掉主目录的写权限或者添加指令允许写入 allow_writable_chroot=YES iii. anon_world_readable_only 指令,当值未YES时(默认),其他用户必须要对文件有读权限,才能下载;值为NO时,只要FTP用户有读权限即可下载。
4.**创建本地用户登陆FTP站点**
要求: 关闭匿名共享、锁定用户家目录、仅允许tom、jerry两个本地用户登录
a. 修改配置文件
[root@node2 /]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
userlist_enable=YES
userlist_deny=NO
[root@node2 /]# vim /etc/vsftpd/user_list
tom
jerry
[root@node2 /]# adduser -s /sbin/nologin tom
[root@node2 /]# adduser -s /sbin/nologin jerry
[root@node2 /]# adduser -s /sbin/nologin dog
[root@node2 /]# echo '123' | passwd --stdin tom
Changing password for user tom.
passwd: all authentication tokens updated successfully.
[root@node2 /]# echo '123' | passwd --stdin jerry
Changing password for user jerry.
passwd: all authentication tokens updated successfully.
[root@node2 vsftpd]# echo '123' | passwd --stdin dog
Changing password for user dog.
passwd: all authentication tokens updated successfully.
[root@node2 /]# !sys
systemctl restart vsftpd
[root@node2 vsftpd]# touch /home/tom/tom.file
[root@node2 vsftpd]# touch /home/jerry/jerry.file
b.验证结果
tom、jerry用户都允许登录访问。
![](https://s1.51cto.com/images/blog/201807/25/dc17a02ee8e38e4c006c6125401474be.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](https://s1.51cto.com/images/blog/201807/25/e65f63ffacc1e97bd3b096da9616b934.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
匿名用户、dog用户不在user_list文件内,所以不允许访问。
![](https://s1.51cto.com/images/blog/201807/25/ca5054947d026c5c57a91187ab891947.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](https://s1.51cto.com/images/blog/201807/25/c6a38b6842bc1990841cb45b7b3e866b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)