linux中Samba服务器的搭建理论篇
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协,下面我们来看Samba服务器的搭建理论篇
一、Samba与NFS、ftp
在了解Samba服务之前,需要先了解一下cifs协议(Common Internet File System),该协议最早是微软搞出来的一个协议。cifs 协议最早实现的是window主机之间的文件共享与打印共享,并不支持在linux上运行,samba是由Andrew Tridgell工程师通过逆向工程实现的一个cifs协议软件。通过该包可以实现windows和linux之间的文件共享。这和NFS的走的路刚好相反,NFS最初只支持在类unix系统上运行,后被windows也学了去,所以OS并不能简单的说谁好谁坏,很多东西都是互相借鉴的。
Samba与NFS较ftp的一个好处就是可以将远程盘或挂载点映射到本机上,每次可以像本地编辑一样编辑文件。而ftp需要先下载到本地修改后再上传。
二、samba相关包与程序
1、samba程序包
目前samba 在源里默认的是samba 4.x版本,主要使用的相关软件包有:
- #yumlist|grepsamba
- samba.x86_644.1.12-21.el7_1@base
- samba-common.x86_644.1.12-21.el7_1@base
- samba-libs.x86_644.1.12-21.el7_1@base
- samba-client.x86_644.1.12-21.el7_1base
- samba-python.x86_644.1.12-21.el7_1base
- samba-winbind.x86_644.1.12-21.el7_1base
- samba-winbind-modules.x86_644.1.12-21.el7_1base
samba服务相关的配置主要是samba、samba-common、samba-client三个包和cifs-utils包,具体三个包的作用如下:
samba:主要提供了smb服务所需的格项服务程序如smbd和nmbd及与samba相关的eventlogadm程序;
samba-client:该包主要提供了samba client挂载使用的相关程序,如smbpasswd、smbtree等;
cifs-utils:mount挂载时需要该包来支持cifs协议,不安装该包就没有mount.cifs命令。使用mount挂载时也会有报错;
smba-common: 该包提供了samba服务的主配置文件smb.conf、lmhosts文件、 pdbedit用户相关和testparm语法检查指令等。
2、samba相关文件与程序
/etc/samba/smb.conf:samba服务的主配置文件;
/etc/samba/lmhosts:NetBIOS Name与IP的对应关系,做用类似于/etc/hosts,一般无需配置;
/etc/sysconfig/samba: smbd, nmbd服务自定义参数配置文件;
/etc/samba/smbusers:windows与linux的用户不一致,可以通过该文件进行对应映射,在新版本中默认不存在,代替的是username map参数,通过该参数可以指定具体的映射文件;
/var/lib/samba/private/{passdb.tdb,secrets.tdb}:samba用户和密码数据库文件;
/usr/bin/{tdbdump,tdbtool}: Samba 3.0以后,默认使用tdb库(Trivial DataBase),这两个命令用于查看和操作tdb库,不过查看出的结果有点类似于16进制的数据,一般不使用,需安装 tdb-tools 包;
/usr/bin/{smbpasswd,pdbedit}:smbpasswd命令用于创建samba用户和修改密码,类型于passwd命令的功能。Samba 3.0后使用pdb库,pdbedit命令为新版本中的samba用户信息管理命令;
/usr/bin/testparm:用于测试smb.conf语法的正确性。
/usr/bin/smbclient:可以交互式管理samba共享的资源,有点类似于ftp命令;
/usr/bin/nmblookup:Netblos查询工具,类似于nslookup的功能;
/usr/bin/smbtree:查看网络中的工作组与主机名等,有点类似于windows中的网上邻居。
使用示例:
1、tdbdump
- #tdbdumppassdb.tdb
- {
- key(13)="RID_000003e8\00"
- data(6)="usera\00"
- }
- {
- key(11)="USER_usera\00"
- data(182)="\00\00\00\00\7F\A9T|\7F\A9T|\00\00\00\00bd\F5U\00\00\00\00\7F\A9T|\06\00\00\00usera\00\04\00\00\00WWW\00\01\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\01\00\00\00\00\E8\03\00\00\01\02\00\00\00\00\00\00\10\00\00\00\E5\81\0F<\99\AE*\BB\222\ED\84X\A6\13\09\00\00\00\00\10\00\00\00\A8\00\15\00\00\00\00\00\00\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EC\04\00\00"
- }
- {
- key(19)="INFO/minor_version\00"
- data(4)="\00\00\00\00"
- }
- {
- key(9)="NEXT_RID\00"
- data(4)="\E9\03\00\00"
- }
- {
- key(13)="INFO/version\00"
- data(4)="\04\00\00\00"
- }
2、tdbtool
- #tdbtoolpassdb.tdb
- tdb>list
- hash=23
- rec:hash=23offset=0x00001e38next=0x00000000rec_len=28key_len=13data_len=6full_hash=0xc6948dbcmagic=0x26011999
- hash=33
- rec:hash=33offset=0x00001e6cnext=0x00000000rec_len=228key_len=11data_len=182full_hash=0x41061b85magic=0x26011999
- hash=52
- rec:hash=52offset=0x00001f68next=0x00000000rec_len=32key_len=19data_len=4full_hash=0x538a9285magic=0x26011999
- hash=65
- rec:hash=65offset=0x00001fd4next=0x00000000rec_len=20key_len=9data_len=4full_hash=0x70a13a4cmagic=0x26011999
- hash=103
- rec:hash=103offset=0x00001fa0next=0x00000000rec_len=28key_len=13data_len=4full_hash=0xf2394cd5magic=0x26011999
- freelist:
3、smbpasswd与pdbedit
创建samba用户前,需要用户先在本地中存在
# useradd -G users smb1
# useradd -G users smb2
# echo 361way.com | passwd --stdin smb1
# echo 361way.com | passwd --stdin smb2
使用smbapsswd创建:
smbapsswd常用项:
-a:创建新用户,不加-a 参数直接跟用户为修改用户密码;
-c:指定密码文件生成的位置;
-x:删除用户;
-d:临时禁用一个用户;
-e:enable一个用户;
-D:指定debug级别;
-n:设置一个用户的密码为空,用户使用空密码需在smb.conf的global 项配置中null passwords = yes ;
# smbpasswd -a smb1
New SMB password:
Retype new SMB password:
Added user smb1.
使用pdbedit命令创建:
pdbedit常用选项:
-L :列出samba用户与信息;
-v :需要搭配 -L 执行,可列出更多的信息;
-w :需要搭配 -L 执行,使用旧版的 smbpasswd 格式来显示信息;
-a :新增samba用户;
-r :修改一个用户的信息,需搭配很多特殊参数,请man pdbedit;
-x :删除一个可使用 用户,可先用 -L 找到用户后再?h除;
- #pdbedit-a-usmb2
- newpassword:
- retypenewpassword:
- Unixusername:smb2
- NTusername:
- AccountFlags:[U]
- UserSID:S-1-5-21-1462619673-710706269-1943266961-1002
- PrimaryGroupSID:S-1-5-21-1462619673-710706269-1943266961-513
- FullName:
- HomeDirectory:
- \\www\smb2
- HomeDirDrive:
- LogonScript:
- ProfilePath:
- \\www\smb2\profile
- Domain:WWW
- Accountdesc:
- Workstations:
- Mungeddial:
- Logontime:0
- Logofftime:Wed,06Feb203623:06:39CST
- Kickofftime:Wed,06Feb203623:06:39CST
- Passwordlastset:Sun,13Sep201521:09:45CST
- Passwordcanchange:Sun,13Sep201521:09:45CST
- //phpfensi.com
- Passwordmustchange:never
- Lastbadpassword:0
- Badpasswordcount:0
- Logonhours:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
pdbedit 是一个新的指令,但无法修改用户密码,所以还是无法完全替代smbpasswd的作用.
4、testparm
testparm是一个语法测试命令,具体用法如下:
- #testparm
- Loadsmbconfigfilesfrom/etc/samba/smb.conf
- rlimit_max:increasingrlimit_max(1024)tominimumWindowslimit(16384)
- Processingsection"[homes]"
- Processingsection"[printers]"
- Processingsection"[public]"
- LoadedservicesfileOK.
- Serverrole:ROLE_STANDALONE
- Pressentertoseeadumpofyourservicedefinitions
- [global]
- workgroup=MYGROUP
- serverstring=SambaServerVersion%v
- maptoguest=BadUser
- logfile=/var/log/samba/log.%m
- maxlogsize=50
- loadprinters=No
- idmapconfig*:backend=tdb
- cupsoptions=raw
- [homes]
- ……………………略
5、smbclient
smbclient有两个功能,一个是查询功能,一个是类似于ftp交互式管理功能,如下:
smbclient查询当前的共享信息
- #smbclient-L192.168.0.109
- Enterroot'spassword:
- Domain=[MYGROUP]OS=[Unix]Server=[Samba4.1.12]
- SharenameTypeComment
- --------------------
- publicDiskPublicdir
- IPC$IPCIPCService(SambaServerVersion4.1.12)
- Domain=[MYGROUP]OS=[Unix]Server=[Samba4.1.12]
- ServerComment
- ----------------
类ftp交互管理的用法
- #smbclient'//192.168.0.109/public'-Usmb1
- Entersmb1'spassword:
- Anonymousloginsuccessful
- Domain=[MYGROUP]OS=[Unix]Server=[Samba4.1.12]
- smb:\>dir
# 我可以使用 dir, get, put 等常用的 ftp 指令来进行文件传输
- ?:列出所有可以用的指令,常用!
- cd:切换目录
- del:删除文件
- lcd:改变本机目录
- ls:查看samba共享目录下的文件信息
- dir:与s相同
- get:下载文件
- mget:多个文件下载
- mput:多个文件上传
- put:单个文件上传
- rm:删除文件
- exit:退出
# 内部更多指令可以?号查看,也可以 man smbclient 获取.
6、smbtree
- #smbtree
- Enterroot'spassword:
- WORKGROUP
- \\YNNYCSK9X26EZUE//我的win7主机在这里也查看到了
- MYGROUP
- \\WWWSambaServerVersion4.1.12
7、客户端mount
mount.cifs或mount -t cifs常用参数有(-o后面带的部分):
username=登陆用户名,例如 username=smb1 ;
password=登陆密码:与上面 username 对应;
iocharset=本机的默认编码,如utf8 或 gb2312等;
codepage=提供samba服务的远程主机的编码方式,例如windows下繁体中文为cp950、简体中文为cp936 。
linux客户端下的挂载
# mount -t cifs //192.168.1.109/smb1 /mnt/samba \
-o username=smb1,password=361way.com,codepage=cp936
windows客户端下的挂载,也可以在开始--运行中输入\\ip
NET USE Q: \\192.168.0.109\public
net use H: \\192.168.0.109\shareFile "password" /user:"username"
注:需要注意的是linux与win下挂载时,使用的斜扛方向是有区别的。
8、smbstatus
用于查看当前连接到服务端的客户端主机信息:
- #smbstatus
- Sambaversion4.1.12
- PIDUsernameGroupMachine
- -------------------------------------------------------------------
- 2894nobodynobody192.168.0.104(ipv4:192.168.0.104:50709)
- ServicepidmachineConnectedat
- -------------------------------------------------------
- public2894192.168.0.104SunSep1321:40:042015
- Nolockedfiles
三、samba服务配置
/etc/samba/smb.conf配置文件:
- [global]
- workgroup=MYGROUP//工作组
- netbiosname=361way//netbios名
- serverstring=SambaServerVersion%v//服务器字符串,可任意写
- unixcharset=utf8//linux下使用的编码
- displaycharset=utf8//本机显示的编码
- doscharset=cp936//win下使用的编码
- logfile=/var/log/samba/log.%m//日志文件位置
- #maximumsizeof50KBperlogfile,thenrotate:
- maxlogsize=50
- security=user
- passdbbackend=tdbsam//指定用户名密码存储的数据格式
- passdbbackend=tdbsam:/etc/samba/private/passdb.tdb//指定密码文件的位置
- passdbbackend=ldapsam:"
- ldap://ldap-1.example.com
- ldap://ldap-2.example.com
- "//使用ldap认证,后面的是备用节点
- maptoguest=BadUser//开启匿名访问
- interfaces=loeth0192.168.12.2/24192.168.13.2/24//监听的本机端口和使用IP,默认监听所有
- hostsallow=192.168.12.192.168.13.EXCEPT192.168.12.100//允许连接的IP网段,默认允许所有
- clusteraddresses=10.0.0.110.0.0.210.0.0.3集群设置
- usernamemap=/usr/local/samba/lib/users.map//用户名对应关系映射
- logondrive=K://windows自动挂载时映射的本地盘符名
- logonscript=startup.bat//客户端访问后自动执行的脚本程序
- timeserver=yes//自动让Windows主机与Samba服务器时间同步
- adminusers=root//预设的管理用户
- logonpath=
- \\%N\%U\profile
- //使用者的个人化设定
- logonhome=
- \\%N\%U
- //使用者的家目录位置!
- setquotacommand=/usr/local/sbin/set_quota//磁盘配额相关
- loadprinters=yes//开启打印机共享
- cupsoptions=raw
- #obtainalistofprintersautomaticallyonUNIXSystemVsystems:
具体共享项的常用选项
[共享名称]
comment=提示性信息
path=具体共享的目录路径
browseable=是否让所用使用者查看,yes或no
writable=是否有写入权限,yes或no
热门评论