1、SAMBA服务主要用途是要在Windows和Unix Like主机间共享数据。
SAMBA的功能:
提供用户登陆SAMBA主机时进行身份认证,从而提供不同的身份识别。
可以进行NetBIOS名称解析。
可以进行设备共享(如:CD-ROM、打印机)。
2、SAMBA使用的NetBIOS通信协议:
就像NFS是架构在RPC Server上一样,SAMBA是架设在NetBIOS通信协议上的。NetBOIOS最初是为局域网设计的,所以它无法跨路由工作。但是可以通过NetBIOS over TCP/IP技术我们就可以跨路由使用SAMBA服务器提供的功能了。
3、SAMBA使用的daemons
SAMBA是如何工作的?(1)、获取对方的NetBIOS名,并定位到该主机。我们要想登入某台Windows主机使用它所提供的文件时,必须加入该Windows主机的群组(Workgroup),并且我们的主机也必须设置一个NetBIOS名称。NetBIOS名称与主机名称的区别是NetBIOS名称最多有15个字符组成,在Windows上如果计算机名超过15个字符通常截取前15个字符作为NetBIOS名称。NetBIOS名称必须在同一群组中是唯一的。(2)、利用对方给予的权限存取可用资源。
SAMBA主要使用两个daemons来管理这俩个不同的服务:
smbd:这个daemon主要功能是用来管理SAMBA主机共享目录、文件与打印机信息。
nmbd:这个daemon则是用来管理群组和NetBIOS名称解析的。
4、SAMBA主要使用工作组模式和域模式进行连机。工作组模式适合于小型的工作环境,用户独立拥有计算机的控制权。域模型适合于大型的多人共性计算机环境。
SAMBA服务器的基础架设
1、SAMBA服务器所需要的软件:
SAMBA:主要提供smbd和nmbd两个daemons、SAMBA文档以及相关的logrotate设置文件等。
samba-common:主要提供了SAMBA的主要配置文件(smb.onf)、smb.conf的语法检验测试程序(testparm)。
samba-client:提供客户端工具指令,如用于挂载SAMBA文件格式的smbmount等。
SAMBA的软件结构:
/etc/samba/smb.conf SAMBA的主要配置文件,这个文件主要设置工作组、NetBIOS名称以及分享的目录等。
/etc/samba/lmhosts用于NetBIOS名称与主机IP的对应,类似与/etc/hosts文件。
/etc/samba/smbpasswd这个文件默认并不存在,他是SAMBA默认的用户密码对应表。这个文件因为包含了密码,所以权限一定要设置好,一般设置为root所有,权限为600。
/etc/samba/smbusers Windows主机和Unix Like主机间账号的对应关系,此文件必须通过配置文件中的“username map”设置项目启动才能生效。
testparm用于检查sam.conf的语法。
smbstatus列出目前的SAMBA Server状态。
smbpasswd用来创建SAMBA的密码文件。
smbclient用在自己的SAMBA主机上面检查服务是否设置成功。
smbmount挂载远程共享目录到本地挂载点。
nmblookup NetBIOS名称查询。
smbtree显示工作组与计算机名称的树状目录分布图。
/usr/share/doc/samba-<version> SAMBA的相关技术手册。
2、SAMBA设置流程:
在smb.conf中设置好工作组、NetBIOS名称、密码使用状态等与主机相关的信息。
在smb.conf中设置好预共享的目录、装置已经可以使用的用户数据。
根据步骤2的设置在Linux文件系统中建立好文件或装置的使用权。
根据步骤2的设置通过smbpasswd建立用户账号及密码。
启动SAMBA的smbd、nmbd服务。
3、SAMBA配置文件
SAMBA的配置文件可以分成两部分,一是主机信息部分,在smb.cfg文件的[global]下设置;二是共享信息部分,以目录名问设置依据。
主机信息部分设置:
workgroup:设置工作组名称。
netbios name:设置主机的NetBIOS名称。
server string:主机的简易说明。
display charset:自己服务器上面显示的编码,一般与下面的unix charset相同。
unix charset:在Linux服务器上面所使用的编码,一般为/etc/sysconfig/il8n内的编码。
dos charset:Windows客户端的编码。
log file:日志文件存放位置,文件名可能会以变量处理。
max log size:日志文件的最大尺寸。
security:设置值包括user、server、domain、share。user:使用SAMBA本身的密码数据库,密码数据库与下面的smb passwd file有关;share:共享的数据不需要密码即可访问;server和domain:使用外部主机的密码,与password server=IP配合使用。
encrypt passwords:yes代表密码需要加密。
smb passwd file:密码放置文件,一般为/etc/samba/smbpasswd。
共享目录参数:
[共享名称]:设置共享名。
comment:目录说明。
path:共性目录在操作系统上的实际路径。
read only:设置是否只读。
public:设置是否所用可以登陆的用都能看到这个共享名。
writable:设置是否可以写入。
create mode与directory mode与权限有关。
valid users = user(@group):设定能够访问此共享资源的特定用户或用户组。
invalid users = user (@group) :设定禁止访问该共享资源的用户或者组。
read list = user (@group) :设定可以读取该共享资源的用户或者组。
write list = user (@group) :设定可以读取和写入该共享资源的用户或者组。
admin list = user (@group) :设定可以管理该共享资源的用户或者组。
guest ok = yes|no :设定该共享资源是否能被来宾帐号访问。
SAMBA里的变量:
%S任何可以登陆的用户均可以登陆起自己的默认目录(/home/username)。如:
[homes]
valid users=%S
……
Jim登陆后,[homes]会变成[Jim],%S用来替换掉homes。
%m代表客户端的NetBIOS名称。
%M代表客户端的Host Name。
%L代表SAMBA主机的NetBIOS名称。
%H代表用户的默认目录。
%U代表目前登陆的用户名称。
%g代表登陆的群组名称。
%h代表目前这台SAMBA主机的Host Name。
%I代表客户端的IP。
%T代表当前的时间日期。
SAMBA服务器架设示例
1、软件安装
[root@server ~]# rpm -qa |grep samba
samba-common-3.0.25b-0.el5.4
samba-client-3.0.25b-0.el5.4
[root@server ~]# mount /dev/cdrom /mnt/
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@server ~]# cd /mnt/CentOS
[root@server CentOS]#rpm -ivh samba-3.0.25b-0.el5.4.i386.rpm
Preparing... ########################################### [100%]
1:samba ########################################### [100%]
2、设置lmhosts文件
[root@server samba]# vi /etc/samba/lmhosts
127.0.0.1 localhost
192.168.0.20 smbserver
192.168.0.30 smbclient
192.168.0.103 somode
3、检查语言资料
为了避免中文乱码问题,必须了解以下编码:
源文件(共享的文件)的编码格式,中文一般是GB2312。
Linux的默认语言编码。
SAMBA的显示编码,一般与Linux的默认编码相同。
连接到SAMBA主机的软件的语言编码。
RedHat系统默认语言编码可以通过查看i18n文件:
[root@server ~]# vi /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
所以SAMBA的配置文件可以这样设置编码:
unix charset=utf8
display charset=utf8
dos charset=cp936
4、设置smb.conf配置文件
#======================= Global Settings =====================================
[global]
workgroup = WORKGROUP
server string = iStone's Samba Server,Server Version %v .
netbios name = smbserver
#设置监听的接口,默认在所有网络接口监听
interfaces = lo eth0
#用于限制可以访问这台samba服务器的客户机的IP地址范围,以提供安全限制。
#缺省情况下,这行配置被注释了,即所有的客户都可以访问这台计算机,
#这样就存在一定的安全问题
hosts allow = 127. 192.168.0.
# ---------------------------语言编码设置-----------------------------
#
unix charset=utf8
display charset=utf8
dos charset=cp936
# --------------------------- Logging Options -----------------------------
#
#定义日志的存储位置及名称,%m代表客户端的NetBIOS名称
log file = /var/log/samba/%m.log
# max 50KB per log file, then rotate
#定义每个日志文件的存储限制。默认是0(无限制)
#一定要定义好,防止硬盘被爆掉
max log size = 50
# ----------------------- Standalone Server Options ------------------------
#
# Scurity can be set to user, share(deprecated) or server(deprecated)
#
# Backend to store user information in. New installations should
# use either tdbsam or ldapsam. smbpasswd is available for backwards
# compatibility. tdbsam requires no further configuration.
#认证方式,包括简单的共享级认证和用户级认证。Unix为多用户操作系统,缺省就使用用户级认证方式。当使用用户级认证的时候,Samba服务器使用Unix操作系统的用户(来自/etc/passwd)对用户进行认证,这是一种独立的认证方式。而有时候希望所有的服务器使用同一个认证数据库进行统一认证,因此就导致出现了基于域的统一认证模式。为了使Samba服务器支持域认证方式,可以有两种不同的设置方式,一种为真正的域认证,另一种为服务器认证方式,将Samba服务器配置为通过服务器验证用户,这需要指定security=server,以及指定password server的名字为NT的域控制器。认证服务器的方式不能实现域认证方式提供的一些特征,但它的适用范围并不仅限于域,使用工作组的网络也能通过统一的认证服务器来使用统一认证模式。
#一共有4种服务级别,分别是
# share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。
# user:samba的默认配置,要求用户在访问共享资源之前必须先提供用户名和密码进行验证。
# server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级,以此类推。
# domain:这个安全级别要求网络上存在一台Windows的主域控制器,samba把用户名和密码递交给它去验证。
security =user
# --------------------------- password Options -----------------------------
#
#新版本使用数据库存储用户密码,但可以先后兼容,既可以使用密码文件来存储密码。
passdb backend = tdbsam
#客户机和服务器之间进行认证时,把口令加密传输,这样保证了安全性。
; encrypt passwords = yes
#在以前的版本中使用smbpasswd文件来定义smb帐号密码,现在使用tdbsam来定义帐号密码
; smb passwd file = /etc/samba/smbpasswd
#用户映射文件客户机的用户是admin或者administrator连接时会被当作用户root看待。
; username map = /etc/samba/smbuser
# ----------------------- 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
; domain logons = yes
#如果你采用domain方式登陆,必须设置登陆脚本。
# the login script name depends on the machine name
#每个工作站登陆脚本。
; logon script = %m.bat
# the login script name depends on the unix user used
#每个用户的登陆脚本
; logon script = %u.bat
; logon path = \\%L\Profiles\%u
# disables profiles support by specifing an empty path
; logon path =
; add user script = /usr/sbin/useradd "%u" -n -g users
; add group script = /usr/sbin/groupadd "%g"
; add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
; delete user script = /usr/sbin/userdel "%u"
; delete user from group script = /usr/sbin/userdel "%u" "%g"
; delete group script = /usr/sbin/groupdel "%g"
# ----------------------- Browser Control Options ----------------------------
#
# set local master to no if you don't want Samba to become a master
# browser on your network. Otherwise the normal election rules apply
#
# OS Level determines the precedence of this server in master browser
# elections. The default value should be reasonable
#
# Preferred Master causes Samba to force a local browser election on startup
# and gives it a slightly higher chance of winning the election
#当访问共享资源时,首先要先获取网络中的资源列表,默认情况下browser是由网络中的每个计算机来维护的。但没有必要每个计算机都维护整个资源列表,维护网络中当前资源列表的任务由网络上的几个特殊计算机完成的,这些计算机被称为Browser
#设定sam服务器是否能做为网络中的主browser
; local master = no
# browser优先权的设置
; os level = 33
; preferred master = yes
# --------------------------- Printing Options -----------------------------
#
# Load Printers let you load automatically the list of printers rather
# than setting them up individually
#
# Cups Options let you pass the cups libs custom options, setting it to raw
# for example will let you use drivers on your Windows clients
#
# Printcap Name let you specify an alternative printcap file
#
# You can choose a non default printing system using the Printing option
#这些设置是用于设置samba服务器的打印机资源。
# load printer=yes就允许samba服务器对外共享服务器的打印机。
load printers = yes
cups options = raw
; printcap name = /etc/printcap
#obtain list of printers automatically on SystemV
; printcap name = lpstat
#定义打印系统的类型
; printing = cups
#============================ Share Definitions ==============================
#每个有登陆权限的用户均可访问他们自己的默认目录
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
; valid users = MYDOMAIN\%S
#一个共享文件夹,除istone组能写外其他组只能读取文件
[public]
comment = Public istone
path = /home/public
public = yes
writable = no
printable = no
write list = @istone
#打印机共享,共享名必须是printers
[printers]
comment = All Printers
#打印队列的存放位置
path = /var/spool/samba
#是否允许他人浏览
browseable = no
#是否允许gest用户使用
guest ok = no
writable = no
printable = yes
#使用testparm检查smb.conf配置文件是否有语法错误,每次修改配置文件后都需要先进行一下语法检查。
[root@server ~]# testparm
5、创建共享目录,并赋权
特别注意用户在文件系统中的权限,只有在文件系统和SAMBA配置文件中都有相应权限时用户才真正具有此共享权限。
[root@server ~]# mkdir /home/public
#将public的用户组改为istone,在配置文件中设置了istone组有写入权限。
[root@server ~]# chgrp -Ristone/home/public/
[root@server ~]# chmod 775 /home/public/
#添加用户并设置密码
[root@server ~]# useradd istone
root@server ~]# passwd istone
Changing password for user istone.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@server ~]# useradd jim
[root@server ~]# passwd jim
Changing password for user jim.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@server ~]# ls -l /home/
总计12
drwx------ 2 istone istone 4096 05-27 16:01 istone
drwx------ 2 jim jim 4096 05-28 10:13 jim
drwxrwxr-x 2 rootistone4096 05-28 10:12 public
6、创建SAMBA密码文件
[root@server ~]# mkdir /etc/samba/smbpasswd
[root@server ~]# chown root /etc/samba/smbpasswd
[root@server ~]# chmod 600 /etc/samba/smbpasswd
smbpasswd [-adem] username
-a在密码文件中新增一个用户
-d停用一个已经存在的账号
-e从新启用已经停用的账号
-m username为计算机名,与domain mode有关
如果没有加任何参数表示修改用户的SAMBA密码。
#访问共享的用户使用的是此处设置的密码,可以与系统用户的密码不同。
[root@server ~]# smbpasswd -a istone
New SMB password:
Retype new SMB password:
Added user istone.
[root@server ~]# smbpasswd -a jim
New SMB password:
Retype new SMB password:
Added user jim.
[root@server ~]# cat /etc/samba/smbpasswd
istone:500:E8450C7E07112982AAD3B435B51404EE:2D7F1A5A61D3A96FB5159B5EEF17ADC6:[U ]:LCT-483CC0E6:
jim:501:E8450C7E07112982AAD3B435B51404EE:2D7F1A5A61D3A96FB5159B5EEF17ADC6:[U ]:LCT-483CC0EC:
7、启动SAMBA服务
[root@server samba]# /etc/init.d/smb start
启动SMB服务:[确定]
启动NMB服务:[确定]
[root@server samba]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:1390.0.0.0:* LISTEN 20281/smbd
tcp 0 0 0.0.0.0:4450.0.0.0:* LISTEN 20281/smbd
udp 0 0 192.168.0.20:1370.0.0.0:* 20284/nmbd
udp 0 0 0.0.0.0:1370.0.0.0:* 20284/nmbd
udp 0 0 192.168.0.20:1380.0.0.0:* 20284/nmbd
udp 0 0 0.0.0.0:1380.0.0.0:* 20284/nmbd
8、验证共享目录
smbclient –L [//主机或IP] [-U用户账号]
[root@server ~]# smbclient -L //127.0.0.1 -Uistone
Password:
Domain=[SMBSERVER] OS=[Unix] Server=[Samba 3.0.25b-0.el5.4]
Sharename Type Comment
--------- ---- -------
publicDisk Public istone
IPC$ IPC IPC Service (iStone's Samba Server,Server Version 3.0.25b-0.el5.4)
istoneDisk Home Directories//在此看到的是istone用户的默认目录
Domain=[SMBSERVER] OS=[Unix] Server=[Samba 3.0.25b-0.el5.4]
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP
[root@server ~]# smbclient -L //127.0.0.1 -Ujim
Password:
Domain=[SMBSERVER] OS=[Unix] Server=[Samba 3.0.25b-0.el5.4]
Sharename Type Comment
--------- ---- -------
publicDisk Public istone
IPC$ IPC IPC Service (iStone's Samba Server,Server Version 3.0.25b-0.el5.4)
jimDisk Home Directories//在此看到的是jim用户的默认目录
Domain=[SMBSERVER] OS=[Unix] Server=[Samba 3.0.25b-0.el5.4]
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP
利用类似于FTP命令行方式访问共享
get下载一个文件
put上传一个文件
mget批量下载文件
mput批量上传文件
ls/dir查看所在目录的文件
rm/del删除文件