zoukankan      html  css  js  c++  java
  • 21.网络文件共享服务

    1 FTP服务

    1.1 FTP工作原理

    服务器会开放两个端口分别用于发送命令和传输数据

    从服务器角度分为下面两种模式:

    • 主动模式:即服务器主动连接客户端

      ​ 命令通道:21/tcp端口

      ​ 数据通道:20/TCP

    • 被动模式:客户端主动连接

      ​ 命令通道:21/tcp端口

      ​ 数据通道:随机port

    FTP服务状态码:

    1XX:信息 		  125:数据连接打开
    2XX:成功类状态 	200:命令OK     230:登录成功
    3XX:补充类       331:用户名OK
    4XX:客户端错误 	425:不能打开数据连接
    5XX:服务器错误 	530:不能登录
    

    1.2 常见的FTP软件

    服务端软件

    vsftpd:Very Secure FTP Daemon,CentOS 默认FTP服务器,最新版本是vsftpd-3.0.4,在2021年5月更新。官方站点:https://security.appspot.com/vsftpd.html

    Filezilla:服务端只支持Windows,官方站点https://filezilla-project.org/index.php

    客户端软件

    ftp,lftp,lftpget,wget,curl等

    1.3 vsftpd

    vsftpd支持很多的配置选项,其配置文件位于/etc/vsftpd/vsftpd.conf,使用man 5 vsftpd.conf可以查看支持的配置选项,也可以访问官方网站:https://security.appspot.com/vsftpd/vsftpd_conf.html。

    用户和其共享目录

    • 匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
    • 系统用户共享文件位置:用户家目录
    • 虚拟用户共享文件位置:为其映射的系统用户的家目录
    [root@centos8 ~]# vim /etc/vsftpd/vsftpd.conf
    listen_port=2121 		#命令通道监听端口,默认值为21
    
    匿名用户相关配置
    anonymous_enable=YES 				#支持匿名用户,CentOS8 默认不允许匿名
    no_anon_password=YES 				#匿名用户略过口令检查 , 默认NO
    anon_upload_enable=YES 				#匿名上传,注意:文件系统权限
    anon_mkdir_write_enable=YES 		#匿名建目录
    anon_world_readable_only=NO 		#只能下载全部读的文件, 默认YES
    anon_umask=0333 						#指定匿名上传文件的umask,默认077,注意:0333中的0不能省略
    anon_other_write_enable=YES 		#可删除和修改上传的文件, ,默认NO
    chown_uploads=YES        			#指定匿名用户上传文件默认的所有者和权限,默认NO
    chown_username=wang					
    chown_upload_mode=0644			
    
    系统用户相关配置
    local_enable=YES 						#是否允许linux用户登录
    write_enable=YES 						#允许linux用户上传文件
    local_umask=022 						#指定系统用户上传文件的默认权限对应umask
    guest_enable=YES 						#所有系统用户都映射成guest用户
    guest_username=ftp   				#配合上面选项才生效,指定guest用户
    local_root=/ftproot 					#指定guest用户登录所在目录,但不影响匿名用户的登录目录
    chroot_local_user=YES 				#禁锢系统用户,默认NO,即不禁锢
    chroot_list_enable=YES     		#默认是NO
    chroot_list_file=/etc/vsftpd/chroot_list   #默认值
    当chroot_local_user=YES和chroot_list_enable=YES时,则chroot_list中用户不禁锢,即白名单
    当chroot_local_user=NO和chroot_list_enable=YES时, 则chroot_list中用户禁锢,即黑名单
    
    日志相关配置
    #wu-ftp 日志:默认启用
    xferlog_enable=YES 					#启用记录上传下载日志,此为默认值
    xferlog_std_format=YES 				#使用wu-ftp日志格式,此为默认值
    xferlog_file=/var/log/xferlog 	#可自动生成, 此为默认值
    #vsftpd日志:默认不启用
    dual_log_enable=YES 					#使用vsftpd日志格式,默认不启用
    vsftpd_log_file=/var/log/vsftpd.log 	#可自动生成, 此为默认值
    
    用户的登录控制
    userlist_enable=YES   				#此为默认值
    userlist_deny=YES(默认值) 			 #黑名单,不提示口令,NO为白名单
    userlist_file=/etc/vsftpd/user_list  #此为默认值
    

    vsftpd 虚拟用户

    所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录。

    范例:实现基于文件验证的vsftpd虚拟用户

    创建虚拟用户数据
    [root@centos8 vsftpd]# cat /etc/vsftpd/vuser.txt 
    ftpuser
    123321
    ftpuser2
    123321
    ftpuser3
    123321
    #生成数据库
    [root@centos8 vsftpd]# db_load -T -t hash -f vuser.txt vuser.db
    #设置访问权限
    [root@centos8 ~]#chmod 600 /etc/vsftpd/vusers.*
    
    创建映射的系统用户
    [root@centos8 ~]#useradd -d /data/ftproot -s /sbin/nologin -r vuser
    [root@centos8 ~]#mkdir -pv /data/ftproot/upload
    [root@centos8 ~]#setfacl -m u:vuser:rwx /data/ftproot/upload
    
    配置pam文件
    [root@centos8 ~]#cat /etc/pam.d/vsftpd.db
    auth required pam_userdb.so db=/etc/vsftpd/vuser
    account required pam_userdb.so db=/etc/vsftpd/vuser
    
    修改vsftpd配置文件
    [root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf
    guest_enable=YES				#启用虚拟用户
    guest_username=vuser			#指定虚拟用户映射的系统用户
    pam_service_name=vsftpd.db	#pam配置文件
    user_config_dir=/etc/vsftpd/conf.d/	#指定各个用户配置文件存放的路径
    
    针对ftpuser用户进行配置
    [root@centos8 vsftpd]# cat conf.d/ftpuser 
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    local_root=/data/awk/
    

    注意:/etc/pam.d/vsftpd配置会影响到ftp用户登录

    [root@centos8 vsftpd]# cat /etc/pam.d/vsftpd
    #%PAM-1.0
    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		#仅允许用户的shell为 /etc/shells类型才能登录
    auth       include	password-auth
    account    include	password-auth
    session    required     pam_loginuid.so
    session    include	password-auth
    
    上实验中将用户默认shell指定为/sbin/nologin,而/etc/shells默认无此类型,服务和用户都正常情况登录出现530情况,之后将/sbin/nologin添加至/etc/shells中,可以正常登录
    

    2 NFS服务

    2.1 NFS服务概述

    NFS:Network File System 网络文件系统,基于内核的文件系统。Sun 公司开发,通过使用 NFS,用 户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol 远程过程调用)实现。

    RPC是一个计算机通信协议,该协议允许运行于一台计算机的程序调用另一个地址空间的子进程,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。

    NFS

    2.2 NFS配置介绍

    红帽文档地址:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_file_systems/exporting-nfs-shares_managing-file-systems#introduction-to-nfs_exporting-nfs-shares

    2.3 实战案例

    2.3.1 实现主机上/var/www目录的共享

    实验环境准备

    10.0.0.2 服务端
    10.0.0.3 客户端
    

    步骤

    10.0.0.2 服务端配置
    #安装软件包
    [root@centos8 vsftpd]# yum -y install nfs-utils
    
    #准备共享目录
    [root@centos8 vsftpd]# ll /var/www/
    total 0
    drwxr-xr-x. 2 root root  6 Nov  4  2020 cgi-bin
    drwxr-xr-x. 4 root root 30 Apr 30 02:58 html
    
    #编辑配置文件,将/var/www/共享给所有主机,给予读写权限
    [root@centos8 vsftpd]# cat /etc/exports
    /var/www *(rw)
    
    #在不重启服务情况使配置文件生效
    [root@centos8 vsftpd]# exportfs -r
    
    10.0.0.3 客户端实现autofs
    #安装软件包
    [root@centos8 vsftpd]# yum -y install autofs
    
    #检查本机挂载目录是否存在,以确保不会覆盖已存在目录
    [root@centos8 vsftpd]# ll /var/www
    ls: cannot access '/var/www': No such file or directory
    
    #相对路径配置挂载目录
    [root@centos8 vsftpd]# vim /etc/auto.master
    /opt /etc/auto.opt
    [root@centos8 www]# cat /etc/auto.opt 
    www    -fstype=nfs  10.0.0.2:/var/www/
    
    #重启autofs服务
    [root@centos8 /]# systemctl restart autofs
    
    #进入目录查看挂载文件
    [root@centos8 /]# cd /opt/www/
    注意这里直接进入/opt目录是不能看见www文件夹的,需要先进入www文件夹才会自动挂载上
    

    3 samba服务

    3.1 服务简介

    Samba软件和NFS服务软件主要功能都是以挂载方式实现文件的共享,不过Samba更加适用于Windows和Linux主机间的文件共享,而一般Linux主机间的文件共享NFS服务更为常用。

    Samba软件具有很多功能,这里主要介绍共享文件服务

    官方文档:https://wiki.samba.org/index.php/Samba_File_Serving

    3.2 SAMBA软件介绍

    相关包:

    • samba 提供smb服务器端
    • samba-client 客户端软件
    • samba-common 通用软件
    • cifs-utils smb客户端工具
    • samba-winbind 和AD相关

    相关服务进程:

    • smbd 提供smb(cifs)服务 TCP:139,445

    配置文件:

    • /etc/samba/smb.conf 帮助参看:man smb.conf

    客户端工具:

    • smbclient,mount.cifs

    3.3 实战案例

    实现不同samba用户访问不同的目录

    #在服务器上安装samba包
    [root@centos8 ~]# yum -y install samba
    
    #创建登录用户samba1、samba2、samba3并指定密码为passwd
    [root@centos8 ~]# useradd -M -s /sbin/nologin smb1
    [root@centos8 ~]# useradd -M -s /sbin/nologin smb2
    [root@centos8 ~]# useradd -M -s /sbin/nologin smb3
    [root@centos8 ~]# echo 'passwd' | passwd --stdin smb1
    Changing password for user smb1.
    passwd: all authentication tokens updated successfully.
    [root@centos8 ~]# echo 'passwd' | passwd --stdin smb2
    Changing password for user smb2.
    passwd: all authentication tokens updated successfully.
    [root@centos8 ~]# echo 'passwd' | passwd --stdin smb3
    Changing password for user smb3.
    passwd: all authentication tokens updated successfully.
    
    #将用户添加到samba数据库
    [root@centos8 ~]# smbpasswd -a smb2
    New SMB password:
    Retype new SMB password:
    Added user smb2.
    [root@centos8 ~]# smbpasswd -a smb1
    New SMB password:
    Retype new SMB password:
    Added user smb1.
    [root@centos8 ~]# smbpasswd -a smb3
    New SMB password:
    Retype new SMB password:
    Added user smb3.
    
    #修改主配置文件
    [root@centos8 ~]# vim /etc/samba/smb.conf
    config file= /etc/samba/conf.d/%U
    [share]
    	Path=/data/dir
    	Read only= NO
    	Guest ok = NO
    
    #添加用户配置文件
    [root@centos8 dir1]# cat /etc/samba/conf.d/smb1 
    [share]
    Path=/data/dir1
    Read only= NO 
    Create mask=0644
    [root@centos8 dir1]# cat /etc/samba/conf.d/smb2
    [share]
    path=/data/dir2
    
    #创建文件夹
    [root@centos8 samba]# mkdir /data/{dir,dir1,dir2}
    
    #使用客户端测试访问
    [root@centos8 ~]# smbclient //10.0.0.2/share -U smb1%passwd
    Try "help" to get a list of possible commands.
    smb: > 
    

    注意:如果要通过Windows访问需开启samba服务,不过samba服务不建议在Windows中开启,因为Windows1.1samba存在已知漏洞,有安全风险。

    4 数据实时同步

    4.1 实时同步介绍

    在生产环境中,有时会需要将两台主机的特定目录实现实时同步。比如,将NFS共享目录的数据文件自动同步到备份服务器特定目录中。

    实现实时同步的两种方法

    • inotify + rsync 方式实现数据同步
    • sersync :前金山公司周洋(花椒直播)在 inotify 软件基础上进行开发的,功能更加强大,不过有一定时间未更新

    实现方式:

    • 使用inotify服务监控文件发生的变化
    • 利用rsync服务推送到备份服务器

    实现inotify软件:

    • inotify-tools
    • sersync
    • lrsyncd

    4.2 inotify+rsync+shell 脚本实现实时数据同步

    实验环境

    10.0.0.2 数据服务器
    10.0.0.3 备份服务器
    

    具体执行步骤

    10.0.0.2
    #安装inotify-tools
    [root@centos8 ~]# yum -y install inotify-tools
    [root@centos8 ~]# yum -y install rsync
    [root@centos8 ~]# cat inotify_rsync.sh 
    #!/bin/bash
    SRC='/data/www/'  
    DEST='rsyncuser@10.0.0.3::backup'
    rpm -q rsync &> /dev/null || yum -y install rsync
    
    inotifywait  -mrq  --exclude=".*.swp" --timefmt "%Y-%m-%d %H:%M:%S" --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
            FILEPATH=${DIR}${FILE}
    	       rsync -az --delete  --password-file=/etc/rsync.pas $SRC $DEST && echo
    	       "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
           done
    [root@centos8 ~]# echo "123321" > /etc/rsync.pas
    [root@centos8 ~]# mkdir /data/www
    [root@centos8 ~]# chmod 600 /etc/rsync.pas
    
    #测试能否正常访问
    [root@centos8 ~]# rsync -avz --delete --password-file=/etc/rsync.pas /data/www/ rsyncuser@10.0.0.3::backup
    sending incremental file list
    
    sent 113 bytes  received 12 bytes  250.00 bytes/sec
    total size is 0  speedup is 0.00
    [root@centos8 ~]# bash inotify_rsync.sh
    
    10.0.0.3
    #安装服务包
    [root@centos8 ~]# dnf install rsync-daemon
    [root@centos8 ~]# vim /etc/rsyncd.conf
    uid = root
    gid = root
    #use chroot = no
    max connections = 0
    ignore errors
    exclude = lost+found/
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsyncd.lock
    reverse lookup = no
    #hosts allow = 10.0.0.0/24
    [backup]  
    path = /data/backup/  
    comment = backup dir		#描述
    read only = no     
    auth users = rsyncuser  #指定rsyncuser用户才能访问
    secrets file = /etc/rsync.pas	#指定用户名密码存放位置
    [root@centos8 ~]# mkdir /data/backup
    [root@centos8 ~]# echo "rsyncuser:123321" > /etc/rsync.pas
    [root@centos8 ~]# chmod 600 /etc/rsync.pas
    
  • 相关阅读:
    zTree 优秀的jquery树插件
    The underlying provider failed on open 问题解决
    HTML 5 <input> list 属性
    C#拖曳控件加载,bll报错问题
    把VS2010的智能代码提示和注解从英文变成中文
    progressBar的使用
    C++内存读写例子
    bash 管理小脚本
    KVM虚拟机配置笔记
    Ettercap 实施中间人攻击
  • 原文地址:https://www.cnblogs.com/bestvae/p/15080335.html
Copyright © 2011-2022 走看看