网络文件共享服务

DAS、NAS、SAN

DAS:直接附加存储,磁盘和服务器直接通过数据线或光纤连接(磁盘和服务器都在一台机器上),速度快

NAS:网络附加存储,服务器和存储通过交换机连接,在存储上事先准备好磁盘,分好区,格式化文件系统,挂载,然后通过协议,把分区挂载的目录共享到网络

SAN:存储区域网络,服务器和存储离的特别远,中间还需要交换机来相连,需要走一些协议(iscsi协议),一一旦连接成功,就会在服务器上出现一个新的硬盘,而服务器就感觉这个硬盘就像在本机一样,但是这个存储空间是在远程,然后服务器就可以对这个硬盘创建分区,格式化文件系统,挂载,就可以存储数据了

 

ftp

文件传输协议(FTP)(一定要确保防火墙和selinux是关闭的)

File Transfer Protocol 早期的三个应用级协议之一

基于C/S结构

双通道协议:数据和命令连接

数据传输格式:二进制(默认)和文本

两种模式:服务器角度

命令(控制):客户端:随机port ---服务器:tcp21

数据:客户端:随机port+1---服务器:tcp20

被动(PASV style):客户端主动连接

命令(控制):客户端:随机port ---服务器:tcp21

数据:客户端:随机port+1 ---服务器:随机port

服务器被动模式数据端口示例:(被动模式,服务器通过命令通道告诉客户端自己打开的端口,不是直接告诉,而是发给客户端两个数字,让客户端通过运算来得出端口,例如:端口号为:m*256+n)

227 Entering Passive Mode (192,168,175,138,224,59)

服务器数据端口为:224*256+59

客户端连接ftp服务器,走命令通道,ftp服务器打开了21端口,客户端打开的随机端口

下载文件数据,走数据通道,ftp有两种模式,ftp服务器主动模式打开了20端口,被动模式打开了随机端口,而客户端打开了随机端口,这里是针对ftp服务器,主动模式是ftp服务器连接客户端,被动模式是客户端连接服务器

传输数据时,如果要是主动模式,就是服务器连接客户端,但是是主动模式,服务器不知道ftp客户端打开的端口,就无法连接,这时客户端就会走命令通道告诉ftp服务器,自己打开的端口,接着服务器就知道了客户端打开的端口就可以通过主动模式连接客户端,传输数据了

传输数据时走被动模式,就是客户端连接ftp服务器,被动模式,服务器打开了随机端口,客户端并不知道,就无法连接,这时ftp服务器就会通过命令通道告诉客户端自己打开的端口,接着客户端就知道了服务器打开的端口,就可以通过被动模式连接ftp服务器,传输数据了

但是客户端和服务器都有防火墙,只允许自己出,自己进,不允许别人进,这时上面传输数据的方式就失效了。对于ftp服务器的搭建的防火墙是硬件防火墙,有连接跟踪功能,可以分析命令通道21端口的数据包。假如客户端通过命令通道21端口,连接到了ftp服务器,如果想要走主动模式,服务器去连接客户端,客户端有防火墙,这时不行的,只能走被动模式,客户端通过命令通道已经知道了ftp服务器要打开的端口,就会连接这个端口,而ftp服务器的防火墙有连接跟踪功能,已经知道了将来客户端要连接这个端口,就会在防火墙上打开这个端口,从而实现被动模式,客户端连接服务器,传输数据。

FTP软件介绍

FTP服务器:

Wu-ftpd,Proftpd,Pureftpd,ServU,IIS

vsftpd:VerySecure FTP Daemon,CentOS默认FTP服务器

高速,稳定,下载速度是WU-FTP的两倍

ftp,redhat.com数据:单机最多可支持15000个并发

客户端软件:

ftp,lftp,lftpget,wget,curl

ftp -A ftpserverport -A主动模式–p 被动模式

lftp–u username ftpserver

lftpusername@ftpserver

lftpgetftp://ftpserver/pub/file

gftp: GUI centos5 最新版2.0.19 (11/30/2008)

filezilla,CuteFtp,FlashFXP,LeapFtp

IE ftp://username:password@ftpserver

 

FTP服务

状态码:

1XX:信息125:数据连接打开

2XX:成功类状态200:命令OK 230:登录成功

3XX:补充类331:用户名OK

4XX:客户端错误425:不能打开数据连接

5XX:服务器错误530:不能登录

用户认证:

匿名用户:ftp,anonymous,对应Linux用户ftp,随便输密码,都能登录

系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow

虚拟用户:特定服务的专用用户,独立的用户/密码文件

nsswitch:networkservice switch名称解析框架

pam:pluggableauthentication module 用户认证

/lib64/security /etc/pam.d/ /etc/pam.conf

 

vsftpd服务

由vsftpd包提供

不再由xinetd管理

用户认证配置文件:/etc/pam.d/vsftpd

服务脚本:/usr/lib/systemd/system/vsftpd.service

/etc/rc.d/init.d/vsftpd

配置文件:/etc/vsftpd/vsftpd.conf

man 5 vsftpd.conf

格式:option=value

注意:=前后不要有空格

匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp(用户ftp的家目录),不能切根

系统用户共享文件位置:用户家目录,能够切根

虚拟用户共享文件位置:为其映射的系统用户的家目录

 

连接ftp服务器时,会议root的身份运行了vsftpd程序,连进去之后,还没输入账户密码,就会开一个子进程,是以nobody的身份运行,当输入账户密码时,就会又开了一个子进程,该子进程是以ftp的身份运行

 

ftp服务的常见配置

命令端口

listen_port=21(默认)

可以认为更改命令端口,但是连接ftp服务器时就要指定端口了

主动模式端口

connect_from_port_20=YES 主动模式端口为20

ftp_data_port=20 指定主动模式的端口,可以认为指定主动模式端口

连接到ftp服务器默认传输文件是以被动模式传输的,想要以主动模式传输,敲passive,关闭被动模式就行了,再敲一遍passive就开启了别动模式

!rm 表示删除本机的文件

del表示删除上传的文件,不过要在ftp配置文件中配置才允许

被动模式端口范围

linux客户端默认使用被动模式

windows 客户端默认使用主动模式

pasv_min_port=6000 0为随机分配

pasv_max_port=6010

使用当地时间

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_uploads=YES(默认NO)

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_enable=YES

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 优先上面项生效

目录访问提示信息

dirmessage_enable=YES (默认)

message_file=.message(默认)信息存放在指定目录下.message

你要访问哪个目录,就在哪个目录下面建一个.message,里面写着目录访问的提示信息,当你访问这个目录时,就会显示.message里的提示信息

如图,我访问upload目录时,就会提示红色的upload dir信息

 

 

使用pam(Pluggable Authentication Modules)完成用户认证

pam_service_name=vsftpd

pam配置文件:/etc/pam.d/vsftpd

如果/etc/pam.d/vsftpd中是deny,/etc/vsftpd/ftpusers默认文件中用户拒绝登录

是否启用控制用户登录的列表文件

userlist_enable=YES 默认有此设置

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服务器

连接限制

max_clients=0 最大并发连接数

max_per_ip=0 每个IP同时发起的最大连接数

vsftpd服务指定用户身份运行

nopriv_user=nobody

传输速率:字节/秒

anon_max_rate=0 匿名用户的最大传输速率

local_max_rate=0 本地用户的最大传输速率

连接时间:秒为单位

connect_timeout=60 主动模式数据连接超时时长

accept_timeout=60 被动模式数据连接超时时长

data_connection_timeout=300 数据连接无数据输超时时长

idle_session_timeout=60 无命令操作超时时长

优先以文本方式传输(默认是以二进制方式传输,文本方式传输会造成数据丢失)

ascii_upload_enable=YES

ascii_download_enable=YES

 

配置ftp服务为非独立服务

配置FTP服务以非独立服务方运行:listen=NO,默认为独立方式

(1)安装xinetd服务

yum install telnet-server 安装telnet服务自动会给你安装xinetd服务,因为telnet服务是依赖xinetd服务的

(2)修改ftp服务的配置文件

listen=NO 加一行,就改为非独立服务

(3)配置非独立服务的子配置文件'

cd /etc/xinetd.d

cp telnet vsftpd

(3)chkconfig --list

我先关了ftp服务,然后再开启xinetd服务,依然打卡了21端口

是xinetd监听21端口,一旦有人来访问,就会自动激活ftp服务

 

实现基于SSL的FTPS

(1)查看是否支持SSL

ldd `which vsftpd` 查看到libssl.so

(2)创建自签名证书

cd /etc/pki/tls/certs/

make vsftpd.pem

mv vsftpd.pem /etc/vsftpd

(3)配置vsftpd服务支持SSL

vim /etc/vsftpd/vsftpd.conf

ssl_enable=YES 启用SSL

allow_anon_ssl=NO 匿名不支持SSL

force_local_logins_ssl=YES 本地用户登录加密

force_local_data_ssl=YES 本地用户数据传输加密

rsa_cert_file=/etc/vsftpd/vsftpd.pem

cat -A /etc/vsftpd/vsftpd.conf可以检查空格

(4)用filezilla等工具测试

 

实现基于文件验证的vsftpd虚拟用户

(1)创建虚拟账号

cd /etc/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

chmod 555 /app/ftpuser

mkdir /app/ftpuser/upload

chown ftpuser /app/ftpuser/upload

(4)创建pam配置文件,让ftp通过数据库文件来验证身份,需要用到pam模块

定义一个pam模块配置文件

vim /etc/pam 后面是db数据库文件的路径

(5)将虚拟账号映射为系统账号,指定pam配置文件,修改ftp配置文件

(6)重启ftp服务,测试,现在就可以用虚拟账号登陆了

(7)虚拟用户建立独立的配置文件

mdkir /etc/vsftpd/ftpusers.d/ 创建配置文件存放的路径

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/ftpusers.d/

cd /etc/vsftpd/ftpusers.d/ 进入此目录

现在想允许ftp1能够上传文件和创建目录和删除修改上传的文件,ftp2登陆的目录为/app/ftpuser1,

ftp3登陆的根目录为/app/ftpuser2

vim ftp1

vim ftp2

vim ftp3

再创建根目录,并在各根目录下创建不同的文件加以区分

mkdir /app/ftpuser1

mkdir /app/ftpuser2

mkdir /app/ftpuser1/f1

mkdir /app/ftpuser2/f2

chown ftpuser /app/ftpuser1/f1

chown ftpuser /app/ftpuser2/f2

chmod 555 /app/ftpuser*

(8)测试

ftp1用户

ftp2用户

ftp3用户和ftp2用户一样

 

实验:实现基于MYSQL验证的vsftpd虚拟用户

环境:两台主机,一台A(IP地址为192.168.10.135):mariadb server 一台B(IP地址为192.168.10.186):ftp server

(1).A机器:安装mariadb

yum install mariadb-server -y

systemctl start mariadb

mysql_secure_installation

 

mysql -uroot -pcentos

create database vsftpd;

use vsftpd

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';

 

(2)B

测试连接一下数据库,看能否连接成功

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

cd pam_mysql-0.7RC1

./configure --with-pam-mods-dir=/lib64/security --with-pam=/usr

make && make install

 

(3)准备两个共享目录/app/ftpdir和/app/ftpdir2,将来ftp1连接ftp服务器,登陆的是/app/ftpdir目录,而ftp2连接ftp服务器,登陆的是/app/ftpdir2目录

useradd -d /app/ftpdir -r -m ftpuser

chmod 555 /app/ftpdir

cd /app/ftpdir

mkdir upload

chown ftpuser upload

 

mkdir /app/ftpdir2

chmod 555 /app/ftpdir2

cd /app/ftpdir2

mkdir upload2

chown ftpuser upload

 

(3)

vim /etc/pam.d/vsftpd.mysql

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

 

(4)修改ftp服务的配置文件

vim /etc/vsftpd/vsftpd.conf

pam_service_name=vsftpd.mysql 修改

加下面行

guest_enable=yes

guest_username=ftpuser

user_config_dir=/etc/vsftpd/conf.d/

 

mkdir /etc/vsftpd/conf.d/

vim /etc/vsftpd/conf.d/ftp1

anon_upload_enable=yes 将来ftp1登陆了可以上传文件

 

vim /etc/vsftpd/conf.d/ftp2

local_root=/app/ftpdir2 将来ftp2登陆了,共享目录是/app/ftpdir2

 

(5)测试,用另外一台机器来连接ftp服务器(192.168.10.186)

ftp1登录,能够上传文件

ftp2登录,共享目录为/app/ftpdir2

 

ftp工具

Axel:网络客户端工具

下载安装axel

ftp://172.16.0.1/pub/Sources/6.x86_64/axel/axel-2.4-1.el6.rf.x86_64.rpm

axel -n 3 -o /root

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服务

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服务介绍

软件包:nfs-utils

Kernel支持:nfs.ko

端口:2049(nfsd), 其它端口由portmap(111)分配

