北京SEO

linux中Samba服务器的搭建理论篇

2019/10/10/17:44:43  阅读:1638  来源:谷歌SEO算法  标签: 友情链接作弊

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版本,主要使用的相关软件包有:

  1. #yumlist|grepsamba
  2. samba.x86_644.1.12-21.el7_1@base
  3. samba-common.x86_644.1.12-21.el7_1@base
  4. samba-libs.x86_644.1.12-21.el7_1@base
  5. samba-client.x86_644.1.12-21.el7_1base
  6. samba-python.x86_644.1.12-21.el7_1base
  7. samba-winbind.x86_644.1.12-21.el7_1base
  8. 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

  1. #tdbdumppassdb.tdb
  2. {
  3. key(13)="RID_000003e8\00"
  4. data(6)="usera\00"
  5. }
  6. {
  7. key(11)="USER_usera\00"
  8. 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"
  9. }
  10. {
  11. key(19)="INFO/minor_version\00"
  12. data(4)="\00\00\00\00"
  13. }
  14. {
  15. key(9)="NEXT_RID\00"
  16. data(4)="\E9\03\00\00"
  17. }
  18. {
  19. key(13)="INFO/version\00"
  20. data(4)="\04\00\00\00"
  21. }

2、tdbtool

  1. #tdbtoolpassdb.tdb
  2. tdb>list
  3. hash=23
  4. rec:hash=23offset=0x00001e38next=0x00000000rec_len=28key_len=13data_len=6full_hash=0xc6948dbcmagic=0x26011999
  5. hash=33
  6. rec:hash=33offset=0x00001e6cnext=0x00000000rec_len=228key_len=11data_len=182full_hash=0x41061b85magic=0x26011999
  7. hash=52
  8. rec:hash=52offset=0x00001f68next=0x00000000rec_len=32key_len=19data_len=4full_hash=0x538a9285magic=0x26011999
  9. hash=65
  10. rec:hash=65offset=0x00001fd4next=0x00000000rec_len=20key_len=9data_len=4full_hash=0x70a13a4cmagic=0x26011999
  11. hash=103
  12. rec:hash=103offset=0x00001fa0next=0x00000000rec_len=28key_len=13data_len=4full_hash=0xf2394cd5magic=0x26011999
  13. 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除;

  1. #pdbedit-a-usmb2
  2. newpassword:
  3. retypenewpassword:
  4. Unixusername:smb2
  5. NTusername:
  6. AccountFlags:[U]
  7. UserSID:S-1-5-21-1462619673-710706269-1943266961-1002
  8. PrimaryGroupSID:S-1-5-21-1462619673-710706269-1943266961-513
  9. FullName:
  10. HomeDirectory:
  11. \\www\smb2
  12. HomeDirDrive:
  13. LogonScript:
  14. ProfilePath:
  15. \\www\smb2\profile
  16. Domain:WWW
  17. Accountdesc:
  18. Workstations:
  19. Mungeddial:
  20. Logontime:0
  21. Logofftime:Wed,06Feb203623:06:39CST
  22. Kickofftime:Wed,06Feb203623:06:39CST
  23. Passwordlastset:Sun,13Sep201521:09:45CST
  24. Passwordcanchange:Sun,13Sep201521:09:45CST
  25. //phpfensi.com
  26. Passwordmustchange:never
  27. Lastbadpassword:0
  28. Badpasswordcount:0
  29. Logonhours:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

pdbedit 是一个新的指令,但无法修改用户密码,所以还是无法完全替代smbpasswd的作用.

4、testparm

testparm是一个语法测试命令,具体用法如下:

  1. #testparm
  2. Loadsmbconfigfilesfrom/etc/samba/smb.conf
  3. rlimit_max:increasingrlimit_max(1024)tominimumWindowslimit(16384)
  4. Processingsection"[homes]"
  5. Processingsection"[printers]"
  6. Processingsection"[public]"
  7. LoadedservicesfileOK.
  8. Serverrole:ROLE_STANDALONE
  9. Pressentertoseeadumpofyourservicedefinitions
  10. [global]
  11. workgroup=MYGROUP
  12. serverstring=SambaServerVersion%v
  13. maptoguest=BadUser
  14. logfile=/var/log/samba/log.%m
  15. maxlogsize=50
  16. loadprinters=No
  17. idmapconfig*:backend=tdb
  18. cupsoptions=raw
  19. [homes]
  20. ……………………略

5、smbclient

smbclient有两个功能,一个是查询功能,一个是类似于ftp交互式管理功能,如下:

smbclient查询当前的共享信息

  1. #smbclient-L192.168.0.109
  2. Enterroot'spassword:
  3. Domain=[MYGROUP]OS=[Unix]Server=[Samba4.1.12]
  4. SharenameTypeComment
  5. --------------------
  6. publicDiskPublicdir
  7. IPC$IPCIPCService(SambaServerVersion4.1.12)
  8. Domain=[MYGROUP]OS=[Unix]Server=[Samba4.1.12]
  9. ServerComment
  10. ----------------

类ftp交互管理的用法

  1. #smbclient'//192.168.0.109/public'-Usmb1
  2. Entersmb1'spassword:
  3. Anonymousloginsuccessful
  4. Domain=[MYGROUP]OS=[Unix]Server=[Samba4.1.12]
  5. smb:\>dir

# 我可以使用 dir, get, put 等常用的 ftp 指令来进行文件传输

  1. ?:列出所有可以用的指令,常用!
  2. cd:切换目录
  3. del:删除文件
  4. lcd:改变本机目录
  5. ls:查看samba共享目录下的文件信息
  6. dir:与s相同
  7. get:下载文件
  8. mget:多个文件下载
  9. mput:多个文件上传
  10. put:单个文件上传
  11. rm:删除文件
  12. exit:退出

# 内部更多指令可以?号查看,也可以 man smbclient 获取.

6、smbtree

  1. #smbtree
  2. Enterroot'spassword:
  3. WORKGROUP
  4. \\YNNYCSK9X26EZUE//我的win7主机在这里也查看到了
  5. MYGROUP
  6. \\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

用于查看当前连接到服务端的客户端主机信息:

  1. #smbstatus
  2. Sambaversion4.1.12
  3. PIDUsernameGroupMachine
  4. -------------------------------------------------------------------
  5. 2894nobodynobody192.168.0.104(ipv4:192.168.0.104:50709)
  6. ServicepidmachineConnectedat
  7. -------------------------------------------------------
  8. public2894192.168.0.104SunSep1321:40:042015
  9. Nolockedfiles

三、samba服务配置

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

  1. [global]
  2. workgroup=MYGROUP//工作组
  3. netbiosname=361way//netbios名
  4. serverstring=SambaServerVersion%v//服务器字符串,可任意写
  5. unixcharset=utf8//linux下使用的编码
  6. displaycharset=utf8//本机显示的编码
  7. doscharset=cp936//win下使用的编码
  8. logfile=/var/log/samba/log.%m//日志文件位置
  9. #maximumsizeof50KBperlogfile,thenrotate:
  10. maxlogsize=50
  11. security=user
  12. passdbbackend=tdbsam//指定用户名密码存储的数据格式
  13. passdbbackend=tdbsam:/etc/samba/private/passdb.tdb//指定密码文件的位置
  14. passdbbackend=ldapsam:"
  15. ldap://ldap-1.example.com
  16. ldap://ldap-2.example.com
  17. "//使用ldap认证,后面的是备用节点
  18. maptoguest=BadUser//开启匿名访问
  19. interfaces=loeth0192.168.12.2/24192.168.13.2/24//监听的本机端口和使用IP,默认监听所有
  20. hostsallow=192.168.12.192.168.13.EXCEPT192.168.12.100//允许连接的IP网段,默认允许所有
  21. clusteraddresses=10.0.0.110.0.0.210.0.0.3集群设置
  22. usernamemap=/usr/local/samba/lib/users.map//用户名对应关系映射
  23. logondrive=K://windows自动挂载时映射的本地盘符名
  24. logonscript=startup.bat//客户端访问后自动执行的脚本程序
  25. timeserver=yes//自动让Windows主机与Samba服务器时间同步
  26. adminusers=root//预设的管理用户
  27. logonpath=
  28. \\%N\%U\profile
  29. //使用者的个人化设定
  30. logonhome=
  31. \\%N\%U
  32. //使用者的家目录位置!
  33. setquotacommand=/usr/local/sbin/set_quota//磁盘配额相关
  34. loadprinters=yes//开启打印机共享
  35. cupsoptions=raw
  36. #obtainalistofprintersautomaticallyonUNIXSystemVsystems:

具体共享项的常用选项

[共享名称]

comment=提示性信息

path=具体共享的目录路径

browseable=是否让所用使用者查看,yes或no

writable=是否有写入权限,yes或no

create mode 与 directory mode,默认权限设置,如:force create mode = 0755,默认是000

广告内容

linux中Samba服务器的搭建理论篇 linux中Samba服务器的搭建理论篇 linux中Samba服务器的搭建理论篇

相关阅读

热门评论

木木老贼 木木老贼

互联网营销达人~

总篇数181

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法