网络文件共享服务(一):FTP协议、vsftpd服务及tftp服务的安装和使用

FTP文件传输协议

FTP协议基本讲解:

FTP 是 TCP/IP 协议组中的协议之一,属于应用层协议,是英文File Transfer Protocol的缩写。即FTP工作在TCP/IP模型的应用层,基于的传输协议是TCP,FTP客户端和服务器之间的连接是可靠的,面向连接的,为数据的传输提供了可靠的保证。

相比其他协议,如 HTTP 协议,FTP 协议要复杂一些。与一般的 C/S 应用不同点在于一般的C/S 应用程序一般只会建立一个 Socket 连接,这个连接同时处理服务器端和客户端的连接命令和数据传输。而FTP协议中将命令与数据分开传送的方法提高了效率。

FTP 使用 2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21 (命令端口)和 20 (数据端口)。控制 Socket 用来传送命令,数据 Socket 是用于传送数据。每一个 FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了。

ftp架构:

FTP服务工作于应用层,监听于tcp的21号端口,是一种C/S架构的应用程序。其有多种客户端和服务端的应用程序,下面来简单介绍一下
在这里插入图片描述

FTP数据连接模式

ftp有2种数据连接模式:命令连接和数据连接

  • 命令连接(端口21):是指文件管理类命令,始终在线的持久性连接,直到用户退出登录为止,一些操作如“登录”、“改变目录”、“删除文件”,依靠这个连接发送命令就可完成。。
  • 数据连接(端口20):是指有数据传输的操作,主要是显示目录列表,上传、下载文件。

其中数据连接需要关注的有2点,一是数据传输格式,二是数据传输模式
数据传输格式有以下两种:

  • 文件传输
  • 二进制传输

数据传输模式也有2种:

  • 主动模式:由服务器端创建数据连接
  • 被动模式:由客户端创建数据连接

两种数据传输模式的建立过程:

  • 主动模式:FTP服务器主动向客户端发起连接请求。
  • 被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)。
    在这里插入图片描述
    注意:主动模式有个弊端,因为客户端的端口是随机的,客户端如果开了防火墙,
    则服务器端去连客户端创建数据连接时可能会被拒绝

FTP用户认证

ftp的用户登录方式主要有三种:

  • 匿名用户登录:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器,默认登陆时是"auonymous"用户。
  • 本地用户登录:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。
  • 虚拟用户登录:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

Linux搭建vsftpd服务

本文以企业中常用的vsftpd服务来实现ftp的文件共享功能。
vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。

搭建环境:
操作系统:Centos7
主机IP地址:192.168.171.129(服务端),192.168.171.128(客户端)
用到的软件包:vsftpd(服务端的ftp服务),ftp(管理ftp服务的客户端工具)
服务器端下载:#yum install vsftpd
客户端下载:#yum install ftp
注意事项:
1.关闭双方的firewalld防火墙,并清空iptables策略,并将selinux设置为disabled。
2.注意服务器端ftp的目录权限。

关于vsftpd服务配置文件未加"#"的参数:

[root@linuxprobe ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@linuxprobe ~]# grep -v -e "#" -e "^$" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
[root@linuxprobe ~]# cat /etc/vsftpd/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
tcp_wrappers=YES

关于ftp客户端可以使用到的命令:

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

ftp> help
Commands may be abbreviated.  Commands are:

!			debug		mdir		sendport	site
$			dir			mget		put			size
account		disconnect	mkdir		pwd			status
append		exit		mls			quit		struct
ascii		form		mode		quote		system
bell		get			modtime		recv		sunique
binary		glob		mput		reget		tenex
bye			hash		newer		rstatus		tick
case		help		nmap		rhelp		trace
cd			idle		nlist		rename		type
cdup		image		ntrans		reset		user
chmod		lcd			open		restart		umask
close		ls			prompt		rmdir		verbose
cr			macdef		passive		runique		?
delete		mdelete		proxy		send
///其中常用到的命令:
dir
!dir
cd 
chmod
mkdir
rmdir
delete
put
mput
get
mget
rename
....

vsftpd服务常用的参数和作用:

参数作用
常用参数
listen=[YES/NO]是否以独立运行的方式监听服务
listen_address=IP地址设置要监听的IP地址
listen_port=21设置FTP服务的监听端口
download_enable=[YES/NO]是否允许下载文件
userlist_enable=[YES/NO] userlist_deny=[YES/NO]设置用户列表为“允许”还是“禁止”操作
max_clients=0最大客户端连接数,0为不限制
max_per_ip=0同一IP地址的最大连接数,0为不限制
chown_uploads=YES是否启用改变上传文件属主功能
chown_username=user指定要将上传的文件的属主改为哪个用户,此用户必须在系统中存在
xferlog_enable=YES是否启用传输日志,记录ftp传输过程
xferlog_std_format=YES传输日志是否使用标准格式
xferlog_file=/var/log/xferlog指定传输日志存储的位置
userlist_enable=YES是否启用控制用户登录的列表文件,默认为/etc/vsftpd/user_list文件
userlist_deny=YES是否拒绝userlist指定的列表文件中存在的用户登录ftp
ftpd_banner=“Welcome to chenlf FTP service.”定制欢迎信息,登录ftp时自动显示
dirmessage_enable=YES启用某目录下的.message描述信息,假定有一个目录为/upload,在其下创建一个文件名为.message,在文件内写入一些描述信息,则当用户切换至/upload目录下时会自动显示.message文件中的内容
message_file=设置访问一个目录时获得的目录信息文件的文件名,默认是.message
匿名用户可用参数
anonymous_enable=[YES/NO]是否允许匿名用户访问
anon_upload_enable=[YES/NO]是否允许匿名用户上传文件
anon_umask=022匿名用户上传文件的umask值
anon_root=/var/ftp匿名用户的FTP根目录
anon_mkdir_write_enable=[YES/NO]是否允许匿名用户创建目录
anon_other_write_enable=[YES/NO]是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
anon_max_rate=0匿名用户的最大传输速率(字节/秒),0为不限制
本地用户可用参数
local_enable=[YES/NO]是否允许本地用户登录FTP
write_enable=[YES/NO]是否允许本地用户有写权限
local_umask=022本地用户上传文件的umask值
local_root=/var/ftp本地用户的FTP根目录/家目录
chroot_local_user=[YES/NO]是否允许所有系统用户禁锢在家目录
chroot_list_enable=[YES/NO]是否启用用户禁锢在家目录文件,与chroot_list_file参数一起使用。
chroot_list_file=/etc/vsftpd/chroot_list指定禁锢列表文件路径,在此文件里面的用户将被禁锢在其家目录中
local_max_rate=0本地用户最大传输速率(字节/秒),0为不限制
虚拟用户可用参数
guest_enable=[YES/NO]是否允许虚拟用户登录FTP
guest_username=系统用户匿名用户所关联到的系统用户
allow_writeable_chroot=[YES/NO]
pam_service_name=vsftpd.vu指定vsftpd使用/etc/pam.d下的哪个pam配置文件进行用户认证
user_config_dir=/etc/vsftpd/vusers_dir虚拟用户所处目录

vsftpd的用户名单文件

vsftpd服务程序所在的目录中默认存放着两个名为“用户名单”的文件(ftpusers和user_list)。
vsftpd服务程序目录中的这两个文件的功能:只要里面写有某位用户的名字,就不再允许这位用户登录到FTP服务器上。

匿名用户访问模式

`1.编辑配置文件/etc/vsftpd/vsftpd.conf`
'[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf  '
	1 anonymous_enable=YES
	2 anon_umask=022
	3 anon_upload_enable=YES
	4 anon_mkdir_write_enable=YES
	5 anon_other_write_enable=YES
6 local_enable=YES
7 write_enable=YES
8 local_umask=022
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
`2.开启vsftpd服务`
'[root@linuxprobe ~]# systemctl restart vsftpd'
'[root@linuxprobe ~]# systemctl enable vsftpd'
 ln -s /usr/lib/systemd/system/vsftpd.service /etc/systemd/system/multi-user.target.wants/vsftpd.service
