为了实现Windows主机与Linux服务器之间的资源共享,Linux操作系统提供了Samba服务,Samba服务为两种不同的操作系统架起了一座桥梁,使Linux系统和Windows系统之间能够实现互相通信,为广泛的Linux爱好者提供了极大方便。本文简要介绍如何在Linux操作系统上搭建Samba服务器的简单配置,留作以后参考。

 

1、使用yum安装Samba 

  用以下命令安装:

[root@node02 ~]# yum install -y samba samba-client

安装完成后,使用命令rpm -qa | grep samba进行查询,发现搭建samba服务器所依赖的所有服务都已经安装好了即可。

[root@node02 ~]# rpm -qa | grep samba
samba-common-4.4.4-14.el7_3.noarch
samba-client-libs-4.4.4-14.el7_3.x86_64
samba-client-4.4.4-14.el7_3.x86_64
samba-libs-4.4.4-14.el7_3.x86_64
samba-common-libs-4.4.4-14.el7_3.x86_64
samba-common-tools-4.4.4-14.el7_3.x86_64
samba-4.4.4-14.el7_3.x86_64

2、配置samba service

    Samba的配置文件一般就放在/etc/samba目录中,主配置文件名为smb.conf,文件中记录着大量的规则和共享信息,所以是samba服务非常重要的核心配置文件,完成samba服务器搭建的大部分主要配置都在该文件中进行。

    Samba服务器的工作原理是:客户端向Samba服务器发起请求,请求访问共享目录,Samba服务器接收请求,查询smb.conf文件,查看共享目录是否存在,以及来访者的访问权限,如果来访者具有相应的权限,则允许客户端访问,最后将访问过程中系统的信息以及采集的用户访问行为信息存放在日志文件中。

第一步:修改配置文件

     首先备份一下samba的配置文件

[root@node02 ~]# cp /etc/samba/smb.conf /etc/samba/smb.conf_backup

 使用vi 编辑smb.conf文件

[root@node02 ~]# vi /etc/samba/smb.conf

然后我们把这段写入smb.conf中

[global]
workgroup = SambaGroup
netbios name = node02
server string = Linux Samba test
security = user
        
[samba]
path = /opt/samba
writeable = yes
browseable = yes
guest ok = yes

------------------------

[global]这段是全局配置,是必段写的。其中有如下的几行;

workgroup 就是Windows中显示的工作组;在这里我设置的是SAMBAGROUP (用大写);
netbios name 就是在Windows中显示出来的计算机名;
server string 就是Samba服务器说明,可以自己来定义;这个不是什么重要的;
security 这是验证和登录方式,这里我们用了user 。验证方式有多种,这是其中一种;另外一种常用的是share的验证方式;如果用share呢,就是不用设置用户和密码了,但是貌似新版本中share已经被弃用了,在网上看到一种解决方式如下,有兴趣的可以验证下

把         security = share 改为 security = user map to guest = Bad User

[samba]这个在Windows中显示出来是共享的目录;
path = 可以设置要共享的目录放在哪里;
writeable 是否可写,这里我设置为可写;
browseable 是否可以浏览,可以;可以浏览意味着,我们在工作组下能看到共享文件夹。如果您不想显示出来,那就设置为 browseable=no

guest ok 匿名用户以guest身份是登录;


第二步:建立相应目录并授权;

[root@node02 ~]# mkdir /opt/samba
[root@node02 ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
[root@node02 ~]# chown -R nobody:nobody /opt/samba/


关于授权nobody,我们先用id命令查看了nobody用户的信息,发现他的用户组也是nobody,我们要以这个为准。有些系统nobody用户组并非是nobody ; 

 

 第三步:启动smb并设置开机自启动

[root@node02 ~]# systemctl start smb
[root@node02 ~]# systemctl enable smb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
[root@node02 ~]#

第四步:配置firewalld允许samba service

[root@node02 ~]# firewall-cmd --add-service=samba

创建一个user来访问共享

[root@node02 ~]# adduser smbuser
[root@node02 ~]# smbpasswd -a smbuser
New SMB password:
Retype new SMB password:
Added user smbuser.

第五步:在node01上安装samba-client,验证samba共享服务

[root@node01 ~]# yum install -y samba-client
 
  
[root@node01 ~]# smbclient -L node02.lab.example.com -U%
 
  
Domain=[SAMBAGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4]
        Sharename       Type      Comment
        ---------       ----      -------
        samba           Disk      
        IPC$            IPC       IPC Service (Linux Samba test)
Domain=[SAMBAGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4]        Server               Comment
        ---------            -------        Workgroup            Master
        ---------            ------- 
  
[root@node01 ~]# mount -t cifs //node02.lab.example.com/samba /mnt
 
  
报错啦...
mount: wrong fs type, bad option, bad superblock on //node02.lab.example.com/samba,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)       In some cases useful info is found in syslog - try
       dmesg | tail or so.
samba 挂载使用的type是 cifs,用mount挂载时报错,这是因为没有安装cifs-utils,使用yum安装
[root@node01 ~]# yum install -y cifs-utils
再次尝试进行挂载
 
  
[root@node01 ~]# mount -t cifs -o user=smbuser,pass=redhat //node02.lab.example.com/samba /mnt
 
  
用df确认下,发现我们已经mount成功了
 
  
[root@node01 ~]# df -h | grep mnt
//node02.lab.example.com/samba   17G  1.7G   16G  10% /mnt
[root@node01 ~]#