文件共享-FTP
FTP:是文件传输协议(File Transfer Protocol)的缩写。用来实现文件的上传(upload)和下载(download)。工作在C/S架构模式下。
C/S架构:是客户端Client/服务器server访问模式。C/S的特点是客户机必须使用专用的客户端程序去访问服务器。
B/S架构:是浏览器Browser、服务器Server访问模式。B/S的特点是客户机只需用IE、Firefox等浏览器来访问服务器。B/S架构通常是用来开发基于web 站的应用程序。
FTP的工作端口:
21 控制端口,用于在客户机和服务器之间建立连接。
20 数据端口。用于服务器给客户机主动进行数据连接。
络服务端口 的作用:用来标示服务器上的不同业务(服务)。
ftp的工作模式:主动port、被动passive模式
ftp主动(port)模式工作过程:
1.客户机和服务器建立连接关系(登录): 客户机(>1024的随机端口 ) 服务器 21 port
2.双方建立数据连接关系,传输数据:客户机(>1024的随机port) 服务器 20 port
ftp被动(pasv)模式工作过程:
1.客户机和服务器建立连接关系(登录): 客户机(>1024的随机端口 ) 服务器 21 port
2.双方建立数据连接关系,传输数据:客户机(>1024的随机port) 服务器(>1024的随机port)
说明:当ftp服务器上有防火墙时,通常客户机是以被动模式去访问ftp服务器的。在ftp服务器的vsftpd.conf和防火墙上要指定放行的被动模式端口范围的最小值和最大值。
vsftpd.conf 的被动模式端口范围:
pasv_min_port=5000
pasv_max_port=6000
ftp服务端软件 | ftp客户端软件 |
vsftpd | ftp |
lftp |
三类用户
本地用户:服务器上存在的用户,访问的是用户自己的家目录(如han用户访问的是/home/han目录)
匿名用户:匿名用户实际上有一个与之对应的系统用户 ftp这个用户默认是匿名用户所对应的用户,匿名用户映射为ftp用户,匿名用户访问的是/var/ftp目录
虚拟用户:是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器
部署思路:( 络服务的部署通用思路)
1.关闭防火墙和selinux安全功能,并查状态:
systemctl stop firewalld ; setenforce 0
systemctl status firewalld ; getenforce
2.查软件是否已安装,如果未安装就安装软件。
3.启动服务,并允许开机自动启动
4.设置共享目录,重新加载设置。
5.做本地(内测)访问测试,做异地(公测)访问测试。
实验环境:以centos 7.6 系统做服务器端IP为192.168.11.11
客户端IP为192.168.11.12/1
服务器端:vsftpd {非常安全的ftp守护进程(Very secure ftp Daemon)}
解释:
进程:正在进行(运行running)的程序。
守护进程Daemon: 络服务类的程序都会有守护进程。守护进程是指实时监测服务访问状态的程序。通常都是在系统后台运行。
vsftpd部署流程:
一、关闭防火墙和selinux安全功能,并查状态:
systemctl stop firewalld ; setenforce 0
systemctl status firewalld ; getenforce
三、启动服务并设置为开机自启动
重启动服务:systemctl restart vsftpd
允许开启自动启动:systemctl enable vsftpd
查服务状态:systemctl status vsftpd
公测:win7/10访问vsftpd共享:win+E–>ftp://han:0@192.168.11.11
vsftpd.conf的其他配置选项:man vsftpd.conf
48 #chown_uploads=YES 允许修改上传后的文件的属主和属组
49 #chown_username=whoever 文件的属主、属组修改成当前访问共享的用户
53 #xferlog_file=/var/log/xferlog 指定xferlog日志文件名及其路径,当xferlog_enable为YES时,此项默认为启用
60 #idle_session_timeout=600 (重点)空闲会话超时为600秒(即10分钟),默认开启了,时间是300秒
idle空闲会话超时时间是指用户登录到ftp服务后,n秒都没执行操作,服务器自动将此用户断开连接。(防止客户机占用服务器 络资源)
63 #data_connection_timeout=120 (重点)数据连接超时时间为120秒,默认开启了,时间是300秒
data_connection超时时间是指当客户端下载或上传文件时,由于 络不稳定,当数据掉线时间超过120秒,文件就下载或上传失败。(防止客户机占用服务器 络资源)
67 #nopriv_user=ftpsecure
72 #async_abor_enable=YES 允许异步方式传输数据
83 #ascii_upload_enable=YES 允许以ascii编码方式上传文件,默认为NO,是以binary二进制方式上传
84 #ascii_download_enable=YES 允许以ascii编码方式下载文件,默认为NO,是以binary二进制方式下载
87 #ftpd_banner=Welcome to blah FTP service. (重点)自定义banner欢迎提示语(标语)(用于打广告)
banner_file=/etc/vsftpd/banner.txt (重点)自定义banner标语文件(用于打广告)
91 #deny_email_enable=YES
93 #banned_email_file=/etc/vsftpd/banned_emails
local_max_rate=0 本地用户(普通用户)最大传输速度,0是不限速。单位是byte字节
anon_max_rate=0 匿名用户最大传输速度,0是不限速。单位是byte字节
anon_other_write_enable=YES 允许匿名用户执行除了新建和上传外的其他权限,如删除、改名。
listen_port=21 监听21 端口(默认开启)
pasv_enable=YES 启用pasv被动模式
pasv_min_port=5000 指定pasv被动模式的最小端口
pasv_max_port=6000 指定pasv被动模式的最大端口
dual_log_enable=YES 启用/var/log/xferlog 和 /var/log/vsftpd.log 双日志文件(默认关闭)
max_per_ip=数字 单个IP的最大并发量(即单个客户端IP能同时登录的数量),同时下载几个文件
max_clients=数字 最大客户端数量(即并发量),即允许有多少个IP的客户端同时访问服务器
user_config_dir=/etc/vsftpd/userconf 定义用户个人配置文件所在目录。定义了这句之后,就要在userconf目录中创建以用户名命名的文件,这就是这个用户的配置文件。其中加入一条local_root=/home/ftp为指定用户登录目录。
setproctitle_enable=YES 将所有连接以不同的进程体现出来
vsftpd.conf默认设置的功能:
1.允许匿名用访问共享,访问的是/var/ftp目录,且只能下载文件,不能上传文件。
2.允许普通用访问共享,访问的是用户自己的家目录,既能下载文件,也能上传文件。
3.普通用户用ftp命令登录到vsftpd服务器之后,能chroot到服务器的其他目录路径下,此功能不安全,建议关掉。
例:将root用户从 vsftpd 黑名单文件中注释掉,重启vsftpd服务,用root账 访问共享资源。
#root 在此行行首添加# (即注释root用户)
第3步:重启服务。(修改黑名单文件是立即生效的,可以不重启服务)。
systemctl restart vsftpd
第四步,做共享访问测试。
win7/10访问vsftpd共享:win+E–>ftp://root:0@192.168.11.11
linux用root访问共享:
ftp 192.168.11.11 回车—》用户名root回车—>密码0回车–>看到successful表示登录成功
lftp 192.168.11.11 -u root,0
详解vsftpd的用户牢笼功能:
vsftpd的chroot牢笼功能:vim /etc/vsftpd/vsftpd.conf 找到如下内容
#chroot牢笼功能:锁定用户在自己的家目录中,即不允许用户访问自己家目录以外的目录。
#chroot_local_user=YES 允许本地用户chroot牢笼功能(change root),默认为NO不启用
#chroot_list_enable=YES 启用chroot_list文件功能,默认NO不启用此功能
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件及其路径,默认无此文,需要用户自己创建

