2018-07-13(NFS,FTP搭建)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-07-13(NFS,FTP搭建)相关的知识,希望对你有一定的参考价值。

14.1 NFS介绍

NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样
NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本
NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致
技术分享图片
NFS原理图: 服务端需要启动一个NFS服务,服务端要想给客户端提供服务,需要借助RPC协议,RPC协议是由rpcbind服务实现;在centos 5或者之前的版本叫portmap服务;之后的版本叫rpcbind服务;NFS服务默认不会监听任何端口;最终实现NFS服务,需要借助rpcbind服务产生的RPC协议,RPC协议默认监听的端口是111; 整个流程为:服务端的NFS服务监听一个端口通过RPC协议监听的端口,告诉客户端RPC协议,然后客户端通过本机的RPC端口回传数据信息到服务端NFS监听的端口,最终实现通信
技术分享图片
NFS的优缺点分析

优点

  • 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
  • 要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
  • 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。

缺点
有上面的工作原理可以看出,由较少的客户端访问相对较小的数据集时这种结构工作的很好,通过直接连接的存储器能够收到显著的效益(就象你PC上的磁盘);也就是数据能够由多个客户端共享,能够由任何有NFS能力的客户端访问。可是如果大量的客户端需要访问数据或太大的数据集时,NFS服务器很快就变成了一个瓶颈,抑制了系统性能。
[NFS 处理高性能计算(HPC)一直不够理想。高性能计算涉及到的数据文件非常庞大,并且 NFS 客户机的数量可能达到几千台。(想一想拥有数千个计算节点的计算集群或网格)。在这里,NFS 是一个负担,因为 NFS 服务器的局限性 — 比如带宽、存储容量和处理器速度 — 限制了总体计算性能。NFS 在这里成了瓶颈。]—IBM解释

14.2 NFS服务端安装配置

准备工作:
两台或以上机器,一台作为服务端,其他为客户端,
这里用192.168.66.132作为服务端,安装nfs-utils和rpcbind包,192.168.66.131为客户端,安装nfs-utils包
服务端安装配置

