1. 介绍
Samba服务也是用来实现文件共享的。它类似于Windows上的共享功能,可以实现Windows和Linux的文件共享。Windows上访问,当然在Linux上也可以访问到,
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
2. 安装和配置
2.1. 安装
安装系统的时候大多会默认安装Samba,如果没有安装,在CentOS上只需要执行下面的命令安装即可:
2.2. 配置
Samba的配置文件为/etc/samba/smb.conf,通过修改这个配置文件来完成我们的各种需求。
打开这个文件,你会发现很多内容都用#
或;
注释掉了。我们先来看一下未被注释掉的部分:
配置文件的说明:
主要有以上三个部分:[global]、[homes]、[printers]
[global]定义全局的配置:
workgroup
用来定义工作组。一般情况下,需要我们把这里的MYGROUP
改成WORKGROUP
(即Windows默认的工作组名字)。security = user
这里指定samba的安全等级。关于安全等级有四种:- share : 用户不需要账户及密码即可登陆Samba服务器
- user : 由服务器的Samba服务器负责检查账户及密码(默认)
- server : 检查账户及密码的工作由另一台Windows或Samba服务器负责
- domain : 指定Windows域控制服务器来验证用户的账户及密码
passdb backend = tdbsam
用户后台,Samba有三种用户后台:- smbpasswd : 该方式是使用smb工具smbpasswd给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用此密码访问Samba资源。smbpasswd在/etc/samba中,有时需要手工创建该文件。
- tdbsam : 使用数据库文件创建用户数据库。数据库文件叫passdb.tdb,在/etc/samba中。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用户账号
- ldapsam : 基于LDAP账户管理方式验证用户。首先要简历LDAP服务,设置
passdb backend = ldapsam:ladp://LDAP Server
load printers
和cups options
两个参数用来设置打印机相关。
除了这些参数外,还有几个参数需要了解:
netbios name = MYSERVER
设置出现在网上邻居中的主机名hosts allow = 127. 192.168.12. 192.168.13.
用来设置允许的主机,如果在前面加;
则表示允许所有主机。log file = /var/log/samba/%m.log
定义Samba的日志,这里的%m
是上面的netbios name
.max log size = 50
用来切割日志用的,指定日志的最大容量,单位是K。
[homes]这部分内容共享用户自己的家目录,也就是说,当用户登陆到Samba服务器上时实际上是进入到了该用户的家目录,用户登录后,共享名不是homes而是用户自己的标识符,对于的单纯的文件共享的环境来说,这部分可以注释掉。
[printers]这部分内容设置打印机共享。
3. Samba实践
Samba服务可以实现Linux和Windows机器互相共享文件,这对我们来说是非常实用的。下面将介绍几个实践应用,来帮助你熟悉Samba。
注意:在实验之前,先检测SELinux是否关闭,否则可能会实验不成功。
3.1. Samba实践1
需求:共享一个目录,任何人都可以访问,即不用输入密码即可访问,要求只读。
打开Samba的配置文件/etc/samba/smb.conf在[global]
部分:
- 把
MYGROUP
改成WORKGROUP
- 把
security = user
改成security = share
然后在文件的最末尾处加入一下内容:
123456[share]comment = share allpath = /tmp/samba #<==分享的目录browseable = yes #<==是否可被浏览public = yeswritable = yes #<==是否可写创建测试目录:
1234mkdir /tmp/sambachmod 777 /tmp/sambatouch /tmp/samba/sharefilesecho "11111" > /tmp/samba/sharefiles启动Samba服务:
/etc/init.d/smb start
下面来测试一下是否能实现我们的需求,。首先测试一下配置的smb.conf是否正确,用这个命令:testparm
你应该会看到一个警告信息,不过影响不大,先不用管它。如果没有错误,则在你的Windows机器上的浏览器中输入:
看是否能够访问到sharefiles
3.2. Samba实践2
需求:共享一个目录,使用用户名和密码登陆后才可以访问,要求可以读写。
打开Samba的配置文件/etc/samba/smb.conf:
[global]
部分的内容如下:1234567[global]workgroup = WORKGROUPserver string = Samba Server Version %vsecurity = userpassdb backend = tdbsamload printers = yescups options = raw还需要加入以下内容:
123456[myshare]comment = share for userspath = /sambabrowseable = yeswritable = yespublic = no保存配置文件,创建目录:
1234mkdir /sambachmod 777 /sambatouch /samba/helloecho "OK" > /samba/hello然后添加用户,因为在
[global]
中passdb backend = tdbsam
,所以要使用pdbedit
来增加用户。注意添加的用户必须在系统中存在,所以需要先创建系统账号:12345useradd user1useradd user2<==然后再添加user1和user2为samba账号pdbedit -a user1pdbedit -a user2我们可以列出Samba所有账号:
123user1:500:user2:501:重启Samba服务:
service smb restart
- 测试:在Windows按Win+R组合键,呼出运行菜单,输入
\\IP
回车后输入用户名和密码即可访问Samba的共享目录和文件。
3.3 Samba实践3
需求:使用Linux访问Samba服务器。
方法1
Samba服务在Linux下同样可以访问。前提是你的Linux安装了samba-client
软件包。
安装完后就可以使用smbclient
命令了:
smbclient
命令的具体语法为:smbclient //IP/共享名 -U 用户名
。如:1234]# smbclient //127.0.0.1/myshare -U user1Enter user1's password:Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-46el6_9]smb: \>
出现如上所示的界面,可以打一个?
列出所有可以使用的命令。常用的命令有cd、ls、rm、pwd、tar、mkdir、chown、get、put
等等。使用help 命令
可以打印该命令如何使用。其中,get
是下载,put
是上传。
方法2
另外的方式就是通过mount挂载了,如下:
格式就是这样:mount -t cifs //IP/共享名 本地挂载点 -o username=用户名,password=密码
挂载完后就可以像使用本地的目录一样使用共享的目录了,注意共享名后面不能有斜杠。
4. 同时使用匿名和用户登陆
关于同时使用匿名和用户登陆,有一个模板配置文件(已经验证成功),可以参考一下:
注意:需要我们手动创建/data/pub/public
和/data/pub/project
目录。为了顺利测试,需要提前修改其权限为777
。另外,还需要手动创建用户:
useradd testuser
pdbedit -a testuser