Linux入门——samba

  笔者前面介绍过ftp与nfs,ftp是一个早期的文件传输协议,ftp存在一些问题,比如;我想在服务器上修改某些数据,要修改的地方很少,可能就几个字母,但是文件很大,你必须要把文件下到本地,修改后再次上传,并且若文件所在目录较深,还会出现文件放错位置情况,这只是一个文件,若是多个文件,则更为麻烦。而NFS,可以将服务端的文件挂载到本地,然后直接对本地的文件进行修改就行了,但是nfs是只支持在类unix上进行文件共享(现在Windows也支持,但支持的不是特别好)。同样在Windows上也有类似的网络共享服务,就是CIFS,CIFS最简单的实现就是网上邻居,网上邻居就能够实现Windows主机间的文件共享。我们都知道,Windows的病毒是远远多于Linux的,所以公司更愿意在Linux上做数据存储,但90%的电脑操作系统都是Windows。那么有没有一个服务可以实现跨平台的文件共享,并且可以实现直接在本地文件修改就能完成对服务端的操作,这就是SAMBA。

SAMBA历史

  在1991年,一个名叫Andrew Tridgwell的大学生就有这样的困扰,他手上有三台机器,分别是运行DOS的个人计算机、DEC公司的Digital Unix系统以及Sun的Unix系统。在当时,DEC 公司开发出一套称为PATHWORKS的软件,这套软件可以用来分享DEC的Unix与个人计算机的DOS这两个操作系统的文件数据,可惜让Tridgwell觉得较困扰的是Sun的Unix无法通过这个软件来达到文件共享的目的。这个时候Tridgwell就想:“咦!既然这两台系统可以共享,没道理Sun就必须这么苦命吧?可不可以将这两个系统的工作原理找出来,然后让Sun机器也能够共享文件数据呢?”,为了解决这样的的问题,Tridgwell就自行编写了一个程序去检测当DOS与DEC的Unix系统在进行文件分享传输时所使用到的通信协议信息,然后获取这些重要的信息,并且基于上述所找到的通信协议而开发出Server Message Block(SMB)这个文件系统,而就是这套SMB软件就能够让Unix与DOS互相共享文件。既然写成了软件,总需要注册商标,因此Tridgwell就申请SMB Server作为该软件的商标。可惜因为SMB是没有意义的文字,没有办法达成注册。既然如此,能不能在字典里面找到相关的字词可以作为商标来注册呢?翻了老半天,发现SAMBA刚好含有SMB,又是热情有劲的拉丁舞蹈的名称,不然就用这个名字来作为商标好了。这成为我们今天所使用的SAMBA的名称的由来。

SAMBA功能

  由上面说明的SAMBA发展缘由,就不难知道,SAMBA最初发展的主要目的就是要用来沟通Windows与Unix Like这两个不同的操作系统平台的。这么做最大的好处就是不必让同样的一份数据放置在不同的地方,到后来都不晓得哪一份数据是最新的,而且也可以通过这样一个文件系统,使Linux与Windows的文件传输变得更为简单,也就是说,以后可以通过“网上邻居”来进行Linux与Windows文件的传输。那么SAMBA有哪些功能呢?主要功能如下:

(1)可以提供用户登入SAMBA主机时进行身份认证,以提供不同身份者的辨别。 
(2)可以进行Windows网络上的主机名称解析(NetBIOS Name)。
(3)可以进行设备的共享(例如Zip、CD-ROM)。

  SAMBA使用的是NetBIOS通讯协议,就相当于NFS是基于RPC协议之上的。NetBIOS即网络基本输入输出系统,它定义了一种软件接口以及在应用程序和连接介质之间提供通信接口的标准方法,作用是为区域网提供网络以及其他特殊功能。目前使用NetBIOS协议来获得局域网中计算机的名称来解析成IP地址实现数据的通信。samba通过NetBIOS协议来获取对方主机的NetBIOS name进而定位该主机的位置,然后根据对方主机赋予的权限来存取可用的资源。实际中samba是通过nmb与smb两个服务来控制这两个步骤的。其中nmb是用来管理工作组合NetBIOS name的解析,主要是通过UDP的137和138两个端口来负责名称解析任务;smb主要用来刮玻璃samba主机所共享的目录、文件或者打印机等等,主要使用tcp的139和445两个端口进行数据传输。

SAMBA介绍

相关包:
  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]

SAMBA服务器配置
  smb.conf继承了.ini文件的格式,用[]分成不同的部分
全局设置:
  [global]服务器通用或全局设置的部分
特定共享设置:
  [homes]用户的家目录共享
  [printers]定义打印机资源和服务
  [sharename]自定义的共享目录配置
