本片博客主要介绍了[Samba] Linux(Centos)samba文服务器安装案例,samba共享,samba服务,samba配置详解及网页配置samba工具samba-swat 的使用方法等。


Samba Server


  • Samba简介

Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。主要功能是作为 NFS系统(linux系统之间文件共享) 的补充,实现在 Linux 和 Windows 系统中进行文件共享和打印机共享。

    SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

    CIFS 协议(Common Internet File System,公共Internet文件系统) 定义网络中使用的标准远程文件系统访问协议,使用户组能够一起工作并在网络中实现共享文档。

Samba服务采用C/S模式,,其工作机制是让NetBIOS(Windows 网上邻居的通信协议)和SMB两个协议运行于TCP/IP通信协议之上,并且用NetBEUI协议让Windows在“网上邻居”中能浏览Linux服务器。Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可以通过SMB协议共享Samba服务器上的资源文件,同时,Samba服务器也可以访问网络中 其它windows系统或者Linux系统共享出来的文件。

  • Samba服务

Samba所需软件包括:Samba(服务器端软件包),Samba-client(客户端软件包),Samba-common(Samba公共文件软件包),Samba-Winbind(使用 Windows 域控制器管理 Linux 帐户);

Samba由smbd 和 nmbd两个守护进程组成:

    smbd服务进程是Samba的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话,为客户端提供文件共享与打印机服务及负责用户权限验证以及锁功能,smdb默认监听端口是 139 与 445 TCP端口。Samba通过smb服务启动smbd进程,可使用命令 # netstat -nutlp 可以查看进程端口信息;

    nmbd进程提供NetBIOS名称服务,以满足基于Common Internet File System(CIFS)协议的共享访问环境(类似与DNS实现的功能,实现把Linux系统共享的工作组名称与其IP对应起来),Samba通过nmb 服务启动 nmbd进程,该进程默认监听的是137与 138 UDP端口;

Samba服务器可实现如下功能:WINS和DNS服务; 网络浏览服务; Linux和Windows域之间的认证和授权; UNICODE字符集和域名映射;满足CIFS协议的UNIX共享等。

  • Samba服务器访问 

Samba服务器的IP地址为192.168.0.150,对应的工作组名称为ITWISH。

  1. Windows下查看Linux Samba服务器共享文件的方法,可通过“IE浏览器”或双击打开“我的电脑”,方式如下:

        \\192.168.0.150\共享目录名称

        \\ITWISH\共享目录名称

  2. linux 下查看Linuxsamba服务器的方法,可通过命令smbclient ,方法如下:

        # smbclient //192.168.0.150/共享目录名称 -U username 

  3. linux下手动挂载samba共享目录的方法,可通过命令mount ,方法如下

        # mount -t cifs //192.168.0.150/共享目录   /mnt  -o username=name

  4. linux下自动挂载samba共享目录的方法,方法如下

[root@vm ~]# vi /etc/fstab    # 添加如下项,直接显示用户名及密码

//192.168.23.100/FM    /tmp/fm              cifs    defaults,_netdev,user=fmadmin,password=fmadmin 0 0

或者

[root@vm ~]# vi /etc/fstab    # 添加如下项,以配置文件的方式验证用户及密码

//192.168.23.100/FM    /tmp/fm              cifs    defaults,_netdev,credentials=/etc/samba/pwd.txt 0 0

[root@vm ~]# vi /etc/samba/pwd.txt    # 添加用户名及密码
username=fmadmin
password=fmadmin

  • 相关命令的选项及功能

  1. # smbclient命令,它提供一种命令行使用交互式方式访问samba服务器的共享资源  ,用法如下: 

        smbclient -L 198.168.0.150 -U username%password    # 列出samba共享服务器端的文件列表

        smbclient  //192.168.0.150/public  -U username%password    # 像ftp一样,使用smbclient 与samba服务器进行交互操作

        smbclient -c "ls"  //192.168.0.150/public  -U username%password    # 不进入交互界面,直接显示共享目录下的列表文件

  2. # smbpasswd 命令,实现添加或删除samba用户和为用户修改密码  ,保存到单独的文件中

        -a:向smbpasswd文件中添加用户;

        -c:指定samba的配置文件;

        -x:从smbpasswd文件中删除用户;

        -d:在smbpasswd文件中禁用指定的用户;

        -e:在smbpasswd文件中激活指定的用户;

        -n:将指定的用户的密码置空。

        例:smbpasswd -a itwish -c /etc/samba/smb.pass     # 第一次创建用户itwish并指定密码文件为/etc/samba/smb.pass

  3. # pdbedit 命令,实现添加或删除samba用户和为用户修改密码,添加到passdb.tdb库中

        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用户的账号。


