Samba是在LinuxUNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMBServer Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

 

SMB是基于客户机/服务器型的协议,因而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可以通过SMB协议共享Samba服务器上的资源文件,同时,Samba服务器也可以访问网络中其它windows系统或者Linux系统共享出来的文件。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

 

Sambawindows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。

 

组成Samba运行的有两个服务,一个是SMB,另一个是NMBSMBSamba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话,验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137138 UDP端口。

 

系统平台:CentOS 6.7
服务器:balichvm(192.168.171.51)
samba版本:3.6.23-20.el6

 

1)、使用yum 安装,yuminstall samba samba-client –y

 yum install sambasamba-client –y

        

2)、启动samba服务

 /etc/init.d/smb start         
启动 SMB 服务:                                   [确定]

 

另外:可以使用


/etc/init.d/smb  status           #查看运行状态
/etc/init.d/smb  stop              #停止服务
/etc/init.d/smb  restart            #重启服务


 

 

3)、配置samba服务,samba的配置文件默认是在/etc/samba/smb.conf

主配置文件/etc/samba/smb.conf 主要有两部分构成:


Global Settings        #主要是samba服务的整体运行环境的设定
Definitions        #主要是针对共享目录的设定


 

在配置文件里面都有说明每个选项是做什么的,我们根据需求修改,如下是一个开放匿名访问的配置。

 

[global]    
   workgroup = MYGROUP
server string =Samba Server Version %v
   log file = /var/log/samba/log.%m
   max 50KB per log file, then rotate
   max log size = 50
   security = user
passdb backend= tdbsam
   load printers = yes
cups options =raw
 
[homes]
   comment = Home Directories
   browseable = no
   writable = yes
 
[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no
   guest ok = no
    writable= no
printable = yes

 

以上是系统默认的配置,三部分组成:[global] 是全局设定;[homes] 是设定共享目录的;[printers] 打印机相关

 

[global]

security是设置用户访问Samba Server的验证方式,一共有四种验证方式
(1)share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
(2)user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
(3)server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。
     此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 
     远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
(4)domain:域安全级别,使用主域控制器(PDC)来完成认证。
 
passdb backend 是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
(1)smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,
    客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
(2)tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/var/lib/samba/private/目录下。
     passdb.tdb用户数据库可以使用smbpasswd–a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。
     我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我们列出几个主要的。
pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]”–u username:暂停该Samba用户的账号。
pdbedit –c “[]”–u username:恢复该Samba用户的账号。
(3)ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”

 

4)、如果需要配置一个不需要密码访问的共享,这个共享这是用来查看,不能写入、删除。

操作如下:

 
[global]中的配置,主要是修改:
workgroup = MYGROUP    修改为:workgroup =WORKGROUP      #和Windows的工作组一样;
security = user       修改为:security= share        #不需要使用密码访问共享;
 
[global]
       workgroup = WORKGROUP
       server string = Samba Server Version %v
       log file = /var/log/samba/log.%m
       max log size = 50
       security = share
       passdb backend = tdbsam
       load printers = yes
       cups options = raw
 
共享模块如下:
[homes Share]
   comment = Home Directories
   path=/data/smbshare
   browseable = yes
   writable = no
   public =yes

 

保存配置文件,然后建立一个共享目录:

 mkdir /data/smbshare

 

重启服务,验证,在验证的过程中,最后先关闭防火墙,或者添加防火墙规则放行。

/etc/init.d/smb restart
关闭 SMB 服务:                                [确定]
启动 SMB 服务:                         [确定]

现在就配置好一个可以不需要密码访问的共享。

 

 

5)、配置一个需要使用用户名和密码访问的共享,又该如何做呢?

 

修改配置文件

[global]
       workgroup = WORKGROUP
       server string = Samba Server Version %v
       log file = /var/log/samba/log.%m
       max log size = 50
       security = user
       passdb backend = tdbsam
       load printers = yes
       cups options = raw
 
[homes Share]
   comment = Home Directories
   path=/data/smbshare
   browseable = yes
   writable = yes
   public =yes

 主要是修改,security,又share改为 user,这是使用Samba Server负责检查账号和密码的正确性。这里是可以写入的,而且使用密码登录也是用到系统的用户映射samba的用户,所以需要这个系统的用户也有写入的权限。

 

# 创建系统用户
useradd smb01 -s/sbin/nologin         
# 创建samba用户
pdbedit -a smb01                 
new password:
retype new password:
Unix username:        smb01
NT username:         
Account Flags:        [U          ]
User SID:            S-1-5-21-2364909119-1490199994-3424665779-1000
Primary Group SID:    S-1-5-21-2364909119-1490199994-3424665779-513
Full Name:           
Home Directory:       \\balichvm\smb01
HomeDir Drive:       
Logon Script:        
Profile Path:         \\balichvm\smb01\profile
Domain:               BALICHVM
Account desc:        
Workstations:        
Munged dial:         
Logon time:           0
Logoff time:          三, 06 2月 203623:06:39 CST
Kickoff time:         三, 06 2月 203623:06:39 CST
Password last set:    五, 06 11月 201512:50:08 CST
Password can change:  五, 06 11月 201512:50:08 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         :FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