其中:#和;开头的语句为注释,大小写不敏感
宏定义:
%m 客户端主机的NetBIOS名    %H 当前用户家目录路径
%g 当前用户所属组        %L samba服务器的NetBIOS名
%T 当前日期和时间        %M 客户端主机的FQDN
%U 当前用户用户名        %h samba服务器的主机名
%I 客户端主机的IP         %S 可登录的用户名
SAMBA服务器全局配置
  workgroup    指定工作组名称
  serverstring   主机注释信息
  netbios name  指定NetBIOS名
  interfaces  指定服务侦听接口和IP

  hosts allow 可用“,”,空格,或tab分隔,默认允许所有主机访问,也可在每个共享独立配置,如在[global]设置,将应用并覆盖所有共享设置

  例:hosts allow = 172.25.  172.24.10.8.   允许172.25网段的ip连接也允许ip为172.24.10.8连接

  hostsdeny    拒绝指定主机访问

  configfile=/etc/samba/conf.d/%U  用户独立的配置文件
  Logfile=/var/log/samba/log.%m  不同客户机采用不同日志
  log level=2  日志级别,默认为0,不记录日志
  maxlogsize=50  日志文件达到50K,将轮循rotate,单位KB
管理SAMBA用户
  samba用户须是Linux用户,建议使用/sbin/nologin
添加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

配置目录共享
每个共享目录应该有独立的[]部分
  [共享名称]    远程网络看到的共享名称
  comment   注释信息
  path   所共享的目录路径
  public   能否被guest访问的共享,默认no,和guestok类似
  browsable   是否允许所有用户浏览此共享,默认为yes,no为隐藏
  writable=yes    可以被所有用户读写,默认为no
  readonly=no和writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读
  writelist 三种形式:用户,@组名,+组名, 用,分隔    在列表中的用户可读
  validusers    特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔

  force create mode = 0775      在共享目录创建文件时的权限
  force directory mode = 0777    在共享目录穿件目录时的权限

实现SMB共享

smb多用户挂载(仅centos7支持)

自动挂载公式目录我们实际是通过其中一个用户挂载上的,不会出现切换用户而自动更改该用户的共享目录权限,实际上我们共享的只是一个人的权限,不是共享了samba中所有用户的权限,要实现这一目的我们需要实现samba的多用户挂载。

服务端:

useradd -s /sbin/nologin xiaofan        #添加samba用户xiaofan,xiaochen
useradd -s /sbin/nologin xiaochen
smbpasswd -a xiaofan
smbpasswd -a xiaochen

mkdir /app/smbshared               #创建共享目录 ,建议用lvm
chcon -t samba_share_t /app/smbshared      #修改文件的selinux值,这样就不需要关闭selinux了
setfacl -m u:xiaofan:rwx /app/smbshared    #为共享文件夹添加xiaofan,xiaochen的权限
setfacl -m u:xiaochen:rwx /app/smbshared
vim /etc/samba/smb.conf            #更改samba的配置文件
  [gongxiang]
    comment = Magedu M33 Gongxiang
    path = /app/smbshare          #共享文件路径
    browseable = yes            #允许用户浏览该共享目录
    writeable = no              #不对所有人可写
    write list = xiaofan,xiaochen      #xianfan,xiaochen有可写权限    
    public = yes              
systemctl restart smb          #重启服务

客户端:

yum -y install cifs-utils
vim /etc/multiuser          #编写登录文件,这是默认的挂载的用户
  username=xiaofan          
  password=redhat

vim /etc/fstab
//172.18.254.96/gongxiang    /mnt/    cifs    credentials=/etc/multiuser,multiuser,sec=ntlmssp   0 0

mount -a              #挂载samba共享目录

useradd xiaofan          #客户端添加用户
useradd xiaochen

su - xiaofan            #切换用户验证

cifscreds add 172.18.254.96    #必须要敲

#其实多用户的挂载在客户端做,只需在在编辑/etc/fstab文件添加multiuser,sec=ntlmssp就行了;

实验:

创建liubei,guanyu,zhangfei,caocao,sunquan,wuchengen 六个用户
1.要求以上六个用户都可以浏览并访问目标主机的共享目录sanguo,匿名用户可访问但不可浏览。大小2GB。未来可自动扩展

1.匿名用户可访问不可浏览,另外三用户必须要子配置
2.共享目录可自动扩展,则要用逻辑卷

2.liubei,guanyu,zhangfei最多能各自创建200M的数据 ,可以在该共享目录下创建及删除文件,且彼此之间创建的文件,可以相互修改,但不能删除他人创建的文件,其他用户不可创建文件,liubei受任何限制。

1.只能创建200M数据要用到quot
2.彼此可修改可创建,三人要在同一组内为该目录添加sgid权限
3.彼此不可删除,则添加stick权限
3.liubei不受限,则目录所属人为liubei

3.六个用户各自都 有一个以自己名字为名的共享目录,仅自己可见可访问可创建,他人不可见,wuchengen对所有目录均有完整权限。

