文件共享服务(ftp,nfs,samba)(第24天)

编译LAMP,构建分离式LAMP
1:动态资源部署在应用程序服务器(php-fpm)中,静态资源部署在web服务器中
2:php-fpm方式工作时,他不会被编译后曾httpd的模块,因此无需在httpd的配置文件中LoadModule;
3:编译php时,需要连接mysql或其他数据库管理系统时,需要启用其相关的驱动模块
4:php与mysql不在同一个节点,连接mysql的用户账号要有远程访问权限。




文件共享服务
应用层:ftp
内核层:nfs
跨平台:samba服务,在Liinux上实现CIFS(SMB)协议。

登录某个共享服务,能做的操作权限(上传,删除等操作)取决于服务本身开放的权限和运行该共享服务的本地文件系统上的文件的权限

ftp详解:
FIle Transfer Protocol
ftp是应用层协议:基于tcp,监听在端口21号端口,
ftp是C/S架构,分客户端和服务端

ftp传输的数据分为2类:
控制类命令:ftp有多个文件管理类命令,始终在线的连接:21号端口
数据连接类:传输文件数据,按需创建以及关闭的连接


ftp支持文本和二进制传输。


连接分为主动连接和被动连接:
主动连接:由服务器端创建连接
      命令通道:Client 50000端口   ----->     Server 21端口
      数据通道:Server 20端口      ------->    Client 50000+1端口,弊端:服务器端主动连接客户端,但是一般来说,客户端都有防火墙。

被动连接:   由客户端创建连接
      命令通道:Client 50000端口      ----->    Server 21端口
      数据通道:Client 50000+1端口 ----->    Server 随机端口,这个随机端口会由服务端通过命令通道告知客户端。


ftp server端的程序有如下几种:
wu-ftpd
proftpd
pureftp
vsftpd:Very Secure
ServU

ftp  client端的程序有如下几种:
ftp
lftp, lftpget
wget,curl
filezilla
gftp:linux上的图形工具
flashfxp
cuteftp



ftp的响应码:  类似http协议的响应码
1xx:  信息
2xx:  成功类的状态码
3xx:  提示需进一步提供补充类信息的状态码
4xx:  客户端错误
5xx:  服务端错误


ftp的用户认证:支持虚拟用户,系统用户,匿名用户
虚拟用户:仅用于访问某个特定服务中的资源


nsswitch :network server switch,名称解析框架
nsswitch的配置文件    /etc/nsswitch.conf
nsswitch的模块   /lib64/libnss* 和  /usr/lib64/libnss*


