FTP文件传输协议

FTP是在互联网中进行文件传输的一种协议,基于C/S模式,有一个服务端,有一个客户端;FTP服务器按照FTP协议在互联网上提供文件存储,以便客户端能够快捷的访问数据,向服务端寻求资料等
FTP默认有2个工作端口

  • 20端口:用于数据的传输端口
  • 21端口:FTP服务端用于接受客户端发来的FTP指令和参数

工作模式:

  • 主动模式:FTP服务器主动向客户端发送连接请求
  • 被动模式:FTP服务器在等待,等待客户端发来请求

    安装FTP服务

    在linux系统下,有一款工具实现ftp协议,名为vsftpd,非常安全的FTP守护进程服务

    对于centos系统,利用yum安装即可

    yum install -y vsftpd

【修改vsftpd配置文件】

配置文件默认路径:/etc/vsftpd/vsftpd.conf
image.png
vsftpd服务程序允许用户用三种认证的模式,登录到ftp服务器

  • 本地用户模式,基于linux的本地账号密码进行验证,配置简单,但是安全隐患存在,一旦ftp账号密码被破解,服务器就无安全可言
  • 匿名用户登录模式,任何人不需要密码直接登录ftp
  • 虚拟用户模式,单独为FTP工具创建用户数据库,基于口令验证账号密码的信息,这些数据库仅仅用于FTP的服务,不影响其他程序,因此是最为安全的形式

*对于FTP客户端,需要安装ftp命令工具,方可使用

ftp > ? #直接在命令行终端输入ftp命令,即可进入交互式的ftp命令行中,输入问号,可以查看所有的命令帮助

【匿名用户登录模式】

匿名用户是最不安全的方式,一般用于在公开展示一些不重要的信息,允许所有人可以查看的数据,ftp匿名登录模式,一般打开在企业内网平台下,并且受防火墙规则控制,以保证ftp的基本安全性
image.png

重启vsftpd服务,加载ftp服务

systemctl restart vsftpd

【本地用户登录模式】

使用本地用户登录,安全性是要比匿名用户高很多的。
image.png
Tips:我们设置完配置文件,最好进行过滤进行查看,看下除了我们刚刚设置的文件,是否,还有其他文件内容没有进行注释或者修改不到位的情况

  • 创建一个普通用户,用于ftp登录
  • ftp 192.168.47.128 #跳转后,输入对应用户名和密码,进入ftp服务器

    问题:为什么我们不用直接用root用户登录ftp服务器? 答:因为有些用户是无法登陆ftp的,在一个用户名单里面被禁止了。我们可以cat /etc/vsftpd/ftpusers,查看一下哪些用户被禁止无法登录的

【虚拟用户登录模式】

顾名思义虚拟用户认证方式,就是虚拟创建出来的用户,对于服务器而言也是最安全的方式

  1. 安装DB工具,能够转化普通文件为vsftpd识别的数据库加密文件

    yum insatll -y db4 db4-utils

  2. 创建用于验证vsftpd的数据文件

    vim ftp_user.txt ——>> 输入以用户名为奇数行,密码为偶数行的,任意数量的账号密码

  3. 由于这样的普通文件不安全,vsftpd也无法识别该txt的文件数据,因此还得使用db_load命令,对于该文件进行加密,并且修改他的文件属性,让普通用户无权查看

加密文件

db_load -T -t hash -f /etc/vsftpd/ftp_user.txt /etc/vsftpd/ftp_user.db

降低文件的读写权限

chmod 600 ftp_user.db

删除原txt文件,保证安全性

  1. 创建当虚拟机用户登录ftp之后进入的文件夹路径,且和linux中的一个用户做一个映射关系,防止虚拟用户登录又创建新的文件夹,但是系统没有此用户会报错的一个问题

创建一个系统用户和虚拟用户做映射,且不需要家目录,禁止用户登陆shell

useradd -d /var/ftpdir -s /sbin/nologin virtual_chao

检查该用户的家目录

ll -ld /var/ftpdir/ #查看一下该目录当前的权限情况

更改文件夹权限

chmod -Rf 755 /var/ftpdir/

修改virtual_chao用户添加到ftpsuer文件中,增大系统安全,该操作不会影响虚拟用户的操作

echo “virtual_chao” >> /etc/vsftpd/ftpusers

  1. 需要修改vsftpd的配置文件,添加一个支持虚拟用户验证的PAM文件,PAM是一组安全机制的模块,认证文件路径在/etc/pam.d/vsftpd

image.png

  1. 最后来修改vsftpd的配置文件,加载虚拟用户模式

image.png
Tips:在实际操作过程中,不要给后面加上#注释,会读取有问题而报错,在笔记中了解具体意思即可

  1. 针对不同的虚拟用户设置不同的权限
  • 用户1,针对该用户,允许它能够上传、新建、修改、查看、删除等权限
  • 用户2,针对该用户,只读权限

创建一个管理虚拟用户的家目录,并且创建虚拟用户的配置文件
mkdir /etc/vsftpd/virtual_user_dir

vim yonghu1 vim yonghu2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
  1. 修改vsftpd主配置文件,加载如上的权限控制

修改/etc/vsftpd/vsftpd.conf添加一行如下参数,自定义的vsftpd的用户配置文件

user_config_dir=/etc/vsftpd/virtual_user_dir

  1. 重启服务,加载新的配置

    systemctl restart vsftpd

  2. 此时使用客户端连接ftp,用虚拟用户进行验证

    使用FTP客户端

    image.png

    问题一:登录ftp后,无法写入数据怎么办? 进入ftp目录后,修改文件夹的权限相关(默认应该属于root用户的文件归属) cd /var/ftp #登录ftp后,默认的文件路径在此目录下 chown -Rf ftp.ftp pub #修改其中pub文件的归属权,完成后可以利用再查看一下文件是否已经个更改完成

SAMBA服务

samba是一款能够让linux系统应用微软文件资料的工具。微软指定了SMB协议,用于局域网文件共享,SMB协议移植到linux系统平台之后,就诞生了SMABA软件
特点:

  • smaba最大的特点就是可以用于linux和windows之间进行文件共享和打印机共享
  • samba不仅仅可以用于linux和windows之间
  • samba还可以用于两台linux之间共享
  • 由于linux平台诞生了一个更好的工具,NFS网络文件共享系统,专门用于linux之间文件数据共享
  • 因此samba更多的是使用linux和windows之间的数据传输

    yum insatll -y samba #安装samba ls /etc/samba/ #查看其中的配置文件 vim /etc/samba/smb.conf 主要的smb配置文件信息

*smb的配置文件,主要分为 全局配置 和 局部共享配置
全局配置是[global] #一般都已经在配置文件的开头了
其他内容,包括自己输入的配置,都属于局部共享配置
tips:关于配置信息,因为smb用的不多,不做详细笔记,第三阶段2.5视频中有一部分,其他更为详细可以查找资料

案例:samba共享文件夹

  1. 修改配置,添加局部共享配置

    [chuange] comment = This is test configure path = /home/chuange public = no writeable = yes guest ok = yes

  2. 使用pdbedit命令,创建samba服务专用的用户密码信息;创建samba用户,必须保证这个用户在linux系统中存在

    pdbedit -a -u chuange

  3. 重启smb服务,检查samba端口是否存活

    systemctl restart smb #启动smb服务 netstat -tunlp | grep smb #检查端口信息

  4. 还得注意防火墙是否关闭了

    iptables -L #检查防火墙状态

  5. 关闭防火墙的操作

    iptables -F #清空防火墙信息 systemctl stop firewalld #停止防火墙服务

tips:在开篇优化当中也有关于关闭防火墙的操作,正常经过优化的系统都是没有问题,一般如果在企业中操作或者别人的电脑上操作时,可能需要查看一下他的电脑配置有没有关闭防火墙

案例:客户端连接samba服务器

  • windows系统连接

在运行功能(终端),输入 \smb服务器地址,就会弹出账号密码的输入环节

  • macos系统连接

右键访达,点击连接服务器,输入 smb://smb服务器地址 ,弹出账号密码输入环节

NFS服务

