VSFTPD文件共享服务器搭建
文件传输协议:
用户Internet上的控制文件的双向传输的协议
也是一个应用程序,不同操作系统有不同的FTP应用程序,用户经常遇到的概念“上传”“下载”
支持FTP协议的服务器都叫做FTP服务器
FTP服务的工作模式
FTP主动模式
FTP客户端-----------------------------数据传输----------------------------FTP服务器端-----TCP:21端口/20端口随机端口
1.命令连接:(1)登录FTPF服务器(随机端口1、SIP、CIP、用户名、密码) -----> 服务端21端口
(2)登录FTPF服务器(随机端口1) <--- 验证成功(欢迎信息)
随机端口:大于1024小于65535
2.数据连接:(3)连接FTP服务器(随机端口2),PORT命令、读取数据(随机端口2)<----服务端20端口
客户端防火墙会拦截:端口不确定,需要开放的端口太多,不安全
防火墙默认策略:防进不防出
优缺点:服务器安全性比较高,客户端连接可能会被客户端防火墙拦截导致数据传输失败
默认开启:但是默认使用被动模式
公司内网使用
FTP被动模式
FTP客户端---------------------------------数据传输-------------------------------FTP服务器端-------TCP:21端口/随机端口
1.命令连接:(1)登录FTPF服务器(随机端口1、SIP、CIP、用户名、密码)---> 服务端21端口
(2)登录FTPF服务器(随机端口1) <--- 验证成功(欢迎信息)
(3)PASV命令 ----> 服务端21端口
随机端口:大于1024小于65535
2.数据连接:(1)接受服务器开放的随机端口 <------- 服务端开启的随机端口信息 服务器端21端口
(2)客户端随机端口2连接到随机端口获取数据,防火墙放行一个随机端口 -----> 服务器随机端口(会限制随机端口范围)
优缺点:服务器安全性较低,客户端连接不会出问题
默认开启:默认启用被动模式(适合公网)
在ftp端执行 passive off 关闭被动模式,启用主动模式
传输方式
ASCII模式:将换行符转换成本机的回车字符
BINARY模式:不会对数据进行任何处理
工作过程中不需要做任何操作,是自由转换的
服务器安装vsftpd服务
yum install -y vsftpd #安装服务
systemctl start vsftpd #启动服务
解析配置文件
vim /etc/vsftpd/vsftpd.conf
安全项:
connect_timeout=60 #主动模式连接超时时间(未正式连接),占用连接资源
accept_timeout=60 #被动模式连接超时时间(未正式连接),占用连接资源
data_connection_timeout=300 #数据传输后,超时断开时间
idle_session_timeout=300 #输入账号密码后,连接超时时间
ftpd_banner=xxx 和 banner_file=/path/file #欢迎提示信息
tcp_wrappers=YES #控制IP是否放行
常见的全局配置:
listen_address=192.168.1.2 #设置监听的 IP 地址(监听的是本地的网卡)
listen_port=21 #设置监听 FTP 服务的端口号
write_enable=YES #是否启用写入权限
download_enable=YES #是否允许下载文件
max_clients=0 #限制并发客户端连接数
max_per_ip=0 #限制同一 IP 的并发连接数
匿名用户配置:
anonymous_enable=YES #启用匿名访问
anon_upload_enable=YES #允匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_max_rate=0 #限制最大传输速率(字节/秒)
aon_umask=022 #匿名用户所上传文件的权限掩码,不管本地文件是什么权限,上传到服务器变成644权限
anon_root=/var/ftp #匿名用户 FTP 的根目录
anon_other_write_enable=YES #允许其它写入权
本地用户配置:
local_enable=YES #启用本地访问
local_umask=022 #本地用户所上传文件的权限掩码
local_root=/var/ftp #指定本地用户的 FTP 根目录
chroot_local_user=YES #是否将用户禁锢在主目录
write_enable=YES #是否开启写权限
local_max_rate=0 #限制最大传输速率(字节/秒)
被动模式端口限制:
pasv_enable=YES #开启被动模式
pasv_min_port=10221 #开启端口最小值
pasv_max_port=10231 #开启端口最大值
两种权限决定FTP客户端能否上传和下载
文件或目录权限
#目录权限:
r--读权限--查看目录内容
w--写权限--不能增删改
x--执行权限--进入目录权限
#文件权限:
r--读权限--查看文件内容--能够下载
w--写权限--更改文件内容
x--执行权限
VSFTPD程序权限
#给予可用权限:
默认允许下载
其他需要修改配置文件(/etc/vsftpd/vsftpd.com)
重要文件介绍
/etc/vsftpd/ftpuser #禁止用户登录的黑名单文件,在文件内的用户名都不允许登录FTP,在密码层级进行拒接登录,修改此文件需要重启服务
/etc/vsftpd/user_list #默认禁止用户登录的黑名单文件在文件内的用户名都不允许登录FTP,在输入用户名的时候就拒绝。在vsftpd配置文件中添加userlist_deny=NO,只有在/etc/vsftpd/user_list这个文件中的用户登录,否则无法登录,这个文件中有描述
/etc/pam.d/vsftpd #用户认证登录的文件,匿名用户/本地用户
工作模式
匿名模式
匿名认证:ftp,anonymous,说白了就是不做任何认证
用户名ftp或者anonymous,密码:因为没有设置密码,所以随便输入回车即可
默认目录
/var/ftp:需要下载或上传默认都是在这个目录下操作,默认不允许上传,其他目录无法查看,如果/var/ftp目录的权限是777,则ftp服务停止正常工作
上传:put 文件名,需要有上传权限才行(修改配置文件)
下载:get 文件名
客户端
安装ftp服务
yum install -y ftp #安装客户端ftp
[root@localhost ~]# ftp 192.168.4.115 #客户端登录
Connected to 192.168.4.115 (192.168.4.115).
220 (vsFTPd 2.2.2)
Name (192.168.4.115:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
本地用户模式
在VSFTPD服务器上创建本地用户,在客户端通过本地用户登录服务器
账号、名称、密码等信息,保存在本地的passwd和shadow中
shell类型:/sbin/nologin 不允许通过用户登录服务器
默认目录
用户的家目录
默认可以上传下载,默认可以创建及更高目录信息
禁锢宿主的目录:chroot_local_user=YES–不允许去其他目录下
注意:需要修改家目录权限
创建本地用户
useradd laow -s /sbin/nologin #创建用户
passwd laow #设置本地用户密码
#本地用户的设置在配置文件设置
客户端
[root@yanzixuan ~]# ftp 10.0.0.138 #连接服务器地址
Connected to 10.0.0.138 (10.0.0.138).
220 (vsFTPd 3.0.2)
Name (10.0.0.138:root): laow #连接服务器的本地用户
331 Please specify the password.
Password: #输入本地用户的密码
230 Login successful.
虚拟用户模式
将创建的用户映射到一个虚拟用户中登录,不同的用户拥有不同的权限
下载权限默认存在
1.创建保存虚拟用户的账号和密码的文件
touch /etc/vsftpd/user.list #创建密码本,第一行用户名称,第二行密码,依次类推
vim /etc/vsftpd/user.list
aa #用户名
111 #密码
ss #用户名
222 #密码
2.将账户密码文件转换成系统所识别的数据库类型文件
cd /etc/vsftpd
db_load -T -t hash -f /etc/vsftpd/user.list /etc/vsftpd/user.db #文件转换,固定格式
3.修改上边两个文件权限为600,防止别人查看
chmod 600 /etc/vsftpd/user.db #修改权限
chmod 600 /etc/vsftpd/user.list #修改权限
4.添加虚拟用户映射的用户
useradd -d /var/ftproot -s /sbin/nologin virtual #创建虚拟用户virtual,家目录/var/ftproot,不允许登录
chmod 755 /var/ftproot #修改权限
5.设置认证
/etc/pam.d/vsftpd–系统默认认证,认证的是本地用户和匿名用户
cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.a #生成新的认证文件
> /etc/pam.d/vsftpd.a #清空生成的文件
vim /etc/pam.d/vsftpd.a #添加下边的内容
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/user #这个user文件其实就是上边的user.db文件
account required pam_userdb.so db=/etc/vsftpd/user
6.在vsftpd主配置文件中
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd #将vsftpd修改为vsftpd.a,和上边生成的认证文件相对应
userlist_enable=YES
tcp_wrappers=YES
#添加下边三行
guest_enable=YES #运行来宾用户访问
guest_username=virtual #设置来宾用户为virtual
user_config_dir=/etc/vsftpd/conf #用户权限控制目录
7.创建用户的控制权限目录及文件
mkdir /etc/vsftpd/conf #创建用户谦虚控制目录,和配置文件相对应
cd /etc/vsftpd/conf
touch aa ss #创建用户权限文件,和上边的用户相对应
echo "anon_upload_enable=YES" >> aa #用户aa允许上传文件
echo "anon_mkdir_write_enable=YES" >> ss #用户ss允许创建目录,那个用户需要什么权限,就在那个用户的权限文件将权限写入
常见的权限
anon_upload_enable=YES #允许上传
anon_mkdir_write_enable=YES #允许用户创建目录
anon_other_write_enable=YES #允许其它写入权限
客户端登录
[root@yanzixuan ~]# ftp 10.0.0.138 #登录vsftp服务器
Connected to 10.0.0.138 (10.0.0.138).
220 (vsFTPd 3.0.2)
Name (10.0.0.138:root): aa #登录虚拟用户
331 Please specify the password.
Password: #输入虚拟用户密码
230 Login successful. #登录成功
Remote system type is UNIX.
Using binary mode to transfer files.
排错
在客户端登录是出现500 OOPS: vsftpd: refusing to run with writable root inside chroot(),这个错误
chroot_local_user=YES #是否将用户禁锢在主目录,取消注释就好
allow_writeable_chroot=YES #添加
匿名用户和本地用户加密传输设置
frp客户端不支持加密访问
可以使用FileZilla软件加密传输
1.安装机密算法程序
yum install -y openssl openssl-devel #安装加密算法
2.创建证书
openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem #创建证书
cp -a vsftpd.pem /etc/ssl/certs/ #复制到/etc/ssl/certs目录下
chmod 400 /etc/ssl/certs/vsftpd.pem #,为了保密性,不能让别人随意查看
3.修改配置文件
vim /etc/vsftpd/vsftpd.conf #配置文件后追加如下内容
ssl_enable=YES #开启加密认证
allow_anon_ssl=YES #运行匿名用户加密认证
force_local_data_ssl=YES #本地数据传输强制加密
force_local_logins_ssl=YES #本地用户登录强制加密
force_anon_data_ssl=YES #匿名用户数据传输强制加密
force_anon_logins_ssl=YES #匿名用户登录强制加密,有没有无所谓
ssl_tlsv1=YES #开启sslv1版本认证
ssl_sslv2=NO #关闭sslv2认证,需要更高级证书
ssl_sslv3=NO #关闭sslv3认证,需要更高级证书
rsa_cert_file=/etc/ssl/certs/vsftpd.pem #证书路径