网络文件共享服务
Posted 大天使彦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络文件共享服务相关的知识,希望对你有一定的参考价值。
DAS、NAS、SAN
DAS:直接附加存储,磁盘和服务器直接通过数据线或光纤连接(磁盘和服务器都在一台机器上),速度快
NAS:网络附加存储,服务器和存储通过交换机连接,在存储上事先准备好磁盘,分好区,格式化文件系统,挂载,然后通过协议,把分区挂载的目录共享到网络
SAN:存储区域网络,服务器和存储离的特别远,中间还需要交换机来相连,需要走一些协议(iscsi协议),一一旦连接成功,就会在服务器上出现一个新的硬盘,而服务器就感觉这个硬盘就像在本机一样,但是这个存储空间是在远程,然后服务器就可以对这个硬盘创建分区,格式化文件系统,挂载,就可以存储数据了
ftp
文件传输协议(FTP)(一定要确保防火墙和selinux是关闭的)
File Transfer Protocol 早期的三个应用级协议之一
命令(控制):客户端:随机port ---服务器:tcp21
命令(控制):客户端:随机port ---服务器:tcp21
数据:客户端:随机port+1 ---服务器:随机port
服务器被动模式数据端口示例:(被动模式,服务器通过命令通道告诉客户端自己打开的端口,不是直接告诉,而是发给客户端两个数字,让客户端通过运算来得出端口,例如:端口号为:m*256+n)
227 Entering Passive Mode (192,168,175,138,224,59)
客户端连接ftp服务器,走命令通道,ftp服务器打开了21端口,客户端打开的随机端口
下载文件数据,走数据通道,ftp有两种模式,ftp服务器主动模式打开了20端口,被动模式打开了随机端口,而客户端打开了随机端口,这里是针对ftp服务器,主动模式是ftp服务器连接客户端,被动模式是客户端连接服务器
传输数据时,如果要是主动模式,就是服务器连接客户端,但是是主动模式,服务器不知道ftp客户端打开的端口,就无法连接,这时客户端就会走命令通道告诉ftp服务器,自己打开的端口,接着服务器就知道了客户端打开的端口就可以通过主动模式连接客户端,传输数据了
传输数据时走被动模式,就是客户端连接ftp服务器,被动模式,服务器打开了随机端口,客户端并不知道,就无法连接,这时ftp服务器就会通过命令通道告诉客户端自己打开的端口,接着客户端就知道了服务器打开的端口,就可以通过被动模式连接ftp服务器,传输数据了
但是客户端和服务器都有防火墙,只允许自己出,自己进,不允许别人进,这时上面传输数据的方式就失效了。对于ftp服务器的搭建的防火墙是硬件防火墙,有连接跟踪功能,可以分析命令通道21端口的数据包。假如客户端通过命令通道21端口,连接到了ftp服务器,如果想要走主动模式,服务器去连接客户端,客户端有防火墙,这时不行的,只能走被动模式,客户端通过命令通道已经知道了ftp服务器要打开的端口,就会连接这个端口,而ftp服务器的防火墙有连接跟踪功能,已经知道了将来客户端要连接这个端口,就会在防火墙上打开这个端口,从而实现被动模式,客户端连接服务器,传输数据。
FTP软件介绍
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:VerySecure FTP Daemon,CentOS默认FTP服务器
ftp,redhat.com数据:单机最多可支持15000个并发
ftp -A ftpserverport -A主动模式–p 被动模式
lftpgetftp://ftpserver/pub/file
gftp: GUI centos5 最新版2.0.19 (11/30/2008)
filezilla,CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver
FTP服务
匿名用户:ftp,anonymous,对应Linux用户ftp,随便输密码,都能登录
系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
nsswitch:networkservice switch名称解析框架
pam:pluggableauthentication module 用户认证
/lib64/security /etc/pam.d/ /etc/pam.conf
vsftpd服务
服务脚本:/usr/lib/systemd/system/vsftpd.service
匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp(用户ftp的家目录),不能切根
连接ftp服务器时,会议root的身份运行了vsftpd程序,连进去之后,还没输入账户密码,就会开一个子进程,是以nobody的身份运行,当输入账户密码时,就会又开了一个子进程,该子进程是以ftp的身份运行
命令端口
主动模式端口
connect_from_port_20=YES 主动模式端口为20
ftp_data_port=20 指定主动模式的端口,可以认为指定主动模式端口
连接到ftp服务器默认传输文件是以被动模式传输的,想要以主动模式传输,敲passive,关闭被动模式就行了,再敲一遍passive就开启了别动模式
del表示删除上传的文件,不过要在ftp配置文件中配置才允许
被动模式端口范围
使用当地时间
use_localtime=YES 使用当地时间(默认为NO,使用GMT)
匿名用户
注意:匿名登录,ftp服务器根目录/var/ftp是不能有写权限的,否则匿名登录失败
anonymous_enable=YES 支持匿名用户 改为no,不支持匿名用户
no_anon_password=YES(默认NO) 匿名用户略过口令检查
anon_world_readable_only(默认YES)只能下载全部读的文件,当我们匿名上传一个文件f1时,这个文件的权限在其他人上是没有读权限的,其所属人和所属组都是ftp,而下载文件是以nobody的身份下载的,只有在其他人上有读权限时才能下载上传的f1文件
anon_upload_enable=YES 匿名上传,注意:文件系统权限,匿名上传文件是以ftp的身份上传的,如果/var/ftp/pub这个目录的其他人上没有wx权限,就不能上传文件,有两种方式能够上传文件,一是修改/var/ftp/pub这个目录其他人上的权限,二是对这个目录设置acl权限setfacl -m u:ftp:rwx /var/ftp/pub/
anon_mkdir_write_enable=YES 可创建文件夹
anon_other_write_enable=YES 可删除和修改上传的文件
anon_umask=077 指定匿名上传umask,默认是077,所以上传的文件权限为600,之所以不能够下载上传的文件就是因为设置上传umask为077,导致匿名上传的文件其他人上没有读权限,当把上传umask设置为033,这样上传的文件权限就为644,其他人上就有了读权限,这样就能下载上传的文件了
指定上传文件的默认的所有者和权限
chown_username=wang 设置上传文件的所属人为wang
chown_upload_mode=0644设置上传文件的权限为644
Linux系统用户
guest_enable=YES 所有系统用户都映射成guest用户
guest_username=ftp 配合上面选项才生效,指定guest用户
local_enable=YES 是否允许linux用户登录
write_enable-YES 允许linux用户上传文件
local_umask=022 指定系统用户上传文件的默认权限
local_root=/ftproot非匿名用户登录所在目录
禁锢所有系统用户在家目录中
chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户
禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反
chroot_list_file=/etc/vsftpd/chroot_list
当chroot_local_user=YES时,则/etc/vsftpd/chroot_list中用户不禁锢
当chroot_local_user=NO时,则/etc/vsftpd/chroot_list中用户禁锢
wu-ftp日志:默认启用
xferlog_enable=YES (默认)启用记录上传下载日志
xferlog_std_format=YES (默认)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog(默认)可自动生成
vsftpd日志:默认不启用
dual_log_enable=YES 使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log(默认)可自动生成
登录提示信息
ftpd_banner="welcometo mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效
目录访问提示信息
message_file=.message(默认)信息存放在指定目录下.message
你要访问哪个目录,就在哪个目录下面建一个.message,里面写着目录访问的提示信息,当你访问这个目录时,就会显示.message里的提示信息
如图,我访问upload目录时,就会提示红色的upload dir信息
使用pam(Pluggable Authentication Modules)完成用户认证
如果/etc/pam.d/vsftpd中是deny,/etc/vsftpd/ftpusers默认文件中用户拒绝登录
是否启用控制用户登录的列表文件
userlist_deny=YES(默认值)黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list此为默认值
/etc/pam.d/ftpusers和/etc/vsftpd/users_list中的用户是不能登陆ftp服务器的,只有同时满足/etc/pam.d/vsftpd中是allow和userlist_deny=no,/etc/pam.d/ftpusers和/etc/vsftpd/users_list中的用户才能登陆ftp服务器
连接限制
vsftpd服务指定用户身份运行
传输速率:字节/秒
连接时间:秒为单位
connect_timeout=60 主动模式数据连接超时时长
accept_timeout=60 被动模式数据连接超时时长
data_connection_timeout=300 数据连接无数据输超时时长
idle_session_timeout=60 无命令操作超时时长
优先以文本方式传输(默认是以二进制方式传输,文本方式传输会造成数据丢失)
配置ftp服务为非独立服务
配置FTP服务以非独立服务方运行:listen=NO,默认为独立方式
yum install telnet-server 安装telnet服务自动会给你安装xinetd服务,因为telnet服务是依赖xinetd服务的
我先关了ftp服务,然后再开启xinetd服务,依然打卡了21端口
是xinetd监听21端口,一旦有人来访问,就会自动激活ftp服务
实现基于SSL的FTPS
ldd `which vsftpd` 查看到libssl.so
(2)创建自签名证书
force_local_logins_ssl=YES 本地用户登录加密
force_local_data_ssl=YES 本地用户数据传输加密
rsa_cert_file=/etc/vsftpd/vsftpd.pem
cat -A /etc/vsftpd/vsftpd.conf可以检查空格
实现基于文件验证的vsftpd虚拟用户
vim ftpusers.txt 在这个文件中创建虚拟账号,格式是奇数行是账号名,偶数行是口令,如图:
(2)将存放账号的文件编码为hash格式,需要用db_load命令
db_load -T -t hash -f ftpusers.txt ftpusers.db 生成一个tpusers.db数据库文件
chmod 600 ftpuser.db 为了安全,不让其他人查看该文件,原来存放账号的文件就可以删掉了
(3)创建一个系统账号,所有虚拟账号会统一映射为一个指定的系统帐号,访问共享位置,即为此系统帐号的家目录
useradd -r -d -m /app/ftpuser -s /sbin/nologin ftpuser
chown ftpuser /app/ftpuser/upload
(4)创建pam配置文件,让ftp通过数据库文件来验证身份,需要用到pam模块
(5)将虚拟账号映射为系统账号,指定pam配置文件,修改ftp配置文件
mdkir /etc/vsftpd/ftpusers.d/ 创建配置文件存放的路径
user_config_dir=/etc/vsftpd/ftpusers.d/
cd /etc/vsftpd/ftpusers.d/ 进入此目录
现在想允许ftp1能够上传文件和创建目录和删除修改上传的文件,ftp2登陆的目录为/app/ftpuser1,
chown ftpuser /app/ftpuser1/f1
chown ftpuser /app/ftpuser2/f2
实验:实现基于mysql验证的vsftpd虚拟用户
环境:两台主机,一台A(IP地址为192.168.10.135):mariadb server 一台B(IP地址为192.168.10.186):ftp server
create table ftpusers(name char(30),pass char(50));
insert ftpusers values(\'ftp1\',password(\'centos\')),(\'ftp2\',password(\'magedu\'));
grant select on vsftpd.ftpusers to \'ftp\'@\'192.168.10.186\' identified by \'centos\';
mysql -uftp -pcentos -h 192.168.10.135
yum groupinstall "development tools" -y
yum install mariadb-devel pam-devel -y
tar xvf pam_mysql-0.7RC1.tar.gz
./configure --with-pam-mods-dir=/lib64/security --with-pam=/usr
(3)准备两个共享目录/app/ftpdir和/app/ftpdir2,将来ftp1连接ftp服务器,登陆的是/app/ftpdir目录,而ftp2连接ftp服务器,登陆的是/app/ftpdir2目录
useradd -d /app/ftpdir -r -m ftpuser
auth required pam_mysql.so user=ftp passwd=centos host=192.168.10.135 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=pass crypt=2
account required pam_mysql.so user=ftp passwd=centos host=192.168.10.135 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=pass crypt=2
pam_service_name=vsftpd.mysql 修改
user_config_dir=/etc/vsftpd/conf.d/
anon_upload_enable=yes 将来ftp1登陆了可以上传文件
local_root=/app/ftpdir2 将来ftp2登陆了,共享目录是/app/ftpdir2
(5)测试,用另外一台机器来连接ftp服务器(192.168.10.186)
ftp://172.16.0.1/pub/Sources/6.x86_64/axel/axel-2.4-1.el6.rf.x86_64.rpm
ftp://172.16.0.1/pub/ISOs/CentOS-7-x86_64-Everything-1511.iso
axel -n 10 -o ftpfile ftp://192.168.10.135/f1 从ftp服务器上并行下载f1文件到本机的ftpfile中
NFS服务
NFS:Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现
RPC采用C/S模式。客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
NFS优势:节省本地存储空间,将常用的数据如:home目录,存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用
/dev/sda2是ext4文件系统,/app/nfsdir是在/dev/sda2上,通过nfs服务器共享出去,当通过nfs方式访问/app/nfsdir时,可以将远程的/app/nfsdir目录挂载到本机的一个目录下,然后就可以访问/app/nfsdir的数据了,就像在本机一样
NFS各个版本的对比
NFS服务介绍
端口:2049(nfsd), 其它端口由portmap(111)分配
配置文件:/etc/exports,/etc/exports.d/*.exports
CentOS7不支持同一目录同时用nfs和samba共享,因为使用锁机制不同
相关软件包:rpcbind(必须),tcp_wrappers
每次启动nfs服务,打开的端口都是变化的,这样别人怎样才可以连接你呢?每次开启nfs服务,会把打开的端口号注册到一个特殊的服务中,这个服务叫fpcbind,这个服务就起着监控nfs服务端口的作用,在centos6上,如果把这个服务停了,那么nfs服务起不来,在centos7上,把这个服务停了,nfs服务还会起来,这是因为开启nfs服务,会自动激活rpcbind服务,而centos6就不会激活。
配置防火墙
•防火墙除开放上述端口,还需开放TCP和UDP的111和2049共4个端口
NFS配置文件
/dir主机1(opt1,opt2) 主机2(opt1,opt2)...
•wildcards:主机名通配,例如*.magedu.com,IP不可以
•netgroups:NIS域的主机组,@group_name
•默认选项:(ro,sync,root_squash,no_all_squash)
•sync(1.0.0后为默认)同步,数据在请求时立即写入共享
•no_all_squash (默认)保留共享文件的UID和GID
•all_squash 所有远程用户(包括root)都变成nfsnobody
•root_squash (默认)远程root映射为nfsnobody,UID为65534,早期版本是4294967294 (nfsnobody)
•no_root_squash 远程root映射成root用户
•anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用
NFS工具
rpcinfo
exportfs
showmount -e hostname
mount.nfs 挂载工具
NFSv4支持通过挂载NFS服务器的共享"根",从而浏览NFS服务器上的共享目录列表
客户端NFS挂载
基于安全考虑,建议使用nosuid,nodev,noexec挂载选项
rsize和wsize一次读和写数据最大字节数,rsize=32768
mount -o rw,nosuid,fg,hard,intr172.16.0.1:/testdir/mnt/nfs/
172.16.0.1:/public mnt/nfs nfs defaults 0 0
自动挂载
系统管理器指定由/etc/auto.master自动挂载器守护进程控制的挂载点
为所有导出到网络中的NFS启用特殊匹配-host 至"browse"
间接匹配
假如说将共享目录/app/test挂载到/app/nfsdir上,那么dirname就是/app,basename就是nfsdir
basename -fstype=nfs 192.168.10.187:/app/test
* -fstype=nfs 192.168.10.187:/app/&
假如说将共享目录挂到本地的/home目录下,会影响家目录的结构,导致其他用户登录没有了家目录
直接匹配
假如说将共享目录/app/test挂载到/app/nfsdir上
/app/nfsdir 192.168.10.187:/app/nfsdir
实现nfs服务共享
(1)编辑nfs服务的配置文件,设置共享哪个目录和谁可以访问共享目录
/app/nfsdir1 * (ro)共享/app/nfsdir1目录,允许所有人访问,共享目录只读
/app/nfsdir2 * (rw)共享/app/nfsdir2目录,允许所有人访问,共享目录可读可写
mount 192.168.10.200:/app/nfsdir1 /mnt/nfs1
mount 192.168.10.200:/app/nfsdir2 /mnt/nfs2
(4)在前面我们设置了共享目录/app/nfsdir1是只读的,而共享目录/app/nfsdir2是可读可写的,所能在挂载到/app/nfsdir2上的目录里创建文件,挂载到/app/nfsdir1上的目录里不能创建,下面来测试:
cd /mnt/nfs2 然后创建文件,也不能创建文件,但是报错提示是权限拒绝,所以是共享目录没有创建文件的权限
我们再来修改一nfs服务器的共享目录/app/nfsdir2的权限,chmod 777 /app/nfsdir2,再来创建文件,成功
由上图知道,创建文件是以nfsnobody的身份来创建的,所以不需要对/app/nfsdir2设置满权限,只需要对/app/nfsdir2设置acl权限,只让nfsnobody用户有创建文件的权限,就可以来创建文件了
setfacl -m u:nfsnobody:rwx /app/nfsdir2
由上面实验知道客户端root到共享目录里创建文件,不是以原来的身份创建文件,而是被压榨成nfsnobody身份来创建权限
改成root不压榨,就要修改nfs服务的配置文件,默认是压榨的
如果既有root不压榨,又有所有压榨,此时root不压榨将失效,在共享目录里面创建的文件还是以nfsnobody的身份创建的
对于普通用户是不压榨身份的,例如,客户端在nfs共享目录创建一个文件,在nfs服务器是以和客户端用户的uid,gid相同的用户显示其所属人,所属组,如果nfs服务器没有该用户的话,就会显示uid和gid。
实验:实现NFS伪根
mount -b /data/123 /app/nfsdir2 将/data/123挂载到/app/nfsdir2上
/data/123 /app/nfsdir3 none bind 0 0
/app/nfsdir2 *(rw)(将来客户端将该共享目录挂载到本地目录上,实际上挂载的是/data/123目录)
NFS相关SELinux设置
CentOS7默认SELinux 的布尔值nfs_export_all_ro和nfs_export_all_rw都启用. 这允许NFS服务可以读写任意文件,基于安全考虑可关闭.
对于只读的NFS目录SELinux安全上下文件应设为public_content_t或nfs_t.
对于读写的NFS目录SELinux安全上下文件应设为public_content_rw_t或nfs_tcontext,并且布尔值nfsd_anon_writeBoolean 必须启用,以允许写操作.
帮助参考nfsd_selinux(8)(selinux-policy-devel包)nfs(5),mount(8),mount.nfs(8),exportfs(8),exports(5), nfsd_selinux(8)
SAMBA
SAMBA服务简介
windos的计算机名是具有网络意义的,能够ping通这就需要计算机名是不能够冲突的,而linux中的主机名是不具有网路意义的
SMB:Server Message Block服务器消息块,IBM发布,最早是DOS网络文件共享协议
Cifs:common internet file system,微软基于SMB发布
SAMBA:1991年Andrew Tridgell,实现windows和UNIX相通
•可以进行NetBios名称解析
•工作组WORKGROUP:计算机对等关系,帐号信息各自管理
语法检查:testparm[-v] [/etc/samba/smb.conf]
SAMBA服务器配置
smb.conf继承了.ini文件的格式,用[ ] 分成不同的部分
%m 客户端主机的NetBIOS名 %M 客户端主机的FQDN
%L samba服务器的NetBIOS名 %I 客户端主机的IP
samba服务有两个服务,一个smb(samba的核心服务),一个是nmb(用来实现名字解析的,将NetBIOS名解析成IP地址)
systemctl start smb 开启两个端口,都是tcp协议
systemctl start nmb 也开启两个端口,都是udp协议
SAMBA服务器全局配置
hosts allow 可用"," ,空格,或tab分隔,默认允许所有主机访问,也可在每个共享独立配置,如在[global]设置,将应用并覆盖所有共享设置
IPv4 network/prefix: 172.25.0.0/24 IPv4前缀: 172.25.0.
IPv4 network/netmask: 172.25.0.0/255.255.255.0
以example.com后缀的主机名: .example.com
hosts allow = 172.25. .example.com
configfile=/etc/samba/conf.d/ %U 用户独立的配置文件
Log file=/var/log/samba/log. %m不同客户机采用不同日志
max log size=50 日志文件达到50K,将轮循rotate,单位KB
user:samba用户(采有linux用户,samba的独立口令)
domain:使用DC(DOMAINCONTROLLER)认证
samba用户须是Linux用户,建议使用/sbin/nologin
管理SAMBA用户
/var/lib/samba/private/passdb.tdb
在windos登陆linux系统的samba共享目录,是需要输入samba服务自身的账号和密码,和linux系统用户无关,而且默认登陆的共享目录是samba用户的家目录
1.useradd -s /sbin/nologin smb1
1.useradd -s /sbin/nologin smb1
企业级NFS网络文件共享服务