Samba服务器安装


1)系统环境准备

  • 系统平台:CentOS release 6.6 (Final)

  • Samba版本:samba-3.6.23-51.el6.x86_64.rpm

  • Samba Server IP:192.168.0.150

  • 关闭防火墙(CentOS 6默认使用iptables ,ip6tables)

  • 关闭SELINUX ,SELINUX=disabled

[root@vm ~]# cat /etc/redhat-release     # 查看系统版本
CentOS release 6.6 (Final)

[root@vm ~]# vi /etc/sysconfig/selinux     # 调整配置文件,关闭SELINUX ,设置SELINUX=disabled
SELINUX=disabled    # 设置该项为disabled

[root@vm ~]# ifconfig eth0    # 查看服务器ip地址
eth0      Link encap:Ethernet  HWaddr 08:00:27:E5:00:9E  
          inet addr:192.168.0.150  Bcast:192.168.0.255  Mask:255.255.255.0
          
[root@vm ~]# chkconfig iptables off    # 关闭iptables 开机自启动
[root@vm ~]# chkconfig ip6tables off

[root@vm ~]# reboot    # 重启使selinux,iptables 设置生效


2)samba服务安装

  • samba服务器安装,使用yum安装

[root@vm ~]# yum install samba samba-client -y    # 安装samba服务和samba-client软件,依赖samba-common ,samba-winbind,samba-winbind-clients软件包
...
Installed:
  samba.x86_64 0:3.6.23-51.el6                                                                                   

Dependency Installed:
  samba-common.x86_64 0:3.6.23-51.el6                        samba-winbind.x86_64 0:3.6.23-51.el6              
  samba-winbind-clients.x86_64 0:3.6.23-51.el6              

Complete!
  • samba服务依赖安装的软件包

[root@vm ~]# rpm -qa samba*    # 查看与samba相关的软件包名称及相应版本
samba-3.6.23-51.el6.x86_64    # samba服务器软件,主要提供samba服务器的守护程序smbd 和nmbd
samba-winbind-clients-3.6.23-51.el6.x86_64    
samba-winbind-3.6.23-51.el6.x86_64    
samba-client-3.6.23-51.el6.x86_64    # samba客户端软件
samba-common-3.6.23-51.el6.x86_64    # samba公共软件包,主要提供samba服务器的配置文件与pdbedit、smbpasswd、testparm等命令
  • samba软件包相关配置文件

[root@vm ~]# rpm -ql samba    # 查看samba软件包生成的文件列表

/etc/pam.d/samba    # samba服务器pam.d认证模块

/etc/rc.d/init.d/nmb    # nmb服务启动脚本

/etc/rc.d/init.d/smb    # smb服务启动模块

/etc/samba/smbusers    # 映射用户列表

/usr/sbin/nmbd    # nmbd命令脚本文件

/usr/sbin/smbd    # smbd命令脚本文件

/var/spool/samba    # samba默认存储目录

[root@vm samba]# rpm -ql samba-common    #  查看samba-common软件包生成的文件列表

/etc/samba/smb.conf    # samba配置文件

/usr/bin/pdbedit    # pdbedit命令脚本,管理samba账户命令

/usr/bin/smbpasswd    # smbpasswd命令脚本,smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码

/usr/bin/testparm    # testparm命令脚本,测试smb.conf 核心配置文件语法是否正确
  • 配置开机启动

[root@vm samba]# chkconfig smb on    # 配置samba服务器smb服务与nmb服务开机自启动

[root@vm samba]# chkconfig nmb on

[root@vm samba]# service smb start    # 启动smb服务
Starting SMB services:                                     [  OK  ]

[root@vm samba]# service nmb start    # 启动nmb服务
Starting NMB services:                                     [  OK  ]

[root@vm samba]# ss -tunlp | grep smb    # 查看smb服务启动端口
tcp    LISTEN     0      50                     *:445                   *:*      users:(("smbd",1311,28))
tcp    LISTEN     0      50                    :::445                  :::*      users:(("smbd",1311,26))
tcp    LISTEN     0      50                     *:139                   *:*      users:(("smbd",1311,29))
tcp    LISTEN     0      50                    :::139                  :::*      users:(("smbd",1311,27))

[root@vm samba]# ss -tunlp | grep nmb    # 查看nmb服务启动端口
udp    UNCONN     0      0          192.168.0.255:137                   *:*      users:(("nmbd",1328,12))
udp    UNCONN     0      0          192.168.0.150:137                   *:*      users:(("nmbd",1328,11))
udp    UNCONN     0      0                      *:137                   *:*      users:(("nmbd",1328,9))
udp    UNCONN     0      0          192.168.0.255:138                   *:*      users:(("nmbd",1328,14))
udp    UNCONN     0      0          192.168.0.150:138                   *:*      users:(("nmbd",1328,13))
udp    UNCONN     0      0                      *:138                   *:*      users:(("nmbd",1328,10))


3)smb.conf 配置脚本

