学习Vsftpd服务做的笔记,方便自己查阅与复习。

使用Vsftpd服务传输文件

一、文件传输协议

二、配置Vsftpd服务前的准备

三、匿名开放模式

四、本地用户模式

五、虚拟用户模式

六、TFTP简单文件传输协议

七、容易忘的命令归纳


一、文件传输协议FTP与Vsftpd服务

  一般来讲,人们把计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式。今天的互联网是由几千万台个人计算机、工作站、服务器、小型机、大型机、巨型机等具有不同型号、不同架构的物理设备共同组成的,而且即便是个人计算机,也可能会装有Windows、Linux、UNIX、Mac等不同的操作系统。为了能够在如此复杂多样的设备之间解决问题解决文件传输问题,FTP (File Transfer Protocol)文件传输应运而生。

  FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与数。FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点。而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术,因此得到了广大用户的青睐。

  两种工作模式

  • 主动模式:FTP服务器主动向客户端发起连接请求。

  • 被动模式:FTP服务器等待客户端发起连接请求(默认工作模式)。

  由于FTP、HTTP、Telnet等协议的数据都是经过明文进行传输,因此从设计的原理上就是不可靠的,但人们又需要解决文件传输的需求,因此便有了vsftpd服务程序。vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP
服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。在不影响使用的前提下,能够让管理者自行决定是公开匿名、本地用户还是虚拟用户的验证方式,这样即便被骇客拿到了我们的账号密码,也不见得能登陆得了服务器。

  三种认证模式:

  • 匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。

  • 本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被骇客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

  • 虚拟用户模式:更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使骇客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

二、配置Vsftpd服务前的准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//安装Vsftpd服务
$ dnf install vsftpd

//清空iptables防火墙规则
$ iptables -F
$ iptables-save

//firewalld防火墙放行ftp服务
$ firewall-cmd --permanent --zone=public --add-service=ftp
$ firewall-cmd --reload

//修改SELinux域策略
$ getsebool -a | grep ftp
$ setsebool -P ftpd_full_access=on

//将服务加入到开机启动项
//每次配置完需要重启服务
$ systemctl enable vsftpd
$ systemctl restart vsftpd

常见参数及作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
listen=[YES|NO]
是否以独立运行的方式监听服务

lisen_address=IP地址
设置要监听的IP地址

listen_port=21
设置FTP服务的监听端口

downloadenable = [YES|NO]
是否允许下载文件

userlist_enable=[YES|NO]
userlist_deny=[YES|NO]
设置用户列表为"允许“还是”禁止"操作

max_clients=0
最大客户端连接0为不限制

max_per_ip=O
同一IP地址的最大连接数,0为不限制

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

local_umask=022
本地用户上传文件的umask值

local_root=/var/ftp
本地用户的FTP根目录

chroot_local_user=[YES|NO]
是否将用户权限禁锢在FTP目录,以确保安全

local_max_rate=0
本地用户最大传输速率(字节数),0为不限制

三、匿名开放模式

权限参数及作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
anonymous_enable=YES
允许匿名访问模式

anon_umask=022
匿名用户上传文件的umask值

anon_upload_enable=YES
允许匿名用户上传文件

anon_mkdir_write_enable=YES
允许匿名用户创建目录

anon_other_write_enable=YES
允许匿名用户修改目录名称或删除目录

  umask中文被称为权限掩码或权限补码,新建普通文件的默认权限应该是666,目录权限会是777,这是写在系统配置文件中的,但默认值不等于最终权限值,根据公式:默认权限-umask=实际权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//修改配置文件
$ vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES
    anon_umask=022
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES

//修改默认访问目录所有者
$ chown -Rf ftp /var/ftp/pub

//重启服务
$ systemctl restart vsftpd

//连接到FTP服务器,匿名开放认证模式下,账户为anonymous,密码为空。
//默认访问目录为是/var/ftp
$ ftp 192.168.10.10

四、本地用户模式

权限参数及作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
anonymous_enable=NO
禁止匿名访问模式

local_enable=YES
允许本地用户模式

write_enable=YES
设置可写权限

local_umask=022
本地用户模式创建文件的umask值

userlist_deny=YES
启用"禁止用户名单",名单文件为ftpusers和user-list

userlist_enable=YES
开启用户作用名单文件功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//修改配置文件
$ vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
userlist_deny=YES
userlist_enable=YES

//将用户从禁止访问名单中去掉
$ vim /etc/vsftpd/user_list
$ vim /etc/vsftpd/ftpusers

//重启服务
$ systemctl restart vsftpd

  两个禁止用户登录文件user_list和ftpusers之间的区别:如果把上面主配置文件中userlist deny参数值改成NO,那么user list列表就变成了强制白名单,功能完全是反过来的,只允许列表内的用户访问,拒绝其他人。

五、虚拟用户模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//创建用于ftp认证的用户数据库文件vuser.list
$ vim /etc/vsftpd/vuser.list
zhangsan
redhat
lisi
redhat

//使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件
$ db_load -T -t hash -f vuser.list vuser.db
$ chmod 600 vuser.db
$ rm -f vuser.list

//创建用于虚拟用户映射的系统本地用户和存储文件的根目录
$ useradd -d /var/ftproot -s /sbin/nologin virtual
$ ls -ld /var/ftproot/
$ chmod -Rf 755 /var/ftproot/

//建立用于支持虚拟用户的PAM文件
$ vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

//修改vsftpd配置文件,将PAM认证文件的名称修改为vsftpd.vu
$ vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=virtual
//允许对禁涸的FTP根目录执行写入操作,而且不拒绝用户的登录请求
allow_writeable_chroot=YES
//把vsftpd主配置文件中原有的PAM认证文件vsftpd修改为新建的vsftpd.vu文件
pam_service_name=vsftpd.vu

//为zhangsan和lisi设置不同的权限
$ mkdir /etc/vsftpd/vusers_dir/
$ cd /etc/vsftpd/vusers_dir/
$ touch lisi
$ vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

//修改配置文件中用户权限配置文件的路径
$ vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
$ systemctl restart vsftpd

//登录ftp服务器

六、TFTP简单文件传输协议

  简单文件传输协议(Trivial File Transfer Protocol TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。顾名思义,它提供不复杂、开销不大的文件传输服务,可将其当作FTP协议的简化版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ dnf install tftp-server tftp xinetd

//参考用户示例文件(/usr/share/doc/xinetd/sample.conf)创建配置文件
$ 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
}

$ systemctl restart xinetd
$ systemctl enable xinetd
$ firewall-cmd --zone=public --permanent --add-port=69/udp
$ firewall-cmd --reload

  tftp命令访问文件,可能用到的参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
?
帮助信息

put
上传文件

get
下载件

verbose
显示详细的处理信息

status
显示当前的状态信息

binary
使用二进制进行传输

ascii
使用ASCH码进行传输

timeout
设置重传的超时时间

quit
退出

七、容易忘的命令归纳

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ firewall-cmd --permanent --zone=public --add-service=ftp

$ getsebool -a | grep ftp
$ setsebool -P ftpd_full_access=on

$ chown -Rf ftp /var/ftp/pub

$ db_load -T -t hash -f vuser.list vuser.db
$ chmod 600 vuser.db
$ rm -f vuser.list

$ useradd -d /var/ftproot -s /sbin/nologin virtual

$ vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

$ 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
}

本章节到此结束!