Vsftpd服务
- 是一个安全,高速,稳定的FTP服务器
- 可设定多个基于IP的虚拟FTP服务器
- 匿名FTP服务器更是十分容易的
- 不执行任何外部程序,从而减少了安全隐患
- 支持虚拟用户,且支持每个虚拟用户具有独立的配置
- 支持带宽限制等等
FTP服务的使用者
匿名用户
- anonymous用户并没有设置密码进行登录ftp服务端
- 一般情况下匿名用户只能够拥有下载功能
本地用户
- 既可以登录shell也可以登录ftp服务端
- 本地用户登录系统后,其登录目录为本地家目录
- 一般情况下拥有上传和下载功能
虚拟用户
- 如果用户在远程FTP服务端上拥有账号,但是不能登录shell,称为虚拟用户
- 虚拟用户登录系统后,其登录为指定目录
- 一般情况下拥有上传和下载功能
安装
[root@localhost ~]# yum install vsftpd -y
服务包:vsftpd
服务类型: 是由systemd启动的守护进程
配置单元:/usr/lib/systemd/system/vsftpd.service
守护进程: /usr/sbin/vsftpd
端口: 21(controller) 20 (data)
主配置文件: /etc/vsftpd/vsftpd.conf
用户访问控制配置文件:
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
日志文件:/etc/logrotate.d/vsftpd
主配置文件:
默认配置
[root@test ~]# cat /etc/vsftpd/vsftpd.conf | grep -Ev "^$|^#"
anonymous_enable=YES # 匿名用户是否开启
local_enable=YES # 是否允许本地用户可以登录
write_enable=YES # 是否对登录用户可写
local_umask=022 # 本地用户上传文件默认权限的umask值
dirmessage_enable=YES # 是否激活目录欢迎信息功能
xferlog_enable=YES # 是否让系统自动维护上传和下载的日志工
connect_from_port_20=YES # 是否设置FTP服务器端将启用FTP数据端口的连接请求
xferlog_std_format=YES # 以xferlog日志格式写入到日志文件中
listen=NO # 是否监听
listen_ipv6=YES # 是否支持IPv6
pam_service_name=vsftpd # PAM模式提供的认证服务
userlist_enable=YES # 是否允许ftpusers文件中的用户登录ftp服务器
tcp_wrappers=YES # 是否使用tcp_wrappers作为主机访问控制访问
实例1:匿名用户
- 关闭防火墙和SELINUX
- 配置参数:
#备份
cp /etc/vsfptd/vsfptd.conf{,.bak}
#匿名用户相关配置参数:
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
#启动vsftpd,关闭firewalld
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2020-03-17 11:47:08 CST; 9h ago
Docs: man:firewalld(1)
Main PID: 6389 (firewalld)
Tasks: 2
Memory: 32.4M
CGroup: /system.slice/firewalld.service
└─6389 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
[root@localhost ~]# systemctl stop firewalld
#关闭selinux,将SELINUX=enforcing改成disabled。
[root@localhost ~]# vim /etc/sysconfig/selinux
+ anon_root = /path/to/file # 指定匿名用户登录系统后的目录所在位置 ;默认情况下是:/var/ftp/
3. 修改指定目录的属主
[root@test pub]# chown -Rf ftp /var/ftp/pub/
- 使用anonymous用户登录测试
ftp://x.x.x.x 用户名: anonymous 密码:
[root@localhost ~]# yum install ftp
ftp有一些命令可通过help命令查看。
ftp默认根目录是 /var/ftp/
ftp>mget <filename> 下载文件
ftp>quit 退出
示例2:本地用户
关闭防火墙和SELINUX
-
检查配置文件
#本地用户相关配置参数:
local_enable=YES #是否允许本地用户进行登录
pam_service_name=vsftpd #设置PAM模式提供的认证服务所使用的文件名
userlist_enable=YES #是否允许ftpuser文件中的用户登录ftp服务器 -
检查/etc/pam.d/vsftpd文件中
#本地用户PAM模式下身份验证配置
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed # 参数必须要有 -
检查user_list和ftpuser文件
[root@test ~]# cat /etc/vsftpd/ftpusers
#Users that are not allowed to login via ftp # “黑名单”
#root
[root@test ~]# cat /etc/vsftpd/user_list
#If userlist_deny=YES (default), never allow users in this file, and # 默认情况是“黑名单”
#root
- 重启vsftpd服务并使用本地用户root进行登录测试
下载命令: get [remote-path-file] [local-path-file]
上传命令:put
实例3:虚拟用户
关闭防火墙和SELINUX
- 创建用于FTP认证的用户数据文件
mkdir /etc/vsftpd/vconf
cat > /etc/vsftpd/vconf/vftpuser.txt <<EOF
xiaohong # 用户名1
xiaohong # 密码
xiaoming # 用户名2
xiaoming # 密码
EOF
1.1 将明文信息转成数据文件
db_load ‐T ‐t hash ‐f /etc/vsftpd/vconf/vftpuser.txt /etc/vsftpd/vconf/vftpuser.db
- 创建vsftpd服务应用程序用于存储文件的根目录已经虚拟用户映射的系统本地用户
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod -Rf 755 /var/ftproot/
- 建立用户支持虚拟用户的PAM文件
[root@test pam.d]# vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/vconf/vftpuser
account required pam_userdb.so db=/etc/vsftpd/vconf/vftpuser
- 修改配置文件,添加如下参数
[root@test vconf]# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/vconf/
- 为不同虚拟用户设置不同的权限
[root@test vconf]# cat /etc/vsftpd/vconf/xiaohong
local_root=/var/ftproot/
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
- 重启vsftpd服务并登陆测试