Samba的主配置文件为/etc/samba/smb.conf,主配置文件由两部分构成:全局参数及共享定义。在配置相关参数时,格式为  name = value

  • Samba Server的验证方式,包含四种验证方式。

  1. share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。该模式已被弃用

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

  3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。该模式已被弃用

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

  • sam应该是security account manager(安全账户管理)的简写,目前用户后端有三种模式:smbpasswd、tdbsam和ldapsam。

  1. smbpasswd:旧的明文passdb后端。如果使用此passdb后端,某些Samba功能将不起作用。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。

  2. tdbsam:基于TDB的密码存储后端。将TDB的路径作为可选参数(默认为在/etc/samba 目录中的passdb.tdb)。passdb.tdb用户数据库可以使用smbpasswd –a 来建立Samba用户,不过要建立的Samba用户必须先是系统用户; 也可使用pdbedit命令来建立Samba账户             

  3. ldapsam:基于LDAP的passdb后端。 将LDAP URL作为可选参数(默认为ldap:// localhost)

  • Global Settings (全局参数):该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。

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

#======================= Global Settings =====================================    # 全局参数

[global]

# ----------------------- Network Related Options -------------------------
#
#
        workgroup = MYGROUP    # 设定 Samba Server 所要加入的工作组或者域
        
        server string = Samba Server Version %v    # 设定 Samba Server 的注释,可以是任何字符串。宏%v表示显示Samba的版本号。

;       netbios name = MYSERVER    # 设置Samba Server的NetBIOS名称

;       interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24     # 设置Samba Server监听的网卡名称或网卡的IP地址,参数之间使用空格隔开

;       hosts allow = 127. 192.168.12. 192.168.13.    # 表示允许连接到Samba Server的客户端,多个参数以空格隔开,可以是ip地址或ip网段。

        host deny = @itwish    # 表示拒绝连接samba server的客户端 ,@itwish 代表了itwish域内的所有计算机

        max connections = 0    # 用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
        
        deadtime = 0    # 用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。
        
        username map = /etc/samba/smbusers     # 用来定义用户名映射,比如可以将root换成administrator、admin等。事先要在/etc/samba/smbusers文件中定义好。
        
        time server = yes/no    # nmbd将会告知windows的客户端自己是否作为smb的时间服务器,可以用net time /yes /set 来同步时间
        
# --------------------------- Logging Options -----------------------------

        log file = /var/log/samba/log.%m    # 日志文件路径,宏%m表示客户端主机的Netbios名
        
        max log size = 50    # 每个log日志的最大容量为50K ,单位是kb ,0代表不做限制
        

# ----------------------- Standalone Server Options ------------------------
#               
        encrypt passwords = yes  # 是否将认证密码加密,默认已开启加密功能。
        
        security = user    # 指定Samba Server的验证方式,默认为user
        
        map to guest = Bad User    # 允许匿名用户访问,同时需把security = user 注释掉
                      
        passdb backend = tdbsam    # 定义用户密码后端的模式,默认为tdbsam
        
        passdb backend = smbpasswd    # 定义用户密码后端的模式为smbpasswd 
        smb passwd file = /etc/samba/smbpasswd    # 用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。格式为用户名一行,密码一行 

# ----------------------- Domain Members Options ------------------------
#
;       security = domain
;       passdb backend = tdbsam
;       realm = MY_REALM

;       password server = <NT-Server-Name>

# ----------------------- Domain Controller Options ------------------------
#
;       security = user
;       passdb backend = tdbsam

;       domain master = yes    # 设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务    
;       domain logons = yes    # 设置samba为win98/95所登陆的域服务器


# ----------------------- Browser Control Options ----------------------------
#
;       local master = yes    # local master用来指定Samba Server是否试图成为本地网域主浏览器
;       os level = 33        # 设置samba服务器的os level ,该参数决定Samba Server是否有机会成为本地网域的主浏览器
;       preferred master = yes    #  设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会

#----------------------------- Name Resolution -------------------------------
# Windows Internet Name Serving Support Section:
# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both

;       wins support = yes    # 设置samba服务器是否提供wins服务
;       wins server = w.x.y.z    # 设置Samba Server是否使用别的wins服务器提供wins服务
;       wins proxy = yes    # 设置Samba Server是否开启wins代理服务

;       dns proxy = yes    # 设置Samba Server是否开启dns代理服务

# --------------------------- Printing Options -----------------------------
#
        load printers = yes    # 设置是否在启动Samba时就共享打印机
        cups options = raw    # 此参数在打印设置时使用
  • Share Definitions(共享定义) :该设置针对的是共享目录个别的设置,只对当前的共享资源起作用。

#============================ Share Definitions ==============================

[homes]
        comment = Home Directories    # 是对该共享的描述,可以是任意字符串
        
        browseable = yes/no    # 是否允许该目录被显示在系统资源中
        
        path = /var/spool/samba    # 指定共享目录的路径
        
        writable = yes/no    # 用来指定该共享路径是否可写,writeable = yes 功能等同于参数:read only = no
        
        guest ok = yes/no    # 是否允许guest用户访问。guest ok = yes 功能等同于参数:public= yes
        
        write list = @nfs    # 允许组@nfs 在共享目录中创建、修改、删除文件,当然与目录的属性也有相关性
        
        admin users =itwish    # 指定该共享目录的管理者,多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示 
        
        create mask = 0640    # 设置上传文件的权限,为了安全性,禁止文件执行权限
                
        directory mask = 0775    # 设置创建目录的权限
        
        invalid users = itwish    # 禁止访问该共享的用户
        
;       valid users = %S    # 用来指定允许访问该共享资源的用户;%S代表当前服务名;多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示 ;
               
;       valid users = MYDOMAIN\%S

注:可以使用testparm命令测试smb.conf配置是否正确;使用命令# testparm –v 可以详细的列出smb.conf支持的配置参数;另可以使用命令# man smb.conf 查看相关参数及相关功能。


Samba服务器配置案例


1)案例,公司允许所有用户匿名访问共享文件/public ,允许匿名用户上传、删除、修改文件

  • 设定配置文件

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

#======================= Global Settings =====================================

[global]
# ----------------------- Network Related Options -------------------------

        workgroup = WORKGROUP    # 定义工作组为WORKGROUP
        server string = Samba Server Version %v    # 显示信息Samba server 版本号
        netbios name = SambaServer    # 定义netbios 名称为SambaServer

            
# --------------------------- Logging Options -----------------------------

        log file = /var/log/samba/log.%m    # 定义日志路径
        max log size = 50       # 定义日志最大为50K   
        
# ----------------------- Standalone Server Options ------------------------

        map to guest = Bad User    # 定义允许匿名用户访问