在上面的操作中,首先是建立一个系统用户,然后使用pdbedit a 增加用户登录samba服务的用户和输入密码。

pdbedit 可以使用 h 选项查看帮助信息。

 

重启smb服务就可以访问共享了,这时候需要输入密码。

 

6)、访问samba共享资源

Linux的客户端需要用到smbclient这个工具,系统默认自带。


smbclient –L  //Samba服务器的ip地址  -U Samba用户名    ##查看samba服务器上的共享资源
 
smbclient //Samba服务器的ip地址  -U  Samba用户名           ##登录samba服务器


 

如要需要挂载,需要安装cifs-utils软件包(yum install 即可)

 

#挂载samba共享
mount –t cifs //ip/sharename /localdir –ousername=user, password=passwd

windows客户端:

运行——输入“\\ip       然后输入用户名和密码(如果需要的话)

 

 

添加防火墙规则:

netstat -lnp |grep smb
tcp       0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      33561/smbd         
tcp       0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      33561/smbd         
tcp       0      0 :::445                      :::*                        LISTEN      33561/smbd         
tcp       0      0 :::139                      :::*                        LISTEN      33561/smbd

       

可以看到,samba使用的是tcp 139445端口,需要把这两个端口放行。

 vim/etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp--dport 139 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp--dport 445 -j ACCEPT

 

保存,退出,重启iptables

 /etc/init.d/iptablesrestart

  


Samba案例:(摘自网络)

 

实现不同的用户访问同一个共享目录具有不同的权限,便于管理和维护。

 

1)需求:

1. 某公司有5个大部门,分别为:人事行政部(HR & Admin Dept)、财务部(Financial Management Dept)、技术支持部(TechnicalSupport Dept)、项目部(Project Dept)、客服部(Customer Service Dept)。

2. 各部门的文件夹只允许本部门员工有权访问;各部门之间交流性质的文件放到公用文件夹中。

3. 每个部门都有一个管理本部门文件夹的管理员账号和一个只能新建和查看文件的普通用户权限的账号。

4. 公用文件夹中分为存放工具的文件夹和存放各部门共享文件的文件夹。

5. 对于各部门自己的文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下新建文件及文件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访问,不能更改和删除。不是本部门用户不能访问本部门文件夹。

6. 对于公用文件夹中的各部门共享文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下新建文件及文件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访问,不能更改和删除。本部门用户(包括管理员和普通用户)在访问其他部门共享文件夹时,只能查看不能修改删除新建。对于存放工具的文件夹,只有管理员有权限,其他用户只能访问。

 

2)规划:

根据给出的需求,有如下的规划:

1. 在系统分区时单独分一个Company的区,在该区下有以下几个文件夹:HR FMTSPROCSShare。在Share下又有以下几个文件夹:HRFMTSPROCSTools

2. 各部门对应的文件夹由各部门自己管理,Tools文件夹由管理员维护。

3. 各相关帐号规划:


HR管理员账号:hradmin;普通用户账号:hruser。
FM管理员账号:fmadmin;普通用户账号:fmuser。
TS管理员账号:tsadmin;普通用户账号:tsuser。
PRO管理员账号:proadmin;普通用户账号:prouser。
CS管理员账号:csadmin;普通用户账号:csuser。
Tools管理员账号:shareadmin。


 

4.文件夹之间的关系:

 

# tree
.
├── CS
├── FM
├── HR
├── PRO
└── TS
├── Share
│├── CS
│├── FM
│├── HR
│├── PRO
│├── Tools
│└── TS

   

3)在系统上安装实现

 

在操作之前,需要已经安装了samba,如果没有安装,可以使用yum install –y samba samba-client 快速安装。

 

1. 新建用户,使用useradd命令新建系统用户,这些用户不需要登录系统。然后使用pdbedit –a 添加samba的用户。

 useradd -s /sbin/nologinhradmin    
 useradd -g hradmin -s/sbin/nologin hruser 
 useradd -s /sbin/nologinfmadmin
 useradd -g fmadmin -s/sbin/nologin fmuser
 useradd -s /sbin/nologintsadmin
 useradd -g tsadmin -s/sbin/nologin tsuser
  useradd -s /sbin/nologinproadmin
 useradd -g proadmin -s/sbin/nologin prouser
  useradd -s /sbin/nologincsadmin
 useradd -g csadmin -s/sbin/nologin csuser
 useradd -s /sbin/nologinshareadmin


以上都是先创建一个部门的管理帐号,然后在创建一个部门的普通帐号并加入这个部门的组。

 