chroot 四种牢笼情况 | |
1、全部不锁(即默认情况) #chroot_local_user=YES #chroot_list_enable=YES #(default follows) #chroot_list_file=/etc/vsftpd/chroot_list |
2、全部加锁 chroot_local_user=YES allow_writeable_chroot=YES 允许chroot牢笼功能下执行写操作(centos7中必加此行) |
3、少数不加锁 chroot_local_user=YES allow_writeable_chroot=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件及其路径 |
4、少数加锁 allow_writeable_chroot=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list |
————————————-
案例需求:实现允许anonymous匿名用户既能下载又能上传文件文件。
需求分析:匿名用户要想对共享目录有rw可读可写的权限,必须满足以下2个条件:
1.文件共享软件必须允许这个用户有可读可写的权限。
2.用户对共享目录自身要有可读可写的权限。
匿名用户仅允许上传文件到/var/ftp中的子目录中。如/var/ftp/upload,且ftp匿名用户对upload目录要有可读可写权限。
警告:/var/ftp目录的属主、属组不允许修改,且other权限不允许有w可写权限,否则用ftp匿名用户访问共享时会提示下面这个500错误:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
实施参考:
第1步,在vsftpd.conf配置文件中允许anonymous匿名用户有可读可写的权限。
vim /etc/vsftpd/vsftpd.conf 找到如下代码,去掉29、33行的#
12 anonymous_enable=YES
29 #anon_upload_enable=YES 允许匿名用户上传
33 #anon_mkdir_write_enable=YES 允许匿名用户用mkdir创建目录
anon_other_write_enable=YES 允许匿名用户执行rm删除等操作(添加此行)
anon_world_readable_only=NO 关闭匿名用户只读的限制(为YES时会无法下载)
第2步,用root用户创建/var/ftp/upload目录,权限为777或属主和属组均为ftp,重启vsftpd服务,在win7/10中用ftp匿名用户访问共享ftp://192.168.11.11,上传一个文件到upload共享目录,看是否能传上去。结果是可以匿名用户上传文件到upload目录中。
mkdir -v /var/ftp/upload
chown -v ftp:ftp /var/ftp/upload 或 chmod -v 777 /var/ftp/upload
systemctl restart vsftpd
—————————————
vsftpd虚拟用户
虚拟用户:即非useradd创建的用户账 (非/etc/passwd中的账 ),而是用vim创建的属于vsftpd的独立用户账 。
虚拟用户的优势:可以避免系统中的用户账 过多,让vsftpd文件共享软件独立管理自己的用户账 。
虚拟用户账 文件格式:
文件中的奇数行是用户账 ,偶数行是用户的密码。
vsftpd的虚拟用户方案思路:
1.准备工作:确保vsftpd文件共享服务已安装,并已启动vsftpd服务,且关闭了selinux和firewalld安全功能。
2.创建虚拟用户账 文件。
3.将虚拟用户账 用db_load转换成加密的数据库格式文件。
4.在vsftpd的pam认证文件中添加虚拟用户账 文件的认证关系。
5.用useradd创建一个普通用户账 vftper。
6.在vsftpd.conf配置文件中启用guest来宾(即虚拟用户)功能,设置一个真实用户账 ,并将真实用户账 vftper和虚拟用户账 文件关联起来。
7.给每个虚拟用户账 设置独立的共享访问速度和访问目录。
8.重启vsftpd服务,并分别用虚拟用户账 访问共享。
vsftpd虚拟用户实施思路:
1.准备工作:确保关闭了selinux和firewalld安全功能。且vsftpd文件共享服务已安装,并已启动vsftpd服务。
setenforce 0
getenfroce
systemctl stop firewalld
systemctl status firewalld
2.创建虚拟用户账 文件。
cat > /etc/vsftpd/vuser.txt
f1
passf1
f2
passf2
f3
passf3
EOF
3.将虚拟用户账 转换成加密的数据库格式文件。
yum provides db_load
yum install -y libdb-utils
cd /etc/vsftpd
ls
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuserdb.db
chmod -v 600 /etc/vsftpd/vuserdb.db
db_load选项:
-T 是translation转换文件格式
-t hash 指定格式转换的算法为hash算法
-f 是指定要转换格式的文件
/etc/vsftpd/vuser.txt 是要转换格式的文件
/et/vsftpd/vuserdb.db 是转换格式之后的文件
4.在vsftpd的pam认证文件中添加虚拟用户账 文件的认证关系。
cp -av /etc/pam.d/vsftpd{,.bak}
vim /etc/pam.d/vsftpd 做如下修改
#%PAM-1.0
#以下两行的功能:仅能实现虚拟用户访问共享,普通用户不能访问共享。(不建议使用)
#required 意思是必须的 sufficient 意思是满足的、备选的
#auth required pam_userdb.so db=/etc/vsftpd/vuserdb
#account required pam_userdb.so db=/etc/vsftpd/vuserdb
#以下功能选项的功能:既能让虚拟用户访问共享,也能让普通用户访问共享。(推荐使用)
auth sufficient pam_userdb.so db=/etc/vsftpd/vuserdb
account sufficient pam_userdb.so db=/etc/vsftpd/vuserdb
#以下几行功能选项是vsftpd的默认pam认证文件内容。(无需修改)
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
5.用useradd创建一个普通用户账 vftper。
useradd vftper -s /sbin/nologin
id vftper
ls -ld /home/vftper
6.在vsftpd.conf配置文件中设置一个真实用户账 ,并将真实用户账 vftper和虚拟用户账 文件关联起来。
cd /etc/vsftpd
cp -av vsftpd.conf{,.bak}
cat /etc/vsftpd/vsftpd.conf
vim vsftpd.conf 在文件最后添加如下内容
guest_enable=YES 允许来宾用户访问共享,即虚拟用户
guest_username=vftper 指定来宾用户名为vftper用户(即第4步新建的用户)
user_config_dir=/etc/vsftpd/vuser_conf 指定用户配置文件目录
allow_writeable_chroot=YES 允许chroot功能下执行写操作(必须加此行,否则会登录失败)
#user_sub_token=$USER 使用用户子令牌(通常不用)
7.给每个虚拟用户账 设置独立的共享访问速度和访问目录。
cd /etc/vsftpd
mkdir -v vuser_conf
cd vuser_conf
#创建f1、f2虚拟用户的会员个性化设置文件,允许f1这个虚拟用户在自己的家目录中可读可写。
touch f1 f2
mkdir -v /home/vftper/{f1,f2,f3}
chmod -v 777 /home/vftper/{f1,f2,f3}
cat > f1
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/vftper/f1
EOF
#允许f2这个用户在自己的家目录中可读,但不可写。
cat > f2
#添加local_root这行即可,其余内容可以不添加。
local_root=/home/vftper/f2
write_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
EOF
8.重启vsftpd服务,并分别用虚拟用户账 访问共享。
systemctl restart vsftpd
ftp 192.168.11.11 –>用f1、f2虚拟用户分别访问共享,测试文件的上传。
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24975 人正在系统学习中 相关资源:软件测试管理中软件项目需求分析总结_需求分析小结-其它代码类…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!