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.9

服务器:neo192.168.1.166)

centos内核版本:2.6.32-573.e16.x86_64


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

[[email protected] EGSVIP]# yum install sambasamba-client –y            #安装

 

2)、启动samba服务

[[email protected] EGSVIP]# /etc/init.d/smb start             #启动smb服务

启动 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的验证方式,一共有四种验证方式

1share:用户访问Samba Server不需要提供用户名和口令安全性能较低。

2userSamba Server共享目录只能被授权的用户访问,Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。

3server:依靠其他Windows NT/2000Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。

4domain:域安全级别,使用主域控制器(PDC)来完成认证。

 

passdb backend 是用户后台的意思。目前有三种后台:smbpasswdtdbsamldapsamsam应该是security account manager(安全账户管理)的简写。

1smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。

2tdbsam该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/var/lib/samba/private/目录下。passdb.tdb用户数据库可以使用smbpasswda来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我们列出几个主要的。

pdbedit a username:新建Samba账户。

pdbedit x username:删除Samba账户。

pdbedit L:列出Samba用户列表,读取passdb.tdb数据库文件。

pdbedit Lv:列出Samba用户列表的详细信息。

pdbedit [D]u username:暂停该Samba用户的账号。

pdbedit []u username:恢复该Samba用户的账号。

3ldapsam:该方式则是基于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           #创建系统用户

# pdbedit -a smb01                     #创建samba用户

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 增加用户登录samba服务的用户和输入密码。

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

 

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

 

6)、访问samba共享资源

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

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

 

smbclient //Samba服务器的ip地址  -U  Samba用户名           ##登录samba服务器

 

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

 

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

 

windows客户端:

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

 

 

添加防火墙规则:

 

[[email protected] EGSVIP]# netstat -lnp |grep smb

Centos 6.9 samba服务安装和配置


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

# vim /etc/sysconfig/iptables #进入防火墙编辑模式

Centos 6.9 samba服务安装和配置

 

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

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


保存,退出,重启iptables

 

# /etc/init.d/iptables restart              ##重启


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

 

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.文件夹之间的关系:

 

[[email protected] Company]# 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的用户。

[[email protected] ~]# useradd -s /sbin/nologinhradmin    #创建hradmin 用户,不需要登录系统

[[email protected] ~]# useradd -g hradmin -s/sbin/nologin hruser #创建hruser用户,加入hradmin

[[email protected] ~]# useradd -s /sbin/nologinfmadmin

[[email protected] ~]# useradd -g fmadmin -s/sbin/nologin fmuser

[[email protected] ~]# useradd -s /sbin/nologintsadmin

[[email protected] ~]# useradd -g tsadmin -s/sbin/nologin tsuser

[[email protected] ~]# useradd -s /sbin/nologinproadmin

[[email protected] ~]# useradd -g proadmin -s/sbin/nologin prouser

[[email protected] ~]# useradd -s /sbin/nologincsadmin

[[email protected] ~]# useradd -g csadmin -s/sbin/nologin csuser

[[email protected] ~]# useradd -s /sbin/nologinshareadmin

[[email protected] ~]#

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

 

使用pdbedit –a 创建SMB帐号

[[email protected] ~]# pdbedit -a hradmin #创建smb用户hradmin

new password:

retype new password:                 #密码123abc

[[email protected] ~]# pdbedit -a hruser      #创建smb用户hruser

new password:

retype new password:                   #密码123abc

[[email protected] ~]# pdbedit -a fmadmin

new password:

retype new password:

[[email protected] ~]# pdbedit -a fmuser

new password:

retype new password:

[[email protected] ~]# pdbedit -a tsadmin

new password:

retype new password:

[[email protected] ~]# pdbedit -a tsuser

new password:

retype new password:

[[email protected] ~]# pdbedit -a proadmin

new password:

retype new password:

[[email protected] ~]# pdbedit -a prouser

new password:

retype new password:

[[email protected] ~]# pdbedit -a csadmin

new password:

retype new password:

[[email protected] ~]# pdbedit -a csuser

new password:

retype new password:

[[email protected] ~]# pdbedit -a shareadmin

new password:

retype new password:

 

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

 

 

2.创建目录

[[email protected] ~]# cd /

[[email protected] /]# mkdir Company                           #创建总目录

[[email protected] /]# cd Company/                            #进入目录

[[email protected] Company]# mkdir HR FM TS PROCS Share            #创建各部门目录

[[email protected] Company]# cd Share/                         #进入开发共享的目录

[[email protected] Share]# mkdir HR FM TS PROCS Tools          #创建各目录

 

 

3.更改目录属性

[[email protected] Company]# chown hradmin:hradmin HR

[[email protected] Company]# chown fmadmin:fmadmin EGSVIP

[[email protected] Company]# chown tsadmin:tsadmin TS

[[email protected] Company]# chown proadmin:proadmin PRO

[[email protected] Company]# chown csadmin:csadmin CS

[[email protected] Company]# chown shareadmin:shareadmin Share

Centos 6.9 samba服务安装和配置

 

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

[[email protected] Company]# chmod 1770 HR FMTS PRO CS

[[email protected] Company]# chmod 1775 Share/

 

 

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

[[email protected] Company]# cd Share/                 #进入公共共享目录

[[email protected] Share]# chownhradmin:hradmin HR && chown fmadmin:fmadmin FM && chowntsadmin:tsadmin TS && chown proadmin:proadmin PRO && chowncsadmin:csadmin CS && chown shareadmin:shareadmin Tools

 

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

 

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

 

[[email protected] Share]# chmod 1775 HR FM TSPRO CS          #增加sticky

 

 

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地址”时,就可以切换用户了。

或者映射网络驱动器:

Centos 6.9 samba服务安装和配置

最终映射成功!!!如下截图:

Centos 6.9 samba服务安装和配置





相关文章: