vsftpd学习使用
vsftpd 3.0.2使用实操
概述:
完整详细配置在测试之后。认真看完实操中内容方有收获!
安装使用:
系统:CentOS7, vsftpd版本:3.0.2
先把防火墙和SELinux关闭
1 | yum install vsftpd ftp -y |
修改配置后都要重启服务。
工作模式:
主动模式:默认
客户端随机端口告诉服务器端
被动模式:Passive
服务器端随机端口告诉客户端
1 | # 启用并修改被动模式数据传输端口 |
需要防火墙放行vsftpd的端口
登录方式:
匿名账户登录:
账户:ftp、anonymous
默认登录目录:/var/ftp/
匿名控制权限anon:
1 | anonymous_enable=YES # 启用匿名访问 |
测试匿名用户:
匿名用户登录:
默认安装好启用就可以使用账户名为anonymous和ftp,无密码。默认可以浏览和下载
匿名用户上传文件:
测试实操:
1 | # 配置文件启用 |
进入目录时提示信息:
在目录下新建.message
文件,在其中写入要提示的信息即可。配置文件默认开启
39行 dirmessage_enable=YES
完整配置:
1 | anonymous_enable=YES |
本地登录:
账户:/etc/passwd /etc/shadow
默认登录目录:用户家目录
本地用户权限local:
1 | local_enable=YES # 是否启用本地用户 |
测试本地用户:
配置文件:
1 | # 将用户限制在家目录中 |
创建用户登录:
useradd -s /sbin/nologin
创建的用户无法登陆时:
ftp 会根据/etc/shells 这个文件判断一个用户是否为有效用户,会阻止那些shell不在/etc/shells里的用户登陆。默认是没有/sbin/nologin
的,需要新增
1 | echo '/sbin/nologin' >> /etc/shells |
测试实操:
1 | # 创建两个用户: |
完整配置:
创建chroot_list文件,写入需要改变家目录的用户:touch /etc/vsftpd/chroot_list
1 | anonymous_enable=NO |
虚拟账户:
手动创建,找一个系统用户作为虚拟账户的映射用户,借助系统用户家目录为默认登录目录。每个权限可单独定制
创建虚拟用户数据库文件
奇数行为用户,偶数行为密码
vi /etc/vsftpd/vsftpd.user
1 | [root@localhost vsftpd]# cat vsftpd.user |
加密配置文件
db_load -T -t hash -f vsftpd.user vsftpd.db
修改数据库文件权限
chmod 600 vsftpd.db
创建系统用户作为虚拟账户映射用户,无需设密码
- 创建的用户无法登陆时见上文原因
useradd -d /ftp/ -s /sbin/nologin ftpuser
- 修改ftpuser的家目录的读权限
chmod o+r /ftp/
创建支持虚拟用户的pam认证文件
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
# 清空内容添加如下内容: auth required pam_userdb.so db=/etc/vsftpd/vsftpd # 数据库vsftpd名称为自定义名称 account required pam_userdb.so db=/etc/vsftpd/vsftpd
1
2
3
4
5
6
7
8
9
10
11
12
##### 编辑配置文件/etc/vsftpd/vsftpd.conf,修改并新增如下配置
```bash
# 认证文件/etc/pam.d/下
pam_service_name=vsftpd.pam
# 启用虚拟账户登录
guest_enable=YES
# 系统映射账户名称
guest_username=ftpuser
# 虚拟账户配置文件目录路径,其中每个文件名称和用户名对应
user_config_dir=/etc/vsftpd/users
修改自定义的匿名配置文件,因为虚拟用户用的也是该配置
编辑单个虚拟用户的权限
1 | # 允许虚拟用户上传 |
测试实操:
1 | # 上传文件用户upload |
完整配置:
1 | anonymous_enable=NO |
虚拟配置加本地用户配置:
1 | anonymous_enable=NO |
使用openssl加密传输
- 生成密钥和证书
1 | cd /etc/ssl/certs/ |
- 修改配置文件
1 | # 启用ssl |
- 重启服务
配置加密后的问题:
windows上显示ftp文件夹错误
Linux上提示:530 Non-anonymous sessions must use encryption.
Linux命令行版本和Windows资源管理器不支持加密访问,需要使用支持加密的客户端进行访问如:FileZilla
如需命令行版本或Windows资源管理器访问ssl_enable=NO
即可