20201107 vsftpd 服务

Vsftp 文件传输协议

1 介绍

1.1 文件传输协议ftp(file transfer protocol),提供文件存储和访问的协议

1.2 默认情况使用两个端口20(数据端口)用于传输数据 21 (命令端口)用于接收客户端发出的命令和参数

1.3 有两种工作模式,都是相对主机来说的,主动模式,服务器主动向客户端发起连接请求;被动模式,服务器等待客户端发起连接请求,默认也是被动模式,主动模式更安全,看场景

1.4 vsftpd (very secure ftp daemon)直译就是非常安全的ftp守护进程。在linux上使用开源免费,支持虚拟用户验证等优点

 

2 安装:

2.1 yum install vsftpd -y

2.2 防火墙看下端口firewall-cmd --list-ports 默认是没有开启他的端口的,我们来进行放行

 

3.3 看下配置文件

cat /etc/vsftpd/vsftpd.conf |grep -v '#'

local_enable=YES        # 本地是否可以使用ftp

local_umask=022                 # 本地上传文件的umask umask决定目录和文件被创建时得到的初始权限umask = 022 新建的目录 权限是755 其实也就是被屏蔽的权限值,相当于777-022=755

write_enable=YES       # 是否可以写入

listen=NO                             # 监听服务是否独立运行

listen_address=ip地址   # 设置要监听的ip地址

listen_port=21                     # fpt服务的监听端口

download_enable=[YES|NO]  # 是否可以下载文件

user_list_enable=[YES|NO]         # 用户列表的用户是否允许操作

user_list_deny=[YES|NO]            # 用户列表的用户是否禁止操作

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

max_per_ip=0                                # 同一个ip地址的最大连接数,0 为不限制

anonymous_enable=NO       # 是否允许匿名用户访问  [əˈnɒnɪməs]

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 为不限制

 

4 三种认证模式,匿名开放模式,就是只要输入地址就可以直接登录,本地用户模式:通过linux系统本地的用户进行认证登录。虚拟用户模式:最安全的一种模式,需要为ftp单独建立用户数据库文件,仅供ftp认证使用,yum install -y ftp 这个包用来在linux中以命令行模式管理vsftpd的工具

4.1 匿名开放模式:

这种一般放在内网在防火墙内供大家做一些日常性的事情,需要开启的参数包括

anonymous_enable=YES       # 是否允许匿名用户访问  [əˈnɒnɪməs]

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

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

anon_root=/var/ftp             匿名用户的 FTP 根目录

anon_mkdir_write_enable=[YES|NO]  是否允许匿名用户创建目录

anon_other_write_enable=[YES|NO]

是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)

anon_max_rate=100K 匿名用户的最大传输速率(字节/秒), 0 为不限制

效果

20201107 vsftpd 服务  20201107 vsftpd 服务

我们来用工具登录这样可以在linux中做一些操作

20201107 vsftpd 服务

ftp> mkdir dir_test

550 Create directory operation failed.

但是创建文件失败,首先看到刚才设置的目录是root的目录,所以不能写入,我们设置一个自己的目录,然后所有者给ftp用户,这个用户系统默认已经有了

mkdir /opt/ftproot && chown ftp:ftp /opt/ftproot

修改配置文件

anon_root=/opt/ftproot

重启服务重新ftp登录,已经可以看到重新加载了目录,但是还是操作失败,我们来看下selinux

[[email protected] opt]# getsebool -a |grep ftp

ftpd_anon_write --> off

应该是这个属性没有开导致的,我们来测试下,setsebool -P ftpd_anon_write=on开启之后果然不是,看下这个完全访问 ftpd_full_access --> off  这次设置开启之后,不用重新登录,直接操作正常 ftp> mkdir aaa

257 "/aaa" created  然后exit退出

这个时候当我去浏览器访问的时候,需要输入自己的用户密码了,输入当前系统用户名,直接可以访问自己的家目录了

20201107 vsftpd 服务

4.2 本地用户模式,也是默认模式

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

user_list_enable=YES   # 禁止名单功能使用user_list列表中的用户

userlist_deny=YES     # 禁止名单功能开启

 

其他的功能不用说了,最后这两个功能开启后(默认开启)user_list和ftpusers两个文件中存储的用户名称都不可以登录,其中包含root 如果确实需要,可以删除后即可访问,登录后访问的是登录用户的家目录,当然如果需要操作比如修改什么的,还是需要到sebool中去开启对应功能,由于上面开启了ftpd_full_access 这里就不在开启了

 

4.3 虚拟用户模式

第一步,创建出需要的用户列表文件,奇数行用户名,偶数行密码,随便创建两个

[[email protected] vsftpd]# vim /etc/vsftpd/vuser.list

ftpuser1

ftp

ftpuser2

ftp

[[email protected] vsftpd]# db_load -T -t hash -f vuser.list vuser.db   # 使用db_load进行转换

[[email protected] vsftpd]# chmod 600 vuser.db   # 降低数据库被其他人操作

[[email protected] vsftpd]# rm vuser.list          # 删除原始文件

第二步,准备一个ftp虚拟用户登录后的默认位置,我们继续使用这个位置,当然正常情况,这些容易变化的文件应该放在/var下,如果需要自己可以随便设置

/opt/

└── ftproot

└── aaa

为了使系统可以管理这些虚拟用户创建出来的文件,还需要设置虚拟用户和实际系统用户的对应绑定,这样访问家目录就是实际的映射用户家目录,虚拟用户创建的文件归映射用户所有,我们正好将它绑定在ftp这个用户上,当然也可以自己新建

第三步 这个是个新东西。创建支持虚拟用户的pam文件,后缀是vu

 

全名是,可插拔认证模块是一种认证机制。详细了解还需要去查资料,这里不再说了。简单来说就是pam采取了分层机制,将应用服务和认证分割开来,系统管理员调整认证方式不再需要调整应用的任何东西

[[email protected] vsftpd]# vim /etc/pam.d/vsftpd.vu

auth required pam_userdb.so     db=/etc/vsftpd/vuser

account  required pam_userdb.so     db=/etc/vsftpd/vuser

只有一个值需要对应具体的  db后面的值就是用户密码的数据库文件路径,不写后缀

 

第四步 准备工作做好之后,修改配置文件,在匿名用户关闭,本地用户开启的情况下增加如下配置

guest_enable=YES              # 开启虚拟用户认证

guest_username=ftp                   # 虚拟账户对应的系统用户名称

pam_service_name=vsftpd.vu   # pan认证的文件,这一行原本就存在,只需要修改值

allow_writeable_chroot=YES    # 允许对ftp的根目录进行写入操作,这个看自己情况吧,我觉得禁止也可以

 

第五步:当我们想让用户1和用户2的权限不同的时候,新建一个用户目录,在目录内每个用户创建一个文件,写上对应的权限设置即可,可能作者比较懒吧,直接使用的是匿名用户的参数,有点不太搭配

[[email protected] vsftpd]# mkdir vusers_dir

[[email protected] vsftpd]# touch ftpuser1

[[email protected] vsftpd]# vim ftpuser2

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=NO

文件准备好了之后,在配置文件中增加user_config_dir=/etc/vsftpd/vusers_dir

 

由于sebool 之前已经开启,所以这里不再开启,否则还需要开启selinux 这个时候再去访问测试权限

 

5 简单文件传输协议

特点: 1 不需要校验,直接就可以用

       2 使用了udp协议(默认69),可靠性差,但是速度相对快一些

安装:yum install tftp-server tftp  两个包 这东西平时使用极少,所以不在描述,使用的时候在去研究

20201107 vsftpd 服务