我是靠谱客的博主 忧心抽屉,最近开发中收集的这篇文章主要介绍Linux-网络服务03-FTP_文件传输服务,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

                               目录

一、FTP 连接及传输模式

二、FTP 用户类型

1.匿名用户:

2.本地用户:

3.虚拟用户:

三、FTP 服务器软件的种类

1.Windows 系统:

2.Linux/Unix 系统:

四、FTP 客户端工具的种类

1.Windows 系统:

2.Linux/Unix 系统:

五、搭建匿名访问的 FTP 服务

1.安装 FTP 服务软件

2.准备匿名 FTP 访问的目录

3.开放匿名用户配置并启动 vsftpd 服务

4.测试匿名 FTP 服务器

六、搭建本地用户验证的 FTP 服务

1.创建本地用户

2.修改配置文件,重启 FTP 服务(注意把后面解释内容删掉)

3.ftpusers 与 user_list 用户列表的使用

七、搭建虚拟用户验证的 FTP 服务

1.建立虚拟用户账号数据库

2.添加虚拟映射账号,为 FTP 根目录修改权限

3.增加 PAM 认证

4.修改 vsftpd.conf 配置文件,重启服务

5.客户端测试

6.实现每个虚拟用户不同根目录、不同权限的管控


一、FTP 连接及传输模式

1.控制连接:TCP 21,用于发送 FTP 命令信息
2.数据连接:TCP 20,用于上传、下载数据
3.数据连接的建立类型:

(1)主动模式:服务器主动发起数据连接

首先由客户端向服务端的 21 端口建立 FTP 控制连接。当需要传输数据时,客户端以 PORT 命令告知服务器“我打开了某端口,你过来连接我”,预算服务器从 20 端口向客户端的该端 口发送请求并建立数据连接。

(2)被动模式:服务器被动等待数据连接

如果客户端所在网络的防火墙禁止主动模式连接,通常会使用被动模式。 首先由客户端想服务器的 21 端口建立 FTP 控制连接。当需要传输数据时,服务器以 PASV命令告知客户端“我打开了某端口,你过来连接我”,于是客户端向服务器的该端口(非 20) 发送请求并建立数据连接。

4.传输模式

在传输文件时,根据是否进行字符转换,分为文本模式和二进制模式。

(1)文本模式:
又称 ASCII(American Standard Code for Information Intechange)美国 信息交换标准码模式,这种模式在传输文件时使用 ASCII 标准字符序列,一般只用于纯文本 文件的传输。

(2)二进制模式:
又称 Binary 模式,这种模式不会转换文件中的字符序列,更适合传 输程序、图片等非纯文本字符的文件。使用二进制模式比文本模式更有效率,大多数 FTP 客户端工具可以根据文件类型自动选 择文件传输模式。

二、FTP 用户类型

1.匿名用户:

用户名为 ftp 或 anonymous,提供任意密码(包括空密码)都可以通过服务 器的验证。一般用于公共文件的下载,如提供一些免费的软件、学习资料下载的站点。

2.本地用户:

直接使用本地的系统用户账号进行验证。

3.虚拟用户:

通过一份独立的用户数据库文件进行登录验证,将 FTP 账户与 Linux 系统账 户的关联性将至最低,为系统提供更好的安全性。

三、FTP 服务器软件的种类

1.Windows 系统:

FileZilla Server、Serv-U 等

2.Linux/Unix 系统:

vsftpd(Very Secure FTP Daemon)

四、FTP 客户端工具的种类

1.Windows 系统:

ftp 命令、CuteFTP、FlashFXP、LeapFTP、Filezilla 等。还有一些下载工具 软件,如 FlashGet、Wget 等,但不具备上传功能,通常不称为 FTP 客户端工具。

2.Linux/Unix 系统:

ftp 命令

五、搭建匿名访问的 FTP 服务

1.安装 FTP 服务软件

[root@ftp ~]# rpm -qa |grep vsftpd
[root@ftp ~]# yum -y install vsftpd

