在Linux下轻松玩转Samba服务器

简介:

一、samba概念和功能
Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,并且加入了许多新的功能,这样以来,使得Samba具有了更强大的功能。
Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS(网络文件系统)可以很好的完成Linux与Linux之间的数据共享,因而Samba较多的用在了Linux与windows之间的数据共享上面。
SMB是基于客户机/服务器型的协议,因而,一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux下已经架设好的Samba服务器,windows客户端就可以通过SMB协议共享Samba服务器上的资源文件,同时,Samba服务器也可以访问网络中其它windows系统或者Linux系统共享出来的文件。
Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。

二、 Samba的安装与配置
我们的系统环境是:
操作系统:Red Hat Enterprise Linux Server release 5.1
Samba服务器IP地址:192.168.60.231
Samba版本:samba-3.0.23c-2

1.安装samba
几乎所有的Linux发行版本中都默认自带了samba软件包,登陆系统,检查是否安装了Samba软件,执行如下操作:
[root@localhost ~]# rpm -q samba 
samba-3.0.23c-2
如果有显示,表示系统已经安装了Samba,如果没有任何显示,请到系统光盘找到对应的Samba软件包,然后进行安装。
Samba的安装很简单,安装过程如下:
[root@webserver ~]# rpm -ivh samba-3.0.23c-2.i386.rpm 
warning: samba-3.0.23c-2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:samba                  ########################################### [100%]
Samba服务器安装完毕,会生成配置文件目录/etc/samba和其它一些samba可执行命令工具,/etc/samba/smb.conf是samba的核心配置文件,/etc/init.d/smb是samba的启动/关闭文件。

2.Samba服务的组成与使用
组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,只有SMB服务启动,才能实现文件的共享,而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件。
例如,某台Samba服务器的IP地址为192.168.60.231,对应的工作组名称为ixdba,那么在Windows的IE浏览器输入下面两条指令都可以访问共享文件。其实这就是Windows下查看Linux Samba服务器共享文件的方法。
\\192.168.60.231\共享目录名称
\\ixdba\共享目录名称
可以通过/etc/init.d/smb start/stop/restart来启动、关闭、重启Samba服务,启动SMB服务如下所示:
[root@localhost Linuxdata]# /etc/init.d/smb start
Starting SMB services:                            [  OK  ]
Starting NMB services:                            [  OK  ] 
 从启动的输出中,可以看出,SMB的启动包含了SMB和NMB两个服务。
那么在Linux作为客户端时,查看其它Linux Samba服务器共享的文件时,应该如何操作呢,这就要用到smbclient这个工具。系统默认自带了这个命令。Smbclient常见用法介绍如下。

(1)查看Samba服务器的共享资料
Smbclient  –L  //Samba服务器的ip地址  -U  Samba用户名
 “-L”即为list的含义,“-U”是user的意思,如果Samba服务器是无密码访问的话,可以省略“-U  Samba用户名”。
例如:samba需要密码登陆时,查看共享方法如下:
[root@web ~]# smbclient  -L //192.168.60.231/Linuxdata –U admin
Password:  在这里输入admin的密码。
Samba无密码访问时,执行如下命令:
[root@web ~]# smbclient  -L //192.168.60.231/Linuxdata
Password: 直接回车即可。

(2)登陆Samba服务器
如果需要在Linux客户端登陆Samba服务器,用法如下:
Smbclient  //Samba服务器的ip地址  -U  Samba用户名
请看下面执行的操作:
[root@web samba]# smbclient  //192.168.60.231/Linuxdata
Password: 
Domain=[IXDBA.NET] OS=[Unix] Server=[Samba 3.0.23c-2]
Server not using user level security and no password supplied.
smb: \> ls
  .                                   D        0  Thu Feb 19 23:49:33 2009
  ..                                  D        0  Thu Feb 19 19:05:24 2009
  install.log                              36563  Thu Feb 19 23:49:22 2009
  install.log.syslog                        4295  Thu Feb 19 23:49:22 2009

                58113 blocks of size 262144. 44294 blocks available
smb: \> ?      #在这里输入?即可查看在smb命令行可用的所有命令。
?              altname        archive        blocksize      cancel         
case_sensitive cd             chmod          chown          close          
del            dir            du             exit           get            
getfacl        hardlink       help           history        lcd            
link           lock           lowercase      ls             mask           
md             mget           mkdir          more           mput           
newer          open           posix          posix_open     posix_mkdir    
posix_rmdir    posix_unlink   print          prompt         put            
pwd            q              queue          quit           rd             
recurse        reget          rename         reput          rm             
rmdir          showacls       setmode        stat           symlink        
tar            tarmode        translate      unlock         volume         
vuid           wdel           logon          listconnect    showconnect    
!              
smb: \>
看到了吗,是不是与登陆FTP服务器很类似,登陆Samba服务器后,就可以进行文件的上传与下载,如果有足够的权限,还可以进行修改文件操作。
此外,Samba服务器共享出来的文件还可以在Linux客户端进行挂载,这就要用到mount命令,如下所示:
[root@web /]# mount -t cifs  -l //192.168.60.231/Linuxdata /samba
Password:
[root@web /]# df -Th|grep /samba
              cifs     15G  2.7G   11G  20% /samba
