RH254小结(六)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# yum list|grep samba
2samba.x86_64 4.1.12-21.el7_1 @base
3samba-common.x86_64 4.1.12-21.el7_1 @base
4samba-libs.x86_64 4.1.12-21.el7_1 @base
5samba-client.x86_64 4.1.12-21.el7_1 base
6samba-python.x86_64 4.1.12-21.el7_1 base
7samba-winbind.x86_64 4.1.12-21.el7_1 base
8samba-winbind-modules.x86_64 4.1.12-21.el7_1 base
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# tdbdump passdb.tdb
2{
3key(13) = "RID_000003e8\00"
4data(6) = "usera\00"
5}
6{
7key(11) = "USER_usera\00"
8data(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{
11key(19) = "INFO/minor_version\00"
12data(4) = "\00\00\00\00"
13}
14{
15key(9) = "NEXT_RID\00"
16data(4) = "\E9\03\00\00"
17}
18{
19key(13) = "INFO/version\00"
20data(4) = "\04\00\00\00"
21}
2、tdbtool
1# tdbtool passdb.tdb
2tdb> list
3hash=23
4 rec: hash=23 offset=0x00001e38 next=0x00000000 rec_len=28 key_len=13 data_len=6 full_hash=0xc6948dbc magic=0x26011999
5hash=33
6 rec: hash=33 offset=0x00001e6c next=0x00000000 rec_len=228 key_len=11 data_len=182 full_hash=0x41061b85 magic=0x26011999
7hash=52
8 rec: hash=52 offset=0x00001f68 next=0x00000000 rec_len=32 key_len=19 data_len=4 full_hash=0x538a9285 magic=0x26011999
9hash=65
10 rec: hash=65 offset=0x00001fd4 next=0x00000000 rec_len=20 key_len=9 data_len=4 full_hash=0x70a13a4c magic=0x26011999
11hash=103
12 rec: hash=103 offset=0x00001fa0 next=0x00000000 rec_len=28 key_len=13 data_len=4 full_hash=0xf2394cd5 magic=0x26011999
13freelist:
3、smbpasswd与pdbedit
创建samba用户前,需要用户先在本地中存在
1# useradd -G users smb1
2# useradd -G users smb2
3# echo 361way.com | passwd --stdin smb1
4# echo 361way.com | passwd --stdin smb2
使用smbapsswd创建:
1smbapsswd常用项:
2-a:创建新用户,不加-a 参数直接跟用户为修改用户密码;
3-c:指定密码文件生成的位置;
4-x:删除用户;
5-d:临时禁用一个用户;
6-e:enable一个用户;
7-D:指定debug级别;
8-n:设置一个用户的密码为空,用户使用空密码需在smb.conf的global 项配置中null passwords = yes ;
9# smbpasswd -a smb1
10New SMB password:
11Retype new SMB password:
12Added user smb1.
使用pdbedit命令创建:
1pdbedit常用选项:
2-L :列出samba用户与信息;
3-v :需要搭配 -L 执行,可列出更多的信息;
4-w :需要搭配 -L 执行,使用旧版的 smbpasswd 格式来显示信息;
5-a :新增samba用户;
6-r :修改一个用户的信息,需搭配很多特殊参数,请man pdbedit;
7-x :删除一个可使用 用户,可先用 -L 找到用户后再刪除;
8# pdbedit -a -u smb2
9new password:
10retype new password:
11Unix username: smb2
12NT username:
13Account Flags: [U ]
14User SID: S-1-5-21-1462619673-710706269-1943266961-1002
15Primary Group SID: S-1-5-21-1462619673-710706269-1943266961-513
16Full Name:
17Home Directory: \\www\smb2
18HomeDir Drive:
19Logon Script:
20Profile Path: \\www\smb2\profile
21Domain: WWW
22Account desc:
23Workstations:
24Munged dial:
25Logon time: 0
26Logoff time: Wed, 06 Feb 2036 23:06:39 CST
27Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
28Password last set: Sun, 13 Sep 2015 21:09:45 CST
29Password can change: Sun, 13 Sep 2015 21:09:45 CST
30Password must change: never
31Last bad password : 0
32Bad password count : 0
33Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
pdbedit 是一个新的指令,但无法修改用户密码,所以还是无法完全替代smbpasswd的作用。
4、testparm
testparm是一个语法测试命令,具体用法如下:
1# testparm
2Load smb config files from /etc/samba/smb.conf
3rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
4Processing section "[homes]"
5Processing section "[printers]"
6Processing section "[public]"
7Loaded services file OK.
8Server role: ROLE_STANDALONE
9Press enter to see a dump of your service definitions
10[global]
11 workgroup = MYGROUP
12 server string = Samba Server Version %v
13 map to guest = Bad User
14 log file = /var/log/samba/log.%m
15 max log size = 50
16 load printers = No
17 idmap config * : backend = tdb
18 cups options = raw
19[homes]
20……………………略
5、smbclient
smbclient有两个功能,一个是查询功能,一个是类似于ftp交互式管理功能,如下:
1smbclient查询当前的共享信息
2# smbclient -L 192.168.0.109
3Enter root's password:
4Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.12]
5 Sharename Type Comment
6 --------- ---- -------
7 public Disk Public dir
8 IPC$ IPC IPC Service (Samba Server Version 4.1.12)
9Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.12]
10 Server Comment
11 --------- -------
12类ftp交互管理的用法
13# smbclient '//192.168.0.109/public' -U smb1
14Enter smb1's password:
15Anonymous login successful
16Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.12]
17smb: \> dir
18# 我們可以使用 dir, get, put 等常用的 ftp 指令来进行文件传输
19? :列出所有可以用的指令,常用!
20cd :切换目录
21del : 删除文件
22lcd : 改变本机目录
23ls : 查看samba共享目录下的文件信息
24dir : 与s 相同
25get : 下载文件
26mget: 多个文件下载
27mput: 多个文件上传
28put :单个文件上传
29rm : 删除文件
30exit: 退出
31# 内部更多指令可以?号查看,也可以 man smbclient 获取。
6、smbtree
1# smbtree
2Enter root's password:
3WORKGROUP
4 \\YNNYCSK9X26EZUE //我的win7主机在这里也查看到了
5MYGROUP
6 \\WWW Samba Server Version 4.1.12
7、客户端mount
mount.cifs或mount -t cifs常用参数有(-o后面带的部分):
username=登陆用户名,例如 username=smb1 ;
password=登陆密码:与上面 username 对应;
iocharset=本机的默认编码,如utf8 或 gb2312等;
codepage=提供samba服务的远程主机的编码方式,例如windows下繁体中文为cp950、简体中文为cp936 。
1linux客户端下的挂载
2# mount -t cifs //192.168.1.109/smb1 /mnt/samba \
3-o username=smb1,password=361way.com,codepage=cp936
4windows客户端下的挂载,也可以在开始--运行中输入\\ip
5NET USE Q: \\192.168.0.109\public
6net use H: \\192.168.0.109\shareFile "password" /user:"username"
注:需要注意的是linux与win下挂载时,使用的斜扛方向是有区别的。
8、smbstatus
用于查看当前连接到服务端的客户端主机信息:
1# smbstatus
2Samba version 4.1.12
3PID Username Group Machine
4-------------------------------------------------------------------
52894 nobody nobody 192.168.0.104 (ipv4:192.168.0.104:50709)
6Service pid machine Connected at
7-------------------------------------------------------
8public 2894 192.168.0.104 Sun Sep 13 21:40:04 2015
9No locked files
三、samba服务配置
/etc/samba/smb.conf配置文件:
1[global]
2 workgroup = MYGROUP //工作组
3 netbios name = 361way //netbios名
4 server string = Samba Server Version %v //服务器字符串,可任意写
5 unix charset = utf8 //linux下使用的编码
6 display charset = utf8 //本机显示的编码
7 dos charset = cp936 //win下使用的编码
8 log file = /var/log/samba/log.%m //日志文件位置
9 # maximum size of 50KB per log file, then rotate:
10 max log size = 50
11 security = user
12 passdb backend = tdbsam //指定用户名密码存储的数据格式
13 passdb backend = tdbsam:/etc/samba/private/passdb.tdb //指定密码文件的位置
14 passdb backend = ldapsam:"ldap://ldap-1.example.com ldap://ldap-2.example.com" //使用ldap认证,后面的是备用节点
15 map to guest = Bad User //开启匿名访问
16 interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 //监听的本机端口和使用IP,默认监听所有
17 hosts allow = 192.168.12. 192.168.13. EXCEPT 192.168.12.100 //允许连接的IP网段,默认允许所有
18 cluster addresses = 10.0.0.1 10.0.0.2 10.0.0.3 集群设置
19 username map = /usr/local/samba/lib/users.map //用户名对应关系映射
20 logon drive = K: //windows自动挂载时映射的本地盘符名
21 logon script = startup.bat //客户端访问后自动执行的脚本程序
22 time server = yes //自动让 Windows主机 与 Samba 服务器时间同步
23 admin users = root //预设的管理用户
24 logon path = \\%N\%U\profile //使用者的个人化设定
25 logon home = \\%N\%U //使用者的家目录位置!
26 set quota command = /usr/local/sbin/set_quota //磁盘配额相关
27 load printers = yes //开启打印机共享
28 cups options = raw
29 # obtain a list of printers automatically on UNIX System V systems:
30//具体共享项的常用选项
31[共享名称]
32comment=提示性信息
33path=具体共享的目录路径
34browseable=是否让所用使用者查看,yes或no
35writable=是否有写入权限,yes或no
36create mode 与 directory mode ,默认权限设置,如:force create mode = 0755,默认是000
37writelist = 使用者, @群組 除了@,还有+、&两个符号
上面的选项中大部分我都进行了注解,这里再选取几个典型的部分细说下。
security = user :在老的版本中,可选项中有security = share、user、domain,share即开启匿名防问,在新的版本中该项由于安全考虑被取消掉了。默认是user,想开启匿名防问加后面的map to guest行。新版本中的security 后面可以跟的有AUTO、USER、DOMAIN、ADS(windows AD域);
logon script = startup.bat :自动执行脚本,多用于windows客户端访问后,自动将访问目录映射为本地盘,如这里使用脚本内容为:
1net time \\192.168.0.109 /set /yes
2net use K: /samba 或
3NET USE Q: \\192.168.0.109\public
需要注意的是上面的内容需要在windows下编辑,如果使用linux下编辑,需要使用unix2dos命令进行转换。
更多配置部分请使用man smb.conf查看。
四、防火墙与selinux
防火墙上需要放行的端口有UDP 137、138--nmbd服务占用、TCP的139、445 --smbd服务使用:
1# netstat -ntlup|grep mb
2tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2483/smbd
3tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 2483/smbd
4tcp6 0 0 :::139 :::* LISTEN 2483/smbd
5tcp6 0 0 :::445 :::* LISTEN 2483/smbd
6udp 0 0 192.168.0.255:137 0.0.0.0:* 2489/nmbd
7udp 0 0 192.168.0.109:137 0.0.0.0:* 2489/nmbd
8udp 0 0 0.0.0.0:137 0.0.0.0:* 2489/nmbd
9udp 0 0 192.168.0.255:138 0.0.0.0:* 2489/nmbd
10udp 0 0 192.168.0.109:138 0.0.0.0:* 2489/nmbd
11udp 0 0 0.0.0.0:138 0.0.0.0:* 2489/nmbd
使用用下面的命令放行:
1firewall-cmd --permanent --add-port=137-138/udp
2firewall-cmd --permanent --add-port=139/tcp --add-port=445/tcp
3firewall-cmd --reload
selinux相关项在/etc/samba/smb.conf的注释部分都有说明,如下:
1修改共享目录的上下文件为samba_share模式
2#chcon -t samba_share_t /test
3系统目录需要读写时需要开启:
4# setsebool -P samba_export_all_ro on
5# setsebool -P samba_export_all_rw on
6home目录共享时需要
7#setsebool -P samba_enable_home_dirs on
8域控制时需要使用(一般用不到)
9# setsebool -P samba_domain_controller on
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/rhce-samba-theory/4712.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.