NFS服务可以把远程linux机器上面的文件目录数据,通过挂载的形式,映射在用户本地机器(linux用户在本地有一个文件,通过NFS服务,把本地的这个文件夹,远程挂载到网络中一台机器的文件夹)
特点:

  • NFS很像windows的网络共享,samba服务
  • samba服务主要用于办公室的局域网共享服务
  • NFS发展有30年,代表了一个稳定的网络文件共享系统,中小型企业最佳的文件共享选择

    共享存储的形式

  • 软件共享存储:NFS服务搭建

  • 硬件共享存储:中小型企业一般不会购买硬件存储设备,成本太高,大公司业务发展特别快,需要购买硬件设备分散网站的压力,如果网站的压力持续增长,硬件存储设备就得继续扩展,成本过高。因此,主流的企业都会选择开源的软件替代硬件设备,比如NFS集群服务的搭建

    RPC概念

    NFS通过port传输数据,NFS服务在传输数据的时候,端口是随机选择的(自己重启NFS服务,查看端口是否在变化),所以NFS就需要通过RPC服务,进行一个端口的注册,告知用户NFS的工作端口是哪一个
    RPC(远程过程调用),与NFS服务是linux使用NFS服务必须启动的2个服务,NFS服务通过RPC注册自己的端口功能,RPC服务功能就是记录每个NFS功能对应的一个端口号,并且RPC保证了NFS客户端发出请求的时候,把该功能对应的端口信息告知NFS客户端,保证客户端能够正确连接到NFS服务端的端口,达到数据传输的目的
    流程:NFS服务器启动的时候,会随机采用若干端口,并且主动在RPC服务中进行注册,RPC正确知道端口的功能后,默认使用linux的111端口和NFS客户端进行交流,告知给NFS客户端

    PRCBIND

    RPC在centos7系统平台下,实现的软件RPCBIND服务
    NFS服务的配置,必须先运行好RPCBIND服务才行
    如果RPCBIND服务重启了,原本注册的NFS服务端的信息也就失效了,还需再次重启NFS服务端,重新注册信息才行
    如果只是修改了NFS的配置文件,不需要重启,因为重启后端口会更新,还得重新注册,只需要如下命令,重新读取NFS配置文件即可
    exrpotfs -rv
    systemctl reload nfs

    安装NFS服务

  • nfs-utils:NFS服务的主程序

  • rpcbind:centos6/7环境下的RPC程序

rpm -qa 查看安装情况,没有则 yum 安装

rpm -qa nfs-utils rpcbind
yum install nfs-utils rpcbind -y

环境配置

NFS是c/s模式,准备一个NFS服务端,准备一个NFS客户端,两台linux机器

  1. 在NFSserver端,创建一个用于共享的文件夹,且设置相应的读写权限

    mkdir /nfschuange/ chmod -Rf 777 /nfschuange/

修改NFS服务的配置文件

  1. 修改/etc/exports

    格式:NFS服务端共享目录 NFS客户端地址(参数1,参数2,,) NFS客户端地址2(参数1,参数2,,) 例如: / client1(rw) client2(rw) #把nfs服务端的根目录共享出去,且允许两个主机进行一个rw权限,读写权限 /public *(rw) #允许任意的客户端,都能够挂载到此NFS服务端的/public目录下 /home/chuange 197.168.47.128(ro) #只允许指定ip地址的服务器,能够挂载到此nfs服务端的上述文件夹,且是只读的