2.准备匿名 FTP 访问的目录

[root@ftp ~]# cd /var/ftp/
[root@ftp ftp]# ll
总用量 0
drwxr-xr-x 2 root root 6 8月   3 2017 pub

[root@ftp ftp]# chmod o+w pub/

[root@ftp ftp]# ll
总用量 0
drwxr-xrwx 2 root root 6 8月   3 2017 pub

3.开放匿名用户配置并启动 vsftpd 服务

[root@ftp ftp]# cd /etc/vsftpd/

[root@ftp vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

[root@ftp vsftpd]# cp vsftpd.conf vsftpd.conf.$(date +%Y%m%d%H%M)

[root@client vsftpd]# cat vsftpd.conf.201812240103 |egrep -v "^#|^$" >vsftpd.conf

[root@client vsftpd]# vim vsftpd.conf
  1 anonymous_enable=YES			//允许匿名用户
  2 local_enable=YES
  3 write_enable=YES
  4 local_umask=022
  5 anon_upload_enable=YES			//开启匿名用户上传权限
  6 anon_umask=022					//手动添加匿名用户的权限掩码
  7 anon_mkdir_write_enable=YES	//开启匿名用户新建用户的权限
  8 anon_other_write_enable=YES	//手动添加匿名用户的其他写入权限(删除,重命名等)
  9 dirmessage_enable=YES
 10 xferlog_enable=YES
 11 connect_from_port_20=YES
 12 xferlog_std_format=YES
 13 listen=NO
 14 listen_ipv6=YES
 15 pam_service_name=vsftpd
 16 userlist_enable=YES
 17 tcp_wrappers=YES
 
 [root@client vsftpd]# systemctl restart vsftpd

4.测试匿名 FTP 服务器

在客户端安装 FTP 客户端

[root@client ~]# yum -y install ftp

[root@client ~]# echo ceshiwenjian >anon_ftptest.txt

[root@client ~]# ftp 192.168.1.40
Connected to 192.168.1.40 (192.168.1.40).
220 (vsFTPd 3.0.2)
Name (192.168.1.40:root): ftp
331 Please specify the password.
Password:					//空密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> ls
227 Entering Passive Mode (192,168,1,40,227,251).
150 Here comes the directory listing.
drwxr-xr-x    2 14       0               6 Aug 03  2017 pub
226 Directory send OK.

ftp> cd pub/
250 Directory successfully changed.

ftp> ls
227 Entering Passive Mode (192,168,1,40,126,224).
150 Here comes the directory listing.
226 Directory send OK.

ftp> mkdir anon_ftptest.dir
257 "/pub/anon_ftptest.dir" created

ftp> put anon_ftptest.txt
local: anon_ftptest.txt remote: anon_ftptest.txt
227 Entering Passive Mode (192,168,1,40,36,70).
150 Ok to send data.
226 Transfer complete.
13 bytes sent in 0.000127 secs (102.36 Kbytes/sec)

ftp> ls
227 Entering Passive Mode (192,168,1,40,92,235).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Dec 23 09:19 anon_ftptest.dir
-rw-r--r--    1 14       50             13 Dec 23 09:19 anon_ftptest.txt
226 Directory send OK.

ftp> delete anon_ftptest.txt
250 Delete operation successful.

ftp> ls
227 Entering Passive Mode (192,168,1,40,63,163).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Dec 23 09:19 anon_ftptest.dir
226 Directory send OK.

ftp> bye
221 Goodbye.

测试小结:匿名用户具有新建目录、上传文件、删除文件的权限,新建目录默认权限 755,上传文件默认权限 644。

六、搭建本地用户验证的 FTP 服务

1.创建本地用户

[root@ftp vsftpd]# useradd test1
[root@ftp vsftpd]# useradd test2
[root@ftp vsftpd]# echo "123" |passwd --stdin test1 &>/dev/null
[root@ftp vsftpd]# echo "123" |passwd --stdin test2 &>/dev/null

2.修改配置文件,重启 FTP 服务(注意把后面解释内容删掉)

[root@ftp vsftpd]# cat vsftpd.conf.201812240103 |egrep -v "^#|^$" >vsftpd.conf

[root@ftp vsftpd]# vim vsftpd.conf

  1 anonymous_enable=NO					//禁止匿名用户登录
  2 local_enable=YES					//允许本地用户登录
  3 write_enable=YES					//设置可写权限
  4 local_umask=022						//本地用户上传文件的umask值
  5 dirmessage_enable=YES
  6 xferlog_enable=YES
  7 connect_from_port_20=YES
  8 xferlog_std_format=YES
  9 listen=NO
 10 listen_ipv6=YES
 11 pam_service_name=vsftpd
 12 userlist_enable=YES
 13 tcp_wrappers=YES
 14 local_root=/var/ftp					//设置本地用户登录ftp的根目录
 15 chroot_local_user=YES				//将本地用户锁定在ftp目录,不可cd出去
 16 allow_writeable_chroot=YES                          //允许用户具有主目录写权限

[root@ftp vsftpd]# systemctl restart vsftpd

客户端测试:

[root@client ~]# echo ceshiwenjian >local_ftptest.txt

[root@client ~]# ls
anaconda-ks.cfg  anon_ftptest.txt  local_ftptest.txt  local_test.txt

[root@client ~]# ftp 192.168.1.40
Connected to 192.168.1.40 (192.168.1.40).
220 (vsFTPd 3.0.2)
Name (192.168.1.40:root): test1
331 Please specify the password.
Password:

230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> cd pub
250 Directory successfully changed.

ftp> mkdir local_ftptest.dir
257 "/pub/local_ftptest.dir" created

ftp> put local_ftptest.txt
local: local_ftptest.txt remote: local_ftptest.txt
227 Entering Passive Mode (192,168,1,40,247,92).
150 Ok to send data.
226 Transfer complete.
13 bytes sent in 0.000197 secs (65.99 Kbytes/sec)

ftp> ls
227 Entering Passive Mode (192,168,1,40,102,148).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Dec 23 09:19 anon_ftptest.dir
drwx------    2 1000     1000            6 Dec 23 10:15 local_ftptest.dir
-rw-------    1 1000     1000           13 Dec 23 10:16 local_ftptest.txt
226 Directory send OK.

ftp>bye

测试小结:本地用户具有新建目录、上传文件的权限,

3.ftpusers 与 user_list 用户列表的使用

(1).ftpusers 文件:

FTP 服务器中的黑名单,优先级高于 user_list 文件

(2).user_list 文件:

此用户列表默认情况下也是黑名单,即在此用户列表中的用户不可访问 FTP 服务器,但可以通过 vsftpd.conf 主配置文件的修改将此名单改为白名单,且仅此名单中的用户可以访问。

(3).示例:

A.将 test1 用户放入 ftpusers 文件中,其他配置文件不修改,尝试用 test1 用户登录

[root@ftp ]# cd /etc/vsftpd
[root@ftp vsftpd]# vim ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
test1

客户端测试:

[root@client ~]# ftp 192.168.1.40
Connected to 192.168.1.40 (192.168.1.40).
220 (vsFTPd 3.0.2)
Name (192.168.1.40:root): test1
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

B.将 test1 移除出 ftpusers 文件,将 test2 放入 user_list 用户列表中,先用默认的配 置文件,在客户端尝试用 test2 访问 FTP 服务器。在修改配置文件,将 user_list 改为白 名单,再在客户端分别用 test1、test2 尝试访问。

[root@ftp ]# cd /etc/vsftpd
[root@ftp vsftpd]# cat vsftpd.conf.201812240103 |egrep -v "^#|^$" >vsftpd.conf

[root@ftp vsftpd]# systemctl restart vsftpd

[root@ftp vsftpd]# vim ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

[root@ftp vsftpd]# vim user_list

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# 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
test2

客户端测试:

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

ftp> bye
221 Goodbye.
[root@client ~]# ftp 192.168.1.40
Connected to 192.168.1.40 (192.168.1.40).
220 (vsFTPd 3.0.2)
Name (192.168.1.40:root): test2
530 Permission denied.
Login failed.

ftp> bye
221 Goodbye.

服务器修改主配置文件,重启服务:

[root@ftp vsftpd]# vim vsftpd.conf

anonymous_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
userlist_deny=NO
tcp_wrappers=YES

##保存退出

[root@ftp vsftpd]# systemctl restart vsftpd

客户端再次测试:

[root@client ~]# ftp 192.168.1.40
Connected to 192.168.1.40 (192.168.1.40).
220 (vsFTPd 3.0.2)
Name (192.168.1.40:root): test1
530 Permission denied.
Login failed.

ftp> bye
221 Goodbye.

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

ftp> bye
221 Goodbye.

测试小结:配置文件中默认 user_list 用户列表为黑名单即默认为 userlist_deny=YES,当增加 userlist_deny=NO 时,user_list 用户列表为白名单,此时仅此名单内用户可访问FTP服务器。

七、搭建虚拟用户验证的 FTP 服务

1.建立虚拟用户账号数据库

vsftpd 服务使用 Berkeley DB 格式的数据库文件来存放虚拟用户账号,使用 db_load 工具 生成数据库文件。(若未安装,安装包在安装光盘 1 中,软件名为 db4-utils)

[root@ftp ]# cd /etc/vsftpd
[root@ftp vsftpd]# vim ./vusers.list
zhangsan
123
lisi
123
wangwu
456

[root@ftp vsftpd]# db_load -T -t hash -f vusers.list vusers.db

[root@ftp vsftpd]# ls
ftpusers   vsftpd.conf               vsftpd_conf_migrate.sh  vusers.list
user_list  vsftpd.conf.201812240103  vusers.db

[root@ftp vsftpd]# file vusers.db
vusers.db: Berkeley DB (Hash, version 9, native byte-order)

:db_load 命令
-T:允许非 Berkeley 的程序使用该数据库
-t:指定算法 (hash:哈希,散列)
-f:指定源文件

注意:生成的数据库文件必须为“.db”格式

[root@ftp vsftpd]# chmod 600 vusers.*	//修改有关文件的权限,增强安全性
[root@ftp vsftpd]# ll vusers.*
-rw------- 1 root root 12288 12月 23 18:49 vusers.db
-rw------- 1 root root    33 12月 23 18:48 vusers.list

2.添加虚拟映射账号,为 FTP 根目录修改权限

[root@ftp vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual

[root@ftp vsftpd]# ll -d /var/ftproot/
drwx------ 2 virtual virtual 62 12月 23 18:53 /var/ftproot/

[root@ftp vsftpd]# chmod 755 /var/ftproot/

[root@ftp vsftpd]# ll -d /var/ftproot/
drwxr-xr-x 2 virtual virtual 62 12月 23 18:53 /var/ftproot/

3.增加 PAM 认证

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

4.修改 vsftpd.conf 配置文件,重启服务

[root@ftp vsftpd]# cat vsftpd.conf.201812240103 |egrep -v "^#|^$" >vsftpd.conf

[root@ftp vsftpd]# vim vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_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
guest_enable=YES
guest_username=virtual
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES

[root@ftp vsftpd]# systemctl restart vsftpd

5.客户端测试

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

ftp> bye
221 Goodbye.

6.实现每个虚拟用户不同根目录、不同权限的管控

(1).创建用户控制目录,并创建虚拟所对应的同名配置文件

[root@client vsftpd]# mkdir vuser.dir

[root@client vsftpd]# cd vuser.dir/

[root@client vuser.dir]# touch zhangsan lisi wangwu

[root@client vuser.dir]# ls
lisi  wangwu  zhangsan

修改 zhangsan 的配置文件,使其可以上传、建立目录、删除文件、重命名文件、最大 传输速率 1 字节/秒、根目录为/var/zhangsan

[root@ftp vuser.dir]# mkdir /var/zhangsan
[root@ftp vuser.dir]# vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=1
local_root=/var/zhangsan

修改 lisi 的配置文件,使其仅可以下载上传,不开放其他权限,不限制传输速率,根目 录为/var/lisi

[root@ftp vuser.dir]# mkdir /var/lisi

[root@ftp vuser.dir]# vim lisi
anon_upload_enable=YES
anon_max_rate=0
local_root=/var/lisi

wangwu 的配置文件不做修改,其权限为配置文件中的默认权限,根目录为/var/ftproot, 仅可以下载,无法上传。

[root@ftp vuser.dir]# chown virtual /var/zhangsan/
[root@ftp vuser.dir]# chown virtual /var/lisi/

(2).修改 vsftpd.conf 主配置文件,重启服务

[root@ftp vsftpd]# vim vsftpd.conf

anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_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
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/vuser.dir

[root@ftp vsftpd]# systemctl restart vsftpd

(3)客户端测试

验证 zhangsan

[root@client ~]# echo ceshiwenjian >virtual_ftptest.txt

[root@client ~]# ls
anaconda-ks.cfg  anon_ftptest.txt  local_ftptest.txt  virtual_ftptest.txt

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

ftp> put virtual_ftptest.txt
local: virtual_ftptest.txt remote: virtual_ftptest.txt
227 Entering Passive Mode (192,168,60,34,148,78).
150 Ok to send data.
226 Transfer complete.
13 bytes sent in 0.000251 secs (51.79 Kbytes/sec)

ftp> ls
227 Entering Passive Mode (192,168,60,34,86,136).
150 Here comes the directory listing.
-rw-r--r--    1 1002     1002           13 Dec 24 03:56 virtual_ftptest.txt
226 Directory send OK.
ftp> mkdir zhangsan.dir
257 "/zhangsan.dir" created

ftp> ls
227 Entering Passive Mode (192,168,60,34,232,226).
150 Here comes the directory listing.
-rw-r--r--    1 1002     1002           13 Dec 24 03:56 virtual_ftptest.txt
drwxr-xr-x    2 1002     1002            6 Dec 24 03:57 zhangsan.dir
226 Directory send OK.

ftp> delete virtual_ftptest.txt
250 Delete operation successful.

ftp> rmdir zhangsan.dir
250 Remove directory operation successful.

ftp> bye
221 Goodbye.

验证 lisi:

[root@client ~]# ftp 192.168.60.34

Connected to 192.168.60.34 (192.168.60.34).
220 (vsFTPd 3.0.2)
Name (192.168.60.34:root): lisi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> put virtual_ftptest.txt
local: virtual_ftptest.txt remote: virtual_ftptest.txt
227 Entering Passive Mode (192,168,60,34,185,14).
150 Ok to send data.
226 Transfer complete.
13 bytes sent in 0.000308 secs (42.21 Kbytes/sec)

ftp> delete virtual_ftptest.txt
550 Permission denied.

ftp> mkdir lisi.dir
550 Permission denied.

ftp> bye
221 Goodbye.

验证 wangwu:

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

ftp> put virtual_ftptest.txt
local: virtual_ftptest.txt remote: virtual_ftptest.txt
227 Entering Passive Mode (192,168,60,34,200,211).
550 Permission denied.

ftp> ls
227 Entering Passive Mode (192,168,60,34,216,205).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Dec 24 04:01 test.txt
226 Directory send OK.

ftp> get test.txt
local: test.txt remote: test.txt
227 Entering Passive Mode (192,168,60,34,23,4).
150 Opening BINARY mode data connection for test.txt (0 bytes).
226 Transfer complete.

ftp> bye
221 Goodbye.

[root@client ~]# ls
anaconda-ks.cfg  anon_ftptest.txt  local_ftptest.txt  test.txt  virtual_ftptest.txt

最后

以上就是忧心抽屉为你收集整理的Linux-网络服务03-FTP_文件传输服务的全部内容,希望文章能够帮你解决Linux-网络服务03-FTP_文件传输服务所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部