目录
1 FTP、Vsftp介绍
1.1 FTP介绍
FTP协议,即文件传输协议(File Transfer Protocol),是一种用于在网络上进行文件传输的协议。它是一种传输文件的标准方式,可以将文件在网络上的不同计算机之间进行传递和下载。FTP协议是TCP/IP协议族中的一个应用层协议。它利用客户端-服务器模型,通过两个不同的端口进行通信。FTP客户端通过21号端口连接到FTP服务器,然后在20号端口上进行数据传输。FTP协议支持多种认证方式,包括明文、口令、SSL/TLS等。FTP在文件传输方面已经得到广泛的应用,它被用于管理网站网页,进行软件升级和备份等。
FTP服务是Client/Server(简称C/S)模式,基于FTP协议实现FTP文件对外共享及传输的软件称之
为FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传、下载文件。
目前主流的FTP服务器端软件包括: Vsftpd、ProFTPD、PureFTPd、Wuftpd、Server-U FTP、FileZilla Server等软件,其中Unix/Linux使用较为广泛的FTP服务器端软件为Vsftpd。
1.2 Vsftp介绍
VSFTP,全称为Very Secure FTP,是一种高度安全的FTP服务器软件。它是一款针对安全和性能进行优化的FTP服务器,拥有速度快、稳定、易用和安全性高的特点。VSFTP是在GPL许可证下发布的自由软件,可以在大多数类UNIX系统中使用。VSFTP支持IPv6、SSL/TLS加密传输,同时还提供了多种认证方式,包括本地用户、PAM、LDAP等等。同时,VSFTP也支持虚拟用户和虚拟目录,便于管理员进行用户管理。总之,VSFTP是一款功能强大且安全性高的FTP服务器软件,深受系统管理员和开发者的欢迎。
1.3 Vsftp的登录类型
VSFTP提供了系统用户、匿名用户、和虚拟用户三种不同的登陆方式。所有的虚拟用户会映射成一个系统用户,访问时的文件目录是为此系统用户的家目录,匿名用户也是虚拟用户,映射的系统用户为ftp详细信息可以通过man vsftpd.conf(手册)查看。
2 Vsftp安装配置
2.1 更换源
将你这台机器的本地源换成国内的阿里的源。(在后面的安装过程相对较快)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.2 安装epel源
yum -y install epel-release
如图即表示安装成功~
2.3 安装Vsftpd及相关依赖
yum -y install vsftpd* pam* db4*
vsftpd: ftp软件
pam: 认证模块
db4: 支持文件数据库
显示“完毕!”字样即表示安装成功!
2.4 vsftpd配置文件说明
配置文件 | 作用 |
/etc/vsftpd/vsftpd.conf | vsftpd的核心配置文件 |
/etc/vsftpd/ftpusers | 用于指定哪些用户不能访问FTP服务器 |
/etc/vsftpd/user_list | 指定允许使用vsftpd的用户列表文件 |
/etc/vsftpd/vsftpd_conf_migrate_sh | 是vsftpd操作的一些变量和设置脚本 |
/etc/ftp/ | 默认情况下匿名用户的根目录 |
2.5 vsftpd 配置详解
属性 | 属性值 | 含义 |
anonymous_enable | YES/NO | 是否允许匿名用户(anonymous)登录FTP,如果该设置被注释,则默认允许。 |
local_enable | YES/NO | 是否允许本地系统用户登录 |
write_enable | YES/NO | 是否开启任何形式的FTP写入命令,上传文件 |
local_umask | xxx | 本地用户的umask设置,如果注释该设置则默认为077,但一般都设置成022 |
anon_upload_enable | YES/NO | 是否允许匿名用户上传文件,如果要设置为允许,则需要先开启write_enable,否则无效,此外对应目录还要具有写权限 |
anon_mkdir_write_enable | YES/NO | 是否允许匿名用户创建新目录 |
dirmessage_enable | YES/NO | 当进入某个目录时,发送信息提示给远程用户 |
xferlog_enable | YES/NO | 是否开启上传/下载的日志记录 |
connect_from_port_20 | YES/NO | 是否使用20端口来连接FTP |
chown_uploads | YES/NO | 匿名上传的文件时是否由某一指定用户chown_username所有 |
chown_username | 有效用户名 | 匿名上传的文件由该设定用户所有 |
xferlog_file | 有效路径 | 设置日志文件的保存位置,默认为/var/log/xferlog |
2.6 备份配置文件
vsftpd修改配置前备份配置文件。(如果不备份,配置错误后,要把文件、用户删除掉,非常麻烦)
进入/etc/vsftpd/中
cd /etc/vsftpd/
ls命令查看
清空/tmp/
cd /tmp/
rm -rf *
cd -:返回进入此目录之前所在目录
cd -
开始备份
cp vsftpd.conf{,.bak}
ls命令查看,发现多出vsftpd.conf.bak
3 vsftpd 配置匿名用户
3.1 编辑配置文件
vi vsftpd.conf
进入后会发现很多注释(带#的),需要修改如下内容,但是很麻烦,建议直接全部删除,直接输入如下内容。
write_enable=YES
anon_umask=022
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
拓展
如果使用vsftp的是本地用户,对应修改配置文件中的 local_umask 的值。
如果使用vsftp的是匿名用户,对应修改配置文件中的 anon_umask 的值。
3.2 常用的匿名FTP配置项
anonymous_enable=YES # 是否允许匿名用户访问
anon_umask=022 # 匿名用户所上传文件的权限掩码
anon_root=/var/ftp # 设置匿名用户的FTP根目录
anon_upload_enable=YES # 是否允许匿名用户上传文件
anon_mkdir_write_enable=YES # 是否允许匿名用户创建目录anon_other_write_enable=YES # 是否允许匿名用户有其他写入权 (改名,删除,覆盖)
anon_max_rate=0 # 限制最大传输速率(字节/秒) 0为无限制
3.3 启动vsftp服务
重新启动vsftpd服务
systemctl restart vsftpd
【如果此时报错一定是因为刚才配置文件内写错了,重新回去编辑。】
查看是否有vsftpd进程。
方法一:
ps aux | grep vsftpd
方法二:
先下载好net工具
yum -y install net-tools
查看
netstat -lnpt | grep vsftpd
3.4 登录验证
方法一:工具访问
使用Xftp工具登录。(需要提前下载)
进入Xftp后点击建立连接,主机输入IP地址,端口号改为21,点击连接。出现FTP用户身份验证窗口,点击匿名用户登录--确定。
出现pub文件夹,说明我们成功啦~
方法二:浏览器访问
首先先关闭好防火墙。
systemctl stop firewalld
在浏览器中输入ftp://+IP地址访问。【每个人IP不一样,不知道IP地址的使用ip a命令查看】
ftp://+IP地址
3.5 修改权限上传
3.5.1 修改权限
进入/var/ftp/中
cd /var/ftp/
ls命令查看下
查看pub文件夹的属主和属组
ll -d pub/
修改属主和属组
chown -R ftp.ftp pub/
修改完成后重新查看下,root变成ftp即表示修改成功。
修改完成后,一定不要忘记重新启动vsftpd服务(不重启服务不生效)
systemctl restart vsftpd
3.5.2 上传文件
方法一:Xftp工具
关闭刚才打开的连接窗口,重新登录。(因为修改了属主和属组)
还是使用匿名登录,登录成功后,进入到pub目录,右击桌面的“新建RTF文档”--传输,在pub目录下出现“新建RTF文档.rtf”文件,说明我们成功啦!
这时候也可以使用ls命令查看。
方法二:浏览器
先创建个文件abc.txt
touch /var/ftp/abc.txt
还是使用ftp://+IP地址访问浏览器。
出现abc.txt文件,说明我们成功啦~
4 vsftp配置本地(系统)用户
4.1 创建测试用户
创建两个用户zhansan、lisi
useradd zhansan
useradd lisi
设置密码
passwd zhansan
passwd lisi
4.2 修改配置文件
vi /etc/vsftpd/vsftpd.conf
将原有内容删除,编辑如下内容:
local_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
编辑完成后保存退出。
重新启动vsftp服务
systemctl restart vsftpd
【如果遇到:Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details.情况,请查看另一篇文章解决:http://t.csdnimg.cn/TXZhw】
4.3 常用的本地用户FTP配置项
local_enable=YES # 是否允许本地系统用户访问
local_umask=077 #本地用户所上传文件的权限掩码
local_root=/var/ftp # 设置本地用户的FTP根目录
chroot_list_enable=YES # 表示是否开启chroot的环境,默认没有开启
chroot_list_file=/etc/vsftpd/chroot_list # 表示写在/etc/vsftpd/chroot_list文件里面的用户 是不可以出chroot环境的,默认是可以的。
Chroot_local_user=YES # 表示所有写在/etc/vsftpd/chroot_list文件里面的用户是可以出chroot环境的,和上面的相反。local_max_rate=0 # 限制最大传输建率(字节/秒) 0为无限制
4.4 添加用户到白名单
vi /etc/vsftpd/user_list
在文件中最后添加zhangsan和lisi
zhansan
lisi
添加完成后重新启动vsftp服务
systemctl restart vsftpd
4.5 登录测试
方法一:使用Xftp工具
再次使用匿名登录,发现登录不上去,显示“用户身份验证失败是否要重试”页面。
点击否。
在“FTP用户身份验证”页面用户名输入zhangsan或者lisi,输入密码登录。
cd /home/lisi/
创建zhangsan.txt文件
touch lisi.txt
重新启动vsftp服务
systemctl restart vsftpd
重新启动后在Xftp工具中再重新登录一下。
发现出现lisi.txt文件,成功!
方法二:使用Xshell工具
点击新建
出现如下界面,名称随便起一个,主机输入IP地址。然后点击连接。
在如下界面输入用户名lisi,并选择记住用户名。
输入密码。选择记住密码并点击确认。
进入后我们ls命令查看,发现没有文件。
我们跟方法一中一样在root用户下创建lisi.txt文件并重新启动vsftp服务,然后进行查看。
root用户终端
lisi用户终端
发现本来没有,现在出现lisi.txt文件,说明我们成功啦~
5 vsftp配置虚拟用户
5.1 建立虚拟FTP用户账号
useradd -s /sbin/nologin vu
5.2 创建虚拟用户文件
cd /etc/vsftpd/
vi user
添加如下内容:
zhao
12345
zhang
12345
奇数行代表用户名,偶数行代表密码。【切记,如下账号和密码不能写在同一行中】
5.3 创建数据文件
通过 db_load工具创建出 Berkeley DB 格式的数据库文件。
db_load -T -t hash -f user user.db
-f 指定数据原文件
-T 允许Berkeley DB的应用程序使用文本格式转换的DB数据文件
-t hash 读取文件的基本方法
ls命令查看。
出现user.db,证明我们成功啦
5.4 建立支持虚拟用户的PAM认证文件
vi /etc/pam.d/vsftpd.vu
编写配置文件,最后的路径不要写错!
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
【对应刚才生成user.db文件 】
5.5 修改配置文件
vi vsftpd.conf
编写如下内容。
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
guest_enable=YES
guest_username=vu
pam_service_name=vsftpd.vu
local_enable=YES
local_umask=077
chroot_local_user=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_dir
5.6 常用的全局配置项
listen=YES #是否以独立运行的方式监听服务
listen_address=192.168.10.112 #设置监听FTP服务的IP地址
listen_port=21 #设置监听FTP服务的端口号
write_enable=YES #是否启动写入权限(上传、删除文件)
download_enable=YES #是否允许下载文件
dirmessage_enable=YES #用户切换目录显示.message文件
xferlog_enable=YES # 启用日志文件,记录到/var/log/xferlog
xferlog_std_format=YES # 启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式
connect_from _port_20=YES # 允许服务器主动模式 (从20端口建立数据连接)
pasv_enabTe=YES # 允许服务器被动模式
pasv_max_port=24600 # 设置被动模式服务器的最大端口号
pasv_min_port=24500 # 设置黄动模式服务的最小端口
pam_service_name=vsftpd # 用户认证的PAM文件位置(/etc/pam.d/vsftpd.vu)
userlist_enable=YES # 是否启用user_list列表文件
userlist_deny=YES # 是否禁用user_list中的用户max_cIients=0 #限制并发客户端连接数
max_per_ip=0 # 限制同一IP地址的井发连接数
tcp_wrappers=YES #是否启用tcp_wrappers主机访问控制chown_username=root #表示匿名用户上传的文件的拥有人是root,默认关闭
ascii_upload_enable=YES # 表示是否允许用户可以上传一个二进制文件,默认不允许
ascii_download_enable=YES #代表是否允许用户下载个一个二进制文件,默认不允许
nopriv_user=vsftpd #设置支撑vsftpd服务的宿主用户为手动建立的vsftpd用户async_abor_enable=YES # 设定支持异步传输功能
ftpd_banner=welcome to Awei FTP servers # 设定vsftpd的登录标语
guest_enable=YES # 设置启用虚拟用户功能guest_username=ftpuser #指定虚拟用户的宿主用户
virtual_use_local_privs=YES # 设定虚拟用户的权限符合他们的宿主用户
user_config_dir=/etc/vsftpd/vconf # 设定虚拟用户个人vsftp的配置文件存放路径
5.7 为用户建立独立的配置目录及文件
mkdir /etc/vsftpd/user_dir
ls命令查看
进入刚创建的文件夹
cd /etc/vsftpd/user_dir
vi zhao用户
vi zhao
输入如下命令(虚拟用户数据的存放路径)
local_root=/etc/vsftpd/data
5.8 创建虚拟用户数据存放位置
cd ..返回上一目录
cd ..
创建data目录
mkdir data
授权
chmod 777 data/
5.9 重启vsftp服务
systemctl restart vsftpd
5.10 登录测试
使用Xftp工具,用户名zhao,密码12345,进行登录。
cd /etc/vsftpd/data
创建一个zhao.txt文件夹。
touch zhao.txt
重点:
本地用户和虚拟用户不能同时登录、因为认证方式只有一种
本地是 pam_service_name =vsftpd
虚拟是 pam_service_name =vsftpd.vu
Xftp工具中重新登录一下,发现有zhao.txt文件,即说明成功啦~
id zhao
查看是否有zhao用户,没有得啦,O(∩_∩)O哈哈~
创作不易,给个三连吧~