语法参数解析

  • 共享目录:NFS服务器需要共享出去的实际目录,文件夹,必须写绝对路径,且注意目录的读写本地权限,如果你允许客户端读写操作,other有一个读写的权限(user,group,other三个身份)
  • 客户端地址:NFS服务端可以访问共享的目录地址,可以写主机名,通配符,ip地址
  • 权限参数:进行权限控制的参数

    客户端地址形式

    单一客户端:192.168.47.128
    整个网段访问:192.168.47.128.0/24 指定局域网网段,常用
    整个域名客户端:nfs.chuange.com
    子域名客户端:*.chuange.com

    权限参数

    ro:只读
    rw:读写
    root_squash:当nfs客户端以root账号访问nfs客户端共享目录数据的时候,把该root映射为nfs服务器的一个匿名用户,该用户的uid,gid变成nfsnobody的信息
    no_root_squash:与上一样,但会映射会root账户,不安全,禁用
    all_squash:所有nfs客户端的用户都映射为匿名用户,安全,生产环境常用
    sync:数据同步写入到内存和磁盘,优点是保证内存数据安全,但是效率低
    async:数据先写入到内存,再持久化到磁盘,效率非常高,但是可能会有数据丢失的隐患

    启动NFS服务

    NFS服务都是基于RPC的111通信端口,必须确保先启动了RPC服务
    如果RPCBIND服务停止了,111端口也不会改掉,因为centos7还提供了一个rpcbind.socket服务运行着

    保证rpcbind服务正确运行

    systemctl status rpcbind

    检查111端口是否存活

    netstat -tunlp | grep 111

  1. 创建共享目录

    mkdir -p /nfschuange chmod -Rf 777 /nfschuange/

    设置用户权限.

    id nfsnobody chown -R nfsnobody.nfsnobody /nfschuange/

  2. 在文件夹中尝试创建文件,测试用(touch)

  3. 修改nfs服务端的配置文件,进行客户端授权

    vim /etc/exports [root@nfs01 ~]# cat /etc/exports /nfschuange *(insecure,rw,sync) #参数解释,允许客户端从大于1024的端口发请求

  4. 重新加载nfs,读取配置文件

    systemctl restart nfs

  5. 检查本地的nfs服务端挂载情况

    showmount -e 127.0.0.1

  6. 再次检查服务端共享参数

    cat /var/lib/nfs/etab

  7. 模拟挂载访问

    简单的操作挂载本地的目录,效果:/mnt目录得到/nfschuange目录下的内容,且取消挂载后,文件不存在

    mount -t nfs 127.0.0.1:/nfschuange /mnt mount -l | grep mnt #查看挂载情况 umout /mnt #取消挂载

远程挂载使用

  1. 确认安装好nfs相关软件(可以用一个新的linux客户端机器)

    yum install nfs-utils rpcbind -y

  2. 确保服务正常

    systemctl start rpcbind systemctl status rpcbind

  3. 可以远程检查nfs共享情况

    showmount -e 192.168.47.128 #检查的是nfs服务器的ip地址,查看对应共享出去的文件目录

  4. 进行nfs协议的挂载使用

    mount -t nfs 192.168.47.128:/nfschuange /chuange888

  5. 检查nfs本地挂载情况

    mount -l | tail -1 #最后一行内容

  6. 进入本地挂载目录,尝试访问远程的nfs服务器

-注意这里一直是有两个服务器的,保持cs模式,一个服务器看不到效果

  1. 不想用了就卸载目录挂载

    umount /chuange888

tips:注意自己处于的目录位置,如果处于需要卸载的目录中,是会卸载报错的

自动挂载服务

vim /etc/fstab #进入配置文件

根据配置文件中的格式,写入该配置,就可以每次开机使用nfs服务

192.168.47.128:/nfschuange /chuange888 nfs defaults 0 0

autofs自动挂载服务

如果开机就强制挂载很多内容,但是又不经常用,会给服务器造成很大的压力,因此一些具有动态特性的文件系统,可以选择进行动态挂载
特点:

  • autofs是一个守护进程,它会在后台检测用户是否要访问某一个还未挂载的文件系统,autofs会自动检测该文件系统是否存在,如果存在则进行挂载,如果用户过了一段时间没有使用该文件系统,autofs自动将其卸载,节省人力维护的成本,以及节省服务器资源

缺点:

  • 如果是高并发的业务场景,大量的用户并发访问文件系统,autofs突然进行大量的挂载,会给服务器造成很大的压力,因此在一些高并发场景下,宁愿保持持续挂载,也不用autofs

    使用autofs

    yum install autofs -y #安装 vim /etc/auto.master #进入配置文件 /- /etc/auto.home #在第七行添加配置参数 vim /etc/auto.home #修改自定义自动挂载配置文件 /chuange888 -rw,soft,intr 192.168.47.168:/nfschuange #写入数据 systemctl start autofs #启动

只要autofs检测到用户,对挂载点,进行读写,比如ls,cd等操作,autofs就会自动的进行挂载