1. 六个用户都要有子配置
2.wuchengen用户子配置要有所有的用户共享目录配置

[root@centos7(angge) ~]# for username in liubei guanyu zhangfei caocao sunquan wuchengen ;do useradd -s /sbin/nologin $username ; (echo redhat;echo redhat) |smbpasswd -a $username ;done                    #利用for循环添加用户
[root@centos7(angge) ~]# mkdir /app/sanguoyanyi               #创建共享目录,我建在了逻辑卷上
[root@centos7(angge) ~]# fdisk /dev/sda
[root@centos7(angge) ~]# partprobe /dev/sda
[root@centos7(angge) ~]# pvcreate /dev/sda6
[root@centos7(angge) ~]# vgcreate vgsanguo /dev/sda6
[root@centos7(angge) ~]# lvcreate -l +100%FREE -n lvsanguo vgsanguo
[root@centos7(angge) ~]# mkfs.ext4 /dev/vgsanguo/lvsanguo 
[root@centos7(angge) ~]# vim /etc/fstab                         #自动挂载lvm
/dev/vgbaishe/lvsanguo     /app/sanguoyanyi    ext4      defaults,usrquota 0 0
[root@centos7(angge) ~]# mount -a
[root@centos7(angge) ~]# setfacl -m u:liubei:rwx /app/baishezhuan/      #为共享目录添加权限
[root@centos7(angge) ~]# setfacl -m u:guanyu:rwx /app/baishezhuan/
[root@centos7(angge) ~]# setfacl -m u:zhangfei:rwx /app/baishezhuan/

[root@centos7(angge) ~]# vim /etc/samba/smb.conf                #更改主配置文件

[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
config file = /etc/samba/conf.d/%U.conf

[sanguo]
comment = san guo yan yi
path = /app/sanguoyanyi
public = yes
browseable = no
writeable = no

[root@centos7(angge) conf.d]# groupadd shuguo              #添加sgud与stick权限
[root@centos7(angge) conf.d]# usermod -aG shuguo zhangffei
[root@centos7(angge) conf.d]# usermod -aG shuguo guanyu
[root@centos7(angge) conf.d]# usermod -aG shuguo liubei
[root@centos7(angge) conf.d]# chgrp shuguo /app/sanguoyanyi
[root@centos7(angge) conf.d]# chmod g+s /app/sanguoyanyi/
[root@centos7(angge) conf.d]# chown liubei /app/sanguoyanyi/
[root@centos7(angge) conf.d]# chmod o+t /app/anguoyanyi/

[root@centos7(angge) samba]# mkdir conf.d          #创建子配置文件
[root@centos7(angge) samba]# cd conf.d/
[root@centos7(angge) conf.d]# cat wuchengen.conf        #太多了我只贴出了wuchengen的配置文件,可以参考写其他的 

[zhangfei]
comment = zhangfei
path = /app/common/zhangfei
browseable = yes
writeable = yes
[guanyu]
comment = guanyu
path = /app/common/guanyu
browseable = yes
writeable = yes
[liubei]
comment = liubei
path = /app/common/liubei
browseable = yes
writeable = yes
[caocao]
comment = caocao
path = /app/common/caocao
browseable = yes
writeable = yes
[sunquan]
comment = sunquan
path = /app/common/sunquan
browseable = yes
writeable = yes
[wuchengen]
comment = wuchengen
path = /app/common/wuchengen
browseable = yes
writeable = yes
[sanguo]
comment = san guo yan yi
path = /app/sanguoyanyi
browseable = yes
writeable = no


[root@centos7(angge) ~]# quotacheck -cum /app/sanguoyanyi/        #添加quot权限
[root@centos7(angge) ~]# quotaon /app/sanguoyanyi/
[root@centos7(angge) ~]# edquota -u guanyu
Filesystem blocks soft hard inodes soft hard
/dev/mapper/vgsanguo-lvsanguo 4 0 200M 1 0 0
[root@centos7(angge) ~]# edquota -p guanyu zhangfei

[root@centos7(angge) common]# mkdir guanyu zhangfei liubei sunquan caocao wuchengen    #创建共享目录并修改权限
[root@centos7(angge) common]# chown guanyu guanyu/
[root@centos7(angge) common]# chown zhangfei zhangfei/
[root@centos7(angge) common]# chown liubei liubei/
[root@centos7(angge) common]# chown caocao caocao/
[root@centos7(angge) common]# chown sunquan sunquan/
[root@centos7(angge) common]# chown  wuchengen wuchengen/
[root@centos7(angge) common]# chmod 700 *        
[root@centos7(angge) common]# setfacl -m u:wuchengen:rwx *

[root@centos7(angge) common]# iptables -F

[root@centos7(angge) common]# setenforce 0

重启服务

猜你喜欢

转载自www.cnblogs.com/angge/p/9760691.html