`3.客户端验证:`
'在vsftpd服务程序的匿名开放认证模式下,其账户统一为anonymous,密码为空。而且在连接到FTP服务器后,默认访问的是/var/ftp目录.'
'[root@linuxprobe ~]# ftp 192.168.171.129'
Connected to 192.168.10.10 (192.168.117.129).
20 (vsFTPd 3.0.2)
Name (192.168.10.10:root): anonymous
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 files
550 Create directory operation failed.
'配置文件已经配置好了,可以访问,但是却无法在pub目录中进行创建/删除等操作。查看服务端/vat/ftp/pub目录的权限知只有root管理员才有写入权限。因此将目录的所有者身份改成系统账户ftp即可(该账户在系统中已经存在)。'
`4.修改/var/ftp/pub权限`
'[root@linuxprobe ~]# ls -ld /var/ftp/pub'
drwxr-xr-x. 3 root root 16 Jul 13 14:38 /var/ftp/pub
'[root@linuxprobe ~]# chown -Rf ftp:ftp /var/ftp/pub'
'[root@linuxprobe ~]# ls -ld /var/ftp/pub'
drwxr-xr-x. 3 ftp ftp 16 Jul 13 14:38 /var/ftp/pub
`5.客户端验证:`
'[root@gaokai ~]# ftp 192.168.171.129'
Connected to 192.168.171.129 (192.168.171.129).
220 (vsFTPd 3.0.2)
Name (192.168.171.129:root): anonymous
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,171,129,249,169).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Jun 25 07:15 pub
226 Directory send OK.
'ftp> mkdir w'
257 "/pub/w" created
'ftp> ls'
227 Entering Passive Mode (192,168,171,129,212,249).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Jun 25 07:22 w
226 Directory send OK.
'ftp> rmdir w'
250 Remove directory operation successful.
'ftp> mkdir server'
257 "/pub/server" created
`6.服务端查看`
'[root@gk pub]# ll'
total 0
drwxr-xr-x 2 ftp ftp 6 Jun 25 15:25 server

本地用户访问模式

简单实例1:添加用户ftpp访问vsftp服务。

`1.添加系统用户ftpp`
'[root@linuxprobe ~]#useradd ftpp   '
'[root@linuxprobe ~]#passwd  ftpp   '
`2.编辑配置文件`
'[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf  '  
	1 anonymous_enable=NO
	2 local_enable=YES
	3 write_enable=YES
	4 local_umask=022
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
`3.查看vsftpd服务的用户文件ftpusers和user_list。`
//该文件中的所有用户都禁止访问vsftp服务
'[root@linuxprobe ftp]# cat /etc/vsftpd/  '
ftpusers                user_list               vsftpd.conf             vsftpd_conf_migrate.sh  
'[root@localhost ftp]# cat /etc/vsftpd/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@localhost ftp]# cat /etc/vsftpd/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
`4.创建专属ftpp用户的/var/ftp/local_d目录,并设置属主,属组为ftpp;`
'[root@linuxprobe ~]#mkdir  /var/ftp/local_d				'
'[root@linuxprobe ~]#chown -Rf ftpp:ftpp /var/ftp/local_d	'
'[root@linuxprobe ftp]# ll									'
total 0
drwxr-xr-x 2 ftpp ftpp  6 Jun 25 15:48 local_d
drwxr-xr-x 3 ftp  ftp  20 Jun 25 15:25 pub

`5.重启vsftpd服务`
'[root@linuxprobe ~]# systemctl restart vsftpd   '
'[root@linuxprobe ~]# systemctl enable vsftpd    '
 ln -s /usr/lib/systemd/system/vsftpd.service /etc/systemd/system/multi-user.target.wants/vsftpd.service
` 6.客户端验证`
'[root@gaokai ~]# ftp 192.168.171.129'
Connected to 192.168.171.129 (192.168.171.129).
220 (vsFTPd 3.0.2)
Name (192.168.171.129:root): ftpp
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,171,129,208,246).
150 Here comes the directory listing.
drwxr-xr-x    3 1002     1002           15 Jun 25 07:50 local_d
drwxr-xr-x    3 14       50             20 Jun 25 07:25 pub
226 Directory send OK.
'ftp> cd local_d'
250 Directory successfully changed.
'ftp> ls'
227 Entering Passive Mode (192,168,171,129,191,226).
150 Here comes the directory listing.
drwxr-xr-x    2 1002     1002            6 Jun 25 07:50 p
-rw-r--r--    1 0        0               8 Jun 25 07:52 sever.txt
'ftp> put a1.txt //上传a1.txt文件'
local: a1.txt remote: a1.txt
227 Entering Passive Mode (192,168,171,129,187,207).
150 Ok to send data.
226 Transfer complete.
44 bytes sent in 0.0301 secs (1.46 Kbytes/sec)
'ftp> ls'
227 Entering Passive Mode (192,168,171,129,191,226).
150 Here comes the directory listing.
-rw-r--r--    1 1002     1002           44 Jun 25 07:51 a1.txt
drwxr-xr-x    2 1002     1002            6 Jun 25 07:50 p
-rw-r--r--    1 0        0               8 Jun 25 07:52 sever.txt
226 Directory send OK.
'ftp> get sever.txt  //下载sever.txt文件'
local: sever.txt remote: sever.txt
227 Entering Passive Mode (192,168,171,129,113,0).
150 Opening BINARY mode data connection for sever.txt (8 bytes).
226 Transfer complete.
8 bytes received in 0.0158 secs (0.51 Kbytes/sec)
`7.服务端查看:`
'[root@gaokai local_d]# ll'
total 8
-rw-r--r-- 1 ftpp ftpp 44 Jun 25 15:51 a1.txt
drwxr-xr-x 2 ftpp ftpp  6 Jun 25 15:50 p
-rw-r--r-- 1 root root  8 Jun 25 15:52 sever.txt

