vsftp(Centos)

一、简介

用户以文件操作的方式(如文件的增、删、改、查、传递等)与另一主机互相通信

ftpASCII 模式与 Binary(二进制) 模式

  • ASCII 模式用来传递 HTML 和文本编写的文件(如用 Binary 模式传递则会破坏-文件,导致文件执行出错)
  • Binary 模式用来传递可执行文件,压缩文件,和图片文件(如用 ASCII 模式传递,则会乱码)

默认端口号

控制:21
传输:20

二、安装及参数介绍

安装 vsftp yum -y instaltl vsftpd

默认配置文件 /etc/vsftpd/vsftpd.conf

PAM 认证配置文件路径 /etc/pam.d

vsftpd.conf 配置文件常用参数:

#  全局设置
listen_port=21			#  设置监听端口
user_config_dir=/etc/vsftpd/user_conf	#  指定用户配置文件目录(配置文件需为对应的用户名)
allow_writeable_chroot=yes	#  加上此行解决报错(如用户被限定在其主目录下,则该用户不能在有写的权限,否则会报错)
#  传输
ascii_upload_enable=yes		#  启用 ASCII 模式上传数据(配置文件内默认有该参数,但被注释了)
ascii_download_enable=yes	#  启用 ASCII 模式下载数据(配置文件内默认有该参数,但被注释了)
#  被动模式相关(如启用了被动模式,则在客户端使用 ftp 访问时需使用 passive 关闭客户端的被动模式,强制其使用port方式连接。如需开启则再次运行该命令)
pasv_enable=yes         #  启用被动模式
pasv_promiscuous=yes	#  关闭 PASV 模式的安全检查(该检查确保数据连接和控制连接是来自同一 IP)
pasv_max_port=4500	#  PASV 使用的最大端口
pasv_min_port=4000	#  PASV 使用的最小端口
pasv_address=192.168.1.1	#  PASV 模式传输的地址(访问的客户端 IP 跟此处的 IP 不一致时会报错)
#  限制
max_clients=100			#  最大客户端连接数为 100
max_per_ip=3			#  每个 IP 最大连接数为  3
deny_file={*.exe,'*root*}	#  禁止上传 .exe 的文件和文件名带有 root 的文件
chroot_list_enable=yes		#  启用限制用户的名单
chroot_list_file=/etc/vsftpd/test	#  在 test 文件内指定用户列表(泽泻用户作为“例外”,不受限制)
chroot_local_user=yes		#  所有用户被限制在其主目录下(不能访问除主目录外的其他目录)

#  匿名用户相关配置
anonymous_enable=yes		#  允许匿名用户访问(配置文件内默认有该参数)
anon_root=/test			#  指定匿名用户目录
#  匿名用户权限相关
anon_upload_enable=yes		#  允许匿名用户上传文件(配置文件内默认有该参数,但被注释了)
anon_mkdir_write_enable=yes	#  允许匿名用户创建目录(配置文件内默认有该参数,但被注释了)
anon_world_readable_only=yes	#  文件权限中其他用户需有可读的权限,匿名用户才能下载(文件权限分:用户、组、其他用户)
anon_umask=022		        #  设置匿名用户新建文件的权限为 755(可理解为组跟其他用户不需要 2 权限,或  777 减去 022 )
#  匿名用户限制相关
anon_max_rate=30000		#  匿名用户限速为 30k/s
anon_other_write_enable=yes	#  匿名用户拥有删除权限

#  虚拟用户相关
local_root=/test		#  指定虚拟用户目录(由于是基于本地用户的,所以需使用此行,文件权限设置为 777)
guest_enable=yes		#  开启用户身份映射(允许虚拟用户登陆)
guest_username=virtftp		#  设置映射的用户身份为 virtftp(virtftp 为真实用户)
pam_service_name=vsftpd.vu	#  开启 PAM 认证,配置文件路径为/etc/pam.d/vsftpd.vu(默认有该行配置,但文件名为vsftpd)
virtual_use_local_privs=yes	#  使虚拟用户跟本地用户权限相同(配置此行后需使用用户的参数来配置虚拟用户)

#  用户相关配置
local_root=/test		#  指定用户访问目录
local_umask=022			#  设置用户新建文件的权限为 755(可理解为组跟其他用户不需要 2 权限,或  777 减去 022 )
local_max_rate=30000		#  用户限速为 30k/s

三、配置本地用户访问

1、编辑 vsftpd.conf 配置文件,在文件末尾添加如下内容
local_root=/test
2、创建用户
useradd test    #  新建 test 用户
passwd test     #  设置密码(此处需确认密码)
3、创建目录
mkdir /test         #  创建目录
chmod 755 /test     #  设置目录权限
chown test:test /test   #  设置该目录所属用户跟组

配置完后使用命令重启服务:systemctl restart vsftpd

4、登陆测试

安装 ftp 工具:yum -y install ftp

#  使用命令连接登陆测试
ftp 192.168.1.123

四、配置虚拟用户访问

1、编辑 vsftpd.conf 配置文件,在文件末尾添加如下内容
user_config_dir=/etc/vsftpd/user_conf	#  指定用户配置文件目录(配置文件需为对应的用户名)
guest_enable=yes		#  开启用户身份映射(允许虚拟用户登陆)
guest_username=virtftp		#  设置映射的用户身份为 virtftp(virtftp 为真实用户)
pam_service_name=vsftpd.vu	#  开启 PAM 认证,配置文件路径为/etc/pam.d/vsftpd.vu(需注释掉原有的行,并复制原文件另存为 vsftpd.vu)
allow_writeable_chroot=yes	#  加上此行解决报错(如用户被限定在其主目录下,则该用户不能在有写的权限,否则会报错)
2、创建映射的账号并设置虚拟用户的账号跟密码
#  创建虚拟用户映射的用户(该用户不可登陆)
useradd -s /sbin/nologin virtftp

#  创建存放用户名跟密码的文件
touch ftpuser.txt

ftpuser.txt 文件内容如下(单数行为用户名,双数行为密码):

ftpadmin
admin
ftpuser
admin

由于保存虚拟用户跟密码的文本无法被直接调用,所以需生成数据库文件:
db_load -T -t hash -f ftpuser.txt ftpuser.db

3、创建用户配置文件

创建虚拟用户的配置目录及其配置文件:
mkdir /etc/vsftpd/user_conf
touch /etc/vsftpd/user_conf/ftpadmin
touch /etc/vsftpd/user_conf/ftpuser

ftpadmin 配置内容如下:

anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
anon_umask=022

ftpuser 配置内容如下:

anon_upload_enable=yes
4、配置 PAM 认证

根据 vsftpd.conf 配置将 PAM 认证文件名更改为对应的名称:
mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.vu

注释 vsftpd.vu 文件内所有行,并在文件末尾添加如下内容:

#  此处末尾的路径为虚拟用户账号跟密码文件所在的绝对路径(无需后缀名)
auth	required	pam_userdb.so	db=/etc/vsftpd/ftpuser
account	required	pam_userdb.so	db=/etc/vsftpd/ftpuser

配置完后使用命令重启服务:systemctl restart vsftpd

5、登陆测试

安装 ftp 工具:yum -y install ftp

#  使用命令连接登陆测试
ftp 192.168.1.123	#  如服务重启无报错,登陆失败则可能是 PAM 配置文件的问题

五、PAM 配置文件简介

格式:
服务器名称    模块类型    控制方式    模块路径    模块参数
服务器名称:

设置服务器名称时字母需小写

模块类型:
auth        #  接受用户名和密码,进而对该用户的密码进行认证,并负责设置用户的一些秘密信息。
account     #  检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等等。
password    #  用来修改用户的密码,检测修改密码动作是否被允许以及新密码是否符合要求等。
session     #  提供对会话的管理和记账。
控制方式:
required    #  表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会立即通知用户,而是要等到同一 stack 中的所有模块全部执行完毕再将失败结果返回给应用程序。可以认为是一个必要条件。
requisite   #  与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一 stack 内的任何模块,而是直 接将控制权返回给应用程序。是一个必要条件。
sufficient  #  表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一 stack 内的其它模块,但是如果本模块返回失败的话可以忽略。可以认为是一个充分条件。
optional    #  表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。
include     #  将认证权利移交给其他文件。
模块路径:

设置模块路径(需绝对路径)

模块参数:

传递给改模块的参数

posted @ 2020-09-28 17:08  Anonymous_1  阅读(250)  评论(0)    收藏  举报