#============================ Share Definitions ==============================

[public]
        comment = Public Stuff    # 定义共享目录的注释
        path = /var/ftp/pub    # 定义共享目录的路径
        browseable = yes    # 允许该目录被显示在系统资源中
        writeable = yes    # 允许共享目录可写
        guest ok = yes      # 允许guest账户访问
        create mask = 0644    # 设置上传文件的权限,为了安全性,不给予文件执行权限        
        directory mask = 0755  # 设置创建目录的权限
  • 验证smb.conf 配置文件,并重启smb和nmb服务

[root@vm samba]# testparm     # 测试smb.conf语法的正确性
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
	netbios name = SAMBASERVER
	server string = Samba Server Version %v
	map to guest = Bad User
	log file = /var/log/samba/log.%m
	max log size = 50
	client signing = required

[public]
	comment = Public Stuff
	path = /var/ftp/pub
	read only = No
	create mask = 0640
	guest ok = Yes

[root@vm samba]# service smb restart
Shutting down SMB services:                                [  OK  ]
Starting SMB services:                                     [  OK  ]
[root@vm samba]# service nmb restart
Shutting down NMB services:                                [  OK  ]
Starting NMB services:                                     [  OK  ]		
  • 创建共享目录,并分配nobody 匿名用户权限

[root@vm ~]# mkdir /var/ftp/pub -p    # 创建samba共享目录

[root@vm ~]# chown nobody:nobody /var/ftp/pub/    # 为共享目录分配给匿名用户(nobody)权限

[root@vm ~]# ll /var/ftp    # 查看共享目录权限755
total 4
drwxr-xr-x 2 nobody nobody 4096 Sep  7 22:25 pub
  • linux客户端测试 

[root@vm ~]# smbclient -N //localhost/public    # 连接共享目录而不提示输入密码
Anonymous login successful    # 匿名用户连接成功
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-51.el6]

smb: \> dir
  .                                   D        0  Fri Sep  7 22:49:30 2018
  ..                                   D        0  Fri Sep  7 22:25:55 2018
  ab                                  D        0  Fri Sep  7 22:36:17 2018
  cd.docx                                      0  Fri Sep  7 22:39:05 2018
  c                                   D        0  Fri Sep  7 22:39:33 2018
  Notepad++.lnk                              865  Sun Sep  2 17:31:08 2018

		58545 blocks of size 262144. 55072 blocks available

smb: \> mkdir d    # 匿名用户创建文件夹

smb: \> ls
  .                                   D        0  Fri Sep  7 22:49:30 2018
  ..                                   D        0  Fri Sep  7 22:25:55 2018
  ab                                  D        0  Fri Sep  7 22:36:17 2018
  cd.docx                                      0  Fri Sep  7 22:39:05 2018
  d                                   D        0  Fri Sep  7 23:12:34 2018
  c                                   D        0  Fri Sep  7 22:39:33 2018
  Notepad++.lnk                              865  Sun Sep  2 17:31:08 2018

		58545 blocks of size 262144. 55072 blocks available	

smb: \> quit	# 退出				
  •  windows 测试

    image.png

2)案例公司现有多个部门,因工作需要,将FM部的资料存放在samba服务器的/var/ftp/fm 目录中集中管理,以便FM人员浏览。要求:1、该目录/var/ftp/fm仅允许FM部员工访问 ;2、仅允许FM部普通用户对文件目录/var/ftp/fm/upload 进行上传、下载、删除 及创建,且普通用户仅能管理自己上传或创建的文件;3、允许管理员fmadmin对文件目录文件/var/ftp/fm/admin进行上传、下载、删除及创建,同时允许FM部门普通用户下载资源;4、允许fmadmin用户对目录/var/ftp/fm 中的所有目录文件进行管理

  • 设定配置文件

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

#======================= Global Settings =====================================

[global]
# ----------------------- Network Related Options -------------------------

        workgroup = WORKGROUP    # 定义工作组为WORKGROUP
        server string = Samba Server Version %v    # 显示信息Samba server 版本号
        netbios name = SambaServer    # 定义netbios 名称为SambaServer

            