复杂本地用户实例2:

要求:

  1. 创建三个目录,分别为/datas/public,/datas/picture,/datas/video
    b) /datas/public作为公共目录,权限只允许查看、下载
    c) /datas/picture目录只允许pic用户查看、上传、下载、删除操作,其它用户不允许查看
    d) /datas/video目录只允许vdo用户查看、上传、下载、删除操作,其它用户不允许查看
    e) 使用本地用户模式,创建3个用户,分别为pbc、pic、vdo
    f) pic,pub,vdo这3个本地用户登录ftp服务器后禁锢在自己家目录,其他用户暂不用禁锢。
[root@localhost ~]# yum install vsftpd

[root@localhost ~]# useradd pbc
[root@localhost ~]# useradd pic
[root@localhost ~]# useradd vdo
[root@localhost ~]# passwd pbc
[root@localhost ~]# passwd pic
[root@localhost ~]# passwd vdo

[root@localhost ~]# mkdir -p /datas/{public,picture,video}
[root@localhost ~]# chown -Rf pic:pic /datas/picture/
[root@localhost ~]# chmod 750 /datas/picture/
[root@localhost ~]# chown -Rf vdo:vdo /datas/video/
[root@localhost ~]# chmod 750 /datas/video/

[root@localhost ~]#cp /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf_bak
[root@localhost ~]#cat  /etc/vsftpd/vsftpd.conf_bak  |grep -v -e "#" -e "^$" > /etc/vsftpd/vsftpd.conf
[root@localhost ~]#vim /etc/vsftpd/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
tcp_wrappers=YES
	local_root=/datas
	chroot_local_user=NO
	chroot_list_enable=YES
	chroot_list_file=/etc/vsftpd/chroot_list
[root@localhost ~]#  cat /etc/vsftpd/chroot_list 
pic
pub
vdo
[root@localhost ~]#systemctl start vsftpd
验证:
[root@localhost ~]# ftp 192.168.161.128
Connected to 192.168.161.128 (192.168.161.128).
220 (vsFTPd 3.0.2)
Name (192.168.161.128:root): pic
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,161,128,110,41).
150 Here comes the directory listing.
drwxr-xr-x    2 1002     1002           45 Jul 08 15:06 picture
drwxrwxr-x    2 0        0              32 Jul 08 15:00 public
drwxr-xr-x    2 0        0               6 Jul 08 14:40 video
226 Directory send OK.
ftp> 

`结论`
1.当/data/public权限为"drwxrwxr-x 2 root root 32 Jul  8 11:00 /data/public/"时,其他用户r-x权限,即只能下载和查看文件,即使配置文件允许写功能。

虚拟用户模式访问

1.创建用于进行FTP认证的用户数据库文件。
其中奇数行为账户名,偶数行为密码。例如,我们分别创建出zhangsan和lisi两个用户,密码均为redhat:

[root@linuxprobe ~]# cd /etc/vsftpd/
[root@linuxprobe vsftpd]# vim vuser.list
zhangsan
redhat
lisi
redhat
但是,明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需要使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成
数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容)。
[root@linuxprobe vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@linuxprobe vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@linuxprobe vsftpd]# chmod 600 vuser.db
[root@linuxprobe vsftpd]# chmod 600 vuser.list

2.建立用于支持虚拟用户的PAM文件。
新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:

[root@linuxprobe ~]# 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.创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。
FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。
由于Linux系统中的每一个文件都有所有者、所属组属性,例如使用虚拟账户“张三”新建了一个文件,但是系统中找不到账户“张三”,就会导致这个文件的权限出现错误。为此,需要再创建一个可以映射到虚拟用户的系统本地用户。简单来说,就是让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免Linux系统无法处理虚拟用户所创建文件的属性权限。
为了方便管理FTP服务器上的数据,可以把这个系统本地用户的家目录设置为/var目录(该目录用来存放经常发生改变的数据)。并且为了安全起见,我们将这个系统本地用户设置为不允许登录FTP服务器,这不会影响虚拟用户登录,而且还可以避免黑客通过这个系统本地用户进行登录。

[root@linuxprobe ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@linuxprobe ~]# ls -ld /var/ftproot/
drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/
[root@linuxprobe ~]# chmod -Rf 755 /var/ftproot/

4.创建虚拟用户,并为虚拟用户设置不同的权限。
虽然账户zhangsan和lisi都是用于vsftpd服务程序认证的虚拟账户,但是我们依然想对这两人进行区别对待。比如,允许张三上传、创建、修改、查看、删除文件,只允许李四查看文件。这可以通过vsftpd服务程序来实现。只需新建一个目录,在里面分别创建两个以zhangsan和lisi命名的文件,其中在名为zhangsan的文件中写入允许的相关权限(使用匿名用户的参数):

[root@linuxprobe ~]# mkdir /etc/vsftpd/vusers_dir/
[root@linuxprobe ~]# cd /etc/vsftpd/vusers_dir/
[root@linuxprobe vusers_dir]# touch lisi
[root@linuxprobe vusers_dir]# vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

5.编辑/etc/vsftpd/vsftpd.conf配置文件
在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu,添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。
在vsftpd服务程序的主配置文件中默认就带有参数pam_service_name=vsftpd,表示登录FTP服务器时是根据/etc/pam.d/vsftpd文件进行安全认证的。现在我们要做的就是把vsftpd主配置文件中原有的PAM认证文件vsftpd修改为新建的vsftpd.vu文件即可。

[root@linuxprobe ~]# vim /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
	user_config_dir=/etc/vsftpd/vusers_dir

6.重启vsftpd服务

[root@linuxprobe ~]# systemctl restart vsftpd
[root@linuxprobe ~]# systemctl enable vsftpd
 ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service

7.客户端验证
lisi用户验证:


[roo[root@gaokai ftpd]# ls
a1.txt  
t@gaokai ftpd]# ftp 192.168.171.129
Connected to 192.168.171.129 (192.168.171.129).
220 (vsFTPd 3.0.2)
Name (192.168.171.129:root): lisi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -a
227 Entering Passive Mode (192,168,171,129,101,235).
150 Here comes the directory listing.
drwxr-xr-x    3 1003     1003           87 Jun 25 08:43 .
drwxr-xr-x    3 1003     1003           87 Jun 25 08:43 ..
-rwxr-xr-x    1 1003     1003           18 Aug 08  2019 .bash_logout
-rwxr-xr-x    1 1003     1003          193 Aug 08  2019 .bash_profile
-rwxr-xr-x    1 1003     1003          231 Aug 08  2019 .bashrc
-rw-r--r--    1 0        0               0 Jun 25 08:41 pppp.txt
drwx------    2 1003     1003            6 Jun 25 08:40 w
226 Directory send OK.
ftp> mkdir xuni
550 Permission denied.
ftp> rmdir w
550 Permission denied.
ftp> rename pppp.txt
(to-name) qqqq.txt
550 Permission denied.
ftp> put a1.txt
local: a1.txt remote: a1.txt
227 Entering Passive Mode (192,168,171,129,118,186).
550 Permission denied.
ftp> ls -a
227 Entering Passive Mode (192,168,171,129,226,162).
150 Here comes the directory listing.
drwxr-xr-x    3 1003     1003           87 Jun 25 08:43 .
drwxr-xr-x    3 1003     1003           87 Jun 25 08:43 ..
-rwxr-xr-x    1 1003     1003           18 Aug 08  2019 .bash_logout
-rwxr-xr-x    1 1003     1003          193 Aug 08  2019 .bash_profile
-rwxr-xr-x    1 1003     1003          231 Aug 08  2019 .bashrc
-rw-r--r--    1 0        0               0 Jun 25 08:41 pppp.txt
drwx------    2 1003     1003            6 Jun 25 08:40 w
226 Directory send OK.
ftp> get pppp.txt
local: pppp.txt remote: pppp.txt
227 Entering Passive Mode (192,168,171,129,255,242).
150 Opening BINARY mode data connection for pppp.txt (0 bytes).
226 Transfer complete.
[root@gaokai ftpd]# ls 
a1.txt  pppp.txt
//结论:客户端当前目录查看,lisi用户创建,删除,上传,重命名均失败,可以下载。

