vsftp(Centos)
一、简介
用户以文件操作的方式(如文件的增、删、改、查、传递等)与另一主机互相通信
ftp 有 ASCII 模式与 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 # 将认证权利移交给其他文件。
模块路径:
设置模块路径(需绝对路径)
模块参数:
传递给改模块的参数

浙公网安备 33010602011771号