[root@web /]# uname -a
Linux web 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:19 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
这里我们的操作系统环境为redhat as5版本,在redhat as5以前的版本中,还存在一个smbmount命令,是专门用于挂载Samba共享数据用的,此命令从redhat as5开始被取消。
例如:
[root@localhost ~]# uname -a
Linux localhost 2.6.9-22.ELsmp #1 SMP Mon Sep 19 18:32:14 EDT 2005 i686 i686 i386 GNU/Linux
[root@localhost ~]# smbmount  //192.168.60.231/Linuxdata /samba 
Password:
[root@localhost ~]# df -Th|grep /samba
             smbfs     15G  3.4G   11G  24% /samba
由此可见,Samba共享文件系统格式在redhat as5以前版本称为smbfs,而从redhat as5开始变为CIFS。
接下来详细讲述下smb.conf文件的属性配置。

3.核心配置文件smb.conf
默认的smb.conf有很多个选项和内容,比较繁琐,这里我们从简单讲起,先备份一下自己的smb.conf文件,然后重新建立一个smb.conf,添加如下内容:
[global]
workgroup = IXDBA.NET
netbios name = ixdba
server string = My Linux Samba Server
log file = /var/log/samba/%m.log
security = share
 [Linuxdata]
        path = /ixdba/Linuxdata
        writeable = yes
        browseable = yes
        guest ok = yes
对上面每行解释如下:
 “[global]”表示以下的内容为全局配置,必须要有。
 “workgroup“用来定义工作组,也就是windows中的工作组概念,这里设置为IXDBA.NET。
 “netbios name”用来定义windows中显示出来的计算机名称。
 “server string”用来定义Samba服务器的说明信息,可以随便指定!
 “log file”用来定义Samba用户的日志文件,%m代表客户端主机名,Samba服务器会在指定的目录中为每个登陆主机建立不同的日志文件。
 “security”用来定义数据共享的方式,此选项有多个可选值,常用的有user和share,user表示需要密码验证后才能共享数据,share表示可以直接共享数据,无需输入密码。这里选择share。
 “[Linuxdata]” 用来设定在windows中显示出来的共享目录的名称。
 “path” 用来指定共享的目录,必选项。
 “writeable”用来设置是否可写,yes为可写,no为不可写。
 “browseable”用来定义是否可以在windows工作组下看到共享文件夹,如果需要隐藏共享文件夹,选择no即可。
 “guest ok”用来定义匿名用户是否可以登陆,如果security设置为user,此选项默认值为no。

4.建立共享目录
上面设置了共享目录为/ixdba/Linuxdata,下面就需要建立/ixdba/Linuxdata目录:
[root@localhost ~]# mkdir -p /ixdba/Linuxdata
[root@localhost ~]# chown -R nobody:nobody /ixdba/Linuxdata
由于要设置匿名用户可以下载或上传共享文件,所以要给/ixdba/Linuxdata目录授权为nobody权限。
[root@localhost Linuxdata]# cp /root/install.log* /ixdba/Linuxdata
上面是拷贝一些测试文件到共享目录中。

5.重启smb服务
执行如下命令重启samba服务:
[root@localhost samba]# /etc/init.d/smb  start
Starting SMB services:                                     [  OK  ]
Starting NMB services:                                     [  OK  ]
[root@localhost samba]# ls
lmhosts  secrets.tdb  smb.conf  smb.conf.old  smbpasswd  smbusers
[root@localhost samba]#

6.访问Samba服务器的共享文件

(1)在Linux下访问Samba服务器的共享文件
[root@web ~]# smbclient  //192.168.60.231/Linuxdata
Password: 
Domain=[IXDBA.NET] OS=[Unix] Server=[Samba 3.0.23c-2]
Server not using user level security and no password supplied.
smb: \> ls
  .                                   D        0  Thu Feb 19 20:14:24 2009
  ..                                  D        0  Thu Feb 19 19:05:24 2009
  install.log                              36563  Thu Feb 19 20:14:24 2009
  install.log.syslog                        4295  Thu Feb 19 20:14:24 2009

                58113 blocks of size 262144. 44295 blocks available
smb: \>

(2)在windows下访问Samba服务器的共享文件。
在浏览器或者运行框输入
\\192.168.60.231  或者 \\ixdba
就看到打开共享目录了,这里的ixdba是smb.conf中“netbios name”选项定义的名字。
如图1所示:

图1

7.授权登陆Samba服务器
 上面介绍了Samba服务器匿名共享数据的设置方法,而在很多时候,对共享的数据是需要进行权限控制的,也就是用户在访问Samba服务器时需要输入用户名和密码,下面就介绍如何配置有权限控制的Samba服务器。
(1)添加系统级用户
  这里首先添加ixdba1、ixdba2两个系统级用户,并分别指定工作目录为/ixdba/ixdba1和/ixdba/ixdba2,操作如下:
[root@localhost /]# useradd -d /ixdba/ixdba1 ixdba1 
[root@localhost /]# useradd -d /ixdba/ixdba2  -s  /sbin/nologin  ixdba2 
[root@localhost /]# cp /root/install.log* /ixdba/ixdba1
[root@localhost /]# cd /ixdba
[root@localhost ixdba]# ll
total 32
drwx------ 4 ixdba1 ixdba1 4096 Feb 20 05:58 ixdba1
drwx------ 3 ixdba2 ixdba2 4096 Feb 20 05:50 ixdba2
其中,useradd是创建系统用户的命令,参数“-d”是指定ixdba1用户的工作目录,而ixdba1就是创建用户的名称,“-s”是指定用户使用的默认shell,/sbin/nologin表示ixdba2是个虚拟用户,也就是ixdba2不能通过shell登陆系统。关于这些概念在第十章有详细的讲述,这里不在多说。
每当创建一个用户,Linux系统都会在/etc/passwd文件中添加一行对应的用户名信息,在这里我们仅仅用到的是/etc/passwd文件中的用户名信息,因此,不必对两个用户设置登陆系统的密码。

(2)创建Samba登陆用户
这里需要注意的是:系统用户是Linux上面对应的用户,而Samba用户是客户端连接Samba服务器时需要使用的用户。创建Samba用户使用的命令是smbpasswd,而smbpasswd的原理是通过读取/etc/passwd文件中存在的用户名,进而设置密码的,因此,对于系统用户,可以设置密码,也可以不设置密码,如果设置密码,可以和对应的Samba用户密码相同,也可以不同。
下面分别为ixdba1和ixdba2设置Samba服务器的登陆密码,操作如下:
[root@localhost samba]# smbpasswd  -a ixdba1
New SMB password:
Retype new SMB password:
Added user ixdba1.
[root@localhost samba]# smbpasswd  -a ixdba2
New SMB password:
Retype new SMB password:
Added user ixdba2.
这样设置完毕,就可以用ixdba1和ixdba2在客户端登陆Samba服务器了。

(3)配置smb.conf文件
 Samba配置的核心文件是smb.conf,设置好的配置文件如下:
[global]
workgroup = IXDBA.NET
netbios name = ixdba
server string = My Linux Samba Server
log file = /var/log/samba/%m.log
max log size = 50 
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
#interfaces = 192.168.1.254/24 192.168.2.254/24
os level = 33 
[ixdba1]
        path = /ixdba/ixdba1
        comment = This is ixdba1
        valid users = ixdba1
        writeable = yes
        browseable = yes
[ixdba2]
        path = /ixdba/ixdba2
        comment = This is ixdba2
        valid users = ixdba2
     create mask =  664
        directory mask = 775
        writeable = yes
        browseable = yes
这段配置与上面那个例子基本相同,只是增加了一些权限控制的东西。新增各个选项的含义如下所示:
 “max log size”用来定义日志文件的大小,设置为0代表不做限制,默认单位是KB。
  “encrypt passwords”用来设定用户密码是否加密,yes表示需要加密,否则不加密,由于现在的windows系统都以加密形式发送 SMB/CIFS 口令,因此这里选择yes。
 “smb passwd file”用来指定samba的密码文件。
  “socket options”用来设定Samba服务器和客户端之间会话的Socket选项值,此项的设置可以优化数据传输速度。
 “os level”用来设定samba server的OS level, OS level的值从0到255,winNT的OS level为33,win95/98的OS level是1,samba server的OS level值至少要大于33以上。
 “comment”是对共享目录的说明文件,自己可以定义说明信息。
  “valid users”用来定义可以访问该Samba服务器的用户。
 “create mask“用来定义客户端用户创建文件的默认权限,664表示对用户来可读可写,对用户组可读可写,对其它用户仅仅有只读权限。
 “directory mask”用来定义客户端用户创建目录的默认权限,755表示对用户可读可写可执行,对用户组和其它用户可读可执行。

(4)测试Samba服务器
特别注意,在Samba服务器运行状态下,最好使Selinux处于关闭状态,不然需要进行很多权限的设定,如何关闭Selinux,请阅读本书第七章。
 所有设置完成后,重新启动smb服务。然后在windows客户端进行授权登陆。在IE浏览器输入\\192.168.60.231,然后回车,即可进入图2所示界面:
 

