vsftp服务搭建使用--学习笔记

独自空忆成欢 提交于 2020-02-26 00:13:54

本次实验的环境是redhat7.0系统,实验内容来自《linux就该这么学》
ftp是一种在互联网中进行文件传输的协议,基于客户端/服务端模式,默认使用的是20/21端口,20端口用于传输数据,21端口用于接收客户端发出的相关ftp命令和参数。
ftp分为:

  • 主动模式:ftp服务器主动向客户端发起连接请求
  • 被动模式:ftp服务器等待客户端发起连接请求(ftp的默认工作模式)

vsftpd(very secure ftp daemon,非常安全的ftp守护进程)是一款隐形在linux操作系统上的ftp服务程序,不仅仅完全开源而且免费。

1.vsftpd

三种模式:

  • 匿名访问模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到ftp服务器
  • 本地用户模式:是通过linux系统本地的账户密码信息进行认证的模式,比匿名模式更安全。
  • 虚拟用户模式:最安全的模式,为ftp服务单独创建用户,使用虚拟用户来进行口令验证,虚拟用户在本地的服务器上并不存在。

1.1 匿名访问模式

参数 作用
anonymous_enable = YES 开启匿名用户模式
anon_umask = 022 匿名用户上传文件的umask值
anon_upload_enable = YES 允许匿名用户上传文件
anon_mkdir_write_enable = YES 允许匿名用户创建目录
anon_other_write_enable = YES 允许匿名用户修改和删除目录

1.1.1 修改配置

[root@localhost ~]# yum install vsftpd -y
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf.bak
[root@localhost vsftpd]# grep -v "#" vsftpd.conf.bak >vsftpd.conf
[root@localhost vsftpd]# 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
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

1.1.2 匿名用户默认访问的是/var/ftp/pub目录

将/var/ftp/pub目录的属主设置为ftp用户

[root@localhost vsftpd]# chown -fR ftp /var/ftp/pub

1.1.3 启动服务

[root@localhost vsftpd]# systemctl restart vsftpd
[root@localhost vsftpd]# systemctl enable vsftpd
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'

1.1.4 设置selinux

[root@localhost vsftpd]# getsebool -a|grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost vsftpd]# setsebool -P ftpd_full_access=on

1.1.5 客户端测试

在另一台的客户端进行连接

[root@localhost Desktop]# ftp 192.168.137.10   【服务端的地址】
Connected to 192.168.137.10 (192.168.137.10).
220 (vsFTPd 3.0.2)
Name (192.168.137.10:root): anonymous  【匿名用户】
331 Please specify the password.
Password:  【没有密码,直接回车】
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,137,10,224,111).
150 Here comes the directory listing.
drwxr-xr-x    2 14       0               6 Mar 07  2014 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir adir  【创建目录】
257 "/pub/adir" created
ftp> rename adir bdir  【目录改名】
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir bdir  【删除目录】
250 Remove directory operation successful.

测试成功。

1.2 本地用户模式

参数 作用
anonymous_enable = NO 禁止匿名用户模式
local_enable = YES 开启本地用户模式
write_enable=YES 设置写权限
local_umask=022 本地用户模式上传文件的umask
userlist_enable=YES 启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_deny=YES 开启用户作用名单文件功能

1.2.1 修改配置文件

在上面已经修改selinux,这里就不再设置了

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

1.2.2 启动服务

[root@localhost vsftpd]# vim vsftpd.conf
[root@localhost vsftpd]# systemctl restart vsftpd

1.2.3 创建一个用户

创建一个普通用户,在客户端测试时,使用这个普通用户登录ftp,服务器端默认是禁止root用户登录的,名单文件是 /etc/vsftpd/user_list 和 /etc/vsftpd/ftpusers

[root@localhost vsftpd]# useradd developer
[root@localhost vsftpd]# echo "redhat" |passwd --stdin developer
Changing password for user developer.
passwd: all authentication tokens updated successfully.

1.2.3 客户端测试

登录另一台客户端进行测试

[root@localhost Desktop]# ftp 192.168.137.10
Connected to 192.168.137.10 (192.168.137.10).
220 (vsFTPd 3.0.2)
Name (192.168.137.10:root): developer  【服务端的用户】
331 Please specify the password.
Password:  【developer的密码】
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.    【这里进入的developer的家目录】
ftp> mkdir adir
257 "/home/developer/adir" created
ftp> rename adir bdir
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir bdir
250 Remove directory operation successful.
ftp> 

测试成功

1.3 虚拟用户模式

参数 作用
anonymous_enable=NO 关闭匿名用户模式
guest_enable=YES 开启虚拟用户模式
guest_username=auser 虚拟用户名称
allow_writeable_chroot=YES 允许对禁锢的ftp根目录执行写入操作,而且不拒绝用户的登录请求
pam_service_anme=vsftpd.vu 指定pam文件

1.3.1 创建用户

创建用户进行ftp认证的用户数据文件,启动奇数行为账户名,偶数行为密码,创建两个用户xiaoming和xiaohong,密码都是redhat:

[root@localhost vsftpd]# vim user.list
xiaoming
redhat
xiaohong
redhat

使用db_load对明文的数据文件进行加密,产生一个user.db的加密文件

[root@localhost vsftpd]# db_load -T -t hash -f user.list user.db
[root@localhost vsftpd]# ls
ftpusers  user.db  user_list  user.list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh
# 设置权限最小
[root@localhost vsftpd]# chmod 600 user.db 
# 删除明文密码文件
[root@localhost vsftpd]# rm -f user.list 

1.3.2 创建ftp存储目录

创建存储文件的目录已经虚拟用户映射的系统本地用户。如果不映射本地用户,那么在创建文件时,这个文件的权限将会出现错误。虚拟用户登录ftp,会进入到映射的本地用户的家目录。

[root@localhost vsftpd]# useradd -d /var/auser -s /sbin/nologin auser
[root@localhost vsftpd]# chmod -Rf 755 /var/auser

1.3.4 创建支持虚拟用户的pam文件

[root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu
auth    required    pam_userdb.so db=/etc/vsftpd/user
account required    pam_userdb.so db=/etc/vsftpd/user

1.3.5 修改配置文件

[root@localhost vsftpd]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=auser
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/user_dir  # 虚拟用户不通权限的配置文件所存放的路径

为虚拟用户设置不同的权限。xiaoming用户只能查看文件。xiaohong用户可以创建、修改、删除

[root@localhost vsftpd]# mkdir /etc/vsftpd/user_dir
[root@localhost vsftpd]# cd /etc/vsftpd/user_dir
[root@localhost user_dir]# touch xiaoming
[root@localhost user_dir]# vim xiaohong
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@localhost user_dir]# systemctl restart vsftpd

防火墙,selinux在上文已经设置过了

1.3.6 客户端测试

在另一台客户端上测试
测试xiaoming用户,只能登陆和查看

[root@localhost Desktop]# ftp 192.168.137.10
Connected to 192.168.137.10 (192.168.137.10).
220 (vsFTPd 3.0.2)
Name (192.168.137.10:root): xiaoming
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls 【可以查看文件】
227 Entering Passive Mode (192,168,137,10,82,131).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir adir 【创建目录没有权限】
550 Permission denied.

测试xiaohong用户,可以登录,查看,创建、修改、删除

[root@localhost Desktop]# ftp 192.168.137.10
Connected to 192.168.137.10 (192.168.137.10).
220 (vsFTPd 3.0.2)
Name (192.168.137.10:root): xiaohong
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,137,10,213,178).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir adir
257 "/adir" created
ftp> rename adir bdir
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir bdir
250 Remove directory operation successful.

测试成功

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!