zhangsan用户验证

[root@gaokai ftpd]# ls
a1.txt  
[root@gaokai ftpd]# ftp 192.168.171.129
Connected to 192.168.171.129 (192.168.171.129).
220 (vsFTPd 3.0.2)
Name (192.168.171.129:root): zhangsan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -a
227 Entering Passive Mode (192,168,171,129,252,140).
150 Here comes the directory listing.
drwxr-xr-x    3 1003     1003           87 Jun 25 08:43 .
drwxr-xr-x    3 1003     1003           87 Jun 25 08:43 ..
-rwxr-xr-x    1 1003     1003           18 Aug 08  2019 .bash_logout
-rwxr-xr-x    1 1003     1003          193 Aug 08  2019 .bash_profile
-rwxr-xr-x    1 1003     1003          231 Aug 08  2019 .bashrc
-rw-r--r--    1 0        0               0 Jun 25 08:41 pppp.txt
drwx------    2 1003     1003            6 Jun 25 08:40 w
226 Directory send OK.
ftp> mkdir r
257 "/r" created
ftp> rmdir w
250 Remove directory operation successful.
ftp> rename pppp.txt
(to-name) qqqq
350 Ready for RNTO.
250 Rename successful.
ftp> put a1.txt
local: a1.txt remote: a1.txt
227 Entering Passive Mode (192,168,171,129,141,141).
150 Ok to send data.
226 Transfer complete.
ftp> get qqqq
local: qqqq remote: qqqq
227 Entering Passive Mode (192,168,171,129,140,202).
150 Opening BINARY mode data connection for qqqq (0 bytes).
226 Transfer complete.
ftp> ls -a
227 Entering Passive Mode (192,168,171,129,159,246).
150 Here comes the directory listing.
drwxr-xr-x    3 1003     1003           97 Jun 25 08:50 .
drwxr-xr-x    3 1003     1003           97 Jun 25 08:50 ..
-rwxr-xr-x    1 1003     1003           18 Aug 08  2019 .bash_logout
-rwxr-xr-x    1 1003     1003          193 Aug 08  2019 .bash_profile
-rwxr-xr-x    1 1003     1003          231 Aug 08  2019 .bashrc
-rw-------    1 1003     1003            0 Jun 25 08:50 a1.txt
-rw-r--r--    1 0        0               0 Jun 25 08:41 qqqq
drwx------    2 1003     1003            6 Jun 25 08:50 r
226 Directory send OK.
[root@gaokai ftpd]# ls  
a1.txt  qqqq
//结论:客户端当前目录查看,lisi用户创建,删除,上传,重命名,下载均可以实现。

windows作为客户端验证虚拟用户登陆:

1.打开文件夹,输入路径:ftp:\\192.168.171.129,回车然后出现如图界面:

在这里插入图片描述
输入zhangsan用户和密码后,进入ftp服务器,如图:

在这里插入图片描述
试验后:可以上传/下载文件,重命名文件/目录,但只能创建目录,不能新建文件。

在这里插入图片描述

遇到的问题:
1.在搭建好虚拟用户访问后,使用客户端进行访问,lisi用户可以正常登陆,但是zhangsan用户总是登陆失败,提示服务端断开连接(421 Service not available, remote server has closed connection),但仔细查看报错会看到其他信息
在这里插入图片描述
细想后发现应该是关于zhangsan虚拟用户配置文件的/etc/vsftpd/vusers_dir/zhangsan文件有错,查看后发现果然是这样:

[root@gaokai windwos10]# cat /etc/vsftpd/vusers_dir/zhangsan
non_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
修改后:
[root@gaokai windwos10]# cat /etc/vsftpd/vusers_dir/zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES


Linux搭建TFTP服务