# --------------------------- Logging Options -----------------------------

        log file = /var/log/samba/log.%m    # 定义日志路径
        max log size = 50       # 定义日志最大为50K   
        
# ----------------------- Standalone Server Options ------------------------

        security = user    # 指定Samba Server的验证方式,默认为user
        passdb backend = tdbsam    # 定义用户密码后端的模式,默认为tdbsam

#============================ Share Definitions ==============================

[fm]
        comment = FM Share    # 定义共享目录的注释
        path = /var/ftp/fm    # 定义共享目录的路径
        browseable = yes    # 允许该目录被显示在系统资源中
        valid users = @fmusers    # 仅允许组@fmusers 中的用户访问
        writeable = yes    # 允许共享目录可写
        guest ok = no      # 不允许guest账户访问
        create mask = 0644    # 设置上传文件的权限,为了安全性,不给予文件执行权限        
        directory mask = 0755  # 设置创建目录的权限
  • 验证smb.conf 配置文件,并重启smb和nmb服务

[root@vm ~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[fm]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
	netbios name = SAMBASERVER
	server string = Samba Server Version %v
	security = USER
	log file = /var/log/samba/log.%m
	max log size = 50
	idmap config * : backend = tdb
	cups options = raw


[fm]
	comment = FM Share
	path = /var/ftp/fm
	read only = No
	valid users = @fmusers
	create mask = 0644
	directory mask = 0755

[root@vm ~]# service smb restart
Shutting down SMB services:                                [  OK  ]
Starting SMB services:                                     [  OK  ]
[root@vm ~]# service nmb restart
Shutting down NMB services:                                [  OK  ]
Starting NMB services:                                     [  OK  ]
  • 创建fm部门普通用户及管理员账号;创建共享目录,并分配给目录相关权限

[root@vm ~]# groupadd -r fmusers    # 创建fm部普通用户分组
[root@vm ~]# useradd -g fmusers -s /sbin/nologin -r wangxs    # 创建FM部门员工账号,并划分为fmusers组
[root@vm ~]# useradd -g fmusers -s /sbin/nologin -r yanxs
[root@vm ~]# useradd -g fmusers -s /sbin/nologin -r liangxs
[root@vm ~]# useradd -g fmusers -s /sbin/nologin -r fmadmin    # 创建FM部门管理账号fmadmin,并划分为fmusers组

[root@vm ~]# mkdir /var/ftp/fm/{upload,admin} -p    # 创建samba共享目录,并分配权限
[root@vm ~]# chown fmadmin:fmusers /var/ftp/fm/ -R    # 分配/var/ftp/fm 及其下目录的属主及属组
[root@vm ~]# chmod 755 /var/ftp/fm/  -R   # 分配fm目录及其下的文件为755权限
[root@vm fm]# chmod 775 /var/ftp/fm/upload/    # 为目录/var/ftp/fm/upload  给予775权限,允许内部所有用户所有权限
  • 配置用户登录密码

[root@vm fm]# pdbedit -a fmadmin    # 配置登陆samba账号密码
new password:
retype new password:

[root@vm fm]# pdbedit -a wangxs
[root@vm fm]# pdbedit -a yanxs
[root@vm fm]# pdbedit -a liangxs
  • linux客户端测试 

[root@vm fm]# smbclient //localhost/fm -U fmadmin    # 使用fmadmin管理员登陆验证

Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.2.10]
smb: \> dir 
  .                                   D        0  Mon Sep 10 10:05:16 2018
  ..                                   D        0  Mon Sep 10 10:05:16 2018
  admin                               D        0  Mon Sep 10 10:05:16 2018
  upload                              D        0  Mon Sep 10 10:05:16 2018
  
smb: \> mkdir software    # 创建目录测试

smb: \> mkdir opensoft

smb: \> dir
  .                                   D        0  Mon Sep 10 10:22:13 2018
  ..                                   D        0  Mon Sep 10 10:05:16 2018
  opensoft                            D        0  Mon Sep 10 10:22:13 2018
  admin                               D        0  Mon Sep 10 10:05:16 2018
  upload                              D        0  Mon Sep 10 10:05:16 2018
  software                            D        0  Mon Sep 10 10:22:09 2018

