Linux--FTP服务的原理与配置

一: FTP服务的概述

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

二:FTP数据传输类型

2.1:主动模式(Standard/Active)

FTP服务端主动向FTP客户端发起连接请求。
主动的连接方式的FTP客户端从一个任意的非特权端口N(高位端口N>1024)连接到FTP服务端的命令端口21,然后客户端开始监听N+1,并发送FTP命令“port N+1”到FTP服务器,接着服务器会从自己的数据端口20连接到客户端指定的数据端口(N+1)。
主动模式下,服务器开启的是20和21俩个端口,客户端连接的是大于1024的高位端口。

2.2:被动模式(Paasive/PASV)

FTP服务端等待FTP客户端发起连接请求。
由客户端主动发起,当开启一个FTP连接时,客户端打开俩个任意的非特权端口(N>1024,N=1),第一个端口会连接服务端的21号端口,但与主动模式不相同的是,客户端不会发起post命令,而是提交的是PASV命令,此时服务器会开启一个任意的高位端口,并发送,命令PORT P发送给客户端。
客户端从本地端口N+1连接到服务器额P端口用来传输数据,数据段不在是20,为任意高位端口。

三:FTP服务器的配置

3.1:匿名用户的配置

3.1.1:安装vsftpd软件包

[root@server ~]# yum install vsftpd -y

3.1.2:修改配置文件

[root@server ~]# cd /etc/vsftpd/
[root@server vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@server vsftpd]# vim vsftpd.conf 

 12 anonymous_enable=YES  #允许匿名用户访问,默认开启#
 29 anon_upload_enable=YES  #去掉此行注释,允许匿名用户上传文件#
 33 anon_mkdir_write_enable=YES  #去掉此行注释,允许匿名用户创建文件#
 34 anon_other_write_enable=YES  #在33行下加入此行,默认没有,需手动添加,允许匿名用户修改和删除目录#

3.1.3:重启服务

[root@server vsftpd]# systemctl stop firewalld
[root@server vsftpd]# setenforce 0
[root@server vsftpd]# systemctl restart vsftpd
[root@server vsftpd]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      6549/rsync          
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      6998/X              
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      7308/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6959/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      6955/cupsd          
tcp6       0      0 :::873                  :::*                    LISTEN      6549/rsync          
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::6000                 :::*                    LISTEN      6998/X              
tcp6       0      0 :::21                   :::*                    LISTEN      9410/vsftpd         
tcp6       0      0 :::22                   :::*                    LISTEN      6959/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      6955/cupsd          
[root@server vsftpd]# 

3.1.4:更改ftp站点pub目录权限

[root@server ~]# cd /var/ftp/
[root@server ftp]# ll
总用量 0
drwxr-xr-x. 2 root root 6 4月   1 12:55 pub
[root@server ftp]# chmod 777 pub/

3.1.5:客户端验证

[root@client ~]# yum install ftp -y #安装ftp服务#
[root@client ~]# ftp 192.168.209.134  #连接ftp服务器#
Connected to 192.168.209.134 (192.168.209.134).
220 (vsFTPd 3.0.2)
Name (192.168.209.134:root): anonymous  ##表示匿名用户#
331 Please specify the password.
Password:      #回车,无须输密码#
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>    ##登录成功##
ftp> 
ftp> 
ftp> cd pub/
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,209,134,220,24).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir dir
257 "/pub/dir" created   ##创建目录成功##
ftp> 

3.2:本地用户的配置

3.2.1:创建本地用户

[root@server ~]# useradd tom
[root@server ~]# passwd tom
[root@server ~]# useradd harry
[root@server ~]# passwd harry

3.2.2:修改配置文件、重启服务

[root@server ~]# vim /etc/vsftpd/vsftpd.conf
........
16 local_enable=YES   #允许本地用户访问,默认#
 19 write_enable=YES  #是否允许写,默认yes#
 23 local_umask=022  #本地用户上传文件的umask值#
 102 chroot_local_user=YES #把此行注释去掉,不允许本地用户登录时进行路径的切换#
