25 NFS

NFS介绍

NFS是Network File System的缩写 
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服务端安装配置、NFS配置选项

NFS服务端安装配置

首先在服务端安装两个包
yum install -y nfs-utils rpcbind
客户端只安装一个包
yum install -y nfs-utils
然后在服务端编辑vim /etc/exports,并加入一行/home/nfstestdir 目标IP/端口(rw,sync,all_squash,anonuid=1000,anongid=1000)。
它主要分三部分,第一部分为共享出去的目录,第二部分为允许访问的ip,可以是一个IP,也可以是IP段,第三部分为小括号中的权限选项。
然后保存退出。
然后建立目录mkdir /home/nfstestdir,并将权限改为777,chmod 777 /home/nfstestdir
启动rpcbind systemctl start rpcbind
启动nfs systemctl start nfc
开机启动rpcbind systemctl enable rpcbind
开机启动nfc systemctl enable nfs

NFS配置选项

rw 读写
ro 只读
sync 同步模式,内存数据实时写入磁盘
async 非同步模式
no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大
root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid

客户端挂载
showmount -e IP //该ip为NFS服务端ip
如果出现未能连接,我们需要先关闭服务端和客户端的防火墙,和selinux。
systemctl stop firewalld 关闭防火墙
setenforce 0 关闭selinux

mount -t nfs 服务端IP:/home/nfstestdir /mnt df -h 挂载
然后在里面创建一个文件,再回到服务端的/home/nfstestdir下就可以看到,里面有一个和客户端相同的文件了。

exportfs命令

exportfs命令用来管理当前NFS共享的文件系统列表。
常用选项
-a:全部卸载或全部挂载
-r:重新挂载
-u:卸载某个目录
-v:显示共享目录
常用组合:exportfs -arv
服务端更改配置文件后,不重启服务,直接执行该命令就可以使更改后的配置文件生效。
注意: 在重启nfs服务之前需要先将所有挂载点卸载,否则将发生程序错误,严重者会拖垮系统。
以上操作都在服务端进行!
测试
在服务端的/etc/exports配置文件中,增加一行。把/tmp/目录单独共享给192.168.1.107这个ip。

[root@localhost ~]# vim /etc/exports
......
/tmp 192.168.1.107(rw.sync,no_root_squash)

重新使配置文件生效:
[root@localhost ~]# exportfs -arv
exporting 192.168.1.107:/tmp
exporting 192.168.1.0/24:/home/nfstestdir

检查客户端是否有权限访问服务端文件:
[root@localhost ~]# showmount -e 192.168.1.107
Export list for 192.168.1.107
/home/nfstestdir 192.168.1.0/24
/tmp 192.168.1.107
// 发现并没有重启nfs服务,配置就已经生效了

在客户端上将tmp目录挂载到mnt目录下
[root@localhost ~]# mount -t nfs 192.168.1.107:/tmp/ /mnt/

[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
......192.168.159.131:/tmp 16G 5.2G 11G 33% /mnt
// 现在客户端服务器上的/mnt/目录就是服务端服务器的/tmp/目录

在客户端的/mnt/目录下创建文件,并查看目录下的文件,能看到新建的文件1.txt和2.txt文件的属组属主都是root
[root@localhost ~]# touch /mnt/1.txt
[root@localhost ~]# ls -l /mnt
总用量 0
-rw-r--r--. 1 root root 0 1月 17 21:15 1.txt

再看服务端的/tmp/目录,1.txt文件的属组和属主也都是root
[root@localhost ~]# ls -l /tmp/
总用量 0
-rw-r--r--. 1 root root 0 1月 17 21:15 1.txt
这是因为服务端的配置文件中,使用了no_root_squash,所以root用户就不受约束,在客户端上的挂载点下就可以想在本地盘使用root用户一样,是不受限制的(通常情况下,不限制root用户的比较多。)

NFS客户端问题

NFS 4版本会有该问题
客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody
客户端挂载时加上 -o nfsvers=3
客户端和服务端都需要
vim /etc/idmapd.conf //
把“#Domain = local.domain.edu” 改为 “Domain = xxx.com” (这里的xxx.com,随意定义吧),然后再重启rpcidmapd服务
在centos6中,遇到的问题比较多,针对的NFS 4版本有这个问题
问题:客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody,虽然已经定义了 no_root_squash 不在限制root用户,最终创建完文件后发现属主和属组不是root或者是限定的1000,而是显示的是 nobody ,这就是NFS 4版本出现的问题,尤其是在centos6 系统上

解决办法:
方法一:是在客户端挂载的时候,加上-o nfsvers=3 ,意思就是指定NFS的版本为 3 ,不在用4的版本
mount -t nfs -o nfsvers=3 192.168.202.130:/tmp/ /mnt/
若是不想卸载,直接挂载,可以使用mount -t nfs -oremount,nfsvers=3 192.168.202.130:/tmp/ /mnt/ (前提是先挂载上去)
方法二:更改配置文件vim /etc/idmapd.conf ,把“#Domain = local.domain.edu” 改为 “Domain = xxx.com” (这里的xxx.com,随意定义吧),然后再重启rpcidmapd服务
在cnetos7中,本身是没有rpcidmapd服务的,只需要重启rpcbind服务就可以了

FTP 介绍

FTP(file transfer protocol)文件传输协议,用于在Internet上控制文件的双向传输。FTP主要作用是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷贝到本地计算机,或把本地文件传送到远程计算机。
该服务在小公司用的比较多,由于FTP服务的安全性较差,所以大公司不使用该服务。

使用vsftpd 搭建ftp服务

centos 上自带vsftpd 软件包
安装
[root@localhost ~]# yum install -y vsftpd

创建用户

vsftpd可以使用系统级别的用户进行登录,但是这样做不安全,所以需要使用vsftpd创建一个虚拟用户。在此创建一个系统普通用户的作用是使vsftpd的虚拟用户来进行映射,然后完成数据的传输。

[root@localhost ~]# useradd -s /sbin/nologin virftp

编辑虚拟用户的密码文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd_login
testuser1
123456
user1
112233
// 注意,配置文件中的奇数行为用户名,偶数行为密码。

配置完需要给密码文件配置权限
[root@localhost ~]# chmod 600 /etc/vsftpd/vsftpd_login

将文本形式的密码文件转化成计算机识别的二进制文件

[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
[root@localhost ~]# ls -l /etc/vsftpd/
......
-rw-------. 1 root root 30 1月 17 15:08 vsftpd_login
-rw-r--r--. 1 root root 12288 1月 17 15:12 vsftpd_login.db
// 生成了一个vsftpd_login.db 文件,这个文件是不能cat的

创建虚拟用户配置文件

创建配置文件目录:
[root@localhost ~]# mkdir /etc/vsftpd/vsftpd_user_conf

切换到新建目录下:
[root@localhost ~]# cd /etc/vsftpd/vsftpd_user_conf/

创建第一个用户的配置文件:
[root@localhost vsftpd_user_conf]# vim testuser1
// 虚拟用户的配置文件名要和虚拟用户名称保持一致。
// 将下面的内容放到配置文件中。
local_root=/home/virftp/testuser1
// 定义虚拟用户家目录
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
// 数据传输超时时间
max_client=10
// 客户端最大连接数量

创建虚拟用户家目录

创建虚拟用户家目录:
[root@localhost vsftpd_user_conf]# mkdir /home/virftp/testuser1

创建一个文件,登录时可以看见
[root@localhost vsftpd_user_conf]# touch /home/virftp/testuser1/testftp.txt

修改虚拟用户家目录的属主属组:
[root@localhost vsftpd_user_conf]# chown -R virftp:virftp /home/virftp

编辑vsftpd的认证文件:
[root@localhost vsftpd_user_conf]# vim /etc/pam.d/vsftpd
// 这个是登录ftp时的认证文件。
// 将下面两行代码加在文件开头
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

// 这两行代码用于指定用户密码文件位置

// 在centos6中因为区分32位和64版本,所以注意文件是在lib32还是lib64中。如果是32位,路径写了lib64,导致服务启动失败。

编辑vsftpd主配置文件

[root@localhost vsftpd_user_conf]# vim /etc/vsftpd/vsftpd.conf 
......
anonymous_enable=NO
// 由YES改成NO。不允许匿名用户登录
anon_upload_enable=NO
// 取消前面的注释,由YES改成NO。不允许匿名用户上传文件。
anon_mkdir_write_enable=NO
// 取消前面的注释,由YES改成NO。不允许创建目录
......
在文件最后加入下面内容:
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
// 开启虚拟用户和系统用户的映射
virtual_use_local_privs=YES
// 告诉服务使用虚拟用户
user_config_dir=/etc/vsftpd_user_conf
// 定义虚拟用户配置文件路径
allow_writeable_chroot=YES

启动服务

启动服务:
[root@localhost vsftpd_user_conf]# systemctl start vsftpd

查看进程:
[root@localhost vsftpd_user_conf]# ps aux | grep vsftp
root 2795 0.0 0.0 53216 572 ? Ss 16:11 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 2797 0.0 0.0 112680 976 pts/0 R+ 16:11 0:00 grep --color=auto vsftp
// 进程已经存在

查看监听端口:
[root@localhost vsftpd_user_conf]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp6 0 0 :::21 :::* LISTEN 2795/vsftpd

// vsftpd 服务监听21端口
// FTP服务监听21端口;sshd监听22端口;telnet监听23端口。

测试

安装linux下的ftp客户端:
[root@localhost ~]# yum install -y lftp

使用虚拟用户登录ftp客户端:
[root@localhost ~]# lftp [email protected]
口令:

lftp [email protected]:~> ls
drwxr-xr-x 2 1004 1005 25 Jan 17 07:24 testuser1
lftp [email protected]:/> ls testuser1
-rw-r--r-- 1 1004 1005 0 Jan 17 07:24 testftp.txt
// 使用ls命令查看虚拟用户家目录下的文件有哪些,发现之前创建的文件。
// ls 报错500,没有关闭selinux

lftp [email protected]:/> ?
// ? 可以查看ftp支持哪些命令。

将testftp.txt 传输到本机:
lftp [email protected]:/> get testuser1/testftp.txt
lftp [email protected]:/> quit
[root@localhost ~]# ls
testftp.txt

// 接受文件的目录为当前目录,即进入ftp服务的目录。
// 常用的命令put、get

windows 上可以使用filezilla 软件测试ftp服务。

使用xshell实现FTP功能

o方法一:使用sftp
新建会话→名称自定→协议选择SFTP→主机为远程主机ip→端口号默认22。
连接远程主机,使用常用的用户名密码,即可登录ftp。
右键远程连接属性,sftp可以设置下载的文件存放位置
方法二:使用xftp
在xshell中退出当前会话使用组合键:Ctrl+Alt+F,提示下载,下载安装后即可使用

xshell使用xftp传输文件

首先安装xftp,然后建立会话,步骤和xshell一样,在使用的时候用Ctrl+ALT+f呼出,左边是windows桌面,右面是linux,双击或拖拽都可以实现命令互传。

使用pure-ftpd搭建ftp服务

首先安装yum install -y pure-ftpd

更改配置文件vim /etc/pure-ftpd/pure-ftpd.conf//找到pureftpd.pdb这行,把行首的#删除

systemctl stop vsftpd(如果我们以前启动了vsftpd的话,就要先终止这个程序,否则启动pure-ftpd会报错)

systemctl start pure-ftpd(启动pure-ftpd)

mkdir /data/ftp(创建实验目录)

useradd -u 1010 pure-ftp(创建普通用户)

chown -R pure-ftp:pure-ftp /data/ftp(更改它的属主和属组)

pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp(useradd是指定用户名,-u是指定系统用户,-d指定虚拟用户的家目录)
然后输入两次密码

pure-pw mkdb(生成系统能识别的密码)

然后登陆,lftp ftp用户名@主机ip,然后输入密码

猜你喜欢

转载自blog.csdn.net/xiaoyuerp/article/details/82977352
nfs
25