1. NFS概念
NFS是Network File System(网络文件系统)。主要功能是通过网络让不同的服务器之间可以共享文件或者目录。NFS客户端一般是应用服务器(比如web,负载均衡等),可以通过挂载的方式将NFS服务器端共享的目录挂载到NFS客户端本地的目录下。
2. NFS工作原理
①启动RPC服务
②启动NFS服务
③客户端请求NFS服务
④RPC把端口和IP地址给客户端(NFS客户端拿着端口和地址请求服务挂载文件或者目录传输)
3. NFS协议
NFS在文件传送过程中依赖与RPC(远程过程调用)协议。
NFS本身是没有提供信息传送的协议和功能的,但是能够用过网络进行图片,视频,附件等分享功能。只要用到NFS的地方都需要启动RPC服务,不论是NFS的服务端还是客户端。
4. NFS端口
TCP 111 2049
5.RPC与NFS如何通讯
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去
那么RPC又是如何知道每个NFS功能的端口呢?
首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了。
提示:在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。
练习:
#NFS服务器安装及配置
1.关闭防火墙&Selinux
[root@c66 ~]# systemctl stop firewalld
[root@c66 ~]# setenforce 0
[root@c66 ~]# getenforce
Permissive
[root@c66 ~]#
2.安装NFS服务器
#NFS服务端rcpbind,rfc为nfs-utils
[root@c66 ~]# mount /dev/sr0 /media/
mount: /dev/sr0 is write-protected, mounting read-only
[root@c66 ~]# yum install rpcbind nfs-utils -y
Loaded plugins: fastestmirror
c7-media | 3.6 kB 00:00
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package nfs-utils.x86_64 1:1.3.0-0.48.el7 will be installed
--> Processing Dependency: libtirpc >= 0.2.4-0.7 for package: 1:nfs-utils-1.3.0-0.48.el7.x86_64
--> Processing Dependency: gssproxy >= 0.7.0-3 for package: 1:nfs-utils-1.3.0-0.48.el7.x86_64
......
Complete!
3.配置NFS服务
3.1 NFS服务器上建立NFS共享目录
[root@c66 ~]# mkdir /nfs_dir
[root@c66 ~]# chmod -Rf 777 /nfs_dir/
3.2 NFS服务的配置文件
#/etc/exports #nfs配置文件,默认为空!!!
#/nfs_dir共享给本网段所有主机,且拥有读写权限,在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失。
[root@c66 ~]#vi /etc/exports
/nfs_dir 192.168.163.143 (rw,sync,root_squash)
exports配置常用参数
参数 | 含义 |
---|---|
ro | 只读 |
rw | 读写 |
root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 |
no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 |
all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 |
sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
3.3 启动NFS服务
[root@c66 ~]# systemctl restart rpcbind
[root@c66 ~]# systemctl enable rpcbind
[root@c66 ~]# systemctl start nfs-server
[root@c66 ~]# systemctl enable nfs-server
3.4 客户端测试
#showmount,主要使用命令来查询共享信息。此处测试最好在其它机器测试
[root@c66 ~]#showmount -e 192.168.163.143
Export list for 192.168.163.143:
/nfs_dir 192.168.163.143(everyone)
[root@c66 ~]#mount -t nfs 192.168.163.143:/nfs_dir /mnt
#如果想要开机挂载,请编辑 /etc/fstab文件
1. SAMBA概念
FTP文件传输服务可以让主机之间的文件传输变得简单方便,但是FTP协议的本质是传输文件,而非共享文件,因此要想通过客户端直接在服务器上修改文件内容还是一个问题。微软公司和英特尔公司共同制定了SMB(Server Messages Block,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源的共享问题。
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。 通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
2. SAMBA工作原理
①协议协商
客户端在访问Samba服务器时,发送negprot指令数据包,告知目标计算机其支持的SMB类型。Samba服务器根据客户端的情况,选择最优的SMB类型,并做出回应;
②建立连接
当SMB类型确认后,客户端会发送session setup指令数据包,提交帐号和密码,请求与Samba服务器建立连接,如果客户端通过身份验证,Samba服务器会对session setup报文作出回应,并为用户分配唯一的UID,在客户端与其通信时使用。
③访问共享资源
客户端访问Samba共享资源时,发送tree connect指令数据包,通知服务器需要访问的共享资源名,如果设置允许,Samba服务器会为每个客户端与共享资源连接分配TID,客户端即可访问需要的共享资源。
③断开连接
共享使用完毕,客户端向服务器发送tree disconnect报文关闭共享,与服务器断开连接
3. SAMBA工作协议
Samba服务功能强大,这与其通信基于SMB协议有关。SMB不仅提供目录和打印机共享,还支持认证、权限
设置。在早期,SMB运行于NBT协议(NetBIOS over TCP/IP)上,使用UDP协议的137、138及TCP协议的
139端口;后期SMB经过开发,可以直接运行于TCP/IP协议上,使用TCP协议的445端口。
Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系
统下是否安装了NetBIOS协议
4. SAMBA端口
TCP 139/445,UDP 137/138
练习:
1.关闭防火墙&Selinux
[root@c66 ~]#systemctl stop firewalld
[root@c66 ~]#setenforce 0
[root@c66 ~]#getenforce
Permissive
[root@c66 ~]#
2.安装SAMBA服务器及客户端
#samba服务器,samba-client客户端
[root@c66 ~]#yum install samba -y
Loaded plugins: fastestmirror
c7-media | 3.6 kB 00:00
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package nfs-utils.x86_64 1:1.3.0-0.48.el7 will be installed
--> Processing Dependency: libtirpc >= 0.2.4-0.7 for package: 1:nfs-utils-1.3.0-0.48.el7.x86_64
......
Complete!
[root@c66 ~]#yum install samba-client -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package samba-client.x86_64 0:4.6.2-8.el7 will be installed
--> Processing Dependency: libsmbclient = 4.6.2-8.el7 for package: samba-client-4.6.2-8.el7.x86_64
--> Processing Dependency: libsmbclient.so.0(SMBCLIENT_0.1.0)(64bit) for package: samba-client-4.6.2-8.el7.x86_64
--> Processing Dependency: libsmbclient.so.0()(64bit) for package: samba-client-4.6.2-8.el7.x86_64
--> Processing Dependency: libarchive.so.13()(64bit) for package: samba-client-4.6.2-8.el7.x86_64
--> Running transaction check
---> Package libarchive.x86_64 0:3.1.2-10.el7_2 will be installed
---> Package libsmbclient.x86_64 0:4.6.2-8.el7 will be installed
--> Finished Dependency Resolution
......
Complete!
3.SAMBA服务器配置文件
/etc/samba/smb.conf #SAMBA主配置文件!!!
4.配置共享
4.1 创建共享资源的账户
#Samba服务程序默认使用的是用户口令认证模式。
#不同之处,只有建立账户信息数据库之后,才能使用用户口令认证模式。
#pdbedit命令用于管理SMB服务程序的账户信息数据库。在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。
[root@c64 ~]# useradd alice
[root@c64 ~]# id alice
uid=1000(alice) gid=1000(alice) groups=1000(alice)
[root@c64 ~]# pdbedit -a -u alice
new password:
retype new password:
Unix username: alice
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1196000516-1503558895-1724099395-1000
Primary Group SID: S-1-5-21-1196000516-1503558895-1724099395-513
Full Name:
Home Directory: \\c64\alice
HomeDir Drive:
Logon Script:
Profile Path: \\c64\alice\profile
Domain: C64
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 23:06:39 CST
Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
Password last set: Mon, 26 Nov 2018 16:55:55 CST
Password can change: Mon, 26 Nov 2018 16:55:55 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@c64 ~]#
4.2 创建共享资源文件目录
[root@c64 ~]# mkdir /home/share
[root@c64 ~]# chown -Rf alice:alice /home/share/
4.3 修改Samba主配置文件,修改共享信息
[root@c64 ~]#vi /etc/samba/smb.conf
[global] #全局配置名称
workgroup = MYGROUP #工作组名称
server string = Samba Server Version %v #samba信息,参数%v为显示SMB版本号
log file = /var/log/samba/log.%m #日志存放位置与名称,%m为来访的主机名
max log size = 50 #日志最大容量50kb
security = user #安全验证方式,见下介绍
passdb backend = tdbsam #用户后台的类型,见下介绍
load printers = yes #共享打印机设备
cups options = raw #打印机的选项
[share] #局部共享
comment = share info... #提示信息
path = /home/share #共享目录
public = no #关闭所有人可见
writable = yes #可写
[root@c64 ~]#systemctl restart smb
[root@c64 ~]#systemctl enable smb
#安全验证方式介绍:
#share:来访主机无需验证口令;比较方便,但安全性很差
#user:需验证来访主机提供的口令后才可以访问;提升了安全性
#server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)
#domain:使用域控制器进行身份验证
#用户后台的类型介绍:
#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码
#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户
#ldapsam:基于LDAP服务进行账户验证
4.4 windows测试共享
开始—>运行—>\192.168.5.153—>输入用户名密码—>登录成功
创建一个文本文件,写入信息并保存测试
#由于Windows系统的缓存原因,下次在登陆时仍保存上一次的用户名,可清除Samba登陆信息,命令 #net use * /del /y
4.5 linux测试共享
#linux连接samba
[root@c64 ~]# smbclient //192.168.163.143/share -U alice
Enter SAMBA\alice's password:
Domain=[C66] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls
. D 0 Mon Nov 26 17:13:39 2018
.. D 0 Sun Nov 25 17:26:41 2018
zt.txt A 14 Mon Nov 26 17:13:53 2018
18655232 blocks of size 1024. 17637788 blocks available
smb: \>
#出现问题
#NT_STATUS_IO_TIMEOUT 需要在服务端做ip 域名的绑定和/etc/resolv.conf有关
4.6 SAMBA挂载
#客户端安装支持文件共享服务的软件包cifs-utils
[root@c64 ~]# yum install cifs-utils -y
[root@c64 ~]# yum install cifs-utils -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package cifs-utils.x86_64 0:6.2-10.el7 will be installed
--> Finished Dependency Resolution
......
Complete!
#Samba的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中
vi /etc/samba/auth.smb
[root@c64 ~]# mount -a
[root@c64 ~]#vi /etc/samba/auth.smb #这个文件没有,需要创建
username=alice
password=123456
domain=share
[root@c64 ~]# chmod -Rf 600 auth.smb
[root@c64 ~]#mkdir share #创建挂载目录
[root@c64 ~]# vi /etc/fstab
//192.168.5.153/share /share cifs credentials=/etc/samba/auth.smb 0 0
[root@c64 ~]#mount -a
[root@c64 ~]cat /share/zt.txt
hello,Linux!
1. FTP服务器概念
文件传输协议(File Transfer Protocol)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。专门用来传输文件的协议。
2. FTP服务器工作原理
FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数。
3. FTP服务器协议
FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。FTP协议有下面两种工作模式:
主动模式:FTP服务器主动向客户端发起连接请求
被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)
4.VSFTP服务器的安装及配置
4.1.关闭防火墙&Selinux
[root@c64 ~]# systemctl stop firewalld
[root@c64 ~]# setenforce 0
[root@c64 ~]# getenforce
4.2.安装VsFTP服务器及客户端
#在linux下客户端为ftp,vsftpd服务器端
[root@c64 ~]# yum install vsftpd ftp -y
......
Running transaction
Installing : vsftpd-3.0.2-22.el7.x86_64 1/2
Installing : ftp-0.17-67.el7.x86_64 2/2
Verifying : ftp-0.17-67.el7.x86_64 1/2
Verifying : vsftpd-3.0.2-22.el7.x86_64 2/2
Installed:
ftp.x86_64 0:0.17-67.el7 vsftpd.x86_64 0:3.0.2-22.el7
Complete!
4.3.匿名访问模式配置
#开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限
#不建议在生产环境使用
[root@c64 ~]# vi /etc/vsftpd/vsftpd.conf #vsftpd主配置文件!!!
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@c64 ~]# systemctl restart vsftpd
[root@c64 ~]# systemctl enable vsftpd
4.4.测试
[root@c64 ~]# ftp 192.168.163.205
Connected to 192.168.163.205 (192.168.163.205).
220 (vsFTPd 3.0.2)
Name (192.168.163.205:root): ftp #用户此处可填写ftp/anonymous
331 Please specify the password.
Password: #密码为空
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub #切换目录,实际目录为/var/ftp/pub
250 Directory successfully changed.
ftp> mkdir dir
550 Create directory operation failed. #无法创建,是什么问题,怎么解决?
解决方法:
[root@c64 ~]# ls -ld /var/ftp/pub/
drwxr-xr-x. 2 root root 6 Aug 3 2017 /var/ftp/pub/
[root@c64 ~]# chown -Rf ftp /var/ftp/pub/
[root@c64 ~]# ftp 192.168.163.205
Connected to 192.168.163.205 (192.168.163.205).
220 (vsFTPd 3.0.2)
Name (192.168.163.205:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub
250 Directory successfully changed.
ftp> mkdir dir
257 "/pub/dir" created
ftp> rename dir dir1
350 Ready for RNTO.
250 Rename successful.
ftp> ls
227 Entering Passive Mode (192,168,163,205,212,55).
150 Here comes the directory listing.
drwx------ 2 14 50 6 Nov 28 08:01 dir1
226 Directory send OK.
ftp> rmdir dir1
250 Remove directory operation successful.
ftp> ls
227 Entering Passive Mode (192,168,163,205,167,19).
150 Here comes the directory listing.
226 Directory send OK.
ftp>
4.5.本地用户模式
[root@c64 ~]#vi /etc/vsftpd/vsftpd.conf #vsftpd主配置文件!!!
anonymous_enable=NO
[root@c64 ~]#systemctl restart vsftpd
4.6.测试
[root@c64 ~]# ftp 192.168.163.205
Connected to 192.168.163.205 (192.168.163.205).
220 (vsFTPd 3.0.2)
Name (192.168.163.205:root): root
530 Permission denied.
Login failed. #登录失败?
ftp>
解决方法:
vsftpd服务所在目录中存放着两个用户名单ftpusers,user_list,出于安全原因,root默认不允许登录,编辑这两个文件注释root即可。同时在新创建一个用户,便于测试。
[root@c64 ~]# vi /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
#root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@c64 ~]# vi /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
#root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
测试:
[root@c64 ~]# systemctl restart vsftpd
[root@c64 ~]# ftp 192.168.163.205
Connected to 192.168.163.205 (192.168.163.205).
220 (vsFTPd 3.0.2)
Name (192.168.163.205:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>