配置文件:/etc/exports,/etc/exports.d/*.exports

CentOS7不支持同一目录同时用nfs和samba共享,因为使用锁机制不同

相关软件包:rpcbind(必须),tcp_wrappers

CentOS6开始portmap进程由rpcbind代替

NFS服务主要进程:(进程多就意味着打开的端口多)

rpc.nfsd最主要的NFS进程,管理客户端是否可登录

rpc.mountd挂载和卸载NFS文件系统,包括权限管理

rpc.lockd非必要,管理文件锁,避免同时写出错

rpc.statd非必要,检查文件一致性,可修复文件

日志:/var/lib/nfs/

每次启动nfs服务,打开的端口都是变化的,这样别人怎样才可以连接你呢?每次开启nfs服务,会把打开的端口号注册到一个特殊的服务中,这个服务叫fpcbind,这个服务就起着监控nfs服务端口的作用,在centos6上,如果把这个服务停了,那么nfs服务起不来,在centos7上,把这个服务停了,nfs服务还会起来,这是因为开启nfs服务,会自动激活rpcbind服务,而centos6就不会激活。

 

配置防火墙

配置防火墙,开放NFS服务

•配置NFS使用固定端口(不常用)

•vim /etc/sysconfig/nfs

RQUOTAD_PORT=875

LOCKD_TCPPORT=32803

LOCKD_UDPPORT=32769

MOUNTD_PORT=892

STATD_PORT=662

STATD_OUTGOING_PORT=2020

•防火墙除开放上述端口,还需开放TCP和UDP的111和2049共4个端口

 

NFS配置文件

导出的文件系统的格式:

/dir主机1(opt1,opt2) 主机2(opt1,opt2)...

#开始为注释

主机格式:

•单个主机:ipv4,ipv6,FQDN

•IP networks:两种掩码格式均支持

172.18.0.0/255.255.0.0

172.18.0.0/16

•wildcards:主机名通配,例如*.magedu.com,IP不可以

•netgroups:NIS域的主机组,@group_name

•anonymous:表示使用*通配所有客户端

每个条目指定目录导出到的哪些主机,及相关的权限和选项

•默认选项:(ro,sync,root_squash,no_all_squash)

•ro,rw 只读和读写

•async异步,数据变化后不立即写磁盘,性能高

•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

rpcinfo -p hostname

rpcinfo –s hostname 查看RPC注册程序

exportfs

–v 查看本机所有NFS共享

–r 重读配置文件,并共享目录

–a 输出本机所有共享

–au 停止本机所有共享

 

showmount -e hostname

查看可以挂载的目录

 

mount.nfs 挂载工具

NFSv4支持通过挂载NFS服务器的共享"根",从而浏览NFS服务器上的共享目录列表

mount nfsserver:/ /mnt/nfs

 

客户端NFS挂载

基于安全考虑,建议使用nosuid,nodev,noexec挂载选项

创建设备

NFS相关的挂载选项:

fg(默认)前台挂载,bg后台挂载

hard(默认)持续请求,soft 非持续请求

intr和hard配合,请求可中断

rsize和wsize一次读和写数据最大字节数,rsize=32768

_netdev无网络不挂载

示例:

mount -o rw,nosuid,fg,hard,intr172.16.0.1:/testdir/mnt/nfs/

开机挂载:/etc/fstab

172.16.0.1:/public mnt/nfs nfs defaults 0 0

 

自动挂载

可使用autofs按需要挂载NFS共享,在空闲时自动卸载

由autofs包提供

系统管理器指定由/etc/auto.master自动挂载器守护进程控制的挂载点

自动挂载监视器访问这些目录并按要求挂载文件系统

文件系统在失活的指定间隔5分钟后会自动卸载

为所有导出到网络中的NFS启用特殊匹配-host 至"browse"

参看帮助:man 5 autofs

支持含通配符的目录名

* server:/export/&

 

间接匹配

用的是相对路径,会影响本地目录结构

假如说将共享目录/app/test挂载到/app/nfsdir上,那么dirname就是/app,basename就是nfsdir

vim /etc/auto.master

dirname /etc/子配置文件

vim /etc/子配置文件

basename -fstype=nfs 192.168.10.187:/app/test

如果共享目录的基名和本地挂载的目录基名相同则可以表示

* -fstype=nfs 192.168.10.187:/app/&

假如说将共享目录挂到本地的/home目录下,会影响家目录的结构,导致其他用户登录没有了家目录

直接匹配

直接匹配包括绝对路径名称

不会影响本地目录结构

假如说将共享目录/app/test挂载到/app/nfsdir上

vim /etc/auto.master

/- /etc/子配置文件

vim /etc/子配置文件

/app/nfsdir 192.168.10.187:/app/nfsdir

 

实现nfs服务共享

(1)编辑nfs服务的配置文件,设置共享哪个目录和谁可以访问共享目录

vim /etc/ports

/app/nfsdir1 * (ro)共享/app/nfsdir1目录,允许所有人访问,共享目录只读

/app/nfsdir2 * (rw)共享/app/nfsdir2目录,允许所有人访问,共享目录可读可写

创建共享目录

mkdir /app/nfsdir1

mkdir /app/nfsdir2

(2)重读nfs配置文件

systemctl reload nfs-server

exprtfs -v 查看共享的目录

exportfs -r 重读nfs服务配置文件

exports -au 关闭共享目录

exportfs -a 开启共享目录

(3)在客户端挂载共享目录

查看可以挂载的共享目录

挂载共享目录

mount 192.168.10.200:/app/nfsdir1 /mnt/nfs1

mount 192.168.10.200:/app/nfsdir2 /mnt/nfs2

也可以写到/etc/fstab中,开机自动挂载

生效mount -a

(4)在前面我们设置了共享目录/app/nfsdir1是只读的,而共享目录/app/nfsdir2是可读可写的,所能在挂载到/app/nfsdir2上的目录里创建文件,挂载到/app/nfsdir1上的目录里不能创建,下面来测试:

cd /mnt/nfs1然后创建文件,报错说是只读文件系统

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身份来创建权限

exportfs -v可以看到root压榨

改成root不压榨,就要修改nfs服务的配置文件,默认是压榨的

再用exportfs -v来查看一下

在客户端创建一个文件,查看其所属人和所属组均为root

 

如果既有root不压榨,又有所有压榨,此时root不压榨将失效,在共享目录里面创建的文件还是以nfsnobody的身份创建的

 

对于普通用户是不压榨身份的,例如,客户端在nfs共享目录创建一个文件,在nfs服务器是以和客户端用户的uid,gid相同的用户显示其所属人,所属组,如果nfs服务器没有该用户的话,就会显示uid和gid。

 

通过设置IP地址来控制访问

 

实验:实现NFS伪根

(1)配置nfs服务器

mkdir /data/123

mount -b /data/123 /app/nfsdir2 将/data/123挂载到/app/nfsdir2上

可以考虑将之写到/etc/fstab中,实现开机自动挂载

vim /etc/fstab

/data/123 /app/nfsdir3 none bind 0 0

 

vim /etc/exports

/app *(r0,fsid=0)

/app/nfsdir1 *(rw)

/app/nfsdir2 *(rw)(将来客户端将该共享目录挂载到本地目录上,实际上挂载的是/data/123目录)

 

exportfs -v 查看共享的目录

(2)配置nfs客户端

showmount -e 192.168.10.187

实现自动挂载

mkdir /app/nfsdir1

mkdir /app/nfsdir2

vim /etc/auto.master (使用直接匹配)

vim /etc/auto.txt

然后重启autofs服务

cd /app/nfsdir1

cd /app/nfsdir2

就实现了自动挂载

 

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相通

SAMBA的功能:

•共享文件和打印,实现在线编辑

•实现登录SAMBA用户的身份认证

•可以进行NetBIOS名称解析

•外围设备共享

计算机网络管理模式:

•工作组WORKGROUP:计算机对等关系,帐号信息各自管理

•域DOMAIN:C/S结构,帐号信息集中管理,DC,AD

 

相关包:

Samba 提供smb服务

Samba-client 客户端软件

samba-common 通用软件

cifs-utilssmb客户端工具

samba-winbind和AD相关

相关服务进程:

smbd提供smb(cifs)服务TCP:139,445

nmbdNetBIOS名称解析UDP:137,138

主配置文件:/etc/samba/smb.conf

帮助参看:man smb.conf

语法检查:testparm[-v] [/etc/samba/smb.conf]

客户端工具:smbclient,mount.cifs

 

SAMBA服务器配置

smb.conf继承了.ini文件的格式,用[ ] 分成不同的部分

全局设置:

[global] 服务器通用或全局设置的部分

特定共享设置:

[homes] 用户的家目录共享

[printers] 定义打印机资源和服务

[sharename] 自定义的共享目录配置

其中:#和;开头的语句为注释,大小写不敏感

宏定义:

%m 客户端主机的NetBIOS名 %M 客户端主机的FQDN

%H 当前用户家目录路径 %U 当前用户用户名

%g 当前用户所属组 %h samba服务器的主机名

%L samba服务器的NetBIOS名 %I 客户端主机的IP

%T 当前日期和时间 %S 可登录的用户名

 

samba服务有两个服务,一个smb(samba的核心服务),一个是nmb(用来实现名字解析的,将NetBIOS名解析成IP地址)

systemctl start smb 开启两个端口,都是tcp协议

systemctl start nmb 也开启两个端口,都是udp协议

 

SAMBA服务器全局配置

workgroup 指定工作组名称

server string 主机注释信息

netbiosname 指定NetBIOS名

interfaces 指定服务侦听接口和IP

 

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

主机名: desktop.example.com

以example.com后缀的主机名: .example.com

示例:

hosts allow = 172.25.

hosts allow = 172.25. .example.com

 

hosts deny 拒绝指定主机访问

 

configfile=/etc/samba/conf.d/ %U 用户独立的配置文件

Log file=/var/log/samba/log. %m不同客户机采用不同日志

max log size=50 日志文件达到50K,将轮循rotate,单位KB

Security三种认证方式:

share:匿名(CentOS7不再支持)

user:samba用户(采有linux用户,samba的独立口令)

domain:使用DC(DOMAINCONTROLLER)认证

passdbbackend = tdbsam密码数据库格式

实现samba用户:

包:samba-common-tools

工具:smbpasswdpdbedit

samba用户须是Linux用户,建议使用/sbin/nologin

管理SAMBA用户

添加samba用户

smbpasswd -a <user>

pdbedit -a -u <user>

 

修改用户密码

smbpasswd <user>

 

删除用户和密码:

smbpasswd –x <user>

pdbedit –x –u <user>

 

查看samba用户列表:

/var/lib/samba/private/passdb.tdb

pdbedit –L –v 查看samba用户的详细信息

 

查看samba服务器状态

smbstatus

 

禁用samba账号

smbpasswd -d <user>

 

启用samba账号

smbpasswd -e <user>

 

在windos登陆linux系统的samba共享目录,是需要输入samba服务自身的账号和密码,和linux系统用户无关,而且默认登陆的共享目录是samba用户的家目录

 

怎样创建一个samba用户

1.useradd -s /sbin/nologin smb1

2.smbpasswd -a smb1

这样就将linix系统的用户添加成samba用户

 

在windos上访问samba共享目录

(1)现在linux系统上建立好samba用户

1.useradd -s /sbin/nologin smb1

2.smbpasswd -a smb1

(2)在windos上访问

默认共享目录是该用户的家目录

(3)现在想访问别的共享目录,但是重新登进去,直接不用输账户密码,就登陆了共享目录,这个共享目录还是上一次登陆的smb1账户的家目录,这是因为windos已经记住了上一次登陆的账户和密码,默认下一次还登陆该账号,所以此时应该在windos清除上一次登陆的账号和密码,才能登陆新的共享目录

这样就可以访问别的共享目录了

 

查看共享目录

smbclient -L ip地址

访问共享目录

smbclient //192.168.10.187/smb1 -U smb1%centos

samba服务常用的配置

注意:要备份一下samba服务的配置文件

1.通过NetBIOS名来访问共享目录

2.通过IP地址来控制访问

hosts allow = ip地址(可以上网段)

hosts deny = ip地址

如图:只允许本机和127.网段访问,和192.168.10.135访问

 

3.记录日志

%I是客户端的主机ip,这是samba服务自带的变量

log file = 日志文件路径

log level = number 2表示记录的日志更加详细

现在我在IP地址为192.168.10.135的主机来访问共享目录

然后查看日志

 

4.配置共享目录

每个共享目录应该有独立的[ ]部分

[共享名称] 远程网络看到的共享名称

comment 注释信息

path 所共享的目录路径

public 能否被guest访问的共享,默认no,和guest ok 类似 public = yes 允许匿名登录

browsable是否允许所有用户浏览此共享,默认为yes,no为隐藏 browsable = no 表示允许用户查看到共享目录

writable=yes 可以被所有用户读写,默认为no,访问的共享目录默认是不可写的

read only=no 和writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读

注意:以上两种方式都可以控制账户对共享目录是否可写,但是如果共享目录自身的其他人上没有写权限,那么用户也是不能往共享目录里面写东西的

write list 三种形式:用户,@组名,+组名,用,分隔

如writable=no,列表中用户或组可读写,不在列表中用户只读

valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔

valid users后面也可以跟组,+组名或@组名表示组,不加+或者@,就会把其当做是用户

如图:

共享目录为/app/nfsdir1

write list = smb1 允许smb1用户可写

valid users = smb1 smb2允许smb1和smb2访问

browsable = smb3 不允许用户smb3查看到共享目录

 

我将用户smb1和smb2添加到admin组中,也可以这样写如图:

 

SMB客户端访问

UNC路径: Universal Naming Convention,通用命名规范(在windos里面访问共享目录)

格式:\\sambaserver\sharename

 

终端下使用smbclient登录服务器

smbclient -L instructor.example.com 查看共享目录

smbclient -L instructor.example.com -U wang

>cddirectory

>getfile1

> put file2

smbclient //instructor.example.com/shared -U wang%centos

可以使用-U选项来指定用户%密码,或通过设置和导出USER和PASSWD环境变量来指定

例如"smbclient //192.168.10.187/publicnfshare1 -U smb1%centos

 

挂载CIFS文件系统

手动挂载

mount -t cifs -o user=wang,password=magedu //server//shared /mnt/smb(可以省略-t cifs,默认是cifs)

开机自动挂载

•cat /etc/fstab

//server/homes /mnt cifs user=wang,passward=magedu 0 0

写到/etc/fstab里面,开机自动挂载,但是这样写不安全,因为/etc/fstab这个文件,其他普通用户也有权限查看,就能看见samba共享目录的账号和密码,可以用文件代替用户名和密码的输入,这样其他普通用户就看不了共享目录的账号和密码

//server/homes /mnt cifs credentials=/etc/smb.txt 0 0

•cat /etc/smb.txt

username=wang

password=password

•chmod600 /etc/smb.txt 给这个文件也设置好权限,使其他人不能查看

 

多用户挂载

SAMBA共享默认只支持同时用一个用户挂载SMB共享

CentOS7中可启用多用户挂载功能

客户端挂载samba共享目录后,在客户端登录的不同用户访问同一个samba的挂载点,可获得不同权限

实验:实现多用户挂载

实验环境:两台机器:A:192.168.10.187 samba服务器 B:192.168.10.200 客户端

(1)准备samba账号(A机器samba服务器端)

useradd -s /sbin/nologin smb1

useradd -s /sbin/nologin smb2

useradd -s /sbin/nologin smb3

groupadd admin

gpasswd -a smb1 admin

smbpasswd -a smb1

smbpasswd -a smb2

smbpasswd -a smb3

(2)配置共享目录(A机器smba服务器端)

mkdir /app/nfsdir1

chmod 777 /app/nfsdir1

 

vim /etc/samba/smb.conf

共享目录为/app/nfsdir1

允许smb1用户可写

允许访问共享目录的用户有admin组中的用户和用户smb2和用户smb3

 

(3)启动多用户自动挂载共享目录(B机器客户端)

vim /etc/fstab

vim /etc/smbuser.txt

chmod 600 /etc/smbuser.txt

mount -a 自动挂载

 

(4)实现多用户访问(B机器客户端)

useradd smb1

useradd smb2

 

用root访问

cd /mnt/smbdir

touch 456 权限拒绝

 

用smb1去访问

su - smb1

cifscreds add –u smb1 192.168.10.187

cd /mnt/smbdir

touch 222 创建成功

 

用smb2去访问

su - smb2

cifscreds add –u smb2 192.168.10.187

cd /mnt/smbdir

touch 333 权限拒绝

 

实验:实现图形化管理

一、在CentOS6(第二张光盘)上安装包

yum install samba-swat

二、配置swat服务

vim /etc/xinetd.d/swat

disable = no

port = 901

only_from= 127.0.0.1 此行改成172.16.0.0/16

service xinetdrestart

三、浏览器访问管理

http://127.0.0.1:901 以root用户登录

注意:commit changes后会自动重新加载配置,且自动将/etc/samba/smb.conf中原有的注释全删除

posted @ 2017-12-15 19:11  大天使彦  阅读(3136)  评论(0编辑  收藏  举报