smb: \> rmdir software    # 删除目录测试

smb: \> dir
  .                                   D        0  Mon Sep 10 10:23:54 2018
  ..                                   D        0  Mon Sep 10 10:05:16 2018
  opensoft                            D        0  Mon Sep 10 10:22:13 2018
  admin                               D        0  Mon Sep 10 10:05:16 2018
  upload                              D        0  Mon Sep 10 10:05:16 2018
  fm                                  D        0  Mon Sep 10 10:20:45 2018	
  
smb: \> put install.log    # 上传文件测试
putting file install.log as \install.log (21331.0 kb/s) (average 21332.0 kb/s)

smb: \> dir
  .                                   D        0  Mon Sep 10 10:24:24 2018
  ..                                   D        0  Mon Sep 10 10:05:16 2018
  opensoft                            D        0  Mon Sep 10 10:22:13 2018
  install.log                         N    43688  Mon Sep 10 10:24:24 2018
  admin                               D        0  Mon Sep 10 10:05:16 2018
  upload                              D        0  Mon Sep 10 10:05:16 2018
  fm                                  D        0  Mon Sep 10 10:20:45 2018  	
  
smb: \> get install.log     # 下载文件测试
getting file \install.log of size 43688 as install.log (21331.0 KiloBytes/sec) (average 21332.0 KiloBytes/sec)

smb: \> rename install.log a.txt    # 修改文件名称测试

smb: \> del a.txt     # 删除文件测试

smb: \> dir    # 显示目录内容
  .                                   D        0  Mon Sep 10 10:26:01 2018
  ..                                   D        0  Mon Sep 10 10:05:16 2018
  opensoft                            D        0  Mon Sep 10 10:22:13 2018
  admin                               D        0  Mon Sep 10 10:05:16 2018
  upload                              D        0  Mon Sep 10 10:05:16 2018
  fm                                  D        0  Mon Sep 10 10:20:45 2018	
  
smb: \> cd admin\    # 切换到/var/ftp/fm/admin 目录中创建文件
smb: \admin\> ls
  .                                   D        0  Mon Sep 10 10:05:16 2018
  ..                                   D        0  Mon Sep 10 10:26:01 2018

		405460592 blocks of size 1024. 313394736 blocks available
smb: \admin\> put install.log
putting file install.log as \admin\install.log (42659.9 kb/s) (average 28442.7 kb/s)         

smb: \admin\> put a.sh     # 上传a.sh文件
putting file a.sh as \admin\a.sh (11.7 kb/s) (average 21335.0 kb/s)

smb: \admin\> put random.sh     # 上传random.sh 文件
putting file random.sh as \admin\random.sh (47.8 kb/s) (average 17077.5 kb/s)

smb: \admin\> mkdir test    # 创建文件夹 test
smb: \admin\> dir
  .                                   D        0  Mon Sep 10 10:28:20 2018
  ..                                   D        0  Mon Sep 10 10:26:01 2018
  install.log                         N    43688  Mon Sep 10 10:27:58 2018
  random.sh                           N       49  Mon Sep 10 10:28:08 2018
  test                                 D        0  Mon Sep 10 10:28:20 2018
  a.sh                                N       12  Mon Sep 10 10:28:05 2018  
  
[root@vm ~]# smbclient //localhost/fm -U wangxs    #使用普通用户wangxs登陆进行测试
Enter wangxs's password: 
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.2.10]

smb: \> dir    # 显示目录下文件
  .                                   D        0  Mon Sep 10 10:26:01 2018
  ..                                   D        0  Mon Sep 10 10:05:16 2018
  opensoft                            D        0  Mon Sep 10 10:22:13 2018
  admin                               D        0  Mon Sep 10 10:28:20 2018
  upload                              D        0  Mon Sep 10 10:05:16 2018
  fm                                  D        0  Mon Sep 10 10:20:45 2018

		405460592 blocks of size 1024. 313394672 blocks available

smb: \> mkdir fmuser    # 拒绝在/var/ftp/fm目录中创建目录
NT_STATUS_ACCESS_DENIED making remote directory \fmuser

