2019独角兽企业重金招聘Python工程师标准>>>
14.1 NFS介绍
14.2 NFS服务端安装配置
14.3 NFS配置选项
14.4 exportfs命令
14.5 NFS客户端问题
15.1 FTP介绍
15.2/15.3 使用vsftpd搭建ftp
15.4 xshell使用xftp传输文件
15.5 使用pure-ftpd搭建ftp服务
扩展
vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.com/bbs/thread-342-1-1.html
ftp的主动和被动模式 http://www.aminglinux.com/bbs/thread-961-1-1.html
一、NFS介绍
1、NFS简介
NFS,Network File System的缩写。网络文件系统,即通过网络,对在不同主机上的文件进行共享。 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本,更新比较慢其实4.1是从2010年就开始使用了。 NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。NFS服务需要借助于RPC协议实现通信 NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致
2、NFS原理:
- 首先:NFS包括两部分,服务端及客户端
- 由于NFS服务功能很多,会有很多端口,这些端口还有可能不固定,那么客户端就无法与服务器进行通信,因为程序间通信必须通过端口(tcp/udp都是端到端通信),那么就需要一个中间的桥接机制,RPC进程即充当这样一个角色,RPC的端口是一定的(111),当NFS启动时,会向RPC进行注册, 那么客户端PRC就能与服务器RPC进行通信, 从而进行文件的传输。
- 当客户端用户打开一个文件或目录时,内核会判断,该文件是本地文件还是远程共享目录文件,如果是远程文件则通过RPC进程访问远程NFS服务端的共享目录,如果是本地文件,则直接打开。
- 为了更好的并发,RPC进程及NFS进程都有多个。
二、NFS服务端安装配置
用两台机器做实验,一台作为服务端(001 192.168.83.3),一台作为客户端(002 192.168.83.33);
在两台机器上安装: yum install -y nfs-utils rpcbind
在001上,编辑配置文件 :vim /etc/exports
写入以下语句
/home/nfstestdir 192.168.83.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
语句释义:
-
/home/nfstestdir :共享的目录
-
rw: 读写
-
ro: 只读
-
sync: 同步模式,内存数据实时写入磁盘
-
async :非同步模式
-
no_root_squash: 客户端挂载NFS共享目录后,root用户不受约束,权限很大
-
root_squash: 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
-
all_squash:客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
-
anonuid/anongid: 和上面几个选项搭配使用,定义被限定用户的uid和gid
-
192.168.83.0/24:为客户端的网段;
创建nfstestdir要分享的目录,并给予777权限
开启nfs服务 : systemctl start nfs
查看监听端口,端口111为rpcbind默认端口
设置开机启动:systemctl enable nfs
三、NFS配置选项
1、挂载NFS
showmount -e 192.168.83.3 //该ip为NFS服务端ip
如果没有出现共享目录,有下面可能,注意排查:
-
1、两者通信问题
-
2、把两者的防火墙关闭
此处关闭服务端和客户端的防火墙: systemctl stop firewalld
selinux也要关掉
showmount -e 192.168.83.3 //该ip为NFS服务端ip
开始挂载:
mount -t nfs 192.168.83.3:/home/nfstestdir /mnt
在客户端挂载目录/mnt/下,就是NFS共享的目录,创建一个测试文件tobe.php
在服务端的共享目录中可以看到
四、exportfs命令
看下图:假如A的NFS服务停掉了,但是B和C还在挂载着A分享的分区,这就无法正常工作了,由于B和C上面的进程是d状态(不可中断进程,在ps一节中学习到的),一旦A停止了,B和C一定会出问题,无法服务,既不可以重启,也不可以关闭,就会把系统整挂掉。所以NFS一定不可以随便重启。 如果必须重启怎么办?先把B和C上面的目录卸载下来。
如果挂载了多台机器,使用exportps
exportps命令常用选项:
-a 全部挂载或者全部卸载 -r 重新挂载 -u 卸载某一个目录 -v 显示共享目录 以下操作在服务端上 vim /etc/exports //增加 /tmp/ 192.168.83.33/24(rw,sync,no_root_squash) exportfs -arv //不用重启nfs服务,配置文件就会生效
在服务端001上:
exportfs -arv
这样就可以让配置文件重新生效,不需要再次重启nfs服务,也不会对客户端造成之前所说的错误
编辑配置文件,增加一个共享的目录
vim /etc/exports
/tmp/ 192.168.83.33/24(rw,sync,no_root_squash)
用命令:exportfs -arv 直接生效,不用重启NFS服务
使用客户端测试;
查看服务端共享目录:showmount -e 192.168.83.3
挂载 mount -t nfs 192.168.83.3:/tmp /mnt
因为之前挂载了,需要先取消挂载
在客户端mnt下创建一个测试文本
新检测试文本1212.txt,查看其gid和uid都为root
在服务端001下
查看/tmp目录下的1212.txt测试文本,其uid和gid都为root
五、NFS客户端问题
注意:NFS 4版本会有该问题
在客户端挂载共享目录且权限设置为no_root_squash,不管是root用户还是普通用户,创建新文件时属主、属组为nobody , 这个不是设置错误,是软件本身自带的BUG。
解决方案:
方案1: 在客户端挂载的时候加上 -o nfsvers=3,其目的是指定nfs使用3版本,
mount -t nfs -o,nfsvers=3 192.168.83.3:/tmp /mnt 需要卸载 mount -t nfs -oremount,nfsvers=3 192.168.83.3:/tmp /mnt -oremount,nfsvers=3,不卸载使用remount(重新加载),-oremount:-o与remount中间看情况是否要加空格
方案2:在服务端和客户端配置:
vim /etc/idmapd.conf
把“#Domain = local.domain.edu” 改为 “Domain = xxx.com” (这里的xxx.com,看情况可以自定义),然后再重启rpcbind服务
六、FTP介绍
我们之前传输文件所用的是rz,sz命令,可以简单明了的就把我们所需的文件下载或者上传。但是有个缺陷,不可以上传或者下载大体积的文件。FTP就可以解决这个问题! FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。 FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。 小公司用的多,大企业不用FTP,因为不安全,通常使用GitHub。
七、使用vsftpd搭建ftp服务
1、配件相关信息
centos上自带的FTP服务软件vsftpd,默认没有安装;需要用yum安装
yum install -y vsftpd
安装后,不用配置,可以直接使用,默认支持使用系统账号登录,但是因为安全原因,需要建立账号体系
useradd -s /sbin/nologin virftp //创建虚拟用户virftp vim /etc/vsftpd/vsftpd_login //创建虚拟用户的密码文件
vim /etc/vsftpd/vsftpd_login内容如下,奇数行为用户名,偶数行为密码,多个用户就写多行
tobe和user为用户名
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
创建第一个用户的配置文件,文件名要和用户名保持一致
cd /etc/vsftpd/vsftpd_user_conf/
vim tobe
local_root=/home/virftp/tobe //虚拟用户的家目录 anonymous_enable=NO //是否允许匿名用户 write_enable=YES //是否允许可写 local_umask=022 //创建新目录和文件的权限 anon_upload_enable=NO //是否允许匿名用户上传 anon_mkdir_write_enable=NO //是否允许匿名用户可创建 idle_session_timeout=600 //连接后没有任何操作的超时时间,空闲时间段,600秒 data_connection_timeout=120 //数据传输的超时时间120秒 max_clients=10 //最大允许连接的clients客户端个数
创建虚拟用户家目录,并创建一个文件
mkdir /home/virftp/tobe touch /home/virftp/tobe/test.txt chown -R virftp:virftp /home/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
修改vsftpd的主配置文件/etc/vsftpd/vsftpd.conf。注意每行语句后面不能有空格
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
systemctl start vsftpd //启动vsftpd服务,并查看启动状态
注意: 21端口FTP; 22端口SSHD; 23端口TELNET
2、测试ftp
在服务器上安装lftp yum install -y lftp
安装完成后,链接用户tobe: lftp [email protected]
执行命令ls,看是否正常输出,若不正常查看日志/var/log/messages和/var/log/secure
? //是用来查看可以操作的命令
使用 get+文件名 来下载一个文件到当前所在目录,下图所在目录为/root/,所以文件在root目录下
八、xshell使用xftp传输文件
1、使用xshell直接传输
原理就是:使用sftp模式登录服务器
第一步:在xshell下,新建会话,按下图设置其属性
第二步:按下图,设置其下载到的目录
设置完成输入用户名密码进入
可以自由切换目录
get httpd-2.4.39.tar.gz 获取此文件
此时windows在桌面上,找到对应的目录,即可看到相应的文件
2、xshell使用xftp软件传输文件
在xshell界面上按下“ctrl+alt+F”弹出以下对话框,点击下载,跳转到下载页,下载安装
安装完成后,回到xshell上,按下“ctrl+alt+F”弹出软件界面
左侧windows下选择好要传输的目录,在右侧选择要传输的文件,点击传输,左侧会显示传输过去的文件
九、 使用pure-ftpd搭建ftp服务
pure-ftp为另外一款轻量FTP服务软件,和vsftp类似
安装并配置pure-ftpd
yum install -y pure-ftpd
vim /etc/pure-ftpd/pure-ftpd.conf //找到pureftpd.pdb这行,把行首的#删除
因为vsftpd和pure-ftpd 共用21端口,因此需要把vsftpd服务关掉,再开启pure-ftpd
systemctl stop vsftpd
systemctl start pure-ftpd
创建一个测试用户目录及用户
mkdir /data/ftp useradd -u 1010 pure-ftp chown -R pure-ftp:pure-ftp /data/ftp
通过pure-pw命令增加ftp用户以及配置用户库文件
pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp 通过pure-pw命令创建一个用户,useradd指定用户名为ftp_usera,-u指定系统的用户是pure-ftp,-d 指定虚拟用户的家目录为/data/ftp pure-pw mkdb //建立虚拟用户数据 touch /data/ftp/123.txt 创建一个测试文件 lftp [email protected] 测试正常
chown pure-ftp:pure-ftp /data/ftp/123.txt 属主映射成UID,数组为系统中组的名字