使用pdbedit –a 创建SMB帐号

pdbedit -a hradmin #创建smb用户hradmin
new password:
retype new password:                 #密码123abc
 pdbedit -a hruser      #创建smb用户hruser
new password:
retype new password:                   #密码123abc
 pdbedit -a fmadmin
new password:
retype new password:
 pdbedit -a fmuser
new password:
retype new password:
 pdbedit -a tsadmin
new password:
retype new password:
 pdbedit -a tsuser
new password:
retype new password:
 pdbedit -a proadmin
new password:
retype new password:
 pdbedit -a prouser
new password:
retype new password:
[root@balichvm ~]#new password:
retype new password:
 pdbedit -a csuser
new password:
retype new password:
 pdbedit -a shareadmin
new password:
retype new password:

 

以上的创建的用户名和系统创建的用户名是相同的,输入密码,会有该用户的相关信息展示,这里省略了。

 

2.创建目录

cd /
 mkdir Company                           #创建总目录
 cd Company/                            #进入目录
 mkdir HR FM TS PROCS Share            #创建各部门目录
 cd Share/                         #进入开发共享的目录
mkdir HR FM TS PROCS Tools          #创建各目录


3.更改目录属性

 chownhradmin:hradmin HR
 chownfmadmin:fmadmin FM
 chowntsadmin:tsadmin TS
 chownproadmin:proadmin PRO
 chown csadmin:csadminCS
 chownshareadmin:shareadmin Share

 

同个部门的普通用户需要有写入到本部门的权限,对自己的文件有完全控制。

 chmod 1770 HR FMTS PRO CS
 chmod 1775 Share/

 

Company目录下的各个部门的目录的所有者和所属组都修改。

# cd Share/                 #进入公共共享目录
# chown hradmin:hradmin HR && chown fmadmin:fmadmin FM && chown tsadmin:tsadmin TS \ 
  && chown proadmin:proadmin PRO && chown csadmin:csadmin CS && chown shareadmin:shareadmin Tools

在需求中,公用文件夹中的各部门共享文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下新建文件及文件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访问,不能更改和删除。本部门用户(包括管理员和普通用户)在访问其他部门共享文件夹时,只能查看不能修改删除新建。对于存放工具的文件夹,只有管理员有权限,其他用户只能访问。

 

同一个部门的需要有写入的权限,另外这里就需要使用到特殊权限sticky

 # chmod 1775 HR FM TSPRO CS

 

 

4.配置samba,配置文件是:/etc/samba/smb.conf,配置如下:

 

#======================= Global Settings=====================================
[global]
   workgroup = WORKGROUP
   server string = Samba Server Version %v
   log file = /var/log/samba/log.%m
   max log size = 50
   security = user
passdb backend= tdbsam
 
#============================ ShareDefinitions ==============================
 
[HR]
   comment = This is a directory of HR.
   path=/Company/HR/
   writable = yes
   public =no
   admin users = hradmin
   valid users = @hradmin
   create mask = 0750
   directory mask =0750
 
[FM]
   comment = This is a directory of FM.
   path=/Company/FM/
   writable = yes
    public=no
   admin users = fmadmin
   valid users = @fmadmin
   create mask = 0750
   directory mask = 0750
 
[TS]
   comment = This is a directory of TS.
   path=/Company/TS/
   writable = yes
   public =no
   admin users = tsadmin
   valid users = @tsadmin
   create mask = 0750
   directory mask = 0750
 
[PRO]
   comment = This is a directory of PRO.
   path=/Company/PRO/
   writable = yes
   public =no
   admin users = proadmin
   valid users = @proadmin
   create mask = 0750
   directory mask = 0750
 
 
[CS]
   comment = This is a directory of CS.
   path=/Company/CS/
   writable = yes
   public =no
   admin users = csadmin
   valid users = @csadmin
   create mask = 0750
   directory mask = 0750
 
[Share]
   comment = This is a directory of Share.
   path=/Company/Share/
   browseable = yes
   writable = yes
   public =no
   valid users = shareadmin,@hradmin,@fmadmin,@tsadmin,@proadmin,@csadmin
   create mask = 0755
directory mask= 0755

 

配置完成,在客户机上测试,如果需要开启防火墙,请把tcp 139445端口放行。

 

Linux客户机:smbclient  //共享主机IP或者主机名/共享名 -U 用户名  这种方式访问。

windows客户机:开始——运行——输入【\\共享主机IP或者主机名】——回车,按提示输入用户名密码。

如果要切换其他用户测试:

首先通过开始-->运行-->cmd 输入:“net use”命令查看现有的连接,然后执行“net use \\Samba服务器IP地址或者netbios名称\ipc$ /del”,删除Samba服务器已经建立的连接。或者执行“net use * /del”将现在所有的连接全部删除。最后,再次执行“\\ip地址”时,就可以切换用户了。