图2


在这里输入需要登陆的Samba用户,我们这里登陆的用户是ixdba1,输入密码即可登陆到图3所示界面: 
 

图3


         在图3界面下可以看到所有Samba服务器上共享的目录,可以看到,这里Samba共享的目录有ixdba1和ixdba2,ixdba1目录只有ixdba1用户可以登陆使用共享文件,而ixdba2目录也只有ixdba2用户可以登陆。
         这里需要说明的是,Samba用户在客户端对文件或目录拥有的权限,完全是由Linux下的系统用户设定的,例如,如果想让ixdba1用户能访问ixdba2目录下的文件,只需将ixdba2用户的相应权限赋予ixdba1用户即可。由此可知,Samba只是实现了文件的共享,而对共享文件的读写权限却是由Linux系统自身的用户属性控制的。
由于我们是通过ixdba1用户登陆的,因此,点击ixdba1目录即可进入图4所示界面:

         在这个界面下,Samba用户可以下载、上传、修改、删除此目录下的所有目录和文件,就像本地的文件系统一样。
         如果需要对ixdba1用户下的文件或者目录进行权限控制,只需在Linux服务器上对相应的文件或者目录进行权限设置即可。
 

图4
 

         最后,有一个小技巧,在windows下通过“\\ip地址”的方式访问其它文件资源时,一般第一次需要输入密码,以后就无需输入密码直接登陆了,那么如果我们要切换到其它Samba用户怎么办呢?可以在windows下执行如下指令实现:
 首先通过开始---运行---cmd输入:“net use”命令查看现有的连接,然后执行“net use \\Samba服务器IP地址或者netbios名称\ipc$  /del”,删除Samba服务器已经建立的连接。或者执行“net use * /del”将现在所有的连接全部删除。最后,再次执行“\\ip地址”时,就可以切换用户了。
         到此为止,Samba服务器的搭建已经介绍完毕。你是否学会了呢!




















本文转自南非蚂蚁51CTO博客,原文链接: http://blog.51cto.com/ixdba/568644,如需转载请自行联系原作者




相关文章
|
4月前
|
安全 Java Linux
Websoft9:为开发者打造的高效 Linux 服务器面板
Websoft9 是一款以开源应用部署与管理为核心的服务器面板,采用“环境即服务”模式。它通过运行环境标准化、自动化配置、安全融合和资源管理四个方面实现平台与环境的深度协同。支持多语言框架预集成、云原生组件整合,提供 200+ 应用模板一键部署,并具备全流程安全防护和统一资源监控能力,助力开发者高效管理和扩展应用环境。
111 0
|
2月前
|
存储 安全 Ubuntu
从Linux到Windows:阿里云服务器系统镜像适配场景与选择参考
阿里云为用户提供了丰富多样的服务器操作系统选择,以满足不同场景下的应用需求。目前,云服务器的操作系统镜像主要分为公共镜像、自定义镜像、共享镜像、镜像市场和社区镜像五大类。以下是对这些镜像类型的详细介绍及选择云服务器系统时需要考虑的因素,以供参考。
|
1月前
|
Linux
Linux下版本控制器(SVN) -服务器端环境搭建步骤
Linux下版本控制器(SVN) -服务器端环境搭建步骤
70 0
Linux下版本控制器(SVN) -服务器端环境搭建步骤
|
2月前
|
Ubuntu Linux 网络安全
在Linux云服务器上限制特定IP进行SSH远程连接的设置
温馨提示,修改iptables规则时要格外小心,否则可能导致无法远程访问你的服务器。最好在掌握足够技术知识和理解清楚操作含义之后再进行。另外,在已经配置了防火墙的情况下,例如ufw(Ubuntu Firewall)或firewalld,需要按照相应的防火墙的规则来设置。
122 24
|
2月前
|
数据挖掘 Linux 数据库
服务器数据恢复—Linux系统服务器数据恢复案例
服务器数据恢复环境: linux操作系统服务器中有一组由4块SAS接口硬盘组建的raid5阵列。 服务器故障: 服务器工作过程中突然崩溃。管理员将服务器操作系统进行了重装。 用户方需要恢复服务器中的数据库、办公文档、代码文件等。
|
3月前
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
274 28
|
3月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
185 28
|
3月前
|
JavaScript Linux Python
在Linux服务器中遇到的立即重启后的绑定错误:地址已被使用问题解决
总的来说,解决"地址已被使用"的问题需要理解Linux的网络资源管理机制,选择合适的套接字选项,以及合适的时间点进行服务重启。以上就是对“立即重启后的绑定错误:地址已被使用问题”的全面解答。希望可以帮你解决问题。
198 20
|
4月前
|
Ubuntu Linux
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
622 20
|
4月前
|
存储 运维 监控
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
124 1

热门文章

最新文章