[root@server ~]# systemctl restart vsftpd

3.2.3:关于user_list用户列表的介绍

[root@server ~]# cd /etc/vsftpd/
[root@server vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@server vsftpd]# cat user_list 
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file  值为NO,表示仅允许此文件中的用户登录
# If userlist_deny=YES (default), never allow users in this file, and 值为yes(默认),表示不允许此列表中的用户登录
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@server ~]# echo "tom" >> /etc/vsftpd/user_list #将tom用户追加到user_list用户列表
[root@client ~]# ftp 192.168.209.134
Connected to 192.168.209.134 (192.168.209.134).
220 (vsFTPd 3.0.2)
Name (192.168.209.134:root): tom  ##此时客户端用tom登录时,就会权限被拒##
530 Permission denied.
Login failed.
##如果只允许user_list中的用户登录,需在配置文件最后一行加入userlist_deny=NO,并重启服务##

3.3:虚拟用户的配置

3.3.1:建立虚拟用户数据库

[root@server ~]# vim /etc/vsftpd/vuser
lisi     #奇数行用户名#
123123  ##偶数行用户密码##
wangwu
123123

3.3.2:使用db_load命令用HASH算法生成FTP用户数据库文件vuser.db

[root@server ~]# db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db

3.3.3:更改虚拟用户数据库权限

[root@server ~]# cd /etc/vsftpd/
[root@server vsftpd]# ll
总用量 32
-rw-------. 1 root root   125 4月   1 12:55 ftpusers
-rw-------. 1 root root   365 7月  19 22:47 user_list
-rw-------. 1 root root  5141 7月  19 22:36 vsftpd.conf
-rwxr--r--. 1 root root   338 4月   1 12:55 vsftpd_conf_migrate.sh
-rw-r--r--. 1 root root 12288 7月  19 23:06 vsuer.db
-rw-r--r--. 1 root root    26 7月  19 23:02 vuser
[root@server vsftpd]# chmod 600 vuser vuser.db 
[root@server vsftpd]# ll
总用量 32
-rw-------. 1 root root   125 4月   1 12:55 ftpusers
-rw-------. 1 root root   365 7月  19 22:47 user_list
-rw-------. 1 root root  5141 7月  19 22:36 vsftpd.conf
-rwxr--r--. 1 root root   338 4月   1 12:55 vsftpd_conf_migrate.sh
-rw-------. 1 root root    26 7月  19 23:02 vuser
-rw-------. 1 root root 12288 7月  19 23:11 vuser.db

3.3.4:设置虚拟账户的共享目录

[root@server vsftpd]# useradd -s /sbin/nologin -d /opt/vuser vuser
[root@server vsftpd]# cp /etc/redhat-release /opt/vuser

3.3.5:编辑pam认证模块,支持虚拟用户的登录

[root@server ~]# vim /etc/pam.d/vsftpd.vu
auth    required        pam_userdb.so db=/etc/vsftpd/vuser
account required        pam_userdb.so db=/etc/vsftpd/vuser

3.3.6:修改配置文件中pam认证、重启服务

[root@server ~]# vim /etc/vsftpd/vsftpd.conf 
127 #pam_service_name=vsftpd  #注释此行#
##在末尾添加下面三行##
130 guest_enable=YES   #开启虚拟用户模式
131 guest_username=vuser    #指定虚拟用户账号
132 pam_service_name=vsftpd.vu   #指定pam认证文件
[root@server ~]# systemctl restart vsftpd


3.3.7:为每个用户设置独立的共享路径

[root@server ~]# cd /etc/vsftpd/
[root@server vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh  vuser  vuser.db
[root@server vsftpd]# mkdir vu_dir
[root@server vsftpd]# cd vu_dir/
[root@server vu_dir]# vim lisi
anon_umask=022         ##指定上传文件的权限##          
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值