10月14日 网络文件共享服务 2 NFS服务和SAMBA服务

1、NFS服务介绍

  • NFS:Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现,rpc就是客户端在执行某个程序的时候,执行中途会调用远程服务器上的一个程序,然后再返回原程序继续执行的过程。
  • NFS优势:节省本地存储空间,将常用的数据如:home目录,存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
  • NFS是一个文件系统,远程主机可以挂载nfs服务器上共享的这个nfs文件系统的文件
  • 软件包:nfs-utils
    Kernel支持:nfs.ko
  • 端口:2049(nfsd), 其它端口由rpcbind(111)分配
  • 配置文件:/etc/exports,/etc/exports.d/*.exports
    CentOS7不支持同一目录同时用nfs和samba共享,因为使用锁机制不同
  • 相关软件包:rpcbind(必须),tcp_wrappers
    CentOS6开始portmap进程由rpcbind代替,rpcbind服务用于管理nfs服务的端口,它可以给nfs各服务分配端口并记录下来,客户端不是直接去访问nfs,因为nfs服务由很多服务组成,并且各个服务的端口不是固定的,所以客户端首先去访问rpcbind服务的111端口,通过rpcbind服务找到nfs服务的各个端口,所以安装nfs服务的同时要安装rpcbind服务才可以,centos6上要把rpcbind服务也要设置成开机启动,不然启动了nfs服务也没用,客户端找不到端口,centos7中可以不设置成开机启动,因为centos7中有独特的功能,在开启nfs服务的同时会把依赖的服务rpcbind服务同时开启。
  • NFS服务主要进程:
    NFS服务由很多进程组成,在开启主进程的时候会把相应的进程也开启
    rpc.nfsd最主要的NFS进程,管理客户端是否可登录
    rpc.mountd挂载和卸载NFS文件系统,包括权限管理
    rpc.lockd非必要,管理文件锁,避免同时写出错
    rpc.statd非必要,检查文件一致性,可修复文件
  • 日志:/var/lib/nfs/
    -开启nfs服务
centos6中启动服务
service rpcbind start
chkconfig rpcbind on
service nfs start  
chkconfig nfs on
centos7中启动服务
systemctl start nfs-server
systemctl enable nfs-server
rpcinfo -p   ---查看nfs服务打开的端口号,除了nfs的主服务端口为2049外,其他端口都是由rpcbind服务随机分配
[root@centos7 app]#rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper  ---虽然这里的服务写的是portmapper,但实际上是由rpcbind服务提供的,服务名没有改过来,还是保留古老的名字,你可以把它当成是rpcbind
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  43647  status
    100005    1   udp  20048  mountd
    100024    1   tcp  43426  status
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  50902  nlockmgr
    100021    3   udp  50902  nlockmgr
    100021    4   udp  50902  nlockmgr
    100021    1   tcp  38930  nlockmgr
    100021    3   tcp  38930  nlockmgr
    100021    4   tcp  38930  nlockmgr

2、配置防火墙

配置防火墙,开放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个端口,111是rpcbind服务的端口,2049是nfs主服务的端口

3、NFS配置文件

vim /etc/exports,/etc/exports.d/*.exports   ---注意如果使用副配置文件要以.exports结尾
/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
*:表示所有远程客户端都可以访问这个共享目录
选项:
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async异步,数据变化后不立即写磁盘,性能高
sync(1.0.0后为默认)同步,数据在请求时立即写入共享
no_all_squash (默认)保留共享文件的UID和GID
all_squash 所有远程用户(包括root)都变成nfsnobody,有了这一项,no_root_squash 就失效了
root_squash (默认)远程root映射为nfsnobody,UID为65534,早期版本是4294967294 (nfsnobody)
no_root_squash 远程root映射成root用户,也就是不压榨root,本机的root在远程共享的文件夹也是管理员。
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用,可以设置成压榨为apache用户去访问共享资源,这样将来可以用于web服务用的共享nfs
NFS配置示例
在/etc/exports文件中定义共享的目录
/myshare server.example.com
/myshare *.example.com
/myshare server?.example.com
/myshare server[0-20].example.com
/myshare 172.25.11.10
/myshare 172.25.0.0/16
/myshare 2000:472:18:b51:c32:a21
/myshare 2000:472:18:b51::/64
/myshare *.example.com 172.25.0.0/16
/myshare desktop.example.com(ro)
/myshare desktop.example.com(ro) server[0-20].example.com(rw)
/myshare diskless.example.com(rw,no_root_squash

这个文件中规定了共享的目录,以及哪些远程主机可以连接这个共享目录,并指定权限等。
nfs服务,当客户端以root身份去访问nfs共享时,默认是压榨(squash)为nfsnobody的身份去访问共享资源,也就是在服务器端会看到客户端上传的文件的所有者和所属组都是nfsnobody,权限降低了,但以普通用户身份去访问nfs共享时,普通用户在服务器端被映射成为id相同的用户,如果服务器端没有和客户端id相同的用户,则客户端上传的文件不显示属主和属组,只显示id号。

4、NFS工具

rpcinfo
rpcinfo -p 172.18.21.107 ---查看nfs服务的端口号,后面加上IP地址可以查看远程主机的nfs服务的端口号,不加也可以指的是查询本机的
rpcinfo –s hostname 查看RPC注册程序
exportfs,服务器端工具
–v 查看本机所有NFS共享
–r 重读配置文件,让配置文件生效,不用重启服务
–a 输出本机所有共享,也就是下面的选项停止后-a选项可以恢复共享
–au 停止本机所有共享
showmount -e 172.18.21.107 ---客户端工具,可以查看远程主机有哪些目录被共享
mount.nfs 挂载工具NFSv4支持通过挂载NFS服务器的共享“根”,从而浏览NFS服务器上的共享目录列表
mount nfsserver:/ /mnt/nfs

5、客户端NFS挂载

基于安全考虑,建议使用nosuid,nodev,noexec挂载选项
NFS相关的挂载选项:
fg(默认)前台挂载,bg后台挂载
hard(默认)持续请求,soft 非持续请求
intr和hard配合,请求可中断
rsize和wsize一次读和写数据最大字节数,rsize=32768
_netdev无网络不挂载
示例:

mount -o rw,nosuid,fg,hard,intr 172.18.0.1:/testdir /mnt/nfs/
开机自动挂载
vim /etc/fstab
172.16.0.1:/public /mnt/nfs nfs defaults 0 0
mount -a  ---修改这个文件后执行立即自动挂载
指定nfs版本挂载
mount -o vers=3 172.18.0.1:/testdir /mnt/nfs/

6、自动挂载

可使用autofs按需要挂载NFS共享,在空闲时自动卸载
由autofs包提供
系统管理器指定由/etc/auto.master自动挂载器守护进程控制的挂载点,自动挂载监视器访问这些目录并按要求挂载文件系统,文件系统在失活的指定间隔5分钟后会自动卸载,比如神奇的目录/misc/cd
参看帮助:man 5 autofs
支持含通配符的目录名

示例
* server:/export/&   ---指将后面远程主机的目录自动挂载到前面的目录中,远程主机共享目录的basename和本机要挂载的目录的basename相同
cat /etc/auto.master 
/net    -hosts    ---因为有这一项设置所以在cd /net时会发现自动进入远程主机共享的目录,不用挂载。
[root@centos6 app]#showmount -e 172.18.21.107
Export list for 172.18.21.107:
/app/homedir/zhanghome *
[root@centos6 app]#cd /net
[root@centos6 net]#ls
172.18.21.107
[root@centos6 net]#cd 172.18.21.107/
[root@centos6 172.18.21.107]#ls
app
[root@centos6 172.18.21.107]#cd app/
[root@centos6 app]#ls
homedir
发现不用挂载直接就可以进入远程主机共享的目录,也就是你在客户端输入 cd /net/172.18.21.107即可

7、实现zhang的家目录nfs共享并自动挂载

目的是实现zhang用户登录时进入的家目录不是在本机的磁盘,而是通过nfs共享的一个目录,步骤如下

在nfs服务器上的操作
systemctl start nfs-server
rpcinfo -p    ---查看端口是否打开
mkdir /app/homedir/zhanghome -pv   ---创建一个目录做为共享目录给远程主机的zhang用户做为家目录使用
vim /etc/exports   ---修改配置文件,并将这个目录共享出来
/app/homedir/zhanghome   *(rw)
exportfs -r   ---让配置文件生效
cd /app/homedir/zhanghome/
touch f1
cp -r /etc/skel/.[^.]* .  ---因为这个目录要做为家目录使用,所以要将家目录模板文件夹中的内容拷贝过来,注意第一个是.第二个是非.,因为如果第二个是点的话可能把上一级目录也拷贝过来了
setfacl -R -m u:zhang:rwx /app/homedir/zhanghome/  ---授权zhang用户对这个目录具有绝对控制权限,因为授权的是本机的zhang用户,并没有授权远程主机的zhang用户,nfs服务是通过id判断身份的,所以要将本机的zhang用户和远程主机的zhang用户的id和gid修改为相同的,这样授权本机的zhang用户就相当于授权远程的zhang用户了
id zhang  ---查看一下本机的zhang用户的uid和gid为1000
在远程主机客户端的操作
showmount -e 172.18.21.107  ---查看一下远程nfs服务共享的目录
usermod -u 1000 zhang
groupmod -g 1000 zhang
id zhang   ---修改本机的zhang用户的uid和gid为1000,这样本机的zhang用户才有权限
mount 172.18.21.107:/app/homedir/zhanghome /home/zhang
su - zhang   --切换到zhang用户
pwd    ---发现有f1文件,说明共享成功。
实现自动挂载
在远程客户端的操作
rpm -q autofs  ---查看是否安装此软件包
vim /etc/auto.master 
/- /etc/test  ---表示自动挂载的目录由后面的文件决定
vim /etc/test   --创建一个配置文件,指明将后面目录自动挂载到前面的目录下
/home/zhang -fstype=nfs,rw,nosuid,nodev 172.18.21.107:/app/homedir/zhanghome
service autofs restart 
[root@centos6 home]#cd /home/zhang  ---就可以像进入/misc/cd 一样,只要访问这个目录就会挂载
[root@centos6 zhang]#df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/sda2             50264772 4891932  42812840  11% /
tmpfs                   502056      76    501980   1% /dev/shm
/dev/sda3             40185208   49060  38088148   1% /app
/dev/sda1               991512   34904    905408   4% /boot
/dev/sr0               6049912 6049912         0 100% /media/CDROM
172.18.21.107:/app/homedir/zhanghome
                      52403200   33024  52370176   1% /home/zhang                                           

8、实现nfs伪根

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

在nfs服务器上的操作
[root@centos7 app]#mkdir /app/nfsdir1
[root@centos7 app]#mkdir /app/nfsdir2
[root@centos7 app]#mkdir /nfsroot/dir1
[root@centos7 app]#mkdir /nfsroot/dir2
[root@centos7 app]#mount -B /app/nfsdir1 /nfsroot/dir1
[root@centos7 app]#mount -B /app/nfsdir2 /nfsroot/dir2
vim /etc/fstab
/app/nfsdir1 /nfsroot/dir1  none bind 0 0
/app/nfsdir2 /nfsroot/dir2   none bind 0 0
[root@centos7 app]#vim /etc/exports.d/root.exports
/nfsroot *(rw,fsid=0,crossmnt)
/nfsroot/dir1 *(rw)
/nfsroot/dir2 *(ro)
[root@centos7 app]#exportfs -r
[root@centos7 app]#exportfs -v
在远程客户端的操作
[root@centos6 172.18.21.107]#showmount -e 172.18.21.107
Export list for 172.18.21.107:
/nfsroot/dir2          *
/nfsroot/dir1          *
/nfsroot               *
/app/homedir/zhanghome *
[root@centos6 172.18.21.107]#mount 172.18.21.107:/ /mnt   ---在客户端挂载的时候只需要挂载根就可以看到远程服务器上的共享目录
[root@centos6 dir1]#cd /mnt
[root@centos6 mnt]#ls
dir1  dir2

实现伪根的作用是可以把nfs服务器上所有共享的目录一次性的挂载到远程客户端的一个目录下,不必每个目录单独挂载,只需要挂载根即可。

9、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)

10、SAMBA服务简介

  • SMB:Server Message Block服务器消息块,IBM发布,最早是DOS网络文件共享协议
  • Cifs:common internet file system,微软基于SMB发布
  • SAMBA:1991年Andrew Tridgell,实现windows和UNIX相通,也就是windows上的共享可以用linux登录连接,linux上的共享可以用windows登录连接。
  • SAMBA的功能:
    共享文件和打印,实现在线编辑
    实现登录SAMBA用户的身份认证
    可以进行NetBIOS名称解析,NetBIOS名是windows的计算机名,比如你在windows运行下输入\jack,需要进行解析成ip地址后才能进入此共享,也可以额直接输入ip地址\172.0.0.1\c
    外围设备共享
  • 计算机网络管理模式:
    工作组WORKGROUP:计算机对等关系,帐号信息各自管理
    域DOMAIN:C/S结构,帐号信息集中管理,DC,AD
  • 相关包:
    Samba 提供smb服务
    Samba-client 客户端软件
    samba-common 通用软件
    cifs-utils smb客户端工具
    samba-winbind和AD相关
  • 相关服务进程:
    smbd:提供smb(cifs)服务TCP:139,445
    nmbd:提供NetBIOS名称解析UDP:137,138,可以将windows的计算机名解析成ip地址,如果不用名字,用ip访问,可以不启动这个服务
    主配置文件:/etc/samba/smb.conf ---来自于samba-common包
    帮助参看:man smb.conf
    语法检查:testparm[-v] [/etc/samba/smb.conf]
    客户端工具:smbclient,mount.cifs
    UNC(通用命名规范)路径:在windows的运行处输入\127.0.0.1\test
    URL路径:http://172.18.21.107/test

11、SAMBA服务器配置

vim /etc/samba/smb.conf
smb.conf继承了.ini文件的格式,用[ ] 分成不同的部分
全局设置:
[global] 服务器通用或全局设置的部分
特定共享设置:
[homes] 用户的家目录共享
[printers] 定义打印机资源和服务
[sharename] 自定义的共享目录配置
其中:#和;开头的语句为注释,大小写不敏感
宏定义:
%m 客户端主机的NetBIOS名 %M 客户端主机的FQDN
%H 当前用户家目录路径 %U 当前用户用户名
%g 当前用户所属组 %h samba服务器的主机名
%L samba服务器的NetBIOS名 %I 客户端主机的IP
%T 当前日期和时间 %S 可登录的用户名
workgroup 指定工作组名称
server string 主机注释信息
netbiosname 指定NetBIOS名
nterfaces 指定服务侦听接口和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 拒绝指定主机访问
config file = /etc/samba/conf.d/%U 设置成每个用户有独立的配置文件
log file = /var/log/samba/log.%m不同客户机采用不同日志
log level = 2 设置日志的详细程度,默认是0
max log size = 50 日志文件达到50K,将轮循rotate,单位KB
security三种认证方式:
share:匿名(CentOS7不再支持)
user:samba用户(采有linux用户,samba的独立口令)
domain:使用DC(DOMAINCONTROLLER)认证
passdb backend = tdbsam密码数据库格式

12、将windows的共享挂载到linux中

在windows中操作
创建一个共享目录如下图

QQ截图20171015213303.png

在windows的命令行输入以下命令可以看到共享的目录


QQ截图20171015213715.png

在linux中的操作

systemctl start smb
smbclient -L 172.18.254.200 -U zhangdazhi%123456---此工具为客户端工具,可以查看windows共享和linuxsamba共享,其中zhangdazhi为windows开机的用户名,123456为开机密码,172.18.254.200为windows的ip地址
mkdir /mnt/winshare
mount -o username=zhangdazhi,password=123456 //172.18.254.200/testzhang /mnt/winshare   ---挂载windows目录到linux一个目录下

13、实现samba用户

包:samba-common-tools ----在安装samba包的时候会因依赖关系随着一起安装
工具:smbpasswd pdbedit
samba用户须是Linux用户,建议使用/sbin/nologin

添加samba用户
smbpasswd -a <sysuser>  
pdbedit -a -u <sysuser>   ---这两个命令都可以将系统用户添加为samba用户,后面的<sysuser>  为系统用户
修改samba用户密码
smbpasswd <smbuser>   
删除用户和密码:
smbpasswd –x <smbuser>
pdbedit –x –u <smbuser>  --以上两个命令都可以
查看samba用户列表:
/var/lib/samba/private/passdb.tdb
pdbedit –L –v     ---用-L就可以,加上-v显示的详细一些,是小写的v
查看samba服务器状态
smbstatus

示例:创建一个samba用户,用windows和linux登录

在samba服务器端操作
[root@centos7 samba]#systemctl start smb
[root@centos7 samba]#useradd -s /sbin/nologin smb1---创建一个系统账号
[root@centos7 samba]#smbpasswd -a smb1---添加这个系统账号为samba用户,并设置密码
[root@centos7 samba]#pdbedit -L
No builtin backend found, trying to load plugin
Module 'tdbsam' loaded
smb1:1004:   ---可以看到这个用户
[root@centos7 samba]#cd /var/lib/samba/private/
[root@centos7 private]#ls
msg.sock  passdb.tdb  secrets.tdb
[root@centos7 private]#file passdb.tdb   ---这个用户名和密码被保存到这个数据库文件中,因为是二进制的,所以看不了
passdb.tdb: TDB database version 6, little-endian hash size 131 bytes
在另外一台远程主机客户端的操作
[root@centos6 ~]#smbclient -L 172.18.21.107 -U smb1%1   ---可以查看一下远程samba服务器器又哪些共享目录,smb1为samba的用户名,1为密码
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (Samba 4.4.4)
    smb1            Disk      Home Directories    ---发现smb1目录被共享了
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

    Server               Comment
    ---------            -------
    CENTOS7              Samba 4.4.4

    Workgroup            Master
    ---------            -------
    SAMBA                CENTOS7
    WORKGROUP            HEBURN-PC
[root@centos6 ~]#smbclient //172.18.21.107/smb1 -U smb1%1  ---可以登录到这个远程的samba共享,发现和登录到ftp类似,连上传和下载的命令都一样
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]
smb: \> pwd
Current directory is \\172.18.21.107\smb1\
smb: \> ls
  .                                   D        0  Sun Oct 15 22:08:43 2017
  ..                                  D        0  Sun Oct 15 21:53:58 2017
  .mozilla                           DH        0  Fri Jul 14 11:16:33 2017
  .bash_logout                        H       18  Wed Aug  3 00:00:07 2016
  .bash_profile                       H      193  Wed Aug  3 00:00:07 2016
  .bashrc                             H      231  Wed Aug  3 00:00:07 2016

        51175 blocks of size 1048576. 35719 blocks available
smb: \> put mbr   ---上传一个文件,也可以输入?,查看支持的命令
putting file mbr as \mbr (125.0 kb/s) (average 125.0 kb/s)
smb: \> ls
  .                                   D        0  Sun Oct 15 22:08:58 2017
  ..                                  D        0  Sun Oct 15 21:53:58 2017
  .mozilla                           DH        0  Fri Jul 14 11:16:33 2017
  .bash_logout                        H       18  Wed Aug  3 00:00:07 2016
  .bash_profile                       H      193  Wed Aug  3 00:00:07 2016
  .bashrc                             H      231  Wed Aug  3 00:00:07 2016
  mbr                                 A      512  Sun Oct 15 22:08:58 2017

        51175 blocks of size 1048576. 35719 blocks available
smb: \> quit

总结:ftp不属于文件系统,nfs和samba服务都会提供文件系统,nfs服务为nfs文件系统,samba服务为cifs文件系统,都可以挂载,使用起来比较方便,ftp不可以挂载,samba服务默认是把家目录共享的,创建一个samba用户后登陆上去,在客户端用smbclient命令会看到和用户名同名的家目录共享出来了。

14、配置目录共享

每个共享目录应该有独立的[ ]部分
[共享名称] 远程网络看到的共享名称,不是文件夹名称。
comment 注释信息
path 所共享的目录路径
public 匿名用户能否访问共享,默认no
browsable是否允许所有用户浏览此共享,默认为yes,no为隐藏,改为no后可以设置隐藏共享,客户端用smbclient命令时看不到的。
writable=yes 可以被所有用户读写,默认为no
read only=no 和writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读
write list 三种形式:用户,@组名,+组名,用,分隔
如writable=no,列表中用户或组可读写,不在列表中用户只读
valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔
示例

服务器端操作
[root@centos7 etc]#mkdir /app/smbshare   ---创建一个共享目录
[root@centos7 etc]#cd /app/smbshare/
[root@centos7 smbshare]#touch f1
[root@centos7 smbshare]#vim /etc/samba/smb.conf
[share]   ---共享目录名
        comment = testshare   ---注释信息
        path = /app/smbshare   ---共享目录的路径
        create mask = 0644  ----表示用户在客户端登录后上传文件的权限是0644
        writable = no    ----不可以写
        write list = @smbusers   ---只有在这个组里的用户才可以写
[root@centos7 share2]#testparm ---用来检查主配置文件的语法
[root@centos7 smbshare]#chomod 777 /app/smbshare/  ---设置目录文件系统的权限
[root@centos7 smbshare]#useradd -s /sbib/nologin/ smb1
[root@centos7 smbshare]#useradd -s /sbib/nologin/ smb2
[root@centos7 smbshare]#useradd -s /sbib/nologin/ smb3
[root@centos7 smbshare]#smbpasswd -a smb1
[root@centos7 smbshare]#smbpasswd -a smb2
[root@centos7 smbshare]#smbpasswd -a smb3
[root@centos7 smbshare]#pdbedit -L   ---创建三个samba用户
smb1:1004:
smb3:1006:
smb2:1005:
[root@centos7 smbshare]#groupadd smbusers  ---创建组
[root@centos7 smbshare]#gpasswd -a smb1smbusers
Adding user smb1 to group smbusers
[root@centos7 smbshare]#groupmems -a smb2 -g smbusers
[root@centos7 smbshare]#groupmems -l -g smbusers  ---将用户加到组里
smb1  smb2 
客户端操作
[root@centos6 ~]#smbclient -L 172.18.21.107    ---查看一下有哪些共享
[root@centos6 ~]#smbclient //172.18.21.107/share -U smb1%123   ---登录到这个共享,可以上传文件,注意这里是UNC路径
[root@centos6 ~]#smbclient //172.18.21.107/share -U smb3%123   ---smb3不可以上传,因为不在组里

centos7中在主配置文件中修改配置不需要重启服务也可以生效。

15、实现客户端不同的samba用户登录时访问的共享目录不同,但共享目录的名字是相同的

创建好samba用户smb2和smb3
vim /etc/samba/smb.conf
[global]
config file = /etc/samba/conf.d/%U   ---设置成每个用户有单独配置文件,%U表示文件名为samba用户名
mkdir /etc/samba/conf.d
cd /etc/samba/conf.d
vim smb2
[share]
path=/app/share2/
comment=testshare2
vim smb3
[share]
path=/app/share3/
comment=testshare3
mkdir /app/share2
mkdir /app/share3
touch /app/share2/f2
touch /app/share3/f3
[root@centos6 ~]#smbclient -L 172.18.21.107 ---在客户端是看不到共享的,只有登录后才可以看到
Enter root's password: 
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (Samba 4.4.4)
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

    Server               Comment
    ---------            -------

    Workgroup            Master
    ---------            -------
[root@centos6 ~]#smbclient //172.18.21.107/share/ -U smb3%123
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4]
smb: \> ls
  .                                   D        0  Tue Oct 17 20:47:01 2017
  ..                                  D        0  Tue Oct 17 20:47:39 2017
  f3                                           0  Tue Oct 17 20:47:01 2017

        51175 blocks of size 1048576. 51142 blocks available
smb: \> quit
在客户端访问共享发现每个smb2和smb3访问的目录不同

16、挂载CIFS文件系统

smbclient -L 172.18.21.107 ---挂载之前先看一下有哪些共享
挂载的时候需要安装mount.cifs工具,来自cifs-utils包
mount -t cifs -o username=smb1,password=123 //172.18.21.107/share /mnt
开机自动挂载
vim /etc/fstab 
//172.18.21.107/share   /mnt   cifs    credentials=/etc/smb.txt 0 0
vim /etc/smb.txt  ---创建一个这样的文件避免账号和密码泄露
username=smb1
password=123
chomd 600 /etc/smb.txt 
mount -a 
[root@centos6 ~]#cd /mnt
[root@centos6 mnt]#ll
total 4
-rw-r--r-- 1 root root   0 Oct 17  2017 f2
-rwxr--r-- 1 1005 1005 512 Oct 17  2017 mbr
在服务器端
[root@centos7 share2]#ll /app/share2
total 4
-rw-r--r-- 1 root root   0 Oct 17 20:46 f2
-rwxr--r-- 1 smb2 smb2 512 Oct 17 20:49 mbr
可以看到samba服务和nfs服务一样,也是通过id号识别身份的

17、CentOS7中实现多用户挂载

SAMBA共享默认只支持同时用一个samba用户挂载SMB共享,并且默认情况下以哪个samba用户挂载,访问共享的权限由samba用户的权限决定,不论登录的是哪个系统账号,权限都由samba用户权限决定的,CentOS7中可启用多用户挂载功能,客户端挂载samba共享目录后,在客户端登录的不同系统用户访问同一个samba的挂载点,可获得不同权限

一、samba服务器配置
yum install samba
systemctl start smb
systemctl enable smb
vim /etc/samba/smb.conf
[share]
        path = /app/share2
        comment = testshare2
        write list = smb1
        writable = no
此配置只有smb1可以写,其他用户都是只读的权限
在服务器端创建samba用户smb1,smb2,smb3
二、客户端配置
yum install cifs-utils samba-client
smbclient -L 172.18.21.107
echo "smb1 smb2 smb3"|xargs -n1 useradd  ---创建三个系统账号和samba账号同名
vim /etc/fstab 
//172.18.21.107/share   /mnt/ cifs credentials=/etc/smb.txt,multuser 0 0
vim /etc/smb.txt   ---表示自动挂载的时候以smb3的身份挂载
username=smb3
password=123
chmod 600 /etc/smb.txt
mount -a   ---以smb3身份挂载后应该对这个共享目录只有读权限
[root@redhat7 ~]#cd /mnt
[root@redhat7 mnt]#ls
f1  f2  f3  f4  f6  ff  mbr
[root@redhat7 mnt]#touch f7  ---发现root用户只能读,和samba用户smb3相同,因为就是以smb3的身份挂载的
touch: cannot touch ‘f7’: Permission denied
[root@redhat7 mnt]#su - smb1  
Last login: Tue Oct 17 22:29:44 CST 2017 on pts/0
[smb1@redhat7 ~]$cd /mnt
[smb1@redhat7 mnt]$ls   ---切换到smb1这个系统用户后连看的权限都没有了
ls: reading directory .: Permission denied
[smb1@redhat7 mnt]$cifscreds add 172.18.21.107   ---执行这个命令会把系统账号添加为samba账号smb1
Password: 
[smb1@redhat7 mnt]$ls
f1  f2  f3  f4  f6  ff  mbr
[smb1@redhat7 mnt]$touch fff  ---因为服务器端设置的是samba账号smb1有写权限,所以可以写
[smb1@redhat7 mnt]$ls
f1  f2  f3  f4  f6  ff  fff  mbr
[smb1@redhat7 mnt]$exit
logout
[root@redhat7 mnt]#su - smb2   ---切换为smb2这个系统账号
Last login: Tue Oct 17 22:26:34 CST 2017 on pts/0
[smb2@redhat7 ~]$cifscreds add 172.18.21.107  ---添加系统用户smb2为samba用户smb2
Password: 
[smb2@redhat7 ~]$cd /mnt
[smb2@redhat7 mnt]$ls
f1  f2  f3  f4  f6  ff  fff  mbr
[smb2@redhat7 mnt]$touch ffff  ---因samba用户smb2对这个目录只有读权限,所以只能读,不能写
touch: cannot touch ‘ffff’: Permission denied

通过上面的设置可以实现不同的系统用户对于samba共享目录具有不同的权限,而不是受挂载的samba用户的权限的影响。

18、samba的相关SELinux配置

SMB共享目录应设为samba_share_t安全上下文
semanage fcontext -a -t samba_share_t  '/sharedpath(/.*)?'
restorecon -vvFR /sharedpath
SMB共享目录安全上下文也可设public_content_t(只读)和public_content_rw_t(读写).
要支持读写,SElinux布尔值smbd_anon_write必须启用
如用SMB网络共享samba服务器上的用户家目录,需在samba服务器上启用布尔值samba_enable_home_dirs
如需挂载远程SMB目录做为本地用户家目录,需在SMB客户机上启用布尔值use_samba_home_dirs

19、实验:实现图形化管理

一、在CentOS6(第二张光盘)上安装包
yum install samba-swat samba
service samba start
二、配置swat服务
vim /etc/xinetd.d/swat
disable = no
only_from= 172.18.0.0/16  ---表示允许这个网段访问
service xinetdre start
三、浏览器访问管理
http://172.18.21.106:901 以root用户和密码登录即可
这个功能只有在centos6中才有,centos7中已经取消此

推荐阅读更多精彩内容