pam:pluggable authentication module, 用户认证框架
pam的配置文件  /etc/pam.conf  和  /etc/pam.d/*
pam的模块      /lib64/security/


系统用户:
匿名用户:匿名用户默认是ftp,密码为空


CentOS上安装vsftpd
安装vsftpd的命令 :  yum  install  vsftpd
vsftpd的用户认证的配置文件:/etc/pam.d/vsftpd
服务脚本  /etc/rc.d/init.d/vsftpd
配置文件的目录    /etc/vsftpd/,主要配置文件  /etc/vsftpd/vsftpd.conf
匿名用户(映射为ftp用户)的共享资源位置:/var/ftp/
系统用户通过ftp访问的资源的位置: 系统用户自己的家目录
虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为的系统用户的家目录


匿名用户的配置:/etc/vsftpd/vsftpd.conf
anonymous_enable=YES      启用匿名用户
anon_upload_enable=YES    启用匿名用户的上传文件功能,可能无法上传,因为vsftpd服务以为ftp用户在运行,而/var/ftp/目录的属主和属组为root:root,权限为rwxr-xr-x,所以ftp用户对该目录没有写权限。解决方法可以在/var/ftp/目录下创建 一个upload目录,然后setfacl  -m u:ftp:rwx  upload/    使得,upload对于ftp用于有rwx权限。
anon_mkdir_write_enable=YES  启用匿名用户的创建目录功能
anon_other_write_enable=YES  启用匿名用户的删除文件和目录的功能

系统用户的配置:/etc/vsftpd/vsftpd.conf
local_enable=YES    表示系统上的用户可以直接登录vsftpd
write_enable=YES    开启本地用户的写权限
local_umask=022 
chroot_local_user=YES    限制所有本地用户锁定在自身的家目录中
chroot_list_enable=YES   启用chroot功能,配合chroot_list_file指定哪些用户被禁锢在自身家目录中
chroot_list_file=/etc/vsftpd/chroot_list    要被禁锢在自身家目录的本地用户的名单


日志配置:/etc/vsftpd/vsftpd.conf
xferlog_enable=YES 
xferlog_std_format=YES
xferlog_file=/var/log/xferlog


改变上传的文件的属主和属组:/etc/vsftpd/vsftpd.conf
#chown_uploads=YES
#chown_username=whoever


vsftpd调用pam完成用户认证使用的pam的配置文件:/etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd    这里的vsftpd表示/etc/pam.d/目录下的vsftpd文件
                                         表示/etc/vsftpd/ftpusers文件中的用户无法登陆vsftpd服务

是否启用控制用户登录的列表文件   /etc/vsftpd/vsftpd.conf
userlist_enable=YES   列表文件为 /etc/vsftpd/user_list
userlist_deny=YES|NO  如果是YES表示/etc/vsftpd/user_list文件是黑名单,反之,白名单

 /etc/vsftpd/vsftpd.conf文件中的其他常用配置:
max_clients         最大并发连接数
max_per_ip        每个ip可发起的最大并发请求数
anon_max_rate  匿名用户最大的传输速率,单位是byte/s
local_max_rate    本地用户最大的传输速率


ftp的虚拟用户:
所有的虚拟用户会被统一映射为一个指定的系统帐户,访问的共享位置即为此系统账号的家目录。
各个虚拟用户可悲赋予不同的访问权限,此访问权限是通过匿名用户的权限控制参数指定的。
虚拟用户帐户的存储方式如果是文件,并且文件的奇数行存储用户名,偶数行存储密码,此文件需要被编码为hash格式。
虚拟用户帐户的存放方式如果是数据库的表,即时查找数据库完成用户认证。pam要依赖于pam-mysql模块。该模块的安装可以使用yum install pam_mysql即可。


补充:
axel   多线程下载工具

--------------------------华丽的分割线----------------------------------------------------


NFS网络文件共享

NFS:Network File System
传统意义上,文件系统在内核中实现

RPC:远程过程调用,工作原理如下图:


RPC原理文字解析:客户端发送函数调用和参数的请求封装成RPC协议的报文到服务器端,服务器端接收请求,服务器端调用调度程序来运行客户端请求的函数调用,函数调用完成之后返回数据给调度程序,调度程序把数据返回给服务器端,最后服务器端把数据通过RPC协议返回给客户端。


RPC协议:Remote Procedure Call Protocol

半结构化数据:
XML:eXtended Mark Language
Json:
RESTful:



NFS发展:
NFSv1:
NFSv2:  基于udp
NFSv3:
NFSv4.0:
NFSv4.1:实现了分布式文件系统
NFSv4.2:也称为pNFS


NFS的弊端:
1:比如客户端的fedora用户(id为1119)通过nfs在服务器端创建了一个文件,假设nfs服务器上的id为1119的用户的用户名为Jerry,那么在nfs服务器上查看这个文件的时候,会显示该文件的属主是Jerry。是不是很诡异?
解决方法:
引入NIS(Network Information System)协议。NIS主机上的帐户和NFS服务器上的帐户和客户端的帐户统一起来。在运行NIS协议的主机上完成身份认证。
NIS是明文传输,不安全。
所以,nfs服务启动一个idmapd进程来做用户id的映射。

2:比如客户端的root用户通过nfs在nfs服务器端创建了一个文件,那么nfs服务器上的该文件的属主就是root了。数据安全问题如何保证?
解决方法:NFS可以设置客户端通过root操作文件时,在nfs服务器上表现为权限最小的用户,即为nfs的nobody用户。这就是所谓的挤压root用户的权限。


NFS支持基于IP的认证:
客户端请求访问nfs服务器上的文件系统的时候,首先是mountd服务进程,来判断该来源客户端IP是不是在允许访问nfs服务器上的文件系统,如果mountd发现此客户端是被允许的,则发送本地的nfsd监听的端口(2049/tcp)和令牌给客户端,而后,客户端在下一次请求中带上该令牌发出请求。

NFS监听在tcp的2049端口和udp的2049端口上。

nfs服务总共有3个服务,nfsd(tcp/2049,udp/2049),mountd(随机端口),idmapd(随机端口)。


RPC服务:
通过命令rpcinfo -p查看,服务名称是portmapper,其中mountd进程的随机端口是portmapper分配的。


安装和启动nfs:
yum install nfs-utils
service nfs start

查看nfs服务器上共享的文件系统:
showmount -e  NFS_SERVER_IP

在客户端上挂载nfs服务器上的文件系统:
mount -t nfs  NFS_SERVER_IP:/path/to/sharefs  /path/to/mount_point
例如:
mount -t nfs 192.168.62.159:/share/nfs  /mnt/   表示nfs服务器上/share/nfs挂载在本地的/mnt/目录下


配置nfs:
/etc/exports文件里的条目是导出给客户端使用的
/etc/exports文件的格式如下:
directory(or file system)  client1(option1, option2)  client2(option1, option2)
options常用的有如下几个:
ro    只读挂载
rw    读写挂载
root_squash         挤压root的权限,不允许root用户访问挂载上来的NFS卷
no_root_squash   允许root访问用户挂载上来的NFS卷
all_squash     限制所有的用户和组使用匿名用户访问


exportfs命令用于维护/etc/exports文件导出的文件系统
exportfs -ar  重新导出所有的文件系统
exportfs -au 关闭导出的所有文件系统
exportfs -u FS:关闭指定的导出的文件系统


----------华丽的分割线-----------------------------------------------------------------

Samba服务:
nfs服务的客户端和服务器端一般都是Linux系统;

NetBIOS协议:Windows基于主机实现互相通信的机制。NetBIOS名称(通过网络邻居看到的名称)最长15个字符。

CIFS在Windows系统上监听了137/udp,138/udp,139/tcp,445/tcp端口。其中137/udp,138/udp端口用于NetBIOS协议。

Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。

samba实现了多个协议,包括nmbd(NetBIOS协议),smdb(CIFS协议),winbind。


访问基于samba的协议的共享资源,使用UNC路径   \\SERVER\share_name


Linux作为客户端,Windows作为samba服务器端时,linux访问Windows的共享资源的步骤如下:
前提:在windows创建一个共享目录(假设为E:\share4samba\),并为该目录设置一个共享名称,创建一个用户,客户端要通过该用户来访问windows上提供的共享资源。
1:在linux上安装samba客户端,yum install samba-client
2:smbclient -L HOST -U  USERNAME     使用USERNAME用户(此用户是samba服务器提供的用户),探测HOST主机上的共享资源
  例如   smbclient -L 192.168.1.188 -U test
3:smbclient //SERVER/shared_name  -U USERNAME
或者是基于挂载的方式访问:
 mount -t cifs //SERVER/shared_name  /mount_point  -o username=USERNAME,password=PASSWORD
例如  smbclient //192.168.1.188/share4samba -U test
或者  mount -t cifs //192.168.1.188/share4samba /mnt/  -o username=test,password=test

Linux操作系统上安装samba服务,然后从windows或者linux客户端访问:
首先安装samba服务  yum install samba
服务脚本有2个:/etc/rc.d/init.d/nmb和/etc/rc.d/init.d/smb
启动服务:service nmb start && service smb start
主配置文件:  /etc/samba/smb.conf
samba用户:samba用户其实都是系统用户,但是samba密码是samba服务自有密码文件。可以通过smbpasswd命令将系统用户添加为samba用户。
     例如     useradd smbuser  &&     smbpasswd -a smbuser  表示将smbuser用户添加为samba用户。
smbpasswd  -a  smbuser   把smbuser用户添加为samba用户
smbpasswd  -d  smbuser   把smbuser用户禁用
smbpasswd  -e  smbuser   把smbuser用户启用
smbpasswd  -x  smbuser  把smbuser用户删除

windows系统通过ctrl+R输入 \\SMB_SERVER\,输入samba用户名(smbuser)和密码(smbuser),即可访问。


主配置文件:  /etc/samba/smb.conf  详解:
该配置文件分为全局设定和某特定共享的设定,特定共享的设定分为3类,[homes]家目录设定,[printers]打印机共享设定和自定义共享。
编辑该配置文件:加入自定义共享如下内容
[share4samba]
        comment = This is shared Directory!!!!!!!!!!!
        path = /share4samba
        browseable = no
        guest ok = yes   是否允许来宾帐户访问该目录
        writable = yes  表示该目录是否可写








评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用