1、 #安装nfs-utils和rpcbind
[[email protected] ~]# yum install -y nfs-utils rpcbind                           
2、#安装完后修改配置文件,指定要进行分享的目录;指定要共享该目录的机器,ip可以ip段,也可以写ip
[[email protected] ~]# vim /etc/exports                                      
/home/nfstestdir 192.168.66.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
3、#创建分享目录并制定权限,这里为了实验把权限设置为777
[[email protected] ~]# mkdir /home/nfstestdir
[[email protected] ~]# chmod 777 /home/nfstestdir  
4、#启动服务并查看
[[email protected] ~]# systemctl start rpcbind
[[email protected] ~]# ps aux |grep rpcbind                                        
rpc        1593  0.2  0.1  65000  1040 ?        Ss   09:56   0:00 /sbin/rpcbind -w
root       1595  0.0  0.0 112720   972 pts/0    S+   09:56   0:00 grep --color=auto rpcbind
[[email protected] ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1593/rpcbind  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      812/nginx: master p 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      790/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1112/master         
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      812/nginx: master p 
tcp6       0      0 :::111                  :::*                    LISTEN      1593/rpcbind        
tcp6       0      0 :::22                   :::*                    LISTEN      790/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1112/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1095/mysqld         
udp        0      0 0.0.0.0:920             0.0.0.0:*                           1593/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1593/rpcbind        
udp        0      0 127.0.0.1:323           0.0.0.0:*                           535/chronyd         
udp6       0      0 :::920                  :::*                                1593/rpcbind        
udp6       0      0 :::111                  :::*                                1593/rpcbind        
udp6       0      0 ::1:323                 :::*                                535/chronyd         
raw6       0      0 :::58                   :::*                    7           543/NetworkManager 
5、#启动nfs服务,在启动nfs服务后会自动启动rpc相关的其他服务。
[[email protected] ~]# systemctl start nfs
[[email protected] ~]# ps aux |grep rpc
rpc        1593  0.0  0.1  65000  1416 ?        Ss   09:56   0:00 /sbin/rpcbind -w
rpcuser    1629  0.0  0.1  42420  1756 ?        Ss   10:04   0:00 /usr/sbin/rpc.statd
root       1631  0.0  0.0      0     0 ?        S<   10:04   0:00 [rpciod]
root       1640  0.0  0.0  19360   400 ?        Ss   10:04   0:00 /usr/sbin/rpc.idmapd
root       1643  0.0  0.0  42608   944 ?        Ss   10:04   0:00 /usr/sbin/rpc.mountd
root       1682  0.0  0.0 112720   972 pts/0    R+   10:05   0:00 grep --color=auto rpc
6、#如果想让nfs服务开机自启动,还需要执行以下命令。
[[email protected] ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

14.3 NFS配置选项

[[email protected] ~]# cat /etc/exports
/home/nfstestdir 192.168.66.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)     #括号里面的为权限相关的一些配置选项

NFS配置选项的含义:

? rw 读写

? ro 只读

? sync 同步模式,内存数据实时写入磁盘

? async 非同步模式

? no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大

? root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户

? all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户

? anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid

客户端上做一个挂载

1、安装rpcbind,rpcbind包是由nfs-utils自带的包一起安装的。

[[email protected] ~]# yum install -y nfs-utils

2、查看服务端分享的目录,这showmount -e 加服务端的ip查看

[[email protected] ~]# showmount -e 192.168.66.132
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

#如果出现上面的报错,说明网络不通,没有办法和192.168.66.132的111端口通讯,要么是对方的rpcbind服务没有开启,如果服务开启了还不行,那就是防火墙的关系导致。需要配置防火墙放行nfs服务和rpcbind服务的端口

这是作测试用,把服务端和客户端的防火墙都关闭,包括selinux。

[[email protected] ~]# systemctl stop firewalld  关闭服务端防火墙
[[email protected] ~]# setenforce 0
[[email protected] ~]# systemctl stop firewalld  关闭客户端防火墙
[[email protected] ~]# setenforce 0

再用showmount -e查看,就可以看到服务端分享的目录和允许的ip

[[email protected] ~]# showmount -e 192.168.66.132
Export list for 192.168.66.132:
/home/nfstestdir 192.168.66.0/24

3、把服务端分享的目录挂载到本地

[[email protected] ~]# mount -t nfs 192.168.66.132:/home/nfstestdir /mnt
[[email protected] ~]# df -h
文件系统                         容量  已用  可用 已用% 挂载点
/dev/sda3                         18G  7.1G   11G   40% /
devtmpfs                         479M     0  479M    0% /dev
tmpfs                            489M     0  489M    0% /dev/shm
tmpfs                            489M  6.8M  482M    2% /run
tmpfs                            489M     0  489M    0% /sys/fs/cgroup
/dev/sda1                        197M   97M  100M   50% /boot
tmpfs                             98M     0   98M    0% /run/user/0
192.168.66.132:/home/nfstestdir   18G  5.4G   13G   30% /mnt

14.4 exportfs命令

nfs服务不能随便重启,否则可能导致客户端的nfs服务被挂起,因此可以使用exportfs命令在不重启服务的前提下更新配置文件。

常用选项

? -a 全部挂载或者全部卸载

? -r 重新挂载

? -u 卸载某一个目录

? -v 显示共享目录

效果测试

1、修改服务端配置文件

vim /etc/exports
#新增一行
/tmp 192.168.66.0/24(rw,sync,no_root_squash)

2、更新配置文件(重新挂载) exportfs -arv //不用重启nfs服务,配置文件就会生效

[[email protected] nfstestdir]# exportfs -arv
exporting 192.168.66.0/24:/tmp
exporting 192.168.66.0/24:/home/nfstestdir

3、在客户端查看权限

[[email protected] mnt]# showmount -e 192.168.66.132
Export list for 192.168.66.132:
/tmp             192.168.66.0/24
/home/nfstestdir 192.168.66.0/24

注:客户端重启后,要重新挂载共享目录,要想开机自动挂载,可以把挂载命令写到/etc/fstab里

14.5 NFS客户端问题

针对NFS4版本存在如下问题:
客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、数组为nobody。

解决方法:

方法1:在客户端进行挂载时加上选项-o nfsvers=3

[[email protected] ~]# mount -t nfs -o nfsvers=3 192.168.230.135:/tmp/ /mnt/

如果目录已经挂载,而又不想卸载,执行如下命令:

[[email protected] ~]# mount -t nfs -oremount,nfsvers=3 192.168.230.135:/tmp/ /mnt/

方法2:客户端和服务端都需要
?客户端和服务端都需要

? vim /etc/idmapd.conf //

? 把“#Domain = local.domain.edu” 改为 “Domain = xxx.com” (这里的xxx.com,随意定义吧),然后再重启rpcbind服务

15.1 FTP介绍

日常使用rz,sz命令进行文件互传时会有很多限制,比如传输大小不能超出4G,不能给云端主机传输文件,针对上述问题,可通过在服务端搭建ftp服务器解决

? FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。

? FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。

? 小公司用的多,大企业不用FTP,因为不安全

15.2/15.3 使用vsftpd搭建ftp

centos自带ftp服务的软件包是vsftpd,直接下载安装即可。

安装vsftpd软件包

yum install -y vsftpd

创建登录ftp的用户

useradd -s /sbin/nologin virftp   //不允许登录系统,用于给虚拟用户做映射

vsftpd软件包是可以使用系统级别的用户,假设创建了一个普通用户luo,设置一个密码,这时候就可以用vsftpd启动这个服务,然后用user1这个用户去登陆,登录的形式为ftp,登录进去后会进入到luo这个用户的家目录下,但这样操作会存在安全隐患。

为了解决上述隐患,我们可以给ftp设置一个虚拟用户,虚拟用户映射成系统中的一个普通用户(也可以映射多个虚拟用户),这个用户即使给了用户和密码你也是没有办法去通过ssh登录到服务器的机器,这样就相对安全了很多。

编辑虚拟用户自定义密码文件

vim /etc/vsftpd/vsftpd_login //奇数行为用户名,偶数行为密码,多个用户就写多行
ftpuser
123456

改下文件权限

chmod 600 /etc/vsftpd/vsftpd_login

密码文件格式转换

db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db

创建虚拟用户配置文件所在目录

mkdir /etc/vsftpd/vsftpd_user_conf

在目录下创建虚拟用户配置文件

vim ftpuser  //虚拟用户的配置文件的文件名需要与密码文件中创建的用户的名字一致

local_root=/home/virftp/ftpuser  //定义虚拟用户家目录
anonymous_enable=NO                //是否允许匿名用户
write_enable=YES                   //是否允许可写
local_umask=022                    //创建新文件目录的默认权限
anon_upload_enable=NO              //是否允许匿名用户上传
anon_mkdir_write_enable=NO         //是否允许匿名用户创建目录和写
idle_session_timeout=600           //连接超时时间
data_connection_timeout=120        //数据传输超时时间
max_clients=10                     //最大客户端数

创建虚拟用户家目录

mkdir /home/virftp/ftpuser

在家目录下创建测试文件

touch /home/virftp/ftpuser/test.txt

修改用户权限

chown -R virftp:virftp /home/virftp

将权限做一个修改,因为最后映射成virftp 这个用户,若virftp这个用户没有读的权力那就是错误的,无法正常的去上传和下载

定义密码文件的所在位置

vim /etc/pam.d/vsftpd
#增加两行
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

这是一个用来认证的文件,在登录FTP需要有一个认证的过程,认证的过程需要告诉它,通过什么样的形式去认证,认证的时候去×××这个密码库

注:32位的centos系统的文件名应为lib32

编辑vsftpd的主配置文件

vim /etc/vsftpd/vsftpd.conf
将anonymous_enable=YES 改为 anonymous_enable=NO
将#anon_upload_enable=YES 改为 anon_upload_enable=NO 
将#anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO

在文件最下方增加如下内容
chroot_local_user=YES
guest_enable=YES                              //打开虚拟用户映射
guest_username=virftp                         //映射的用户名
virtual_use_local_privs=YES                   //声明使用的用户为虚拟用户
user_config_dir=/etc/vsftpd/vsftpd_user_conf  //定义虚拟用户配置文件所在路径
allow_writeable_chroot=YES

启动vsftpd服务

systemctl start vsftpd

如果启动不了服务,可以把 /etc/vsftpd/vsftpd.conf 中的listen_ipv6=YES,然后把上一个listen=NO改成listen=YES
查看监听端口

[[email protected] vsftpd_user_conf]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name         
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      3319/vsftpd  

监听端口为21

ftp测试

Windows端
Windows可以使用filezilla客户端开源软件,十分方便
技术分享图片
Linux端

Linux为了方便测试采用lftp

安装lftp包

[[email protected] ~]# yum -y install lftp

连接FTP服务器

[[email protected] ~]# lftp [email protected]
口令: 
lftp [email protected]:~> ls
-rw-r--r--    1 0        0               0 Jul  16 10:20 test.txt

注:使用?可查看ftp可用命令,常用命令put、get

下载test文件

lftp [email protected]:/> get test.txt
lftp [email protected]:/> quit
[[email protected] ~]# ls
anaconda-ks.cfg       test.txt

15.4 xshell使用xftp传输文件

通过xshell实现ftp功能有两种方法,通过sftp和xftp
sftp
通过xshell的会话,使用sftp协议连接服务器
技术分享图片
登录后可以正常使用命令,也可以使用get下载文件

sftp:/root> get test.txt
Fetching /root/test.txt to test.txt
sftp: received 0 ???in 0.02 seconds

下载文件的存放位置在属性中设置
技术分享图片
xftp

xftp通过在xshell界面通过快捷键ctrl+alt+f使用,首次使用会弹出对话框提示下载安装。
技术分享图片
安装完成后,需要先通过ssh登录到一台主机,使用Ctrl+alt+f唤出xftp,即可正常使用。
技术分享图片
注:xftp走的是ssh协议,不属于ftp,这种只要是linux开启了sshd服务就可以用;

vsftp获取其他ftp软件实现的是ftp服务,windows上可以搭建,linux上也可以搭建

15.5 使用pure-ftpd搭建ftp服务

pure-ftpd相比于vsftpd更加轻量化,搭建FTP服务器时更加简洁。

安装pure-ftpd软件包

yum install -y epel-release
yum install -y pure-ftpd

如果之前有启动过别的ftp服务,需要停止vsftpd服务

systemctl stop vsftpd

由于vsftpd和pure-ftpd同属于ftp服务,都需要监听21端口,如果两者同时运行会发生冲突

编辑pure-ftpd配置文件

vim /etc/pure-ftpd/pure-ftpd.conf//找到pureftpd.pdb这行,把行首的#删除
修改文件允许pure-ftpd服务指定密码文件

启动pure-ftpd服务

systemctl start pure-ftpd

创建测试目录

测试目录用于pure-ftpd的虚拟用户使用

mkdir /data/ftp

创建普通用户

useradd -u 1020 pure-ftp

修改用户权限

chown -R pure-ftp:pure-ftp /data/ftp

创建虚拟用户

pure-pw useradd ftp_usera -u pure-ftp  -d /data/ftp  //虚拟用户名为ftp_usera

pure-ftpd服务同样需要一个或多个虚拟用户映射到一个系统用户

pure-pw --help可以查看pure-pw命令的用法

密码文件格式转换

pure-pw mkdb

效果测试

[[email protected] ~]# touch /data/ftp/test1234.txt
[[email protected] ~]# lftp [email protected]
口令: 
lftp [email protected]:~> ls      
drwxr-xr-x    2 1020       pure-ftp           16 Jul  3 10:43 .
drwxr-xr-x    2 1020       pure-ftp           16 Jul  3 10:43 ..
-rw-r--r--    1 1020       pure-ftp                16Jul  3 10:43 test1234.txt

我们可以看到属主为uid,属组映射为系统中组的名字pure-ftpd

以上是关于2018-07-13(NFS,FTP搭建)的主要内容,如果未能解决你的问题,请参考以下文章

8.27 exports命令NFS客户端问题FTP介绍使用vsftpd搭建ftp服务

exportfs命令,NFS客户端问题,FTP介绍,使用vsftp搭建ftp

exportfs命令NFS客户端问题FTP介绍使用vsftpd搭建ftp

54次课(exportfs命令NFS客户端问题FTP介绍使用vsftpd搭建ftp)

exportfs命令NFS客户端问题FTP介绍使用vsftpd搭建ftp

exportfs命令,NFS客户端问题,FTP介绍,使用vsftpd搭建ftp