FTP

FTP:文件传输协议,采用两个TCP连接来传输一个文件

  • 控制连接以C/S方式建立,服务器以被动的方式打开21端口等待客户连接,客户以主动方式打开21,控制连接始终等待客户于服务器之间的通信,该连接将命令从客户传到服务器,并传回服务器的应答
  • 当文件开始在客户和服务器之间传输时,创建一个数据连接(20),具体过程如下:

    • 客户发出命令请求建立数据连接,连接在客户的控制下建立
    • 客户在客户端上选择一个临时端口号,从该端口发布
    • 客户通过控制连接把端口号发送给服务器
    • 服务器在控制连接上接收端口信号,并向客户端上的端口发布一个主动的打开,服务器使用的数据连接端口为20

主动模式
avatar

但有时FTP服务器处在的环境不允许直接被外部的主机访问,这时需要采用被动模式,让FTP服务端去连接客户端。具体如下

  • FTP客户端连接到FTP服务器21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输

avatar

实验

匿名

修改配置文件后重启

vi /etc/vsftpd/vsftpd.conf anonymous_enable=YES 
anon_umask=022 
anon_upload_enable=Yes anon_mkdir_write_enable=Yes
anon_other_write_enable=Yes local_enable=YES 
write_enable=YES 
local_umask=022 
dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES 
listen=NO 
listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES 
tcp_wrappers=YES

avatar
avatar

系统用户

修改配置文件后重启

vi /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 
listen=NO 
listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES 
tcp_wrappers=YES

在/etc/vsftpd/ftpuser /etc/vsftpd/user_list这两个文件中的用户被视为黑名单
avatar

虚拟用户

创建FTP用户数据库文件,奇数行用户名,偶数行密码,用db_load命令加密转换成数据库文件,删除明文信息文件

[root@server1 ~]# cd /etc/vsftpd/
[root@server1 vsftpd]# vi vuser.list
[root@server1 vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@server1 vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@server1 vsftpd]# chmod 600 vuser.db
rm -rf vuser.list

创建一个用作代理的本地用户

[root@server1 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@server1 vsftpd]# ls -ld /var/ftproot/
drwx------. 2 virtual virtual 62 1月  17 18:38 /var/ftproot/
chmod -Rf 777 /var/ftproot

建立一个用于虚拟用户认证的PAM文件

[root@server1 vsftpd]# vi /etc/pam.d/vsftpd.vu

auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser

修改配置文件,注意配置文件每行尾都不能有空格,不然会报错

[root@server1 vsftpd]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

[root@server1 vsftpd]# vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES
guest_enable=YES 
guest_username=virtual 
allow_writeable_chroot=YES 
write_enable=YES
local_umask=022
dirmessage_enable=YES 
xferlog_enable=YES
connect_from_port_20=YES 
xferlog_std_format=YES
listen=NO
listen_ipv6=YES 
pam_service_name=vsftpd.vu 
userlist_enable=YES
tcp_wrappers=YES

[root@server1 vsftpd]# systemctl restart vsftpd

[root@server1 var]# ftp 192.168.226.148
Connected to 192.168.226.148 (192.168.226.148).
220 (vsFTPd 3.0.2)
Name (192.168.226.148:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

标签: none

评论已关闭