smb: \> put install.log    # 拒绝在/var/ftp/fm目录中创建文件
NT_STATUS_ACCESS_DENIED opening remote file \install.log

smb: \> cd upload\    # 在/var/ftp/fm/upload 文件中测试创建、上传、删除、修改权限

smb: \upload\> mkdir wangxs    # 允许创建目录

smb: \upload\> put install.log    # 允许上传文件
putting file install.log as \upload\install.log (42659.9 kb/s) (average 42664.1 kb/s)  

mb: \upload\> get install.log     # 下载install.log
getting file \upload\install.log of size 43688 as install.log (42659.9 KiloBytes/sec) (average 42664.1 KiloBytes/sec)

smb: \upload\> rename install.log a.txt    # 把install.log改名为a.txt

smb: \upload\> del a.txt     # 删除a.txt

smb: \upload\> cd ..

smb: \> cd admin\    # 切换进入/var/ftp/fm/admin 目录

smb: \admin\> ls    # 显示目录文件
  .                                   D        0  Mon Sep 10 10:28:20 2018
  ..                                   D        0  Mon Sep 10 10:26:01 2018
  install.log                         N    43688  Mon Sep 10 10:27:58 2018
  random.sh                           N       49  Mon Sep 10 10:28:08 2018
  test                                 D        0  Mon Sep 10 10:28:20 2018
  a.sh                                N       12  Mon Sep 10 10:28:05 2018

		405460592 blocks of size 1024. 313394668 blocks available

smb: \admin\> get install.log     # 测试/var/ftp/fm/admin目录的文件下载
getting file \admin\install.log of size 43688 as install.log (42659.9 KiloBytes/sec) (average 42664.1 KiloBytes/sec)

smb: \admin\> del install.log     # 拒绝普通用户删除/var/ftp/fm/admin 目录中的文件
NT_STATUS_ACCESS_DENIED deleting remote file \admin\install.log

综上,两种不同的使用场景 ,通过不同的配置参数分别实现。


Samba服务器 Web管理工具SWAT


SWAT(Samba WEB Administration Tool) 是通过浏览器对 Samba 进行管理的工具之一。通过 SWAT,可以在 Samba 允许访问范围内的客户端,用浏览器对服务端的 Samba 进行控制。swat工具嵌套在xinetd超级守护进程中,要通过启用xinetd进程来启用swat。因此要先安装xinetd工具包,然后安装swat工具包。

  • 安装samba-swat软件包

[root@vm ~]# yum install samba-3.6.23-41.el6.x86_64.rpm     # 安装samba-swat 软件包

[root@vm ~]# vi /etc/xinetd.d/swat     # 调整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
{
        port            = 901
        socket_type     = stream
        wait            = no
        only_from       = 0.0.0.0    # 表示允许任意ip的主机访问
        user            = root
        server          = /usr/sbin/swat
        log_on_failure  += USERID
        disable         = no    # 把该项改为no ,代表启用swat 功能
}

[root@vm ~]# service xinetd restart    # 通过重启xinetd 服务来启动swat 功能
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
  • 访问 swat

在服务端启动 swat后,我们就可以通过 swat允许范围内的客户机的浏览器中,通过 http://服务器的内网IP:901 来访问服务端的 swat了,输入 root用户的用户名及密码进入 swat的管理首页,如下所示:

    image.png

swat管理中心的首页

    image.png

通过swat配置samba,在swat页面我们可以看到有8个选项,每个选项可以配置samba的不同功能。

HOME:Samba相关程序及文件说明。

GLOBALS:设置Samba的全局参数。即smb.conf文件的[global]。

SHARES:设置Samba的共享参数。配置共享文件目录及其相关属性配置。

PRINTERS:设置Samba的打印参数。

WIZARD:Samba配置向导。

STATUS:查看和设置Samba的服务状况。

VIEW:查看Samba的文本配置文件,即smb.conf。

PASSWORD:设置Samba用户,可以修改密码,新建删除用户。

至此,Samba服务器的所有配置完成。

转载请注明出处:https://blog.51cto.com/itwish