FTP文件传输服务
FTP文件传输服务
FTP连接及传输模式
1 控制连接:TCP 21,用于发送FTP命令信息
2 数据连接:TCP 20,用于上传、下载数据
3 数据连接建立类型:
FTP分为主动模式和被动模式
主动模式:服务器主动发起数据连接
首先由客户端向服务端的21端口建立FTP控制连接。当需要传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来链接我”,预算服务器从20端口向客户端的该端口发送请求并建立数据连接
被动模式:服务器被动等待数据连接
如果客户端所在网络的防火墙禁止主动模式连接,通常会使用被动模式
首先由客户端向服务器的21号端口建立FTP控制连接。当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来链接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。
传输模式
在传输文件时,根据是否进行字符转换,分为文本模式和二进制模式
文本模式:这种模式在传输文件时使用ASCII标准字符序列,一般只用于纯文本文件的传输
二进制模式:这种模式不会转换文件中的字符序列,更适合传输程序、图片等非纯文本字符的文件。
使用二进制模式比文本模式更有效率,大多数FTP客户端工具可以根据文件类型自动选择文件传输模式。
用户类型
匿名用户:不用输用户
本地用户:本地的Linux登录用户
虚拟用户:不同于本地用户,跟Linux账号没关系的
FTP自己承认的虚拟账号
搭建匿名访问的FTP服务(简单,企业用的最多)
用在多人共享一个目录文件
《1》服务端配置:
(1)安装FTP服务软件
# rpm -qa | grep vsftpd
# yum -y install vsftpd (本地光盘安装)
(2)准备匿名FTP访问的目录
FTP服务器(server)指定一个共享目录,其他客户端连到这个服务器,可以共享、上传和下载
yum装vsftpd会自动有一个目录/var/ftp这个目录里面有一个子目录/var/ftp/pub为共享目录
给目录修改属主:chown ftp pub/(将属主root改为ftp)
[root@zhangmingjaun ~]# cd /var/ftp
[root@zhangmingjaun ftp]# chown ftp pub/
[root@zhangmingjaun ftp]# ls -la pub/
total 8
drwxr-xr-x 2 ftp root 4096 Mar 1 2013 .
(3)开放匿名用户的配置并启动vsftpd服务
[root@zhangmingjuan ftp]# cd /etc/vsftpd/
[root@zhangmingjuan vsftpd]# cp vsftpd.conf{,.bak} //安全起见,先备份一份
[root@zhangmingjuan vsftpd]# vim vsftpd.conf //修改配置文件
[root@zhangmingjuan vsftpd]# /etc/init.d/vsftpd start //打开服务
Starting vsftpd for vsftpd: [ OK ]
[root@zhangmingjuan vsftpd]# netstat -antup | grep vsftpd //(检查开没开)21端口
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2932/vsftpd
《2》客户端配置
(4)测试匿名FTP服务器
在客户端安装FTP客户端
[root@zhangmingjuan ~]# yum -y install ftp
[root@zhangmingjuan ~]# ftp 192.168.204.143 //服务端IP
Connected to 192.168.204.143 (192.168.204.143).
220 (vsFTPd 2.2.2)
Name (192.168.204.143:root): ftp
331 Please specify the password.
Password: //匿名访问的FTP服务密码都为空
230 Login successful.
ftp> help //查看命令(上传下载等)
Commands may be abbreviated. Commands are:
注意:上传下载等操作都是在当前路径下的。共享目录里/var/ftp/pub
ftp常用命令
从远程ftp服务器下载文件的命令格式:get 远程ftp服务器上当前目录下要下载的文件名 [下载到本地机器上当前目录时的文件名]
向远程ftp服务器上传文件的命令格式:put/mput 本地机器上当前目录下要上传的文件名 [上传到远程ftp服务器上当前目录时的文件]
FTP>open [ftpservername],和指定的远程Linux FTP服务器连接
FTP>user [username] [password],使用指定远程Linux FTP服务器的用户登录
FTP>pwd 显示远程Linux FTP服务器上的当前路径
FTP>ls 列出远程Linux FTP服务器上当前路径下的目录和文件
FTP>dir 列出远程Linux FTP服务器上当前路径下的目录和文件(同上)
FTP>mkdir [foldname],在远程Linux FTP服务器上当前路径下建立指定目录
FTP>rmdir [foldname],删除远程Linux FTP服务器上当前路径下的指定目录
FTP>cd [foldname],更改远程Linux FTP服务器上的工作目录
FTP>delete [filename],删除远程Linux FTP服务器上指定的文件
FTP>rename [filename] [newfilename],重命名远程Linux FTP服务器上指定的文件
FTP>close 从远程Linux FTP服务器断开但保留FTP命令参数提示
FTP>disconnect 从远程Linux FTP服务器断开但保留FTP命令参数提示(同上)
FTP>bye 结束和远程Linux FTP服务器的连接
FTP>quit 结束和远程Linux FTP服务器的连接(同上)
FTP>! 直接从远程Linux FTP服务器进入到本地shell中
FTP>exit (接上步)从本地shell环境中返回到远程Linux FTP服务器环境下
FTP>!ls 列出本地机器上当前路径下的目录和文件
FTP>lcd [foldname],更改本地机器的工作目录
FTP>? 显示ftp命令说明
FTP>help 显示ftp命令说明(同上)
搭建本地用户验证的FTP服务
本地每个用户都是自己独立空间
(1)创建本地用户
[root@zhangmingjaun ~]# useradd test1
[root@zhangmingjaun ~]# useradd test2
[root@zhangmingjaun ~]# echo "123" | passwd --stdin test1 &> /dev/null
[root@zhangmingjaun ~]# echo "123" | passwd --stdin test2 &> /dev/null
[root@zhangmingjaun ~]# id test1
uid=501(test1) gid=501(test1) groups=501(test1)
[root@zhangmingjaun ~]# id test2
uid=502(test2) gid=502(test2) groups=502(test2)
(2)修改配置文件,重启FTP服务
[root@zhangmingjaun ftp]# cd /etc/vsftpd/
[root@zhangmingjaun vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh
[root@zhangmingjaun vsftpd]# cp vsftpd.conf.bak vsftpd.conf.1
[root@zhangmingjaun vsftpd]# ls
ftpusers vsftpd.conf vsftpd.conf.bak
user_list vsftpd.conf.1 vsftpd_conf_migrate.sh
[root@zhangmingjaun vsftpd]# vim vsftpd.conf.1
[root@zhangmingjaun vsftpd]# /etc/init.d/vsftpd reload //重启服务
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
(3)客户端测试
服务端操作
[root@zhangmingjaun ~]# cd /home/test1
[root@zhangmingjaun test1]# echo "123456" > ftpceshi.txt
[root@zhangmingjaun test1]# ls
ftpceshi.txt
客户端测试
[root@zhangmingjuan home]# ftp 192.168.204.143
Connected to 192.168.204.143 (192.168.204.143).
220 (vsFTPd 2.2.2)
Name (192.168.204.143:root): test1
331 Please specify the password.
Password:123
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,204,143,200,52).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 7 Nov 25 12:22 ftpceshi.txt //证明每个用户上传下载都在自己家目录里
226 Directory send OK.
ftp> get ftpceshi.txt /home/ftpceshi //从服务端自己家目录里下载文件到本地
local: /home/ftpceshi remote: ftpceshi.txt
227 Entering Passive Mode (192,168,204,143,130,132).
150 Opening BINARY mode data connection for ftpceshi.txt (7 bytes).
226 Transfer complete.
7 bytes received in 5.5e-05 secs (127.27 Kbytes/sec)
[root@zhangmingjuan home]# ls
ftpceshi
ftpusers与user_list用户列表的使用
(1)ftpusers文件:FTP服务器中的黑名单,优先级高于user_list文件
(2)user_list文件:此用户列表默认情况下也是黑名单,即在此用户列表中的用户不可访问FTP服务器,但可以通过vsftpd.conf主配置文件的修改将此黑名单改为白名单,且仅此名单中的用户可以访问
搭建虚拟用户验证的FTP服务(安全规避)
虚拟账号连过来之后统一映射成virtual账号
因此所有虚拟账号登录以后也是看到的是同一个空间,也是共享的(虚拟账号的家目录)
(1)建立虚拟用户账号数据库
vsftpd服务使用Berkeley DB格式的数据库文件来存放虚拟用户账号,使用db_load生成数据库文件。
[root@zhangmingjaun ~]# cd /etc/vsftpd/
[root@zhangmingjaun vsftpd]# vim ./vusers.list //新建一个虚拟用户账号密码列表文件
zhangsan
123
lisi
123
wangwu
123
[root@zhangmingjaun vsftpd]# db_load -T -t hash -f vusers.list vusers.db //将文件转换成数据文件
[root@zhangmingjaun vsftpd]# file vusers.db //file命令查看文件类型的
vusers.db: Berkeley DB (Hash, version 9, native byte-order)
注:db_load命令
-T:允许非Berkeley的程序使用该数据库
-t:指定算法(hash:哈希,散列)
-f:指定源文件
注意:生成的数据库文件必须为“.db”格式
[root@zhangmingjaun vsftpd]# chmod 600 vusers.* //修改有关用户名密码文件的权限,增强安全性,只能属主进行读写
(2)添加虚拟映射账号,为FTP根目录修改权限
[root@zhangmingjaun vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual //本地统一映射成须弥账号virtual
-d /var/ftproot 指定家目录的位置
[root@zhangmingjaun vsftpd]# mkdir -p /var/ftproot
[root@zhangmingjaun vsftpd]# chmod 755 /var/ftproot
(3)添加PAM认证
[root@zhangmingjaun vsftpd]# vim /etc/pam.d/vsftpd.vu
(4)修改vsftpd.conf配置文件,重启服务
[root@zhangmingjaun vsftpd]# /etc/init.d/vsftpd restart
[root@zhangmingjaun vsftpd]# ls
ftpusers vsftpd.conf vsftpd_conf_migrate.sh vusers.list
user_list vsftpd.conf.bak vusers.db
[root@zhangmingjaun vsftpd]# cat vusers.list
zhangsan
123
lisi
123
wangwu
123
(5)客户端测试
[root@zhangmingjuan ~]# ftp 192.168.204.143
Connected to 192.168.204.143 (192.168.204.143).
220 (vsFTPd 2.2.2)
Name (192.168.204.143:root): zhangsan
331 Please specify the password.
Password: //vusers.list文件里设置的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls //此时位置是虚拟账号/var/ftproot/家目录位置
227 Entering Passive Mode (192,168,204,143,156,204).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 4 Nov 25 14:14 1
-rw-r--r-- 1 0 0 4 Nov 25 14:14 2
-rw-r--r-- 1 0 0 4 Nov 25 14:14 3
226 Directory send OK.
ftp> get 1 /home/1
local: /home/1 remote: 1
227 Entering Passive Mode (192,168,204,143,154,199).
150 Opening BINARY mode data connection for 1 (4 bytes).
226 Transfer complete.
4 bytes received in 6e-05 secs (66.67 Kbytes/sec)
(6)实现每个虚拟账户有不同的根目录、不同权限的管控
①创建用户控制目录,并创建虚拟所对应的同名配置文件
[root@zhangmingjuan ~]# cd /etc/vsftpd/
[root@zhangmingjaun vsftpd]# mkdir ./vusers.dir
[root@zhangmingjaun vsftpd]# cd /vusers.dir
[root@zhangmingjaun vusers.dir]# touch zhangsan lisi wangwu //创建他们几个账号的配置文件
修改张三的配置文件,使其可以上传、建立目录、删除文件、重命名文件、最大传输速率1字节/秒,根目录为/var/zhangsan
[root@zhangmingjaun vusers.dir]# mkdir /var/zhangsan //创建zhangsan的根目录
[root@zhangmingjaun vusers.dir]# vim zhangsan
[root@zhangmingjaun vsftpd]# chown virtual /var/zhangsan
修改李四的配置文件,使其仅可以上传,不开放其他权限,不限制传输速率,根目录为/var/lisi
[root@zhangmingjaun vsftpd]# mkdir /var/lisi
[root@zhangmingjaun vusers.dir]# vim lisi
[root@zhangmingjaun vusers.dir]# chown virtual /var/lisi
王五的配置文件不做修改,其权限为配置文件中的默认权限,根目录为/var/ftproot,仅可以下载无法上传
[root@zhangmingjaun vusers.dir]# mkdir /var/wangwu
[root@zhangmingjaun vusers.dir]# chown virtual /var/wangwu
②修改vsftpd.conf主配置文件,重启服务(告诉它我的配置文件在哪儿)
[root@zhangmingjaun vusers.dir]# /etc/init.d/vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
③客户端测试