zoukankan      html  css  js  c++  java
  • SAMBA

    SAMBA

    在1987年时,由微软和英特尔公司共同制订了SMB服务器通信协议(Server Messages Block),这项技术的诞生是为了解决局域网内的文件或打印机等资源的共享服务问题,让多个主机之间共享文件变成越来越简单。
    后来到了1991年,当年还在读大学的学生Tridgwell为了解决Linux与Windows系统之间的文件共享问题,便基于了这项SMB技术协议开发出了SMBserver这一款服务程序,SMBserver服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享软件,通过非常简单的配置就能够实现Linux系统与Windows系统之间的文件共享工作。当时还在上学的Tridgwell想要把这款SMBServer软件注册成为商标,但却被商标局以SMB是没有意义的字符而拒绝了他的申请,经过Tridgwell不断的翻看词典,突然看到一个拉丁舞蹈的名字——SAMBA,如图12-1所示,这个热情洋溢的舞蹈名字中又恰好包含了SMB(SAMBA),于是这便是Samba服务程序名字的由来,现在已经成为了Linux系统与Windows系统之间共享文件的最佳选择。

    安装方式
    YUM安装
    yum install samba
    RPM安装
    rpm -vih samba*
    默认配置文件位置
    /etc/samba/smb.conf

    配置文件详解
    grep -E -v "#|;|^$"  /etc/samba/smb.conf
    
    [global]					#全局参数。
    workgroup = MYGROUP			#工作组名称。
    server string = Samba Server Version %v	#服务器介绍信息,参数%v为显示SMB版本号。
    log file = /var/log/samba/log.%m		#定义日志文件存放位置与名称,参数%m为来访的主机名。
    max log size = 50			#定义日志文件最大容量为50Kb。
    security = user				#安全验证的方式,总共有4种。
    							#share:来访主机无需验证口令,更加方便,但安全性很差。
    							#user:需由SMB服务验证来访主机提供的口令后才可建立访问,更加的安全。
    							#server:使用独立的远程主机验证来访主机提供的口令(集中管理帐号)。
    							#domain:使用PDC来完成验证
    passdb backend = tdbsam		#定义用户后台的类型,共有3种。
    							#smbpasswd:使用SMB服务的smbpasswd命令给系统用户设置SMB密码。
    							#tdbsam:创建数据库文件并使用pdbedit建立SMB独立的用户。
    							#ldapsam:基于LDAP服务进行帐户验证。
    load printers = yes			#设置是否当Samba服务启动时共享打印机设备。
    cups options = raw			#打印机的选项
    [homes]						#共享参数
    comment = Home Directories	#描述信息
    browseable = no				#指定共享是否在“网上邻居”中可见。
    writable = yes				#定义是否可写入操作,与"read only"相反。
    [printers]					#打印机共享参数
    comment = All Printers	
    path = /var/spool/samba		#共享文件的实际路径(重要)。
    browseable = no	
    guest ok = no				#是否所有人可见,等同于"public"参数。
    writable = no	
    printable = yes	
    

    创建smb用户命令详解

    pdbedit命令用于管理SMB服务的帐户信息数据库,格式为:“pdbedit [选项] 帐户”,第一次把用户信息写入到数据库时需要使用-a参数,以后修改用户密码、删除用户等等操作就不再需要了(需要系统中存在用户)

    命令 参数 作用
    pdbedit -a 用户名 建立Samba用户
    pdbedit -x 用户名 删除Samba用户
    pdbedit -L 列出用户列表
    pdbedit -Lv 列出用户详细信息的列表

    smbpasswd命令也是用于管理SMB服务的帐户信息数据库,格式为:“smbpasswd [选项] 帐户”,每次把用户信息写入到数据库时都需要使用-a参数(需要系统中存在用户)

    命令 参数 作用
    smbpasswd -a 用户名 新建用户
    smbpasswd -d 用户名 冻结用户,就是这个用户不能在登录了
    smbpasswd -e 用户名 恢复用户,解冻用户,让冻结的用户可以在使用
    smbpasswd -n 用户名 把用户的密码设置成空.
    smbpasswd -x 用户名 删除用户,删除的是samba中的用户,而不是系统用户

    实例:

    配置服务器samba,工作组为STAFF,共享目录/smb1, 共享名smb1,仅允许172.16.0.0/24主机访
    问。samba用户smb_user1可以读取,密码abc.123, 客户端自动挂接到/mnt/smb1共享目录/smb2,共享名smb2,仅允许172.16.0.0/24主机访问。仅允许用户smb_user1读取, smb_user2读写,密码都为abc.123;客户端以multiuser方式自动挂接到/mnt/smb2。

    ~]# mkdir /smb1
    ~]# mkdir /smb2
    ~]# chcon -t samba_share_t /smb1
    ~]# chcon -t samba_share_t /smb1      #chcon 命令设置SELinux只对当前目录生效若要目录下文件生效请参考注释①
    ~]# useradd smb_user1
    ~]# useradd smb_user2
    ~]# smbpass -a smb_user2
    ~]# smbpass -a smb_user1
    
    ~]# vim /etc/samba/smb.conf
    [global]
    workgroup = STAFF
    config file = /etc/samba/smb.conf.%U      #config file选项用户只可以看着独立配置文件中的共享目录
    include = /etc/samba/%U.smb.conf		#include选项可以看到独立配置文件与smb.conf的共享目录
    								 #此处用了两种引用用户独立配置文件的方法,达到不同用户不同权限的其他方法参考注释②
    
    ~]# vim /etc/samba/smb.conf.smb_user1
    [smb1]
    comment = smb1
    path = /smb1
    public = no
    read only = yes             
    browseable = yes
    hosts allow = 172.16.0.
    host deny = ALL
    [smb2]
    comment = smb2
    path = /smb2
    public = no
    writable = no              
    browseable = yes
    hosts allow = 172.16.0.
    hosts deny = ALL
    
    ~]# vim /etc/samba/smb_user2.smb.conf
    [smb2]
    comment = smb2
    path = /smb2
    public = no
    writable = yes
    #writable = no
    #write list = smb_user2           
    browseable = yes
    hosts allow = 172.16.0.
    hosts deny = ALL
    
    
    ~]# firewall-cmd --add-service=samba --permanent
    ~]# firewall-cmd --reload
    
    ~]# systemctl restart smb
    ~]# systemctl enable smb
    

    注释①:
    semanage 依赖policycoreutils-python包,可使用yum install -y policycoreutils-python安装
    semanage fcontext -a -t samba_share_t "/smb1(/.)?" 使用正则表达式递归设置
    semanage fcontext -a -t samba_share_t "/smb2(/.
    )?"
    ~]# restorecon -RFvv /smb1
    restorecon reset /smb1 context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0
    ~]# restorecon -RFvv /smb2
    restorecon reset /smb2 context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0
    强制递归刷新显示详细信息
    注释②:
    多用户不同读/写权限可以在共享目录选项中使用
    writable=no #所有人不可写
    writae list = user,@group #指定用户或组可以写入

    客户端挂载

    查看服务端共享列表

    mkdir /mnt/{smb1,smb2}
    ~]# smbclient -L 172.16.0.102 -U smb_user1%abc.123
    Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4]
    
    	Sharename       Type      Comment
    	---------       ----      -------
    	smb1            Disk      smb1
    	smb2            Disk      smb2
    	smb_user1       Disk      Home Directories
    	IPC$            IPC       IPC Service (Samba 4.4.4)
    Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4]
    
    	Server               Comment
    	---------            -------
    
    	Workgroup            Master
    	---------            -------
    ~]# smbclient -L 172.16.0.102 -U smb_user2%abc.123
    Domain=[STAFF] OS=[Windows 6.1] Server=[Samba 4.4.4]
    
    	Sharename       Type      Comment
    	---------       ----      -------
    	print$          Disk      Printer Drivers
    	IPC$            IPC       IPC Service (Samba 4.4.4)
    	smb2            Disk      smb2
    	smb_user2       Disk      Home Directories
    Domain=[STAFF] OS=[Windows 6.1] Server=[Samba 4.4.4]
    
    	Server               Comment
    	---------            -------
    
    	Workgroup            Master
    	---------            -------
    
    

    samba客户端交互模式测试用户读写权限

    交互式测试smb_user1对smb1仅有读权限

    ~]# smbclient //172.16.0.102/smb1 -U smb_user1%abc.123
    Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4]
    smb: > ls
      .                                   D        0  Sun Jun 18 20:55:31 2017
      ..                                 DR        0  Sun Jun 18 20:15:20 2017
    
    		18307072 blocks of size 1024. 16669420 blocks available
    smb: > put test
    NT_STATUS_ACCESS_DENIED opening remote file 	est
    

    交互式测试smb_user1对smb2仅有读权限

    ~]# smbclient //172.16.0.102/smb2 -U smb_user1%abc.123
    Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4]
    smb: > ls
      .                                   D        0  Sun Jun 18 20:55:31 2017
      ..                                 DR        0  Sun Jun 18 20:15:20 2017
    
    		18307072 blocks of size 1024. 16669420 blocks available
    smb: > put test
    NT_STATUS_ACCESS_DENIED opening remote file 	est
    

    交互式测试smb_user2无法访问smb1

    ~]# smbclient //172.16.0.102/smb1 -U smb_user2%abc.123
    Domain=[STAFF] OS=[Windows 6.1] Server=[Samba 4.4.4]
    tree connect failed: NT_STATUS_BAD_NETWORK_NAME
    

    交互式测试smb_user2对smb1有写入权限

    ~]# smbclient //172.16.0.102/smb2 -U smb_user1%abc.123
    Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4]
    smb: > ls
      .                                   D        0  Sun Jun 18 20:55:31 2017
      ..                                 DR        0  Sun Jun 18 20:15:20 2017
    smb: > put test
    putting file test as 	est (1.3 kb/s) (average 1.3 kb/s)
    
    

    开机挂载

    ~]# vim user1.smb
    username=smb_user1
    password=abc.123
    domain=STAFF
    ~]# chmod 600 user1.smb
    vim /etc/fstab
    //172.16.0.102/smb1 /mnt/smb1 cifs defaults,credentials=/root/user1.smb 0 0
    
    ~]# mount -a
    ~]# mount |grep /mnt/smb1
    //172.16.0.102/smb1 on /mnt/smb1 type cifs (rw,relatime,vers=1.0,cache=strict,username=smb_user1,domain=STAFF,uid=0,noforceuid,gid=0,noforcegid,addr=172.16.0.102,unix,posixpaths,serverino,acl,rsize=1048576,wsize=65536,actimeo=1)
    

    编辑认证文件并使用多用户挂载

    vim user2.smb
    username=smb_user2
    password=abc.123
    domain=STAFF
    ~]# chmod 600 user2.smb
    vim /etc/fstab
    //172.16.0.102/smb2 /mnt/smb2 cifs credentials=/root/smb_user2,multiuser,sec=ntlmssp 0 0
    ~]# mount |grep /mnt/smb2
    //172.16.0.102/smb2 on /mnt/smb2 type cifs (rw,relatime,vers=1.0,sec=ntlmssp,cache=strict,multiuser,domain=STAFF,uid=0,noforceuid,gid=0,noforcegid,addr=172.16.0.102,unix,posixpaths,serverino,acl,noperm,rsize=1048576,wsize=65536,actimeo=1)
    

    创建与服务器有相同UID的链接用户

    useradd -u 1001 smb_user1
    useradd -u 1002 smb_user2
    

    切换smb_user1用户检测只有读取权限

    ~]# su - smb_user1
    ~]$ ls /mnt/smb2/test
    ls: cannot access /mnt/smb2: Permission denied
    ~]$ cifscreds add 172.16.0.102
    Password: 
     ~]$ ls /mnt/smb2
    test
    ~]$ touch /mnt/smb2/abc
    touch: cannot touch ‘/mnt/smb2/abc’: Permission denied
    

    切换smb_user2用户检测有写入权限

    ~]# su - smb_user2
    ~]$ ls /mnt/smb2
    test
    ~]$ cifscreds add 172.16.0.102
    Password: 
    ~]$ touch /mnt/smb2/test1
     ~]$ ls /mnt/smb2/
    test  test1
    

    客户端的三种挂载方式示列

    编辑fstab文件

    yum install cifs-utils
    vim auth.smb
    username=smbuser
    password=redhat
    domain=MYGROUP
    chmod -Rf 600 auth.smb
    vim /etc/fstab
    //server/path /mountpoint cifs credentials=/root/auth.smb 0 0
    //server/path /mountpoint cifs defaults,username=smbuser,password 0 0
    

    手动挂载

    mount.cifs //server/path /mountpoint -o user=smbuser,pass=redhat
    mount -t cifs -o user=smbuser,pass=redhat //server/path /mountpoint
    

    auto自动挂载

    yum install  autofs
    vim /etc/aotu.master.d/demo.autofs
    /mnt /etc/auto.demo
    vim /etc/auto.demo
    smb1 -fstype=cifs,ro,credentials=/root/user1.smb //server/smb1
    smb2 -fstype=cifs,rw,credentials=/root/user2.smb //server/smb2
    
    天下古今之庸人,皆以一惰字致败,天下古今之才人,皆以一傲字致败。
  • 相关阅读:
    高级查询query
    elasticsearch 复合查询
    第八篇 elasticsearch链接mysql自动更新数据库
    第七篇 elasticsearch 链接mysql不会更新
    第六篇 elasticsearch express 删除索引数据
    koa1创建项目
    第五篇 elasticsearch express插入数据
    hdu3594 Cactus
    hdu2767 Proving Equivalences
    loj2274 「JXOI2017」加法
  • 原文地址:https://www.cnblogs.com/xyhome/p/7048707.html
Copyright © 2011-2022 走看看