• samba实现跨平台文件共享


    前言:Linux/Unix主机之间实现文件共享我们可以使用NFS,那么,Linux/Unix和Windows主机之间共享文件怎么实现呢,samba就是解决这个问题的。

    Windows网上邻居依赖的协议:

      NetBIOS 通信协议,无法跨越路由器,samba和NetBIOS关系类似于NFS之于RPC;
      CIFS 和NFS类似的文件系统,CIFS最常见的用途就是网上邻居,SMB;
      Winbindd 让Linux主机加入Windows AD域,AD域使用的LDAP服务器
      LDAP(Linux上使用Opneldap)

    Windows上访问共享文件使用UNC路径:\IP共享名

    如果在Linux上实现了上述协议,那么Linux就可以和Windows文件共享了,Linux上使用samba服务来实现。

    实现windows访问Linux共享文件:

    (1)samba用户控制:

      它使用系统用户,密码由samba单独控制。

    (2)软件安装:

      yum -y install samba.x86_64 samba-client.x86_64 samba-common.x86_64

      默认会安装winbind服务,这里我们不做配置。
      执行事务
        正在安装   : libtalloc-2.1.5-1.el6_7.x86_64                                            1/7
        正在安装   : libtevent-0.9.26-2.el6_7.x86_64                                           2/7
        正在安装   : samba-common-3.6.23-36.el6_8.x86_64                                       3/7
        正在安装   : samba-winbind-3.6.23-36.el6_8.x86_64                                      4/7
        正在安装   : samba-winbind-clients-3.6.23-36.el6_8.x86_64                              5/7
        正在安装   : samba-3.6.23-36.el6_8.x86_64                                              6/7
        正在安装   : samba-client-3.6.23-36.el6_8.x86_64                                       7/7

    (3)samba进程:

    nmbd:管理工作组,NetBIOS Name等解析,udp 137,138
    smbd:管理samba主机共享目录,文件与打印机等,tcp 139,445
    如果加入winbind,会启动winbind
    服务控制脚本:/etc/rc.d/init.d/smb

    (4)samba配置文件:

    /etc/samba/
    smb.conf 主
    lmhosts windows上的特有的文件,用于名称解析。host——wins——DNS——lmhosts
    smbusers  把linux用户映射成windows用户

    smb.conf
    #开头是纯注释信息,;开头的也是注释,但他是可启用的参数。
    
    大致分为两类:
    全局配置:Global Settings
    共享定义:Share Definitions
    
    Global Settings
    [global]
    ----Network Related Options
    workgroup = WORKGROUP
    server string = Samba Server Version %v  主机描述信息,一般不输出
    netbios name = MYSERVER   主机名
    
    ----Logging Options
    log file = /var/log/samba/log.%m
    max log size = 50
    
    ----Standalone Server Options  独立服务进程
    security = user   安全级别
    passdb backend = tdbsam  用户账号和密码存放格式,模拟的tdb格式存储的sam文件
    
    
    ----Browser Control Options  浏览控制信息,和domain相关
    
    Share Definitions
    [homes] 用户家目录访问控制
    comment = Home Directories  注释,说明信息
    browseable = no  浏览权限
    writable = yes
    
    
    [public] 共享名
    comment = Network Logon Service
    path = /home/samba
    public = yes 
    writable = yes
    read only =
    write list = user1,user2,
    			 @group,+group
    valid users = %S  白名单,限制那些用户能访问
    invalid users = 
    
    例如:/share/test
    [tools]
            comment = Share Testing
            path = /share/test
            public = yes
            writable = yes
    
    配置文件测试:
    
    testparm
    [root@myhost01 ~]# testparm
    Load smb config files from /etc/samba/smb.conf
    Processing section "[homes]"
    Processing section "[printers]"
    Processing section "[tools]"
    Loaded services file OK.
    Server role: ROLE_STANDALONE
    Press enter to see a dump of your service definitions
    
    [global]
    	server string = Samba Server Version %v
    	log file = /var/log/samba/log.%m
    	max log size = 50
    	client signing = required
    	idmap config * : backend = tdb
    	cups options = raw
    
    [homes]
    	comment = Home Directories
    	read only = No
    	browseable = No
    
    [printers]
    	comment = All Printers
    	path = /var/spool/samba
    	printable = Yes
    	print ok = Yes
    	browseable = No
    
    [tools]
    	comment = Share Testing
    	path = /share/test
    	read only = No
    	guest ok = Yes
    

    (5)启动进程:

    [root@myhost01 ~]# service smb start
    启动 SMB 服务:                                            [确定]
    [root@myhost01 ~]# netstat -anp | grep smb
    tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      1383/smbd           
    tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      1383/smbd           
    tcp        0      0 :::139                      :::*                        LISTEN      1383/smbd           
    tcp        0      0 :::445                      :::*                        LISTEN      1383/smbd           
    unix  2      [ ]         DGRAM                    11487  1385/smbd           
    unix  2      [ ]         DGRAM                    11470  1383/smbd           
    

     (6)添加用户:

    [root@myhost01 ~]# useradd samba_user
    [root@myhost01 ~]# id samba_user
    uid=501(samba_user) gid=501(samba_user) 组=501(samba_user)
    
    把系统账户加入samba
    [root@myhost01 ~]# smbpasswd -a samba_user
    New SMB password:
    Retype new SMB password:
    Added user samba_user.
    

     (7)共享文件权限:

      访问权限是由文件系统和samba服务共同控制。

      修改文件系统权限:

    [root@myhost01 ~]# ll -d /share/test/
    drwxr-xr-x 2 root root 4096 3月  11 16:43 /share/test/
    [root@myhost01 ~]# setfacl -m u:samba_user:rwx /share/test/
    

     (8)Windows UNC访问:

      直接访问主机:

      \192.168.31.168  输入用户名:samba_user   密码:123456

      显示用户家目录及tools共享目录,就像访问本地目录一样,在家目录和tools目录创建文件:home_file.txt,tools.txt

      在Linux验证:可以看到在Windows创建的文件有执行权限,这个可以使用samba控制,具体用到时再来研究。

    [root@myhost01 ~]# ll /home/samba_user/
    总用量 0
    -rwxr--r-- 1 samba_user samba_user 0 3月  11 16:54 home_file.txt
    [root@myhost01 ~]# ll /share/test/
    总用量 0
    -rwxr--r-- 1 samba_user samba_user 0 3月  11 16:57 tools.txt
    [root@myhost01 ~]# 
    

    单独访问tools: \192.168.31.168 ools   可以在Windows中添加访问位置。

    到此,完成Windows访问Linux/Unix文件功能。

    实现Linux/Unix访问Windows共享:

    (1)Windows创建共享文件,添加win_user用户

    (2)Linux主机访问共享:

      smbclient //192.168.31.85/win_samba_share -U win_user

    [samba_user@myhost01 ~]$ smbclient //192.168.31.85/win_samba_share -U win_user
    Enter win_user's password: 
    Domain=[DESKTOP-VUBVLHE] OS=[Windows 10 Pro 14393] Server=[Windows 10 Pro 6.3]
    smb: > ls
      .                                   D        0  Sat Mar 11 18:29:23 2017
      ..                                  D        0  Sat Mar 11 18:29:23 2017
      win_file.txt                        A        0  Sat Mar 11 18:25:51 2017
    
    		60603 blocks of size 524288. 33153 blocks available
    smb: > mkdir myfile
    smb: > ls
      .                                   D        0  Sat Mar 11 18:43:55 2017
      ..                                  D        0  Sat Mar 11 18:43:55 2017
      myfile                              D        0  Sat Mar 11 18:43:55 2017
      win_file.txt                        A        0  Sat Mar 11 18:25:51 2017
    
    		60603 blocks of size 524288. 33153 blocks available
    smb: > rmdir win_file.txt
    NT_STATUS_NOT_A_DIRECTORY removing remote directory file win_file.txt
    smb: > rm win_file.txt
    smb: > ls
      .                                   D        0  Sat Mar 11 18:44:30 2017
      ..                                  D        0  Sat Mar 11 18:44:30 2017
      myfile                              D        0  Sat Mar 11 18:43:55 2017
    
    		60603 blocks of size 524288. 33153 blocks available
    smb: > 
    

     (3)挂载至/mnt/win_dir:

      确保安装cifs-utils:yum install cifs-utils.x86_64 -y

    [root@myhost01 ~]# mount -t cifs //192.168.31.85/win_samba_share /mnt/win_dir/ -o username=win_user
    Password: 
    [root@myhost01 ~]# df -h
    文件系统	      容量  已用  可用 已用%% 挂载点
    /dev/sda3              20G  2.0G   17G  11% /
    tmpfs                 699M     0  699M   0% /dev/shm
    /dev/sda1              97M   28M   64M  31% /boot
    //192.168.31.85/win_samba_share
                           30G   14G   17G  46% /mnt/win_dir
    
    [root@myhost01 ~]# cd /mnt/win_dir/
    [root@myhost01 win_dir]# ls
    myfile  新建文本文档.txt
    [root@myhost01 win_dir]# touch abc
    [root@myhost01 win_dir]# ll
    总用量 0
    -rwxr-xr-x 1 root root 0 3月  11 18:51 abc
    drwxr-xr-x 1 root root 0 3月  11 18:43 myfile
    -rwxr-xr-x 1 root root 0 3月  11 18:48 新建文本文档.txt
    
     加入开机自动挂载:
    
    [root@myhost01 mnt]# vim /etc/samba/cred.passwd
    
    [root@myhost01 mnt]# chmod og=--- /etc/samba/cred.passwd 
    
    [root@myhost01 mnt]# ll /etc/samba/cred.passwd
    -rw------- 1 root root 34 3月  11 18:56 /etc/samba/cred.passwd
    
    [root@myhost01 mnt]# cat /etc/samba/cred.passwd
    username=win_user
    password=123456
    [root@myhost01 mnt]# umount /mnt/win_dir/
    [root@myhost01 mnt]# df -h
    文件系统	      容量  已用  可用 已用%% 挂载点
    /dev/sda3              20G  2.0G   17G  11% /
    tmpfs                 699M     0  699M   0% /dev/shm
    /dev/sda1              97M   28M   64M  31% /boot
    [root@myhost01 mnt]# mount -a
    [root@myhost01 mnt]# df -h
    文件系统	      容量  已用  可用 已用%% 挂载点
    /dev/sda3              20G  2.0G   17G  11% /
    tmpfs                 699M     0  699M   0% /dev/shm
    /dev/sda1              97M   28M   64M  31% /boot
    //192.168.31.85/win_samba_share
                           30G   14G   17G  46% /mnt/win_dir
     

    注意:开机自动挂载,编辑fstab,为了不让密码直接写入fstab,添加密码到:/etc/samba/cred.passwd,修改权限600

    //192.168.31.85/win_samba_share        /mnt/win_dir    cifs    credentials=/etc/samba/cred.passwd    0 0
    

     到此,完成Linux对Windows文件共享的访问。

    Linux/Unix之间相互访问:

    和访问Windows相似,挂载到文件系统也一样,这里不再赘述。

    [zdjiang@myhost01 ~]$ smbclient //192.168.31.168/tools -U samba_user
    Enter samba_user's password: 
    Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
    smb: > ls
      .                                   D        0  Sat Mar 11 16:57:11 2017
      ..                                  D        0  Sat Mar 11 16:43:10 2017
      tools.txt                           A        0  Sat Mar 11 16:57:04 2017
    
    		39109 blocks of size 524288. 33197 blocks available
    smb: > mkdir jiang
    smb: > ls
      .                                   D        0  Sat Mar 11 16:57:11 2017
      ..                                  D        0  Sat Mar 11 16:43:10 2017
      jiang                               D        0  Sat Mar 11 19:44:51 2017
      tools.txt                           A        0  Sat Mar 11 16:57:04 2017
    
    		39109 blocks of size 524288. 33197 blocks available
    smb: > rmdir jiang
    smb: > 
    

     samba:基于IP的访问控制

    (1)iptables:

    139,445 TCP

    138,137 UDP

    (2)samba本身:

    ----- Network Related Options ------

    hosts allow = 127. 192.168.12. 192.168.13.  注意后面的"."

    samba-swat:

      使用web页面来配置samba  web GUI

    (1)安装:yum -y install samba-swat.x86_64 

    正在安装:samba-swat是瞬时进程,依赖于超级守护进程xinetd
       samba-swat            x86_64            3.6.23-36.el6_8            updates            7.4 M
       为依赖而安装:
       xinetd                x86_64            2:2.3.14-40.el6            base               122 k
    .......
    
    基于 xinetd 的服务:
        chargen-dgram:     关闭
        chargen-stream:    关闭
        daytime-dgram:     关闭
        daytime-stream:    关闭
        discard-dgram:     关闭
        discard-stream:    关闭
        echo-dgram:        关闭
        echo-stream:       关闭
        rsync:             关闭
        swat:              关闭
        tcpmux-server:     关闭
        time-dgram:        关闭
        time-stream:       关闭
    
    [root@myhost01 mnt]# chkconfig swat on
    
    [root@myhost01 mnt]# service xinetd restart
    停止 xinetd:                                              [确定]
    正在启动 xinetd:                                          [确定]
    
    #每个瞬时进程在/etc/xinetd.d/下有配置文件
    [root@myhost01 mnt]# cat /etc/xinetd.d/swat 
    # default: off
    # description: SWAT is the Samba Web Admin Tool. Use swat 
    #	       to configure your Samba server. To use SWAT, 
    #	       connect to port 901 with your favorite web browser.
    service swat
    {
    	disable	= no
    	port		= 901
    	socket_type	= stream   #tcp
    	wait 		= no      #多用户访问,是否等待    
    	only_from 	= 192.168.31.0/24    #主机访问控制
    	user		= root
    	server		= /usr/sbin/swat
    	log_on_failure	+= USERID
    }
    [root@myhost01 mnt]# netstat -tlnp | grep xinetd
    tcp        0      0 :::901                      :::*                        LISTEN      2255/xinetd         
    

     (2)浏览器访问

      浏览器访问192.168.31.168:901即可,注意,第一次访问需要使用系统管理员账户,注意安全防护,登陆之后更改管理员账户和密码。

    它控制进程的状态,展示目前文件共享情况,访问记录等。

    还记得上面windows访问Linux创建文件后,文件权限问题么,这里可以进行修改:

    其他保存后,系统会自动覆盖/etc/samba/smb.conf文件,更多的使用方法,有兴趣的可以去探索。

    总结:Linux/Unix和windows主机之间文件共享,samba给我们提供很好的解决方案,配置时,注意权限控制,swat让我们能够使用WEB页面配置,控制服务的开启和关闭,使我们更好的去管理samba。

     

  • 相关阅读:
    中型PLC运控快速入门系列教程------第3节 编程语法样例讲解
    中型PLC运控快速入门系列教程------第2节 常用数据类型及变量介绍
    中型PLC运控快速入门系列教程------第1节 学习指南资料介绍
    Inoproshop入门系列教程-----第11节 中型PLC常用快捷方式介绍
    Inoproshop入门系列教程-----第10节 程序安全加密和解锁
    Inoproshop入门系列教程-----第9节 变量关联IO和掉电保持
    Inoproshop入门系列教程-----第8节 中型PLC固件升级方式
    Inoproshop入门系列教程-----第7节 库文件的安装及设备文件的导入
    Inoproshop入门系列教程-----第6节 通信等组态配置介绍
    Inoproshop入门系列教程-----第5节 流水灯样例快速编程上手
  • 原文地址:https://www.cnblogs.com/jjzd/p/6535575.html
Copyright © 2020-2023  润新知