TFTP(Trivial File Transfer Protocol)小文件传输协议,基于UDP协议,占用端口:69。

它是一个网络应用程序,它比FTP简单也比FTP功能少。它在不需要用户权限或目录可见的情况下使用,它使用UDP协议而不是TCP协议。

简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。顾名思义,它提供不复杂、开销不大的文件传输服务(可将其当作FTP协议的简化版本)。
此协议设计的时候是进行小文件传输的,因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。   
TFTP传输过程和协议分析链接

TFTP的安装及使用:

实验环境:
机器:192.168.171.136(服务端),192.168.171.129(客户端)
安装包:tftp-server(tftp服务包),tftp(tftp客户端工具)
注意:关闭防火墙和selinux;

安装:服务器端

[root@localhost ftp]# rpm -ql tftp-server
package tftp-server is not installed
[root@localhost ftp]# yum install tftp-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package tftp-server.x86_64 0:5.2-22.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================
 Package                            Arch                          Version                             Repository                   Size
========================================================================================================================================
Installing:
 tftp-server                        x86_64                        5.2-22.el7                          base                         47 k

Transaction Summary
========================================================================================================================================
Install  1 Package

Total download size: 47 k
Installed size: 64 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : tftp-server-5.2-22.el7.x86_64                                                                                        1/1 
  Verifying  : tftp-server-5.2-22.el7.x86_64                                                                                        1/1 

Installed:
  tftp-server.x86_64 0:5.2-22.el7                                                                                                       

Complete!
[root@localhost ftp]# rpm -ql tftp-server
/etc/xinetd.d/tftp
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd
/usr/share/doc/tftp-server-5.2
/usr/share/doc/tftp-server-5.2/CHANGES
/usr/share/doc/tftp-server-5.2/README
/usr/share/doc/tftp-server-5.2/README.security
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot     '##---------此目录为tftp存放数据的目录,即想要从服务器端下载文件必须将文件放于此目录下'

在RHEL 7系统中,TFTP服务是使用xinetd服务程序来管理的。xinetd服务可以用来管理多种轻量级的网络服务,而且具有强大的日志功能。简单来说,在安装TFTP软件包后,还需要在xinetd服务程序中将其开启,把默认的禁用(disable)参数修改为no:

[root@localhost ftp]# vim /etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

重启xinetd服务并将它添加到系统的开机启动项中,以确保TFTP服务在系统重启后依然处于运行状态。(考虑到有些系统的防火墙默认没有允许UDP协议的69端口,因此需要手动将该端口号加入到防火墙的允许策略中)

[root@linuxprobe ~]# systemctl restart xinetd
[root@linuxprobe ~]# systemctl enable xinetd

//若防火墙关闭,则可省略下列添加端口的步骤
[root@linuxprobe ~]# firewall-cmd --permanent --add-port=69/udp
success
[root@linuxprobe ~]# firewall-cmd --reload 
success

在tftp工作目录/var/lib/tftpboot目录下新建一些文件和目录

[root@localhost ftp]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# ls
[root@localhost tftpboot]# mkdir dir_tftp
[root@localhost tftpboot]# cp /etc/fstab ./
[root@localhost tftpboot]# ls
dir_tftp  fstab

客户端验证:

[root@gk ftpd]#yum install  -y tftp
[root@gk ftpd]#tftp 192.168.171.136
tftp>help
tftp-hpa 5.2
Commands may be abbreviated.  Commands are:

connect 	connect to remote tftp
mode    	set file transfer mode
put     	send file
get     	receive file
quit    	exit tftp
verbose 	toggle verbose mode
trace   	toggle packet tracing
literal 	toggle literal mode, ignore ':' in file name
status  	show current status
binary  	set mode to octet
ascii   	set mode to netascii
rexmt   	set per-packet transmission timeout
timeout 	set total retransmission timeout
?       	print help information
help    	print help information
tftp>get fstab
tftp>q
[root@gk ftpd]#ls
fstab

遇到的问题:
1.客户端连接tftp成功后,get下来的fstab文件,有fstab文件,但内容为空,文件大小为0。

  • 原因:可能是selinux或firewalld防火墙未关闭;本实验中是因为firewalld防火墙未关闭而导致此问题出现,关闭防火墙后,再次下载的fstab文件内容与服务器端的内容一致。

Windwos搭建FTP服务

链接:windwos搭建FTP服务

网站二:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值