安装vsftpd
- 使用
yum命令安装文件服务器
yun install vsftpd* -y
- 使用以下命令查看
vsftpd的安装路径
rpm -ql vsftpd | more
- 使用以下命令启动
vsftpd
systemctl restart vsftpd.service
- 查看
vsftpd进程
ps -ef | grep vsftpd
- vsftdp 的默认配置文件
| 设置 | 描述 |
|---|---|
| anonymous_enable=YES | 开启匿名用户访问; |
| local_enable=YES | 启用本地系统用户访问; |
| write_enable=YES | 本地系统用户写入权限; |
| local_umask=022 | 本地用户创建文件及目录默认权限掩码; |
| dirmessage_enable=YES | 打印目录显示信息,通常用于用户第一次访问目录时,信息提示; |
| xferlog_enable=YES | 启用上传/下载日志记录; |
| connect_from_port_20=YES | FTP使用20端口进行数据传输; |
| xferlog_std_format=YES | 日志文件将根据xferlog的标准格式写入; |
| listen=NO | Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES; |
| listen_ipv6=YES | 启用IPV6监听; |
| pam_service_name=vsftpd | 登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证; |
| userlist_enable=YES | Vsftpd.user_list和ftpusers配置文件里在这里插入代码片用户禁止访问FTP; |
| tcp_wrappers=YES | 设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。 |
FTP 的传输模式
FTP是基于 C/S 模式的,即客户端和服务器的传输模式。FTP的传输模式有两种 主动和被动模式。
FTP主动模式
主动模式即客户端从一个任意 N (大于 1024 的端口)端口,连接FTP服务器的 21 端口,客户端开始监听 N + 1 端口,并发送命令 port N+1 到服务器,FTP服务器以数据连接端口 20 连接到客户端指定的 N + 1 端口。
| 配置 | 描述 |
|---|---|
| pasv_enable=no | 设置为主动模式,关闭被动模式 |
| connect_from_port_20=yes | 配置主动模式下使用 20 端口进行数据传输,必须为 yes |
FTP被动模式
被动模式即客户端从一个任意 N (大于 1024 的端口)端口连接到FTP服务器的 21 端口,客户端开始监听 N+ 1 端口,并发送 PASV 命令,服务器会开启一个任意的端口 P(大于 1024 的端口),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。FTP默认是被动模式,在安装后启动需要关闭防火墙,才可以在浏览器或者Windows的资源管理器访问(ftp://IP)。
systemctl stop firewalld
- 被动模式的配置信息
| 配置 | 描述 |
|---|---|
| connect_from_port_20=no | 是否为足管模式(默认为yes),可以不为 no |
| pasv_enable=yes | 开启被动配置(默认为 yes) |
| pasv_min_port=60000 | 默认被动模式开放的端口号最小值 |
| pasv_mmax_port=60300 | 默认被动模式开放的端口号最大值 |
vsftpd 三种用户配置
匿名用户配置
匿名用户默认只有文件的查看权限,无法对文件进行操作。如果需要对文件进行操作需要添加以下的配置信息,关闭匿名用户模式只需要将 anonymous_enable 修改为 no 即可。
- 修改配置文件
| 配置 | 描述 |
|---|---|
| anonymous_enable=yes | 开启匿名用户模式 |
| anon_upload_enable=yes | 开启匿名用户上传权限 |
| anon_mkdir_write_enable=yes | 开启匿名用户创建文件夹的权限 |
| anon_other_write_enalbe=yes | 开启匿名用户其它权限 |
| anon_umask=022 | 匿名用户操作权限 |
| local_umask=002 | 本地用户权限由 022 修改为 002 |
| local_root=/var/ftp/ | 指定登录后的文件位置 |
- 匿名模式下的匿名用户有两个
anonymous和ftp需要将文件夹给予指定用户(如ftp或anonymous)的操作权限。
## 指定用户
chown -R ftp pub/
## 或者是所有的用户
chmod -R pub/
使用以上配置后重启 vsftp 如果可以进行操作,就不需要进行以下配置
- 修改防火墙信息
## 添加服务
firewall-cmd --add-service=ftp --permanent
## 重启防火墙
firewall-cmd --reload
## 或者关闭防火墙
systemctl stop firewalld
- 放宽 SELinux 的控制权限,将SELinux 改为 Permissive 模式:
## 查看 SELinux 的模式
getenforce // Enforcing
## 修改为 Permissive 模式
setenforce 0
## 查看
getenforce // Permissive
- 修改 SELinux 对 ftp 的控制权限。(no为开启,off为关闭)
## 查看
getsebool -a | grep ftp

## 修改
setsebool -P ftpd_anon_write=1
以上配置修改完成后重启ftp systemctl restart vsftpd。就可以对指定的目录进行上传、修改和删除操作。
系统用户配置
匿名用户适用于不需要保密的文件,如果文件比较机密自允许个别人员访问将需要使用 系统用户模式。系统用户模式是使用linux 的系统用户进行操作。
- 创建linux系统用户
## 添加用户
useradd ftptest1
useradd ftptest2
## 设置用户密码
echo ftptest1|passwd --stdin ftptest1
echo ftptest2|passwd --stdin ftptest2
创建用户 ftptest1和ftptest2 ,分别设置密码为 ftptest1和ftptest2。
- 系统用户模式的配置
| 配置 | 描述 |
|---|---|
| anonymous_enable=no | 关闭匿名模式,开启系统用户模式 |
| local_root=/var/ftp/ | 将faile配置注释。用于在系统用户登录后可以操作每个用户单独的登录文件 |
| 以下配置可以不配 | |
| chown_uploads=NO | 设定禁止上传文件更改宿主 |
| nopriv_user=ftptest | 设定支撑Vsftpd服务的宿主用户为新建用户 |
| ascii_upload_enable=YES | 设定支持ASCII模式的上传功能 |
| ascii_download_enable=YES | 设定支持ASCII模式的上传和下载功能。 |
| userlist_enable=YES | 使用 user_list 管理 ftp 用户,该值设置为 yes 需要在白名单 /etc/vsftpd/user_list 文件中添加用户和密码,一行表示一个用户 |
| userlist_deny=NO | 是否进行登录用户检查,将登录的用户名和密码根据白名单进行匹配。userlist_enable和userlist_dany都为 yes 才会起效,不然在白名单中配置了,也不会有效果。 |
重启服务进行操作。
系统用户的文件位置 /home/登录的系统用户名/
虚拟用户配置
使用系统用户配置不易于管理,会导致系统用户过多。使用虚拟用户模式可以解决这一问题,虚拟用户模式就是没有真实的系统用户,而是通过对一个真实用户以及相关的权限来访问控制的。虚拟的用户不能登录操作系统,保证了系统的安全性。
- 安装虚拟用户配置需要的工具
yum install pam* libdb-utils libdb* --skip-broken -y
如出现以下错误
Multilib version problems found. This often means that the root cause is something else and multilib version checking is just pointing out that there is a problem.
将安装语句改为
yum install pam* libdb-utils libdb* --skin-broken --setopt=proptected-multilib=false
- 创建虚拟用户临时文件 /etc/vsftpd/user.list.txt,在其中添加用户名和密码
flank // 用户名
123 // 密码
mike // 用户名
123 // 密码
- 生成 vsftpd 虚拟用户认证数据库
db_load -T -t hash -f /etc/vsftpd/user.list.txt /etc/vsftpd/user.db
## 赋予权限
chmod 700 /etc/vsftpd/user.db
- 配置pam认证文件,/etc/pam.d/vsftpd 行首添加以下配置
auth required pam_userdb.so db=/etc/vsftpd/user
account required pam_userdb.so db=/etc/vsftpd/user
## user 为第三步生成的 user.db 文件, .db 不用写
## required 可以替换为 sufficient ,表示充分条件,就是说一旦通过验证就不进行下面的验证步骤了。相反,如果没有通过的话,
## 也不会被系统立即挡之门外,因为sufficient的失败不决定整个验证的失败,意味着用户还必须将经历剩下来的验证审核。
## 可以将 pam_userdb.so 改为 /lib | lib64 /security/pam_userdb.so
auth 是指对用户的用户名口令进行验证
account 是指对用户有哪些权限进行验证
- 所有的 vsftpd 虚拟用户都需要映射到一个真实的系统用户上。该用户不需要要密码,也不需要登录,主要用于虚拟机用户映射。
创建命令
useradd -s /sbin/nologin virtual
- 配置 vsftpd 的全局配置文件
| 配置 | 描述 |
|---|---|
| anonymous_enable=no | 不允许匿名用户登录 |
| local_enable=YES | 设置本地用户可以访问,如果设置为 no,即本地用户不能访问,同时所有的虚拟用户都不能访问 |
| write_enable=YES | 可以进行写操作 |
| local_umask=022 | 设置上传后的文件权限掩码 |
| dirmessage_enable=YES | 开启文件目录标语功能 |
| xferlog_enable=YES | 开启日志 |
| connect_from_port_20=YES | 设定端口 20 进行数据传输(主动模式,被动模式下无效) |
| xferlog_std_format=YES | 设置日子记录的标准格式 |
| xferlog_file=/var/log/xferlog | 设置日子文件的存储路径,如果该文件不存在需要手动创建 touch /var/log/xferlog.log |
| listen=NO | |
| listen_ipv6=YES | |
| userlist_enable=YES | 设置启用 vsftpd 的白名单验证,即不在 userlist_file 中的用户不能使用 ftp |
| tcp_wrappers=YES | 支持 TCP wrapper 模式 |
| chroot_list_enable=NO | 禁止用户登出自己的FTP主目录。 |
| ls_recurse_enable=NO | 禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。如果该项被允许,那么挡多用户同时使用该命令时将会对该服务器造成威胁。 |
| 虚拟用户的配置 | |
| pam_service_name=vsftpd | 设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。 |
| guest_enable=YES | 启用虚拟用户PAM认证 |
| guest_username=virtual | 设置宿主用户名 |
| user_config_dir=/etc/vsftpd/virtual/ | 设置虚拟用户的配置文件夹路径,用于在PAM认证后进行单个用户的配置信息,该文件夹下的配置文件名必须和虚拟用户名一致 |
| virtual_use_local_privs=YES | 虚拟用户的权限和本地用户(宿主)的权限一样 |
- 创建虚拟用户的文件夹,添加虚拟用户的配置
## 创建日志文件
touch /var/log/xferlog.log
## 将日志的权限赋予宿主用户
chown virtual:virtual /var/log/xferlog.log
## 创建虚拟用户配置文件夹
mkdir /etc/vsftpd/viitual/
## 在虚拟用户的配置文件夹下添加配置文件,文件名需要和虚拟用户名一致
vim flank
local_root=/home/virtual/flank
anonymous_enable=NO
local_umask=022
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000
## 在copy 一份为虚拟用户 vitrual2
cp flank mike
## 修改 mike 配置文件的信息
local_root=/home/vitrual/mike
- 虚拟用户配置信息介绍
| 配置 | 描述 |
|---|---|
| local_root=/opt/vsftp/vitraul1 | 指定虚拟用户的具体主路径。 |
| anonymous_enable=NO | 设定不允许匿名用户访问。 |
| local_umask=022 | 设定上传文件权限掩码。 |
| write_enable=YES | 允许登陆用户有写权限; |
| anon_world_readable_only=YES | 允许匿名用户下载,然后读取文件; |
| anon_upload_enable=YES | 允许匿名用户上传文件,只有在write_enable=YES时该参数才生效; |
| anon_mkdir_write_enable=YES | 允许匿名用户创建目录,只有在write_enable=YES时该参数才生效; |
| anon_other_write_enable=YES | 允许匿名用户其他权限,例如删除、重命名等。 |
| idle_session_timeout=600 | 设定空闲连接超时时间。 |
| data_connection_timeout=120 | 设定单次连续传输最大时间。 |
| max_clients=10 | 设定并发客户端访问个数。 |
| max_per_ip=5 | 设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件。 |
| local_max_rate=50000 | 设定该用户的最大传输速率,单位b/s。 |
- 创建虚拟用户各自的虚拟目录
## 创建目录
mkdir -p /home/virtual/{flank,mike}
## 修改虚拟用户的宿主用户为主目录的属主,必须操作不然无法登录
chown -R virtual:virtual /home/virtual
- 重启vsftpd服务,使用资源管理启连接。