Samba服务
Samba简介
-
SMB:Server Message Block服务器消息块,IBM发布,最早是DOS网络文件共享协议
-
CIFS:common internet file system,微软基于SMB发布
-
SAMBA:1991年Andrew Tridgell,实现windows和UNIX相通
-
SAMBA的功能:
共享文件和打印,实现在线编辑
实现登录SAMBA用户的身份认证
可以进行NetBIOS名称解析
外围设备共享 -
计算机网络管理模式:
工作组WORKGROUP:计算机对等关系,帐号信息各自管理
域DOMAIN:C/S结构,帐号信息集中管理,DC,AD
Samba服务主要功能
-
Samba是在Linux和UNIX系统上实现SMB协议的开源软件,SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
-
Samba主要是实现类似于windows共享功能的,用linux模拟windows共享,在windows上并不关心底层linux还是windows,毕竟目前,客户端(个人电脑)还是windows系统居多,在windows和linux之间共享使用Samba服务。
-
Samba服务主要是使用windows作为客户端,访问linux的共享资源。
-
在linux上搭建一个Samba服务,让windows使用UNC路径进行访问。
windows共享
-
windows共享只能实现windows之间的相互访问。
-
在windows上实现文件共享的操作:
–>共享目录–>
–>鼠标右击选择属性–>
–>选择共享–>
–>高级共享–>
–>设置共享文件夹属性(共享此文件夹、权限、同时共享用户数、)–>
–>访问共享(就是windows计算机的计算机名)–>
- 其中\WEIRDO-PC\share:UNC路径(UNC:通用命名规范)
- 其中 WEIRDO-PC可以换成windows计算机的ip地址
–>访问方式:以下两种–>
-
局域网远程主机访问共享目录:需要提供主机名和密码
- 如果是管理员,那么C盘D盘也是可以被访问的哦~~(小心其中的珍贵资源~~)
查看当前windows主机的用户列表:
添加一个windows用户:> net user test 123 /add
删除:> net user 用户名 /del -
远程主机访问共享目录时,当已经访问过一次时,默认下次连接还是那个用户名和密码访问,更改账户的操作:
- 1.先删除登录过的用户信息,怎么注销?
①注销登录|或者关机
② 命令行删除:
net use \\IP\ipc$ /del
net use \\Hostname\ipc$ /del - 2.删除之后重新连接就可以更换用户名和账户了。
- 1.先删除登录过的用户信息,怎么注销?
-
linux中查看windows的共享目录
[root@localhost ~]# smbclient -L 172.18.1.18 -Utest%123
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk 远程管理
C$ Disk 默认共享
D$ Disk 默认共享
E$ Disk 默认共享
IPC$ IPC 远程 IPC
用户:test 密码:123 是我windows上的用户
$表示隐藏共享
默认在windows上直接输入ip时,windows是看不见隐藏目录~C/D/E盘
但是如果直接输入:\\172.18.1.18\d$ 再输入管理员的用户密码可以访问的~
-
在windows中默认磁盘的所有分区都是共享的:
-
想要访问C/D盘需要管理员身份
-
方便windows管理员远程管理,只要知道Administrator账户和密码即可。
linux连接windows的共享目录:
[root@localhost ~]# smbclient //172.18.1.18/share -Utest%123
命令形式与ftp命令差不多
smb: \>
[root@localhost ~]# mount //192.168.38.1/share /data -o username=test,password=123
挂载windows共享使用
挂载时注意:linux OS不同版本之间的mount.cifs版本的版本问题
centos kernel version 4.13是分界线。
centos6挂载:
~]# mount //192.168.38.1/share /data -o vers=3.0,username=test,password=123
Samba相关
- 相关包:
samba 提供smb服务
samba-client 客户端软件
samba-common 通用软件
cifs-utils smb客户端工具
samba-winbind 和AD相关
[root@localhost net]# rpm -qi samba-client
Description :
The samba-client package provides some SMB/CIFS clients to complement
the built-in SMB/CIFS filesystem in Linux.
注意:SMB/CIFS filesystem 是一个CIFS文件系统
[root@localhost ~]# locate cifs.ko
/usr/lib/modules/4.18.0-80.el8.x86_64/kernel/fs/cifs/cifs.ko.xz
文件系统:挂载使用
samba-client的小工具:
[root@localhost ~]# rpm -ql samba-client
/usr/bin/cifsdd
/usr/bin/dbwrap_tool
/usr/bin/findsmb
/usr/bin/mvxattr
/usr/bin/nmblookup
/usr/bin/oLschema2ldif
/usr/bin/regdiff
/usr/bin/regpatch
/usr/bin/regshell
/usr/bin/regtree
/usr/bin/rpcclient
/usr/bin/samba-regedit
/usr/bin/sharesec
/usr/bin/smbcacls
/usr/bin/smbclient
/usr/bin/smbcquotas
/usr/bin/smbget
/usr/bin/smbprint
/usr/bin/smbspool
/usr/bin/smbtar
/usr/bin/smbtree
[root@localhost ~]# dnf install samba
安装的一些依赖的包:
samba-4.9.1-8.el8.x86_64 samba-common-tools-4.9.1-8.el8.x86_64
samba-libs-4.9.1-8.el8.x86_64
[root@localhost ~]# rpm -ql samba
/etc/openldap/schema
/etc/openldap/schema/samba.schema LDAP的开源实现openldap
/etc/pam.d/samba pam验证
/usr/lib/systemd/system/nmb.service 提供名字解析服务,但是不是必要服务
/usr/lib/systemd/system/smb.service 核心服务,提供共享
nmb 的监听端口:UDP的 137 138
smb 的监听端口:TCP的445 139
/usr/sbin/nmbd 服务对应的两个程序
/usr/sbin/smbd
[root@localhost ~]# rpm -ql samba-common-tools (相关工具)
/usr/bin/net
/usr/bin/pdbedit
/usr/bin/profiles
/usr/bin/smbcontrol
/usr/bin/smbpasswd
/usr/bin/testparm
Samba服务的配置文件: 来源于samba-common包
[root@localhost ~]# ls /etc/samba/
lmhosts
smb.conf
smb.conf.example
[root@localhost ~]# rpm -qf /etc/samba/smb.conf
samba-common-4.9.1-8.el8.noarch
其中 /etc/samba/smb.conf.example 配置文件范例。
-
相关服务进程:
smbd 提供smb(cifs)服务 TCP:139,445
nmbd NetBIOS名称解析 UDP:137,138 -
主配置文件:/etc/samba/smb.conf
帮助参看:man smb.conf -
语法检查: testparm [-v] [/etc/samba/smb.conf]
-
客户端工具:smbclient,mount.cifs
SAMBA用户
-
实现samba用户:
- 包: samba-common-tools
- 工具:smbpasswd pdbedit
- 用户数据库:/var/lib/samba/private/passdb.tdb
-
注:samba用户须是Linux用户,建议使用/sbin/nologin
-
添加samba用户:smbpasswd -a <user> 或 pdbedit -a -u <user>
-
修改用户密码: smbpasswd <user>
-
删除用户和密码:smbpasswd –x <user> 或 pdbedit –x –u <user>
-
查看samba用户列表:pdbedit –L –v
-
查看samba服务器状态:smbstatus
[root@localhost data]# useradd -s /sbin/nologin sambauser1
[root@localhost data]# useradd -s /sbin/nologin sambauser2
[root@localhost data]# useradd -s /sbin/nologin sambauser3
[root@localhost data]# smbpasswd -a sambauser1
[root@localhost data]# smbpasswd -a sambauser2
[root@localhost data]# smbpasswd -a sambauser3
[root@localhost ~]# pdbedit -L
sambauser1:1001:
sambauser3:1003:
sambauser2:1002:
创建用户后,Samba服务启动时:
[root@centos7-17 ~]# smbclient -L 192.168.38.8 -U sambauser1%123
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.9.1)
sambauser1 Disk Home Directories
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
SAMBA服务器配置
-
smb.conf继承了.ini文件的格式,用[ ] 分成不同的部分
-
全局设置:
[global] 服务器通用或全局设置的部分 -
特定共享设置:
[homes] 用户的家目录共享
[printers] 定义打印机资源和服务
[sharename] 自定义的共享目录配置 -
其中:#和;开头的语句为注释,大小写不敏感
注:以;开头的注释可以取消;的注释,当成指令|配置文件设置项使用 -
宏定义:
%m 客户端主机的NetBIOS名
%M 客户端主机的FQDN
%H 当前用户家目录路径
%U 当前用户用户名
%g 当前用户所属组
%h samba服务器的主机名
%L samba服务器的NetBIOS名
%I 客户端主机的IP
%T 当前日期和时间
%S 可登录的用户名
1)SAMBA服务器全局配置分析:
-
workgroup 指定工作组名称
-
server string 主机注释信息
-
netbios name 指定NetBIOS名 interfaces 指定服务侦听接口和IP
-
hosts allow 可用“,” ,空格,或tab分隔,默认允许所有主机访问,也可在每个共享
独立配置,如在[global]设置,将应用并覆盖所有共享设置
IPv4 network/prefix: 172.16.0.0/24 IPv4前缀: 172.16.0.
IPv4 network/netmask: 172.16.0.0/255.255.255.0
主机名: desktop.example.com
以example.com后缀的主机名: .example.com -
hosts deny 拒绝指定主机访问
-
Security三种认证方式:
user:samba用户(采有linux用户,samba的独立口令)
share:匿名(CentOS7不再支持),已不建议使用
server:已不建议使用 -
passdb backend = tdbsam 密码数据库格式
-
以下四个global配置在4)中分析
- config file=/etc/samba/conf.d/%U 用户独立的配置文件
- Log file=/var/log/samba/log.%m 不同客户机采用不同日志
- log level = 2 日志级别,默认为0,不记录日志
- max log size=50 日志文件达到50K,将轮循rotate,单位KB
1)范例中有关于配置的详细说明:
[root@localhost ~]# vim /etc/samba/smb.conf.example
1、workgroup:
[global]
workgroup = ....
workgroup = 工作组 默认是samba
在windows中主机可以工作在两种工作模式:工作组和域
工作组:表示组内成员默认是平级关系:例如篮球爱好者组成一个篮球队
域:域内成员受域控制器管理:相当于一家公司
windows主机的计算名
==>NETBIOS名:微软命令计算机名的一种手段
==>NETBIOS名命名:最多15个字符
==>windows的计算名具有网络功能
==>具有网络功能是因为通过wins解析计算机名的
==>wins是微软发明的解析名称的服务,但是目前不使用。
==>wins通过广播方式解析主机名。
当/etc/samba/smb.conf中设置了netbios名时:
netbios name = centos8
==>默认此netbios name(centos8)不具有网络功能,
==>若要使其具有网络功能:需要启动nmb服务。
目前全局配置如下:
[root@localhost ~]# vim /etc/samba/smb.conf
[global]
workgroup = WORKGROUP 修改
security = user
netbios name = centos8 添加
[root@localhost ~]# systemctl reload smb
[root@localhost ~]# systemctl start nmb
-
==>未开启nmb服务时,windows 上 ping centos8 是ping不通滴
==>开启nmb服务后,windows 上ping centos8 可行。
==>如下图:
-
==>能ping通就可以以\\centos8访问linux主机的Samba共享服务
server string = .. 英文描述
interfaces = samba服务监听的端口绑定的哪个接口上
相关示例:;
; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
hosts allow = 访问控制
相关示例:
; hosts allow = 127. 192.168.12. 192.168.13.
security = 安全相关 目前仅支持user
# security = the mode Samba runs in. This can be set to user, share
# (deprecated), or server (deprecated).
passdb backend = 数据库的存放格式,默认就行
passdb backend = tdbsam
打印服务相关:一般不会使用linux用作打印服务
printing = cups
printcap name = cups
load printers = yes
cups options = raw
2)打印相关配置:
- 注:打印服务一般不会使用linux;因此这些打印部分不关注
打印共享:
[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775
3)默认Samba用户的家目录共享:
- 默认Samba用户的家目录是共享的。
默认Samba用户的家目录是共享的:
[root@centos7-17 ~]# smbclient -L 192.168.38.8 -U sambauser1%123
sambauser1 Disk Home Directories
因为配置文件有如下配置:
[root@localhost ~]# vim /etc/samba/smb.conf
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
4)每个共享目录应该有独立的[ ]部分
-
[共享名称] 远程网络看到的共享名称
-
comment 注释信息
-
path 所共享的目录路径
-
public 能否被guest访问的共享,默认no,和guest ok 类似
-
browsable 是否允许所有用户浏览此共享,默认为yes,no为隐藏
-
writable=yes 可以被所有用户读写,默认为no
-
read only=no 和writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读
-
write list 三种形式:用户,@组名,+组名,用,分隔
如writable=no,列表中用户或组可读写,不在列表中用户只读 -
valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔
注:想在共享目录中具有写权限,不仅需要Samba服务授权,还要对应的映射用户对共享目录具备相应权限。
设置一个自定义或者希望共享的文件夹:
==>规划:期望共享本机的/data/smbshare/共享目录
共享目录配置的范例:
[root@localhost ~]# vim /etc/samba/smb.conf.example
; [public]
; comment = Public Stuff
; path = /home/samba
; public = yes
; writable = no
; printable = no
; write list = +staff
[share] 共享名==>随便取
path = /data/smbshare/ 共享目录路径 目前此处是/data/smbshare/
....
其余选项在上述4)共享目录独立选项中说明
匿名用户访问:
[root@centos7-17 ~]# smbclient //192.168.38.8/share
samba用户访问:
[root@centos7-17 ~]# smbclient //192.168.38.8/share -Usambauser1%123
-
config file=/etc/samba/conf.d/%U 用户独立的配置文件
注:可实现每个用户独立的配置文件,实现不同的用户共享不同的目录实现每个Samba用户看到的共享名相同但是进去的共享目录却不相同
- windows不具备此功能。
实现sambauser1看到的共享目录均是share
但是实际进入share是不同目录
1.修改Samba配置文件[global]设置中
[root@localhost ~]#vim /etc/samba/smb.conf
[global]
config file=/etc/samba/conf.d/%U 添加此行
2.创建/etc/samba/conf.d/目录
~]# mkdir /etc/samba/conf.d
3.对不同的Samba创建属于自己的共享目录
~]# pdbedit -L
sambauser1:1001:
sambauser3:1003:
sambauser2:1002:
~]# vim /etc/samba/conf.d/sambauser1
[share]
path=/data/share1
~]# vim /etc/samba/conf.d/sambauser2
[share]
path=/data/smbshare
~]# vim /etc/samba/smb.conf sambauser3未做任何设置,默认共享目录将是主配置文件中此处的共享目录
[share]
path=/data/test/
writable=yes
~]# tree /data/
/data/
├── share1
│ └── share1.txt
├── smbshare
│ └── smbshare.txt
└── test
└── test.txt
4.重启服务:~]# systemctl restart smb
5.测试:
[root@centos7-17 ~]# smbclient //192.168.38.8/share -U sambauser1%123
smb: \> ls
share1.txt N 0 Fri Oct 18 09:09:46 2019
[root@centos7-17 ~]# smbclient //192.168.38.8/share -U sambauser2%123
smb: \> ls
smbshare.txt N 0 Fri Oct 18 09:15:43 2019
[root@centos7-17 ~]# smbclient //192.168.38.8/share -U sambauser3%123
smb: \> ls
test.txt N 0 Fri Oct 18 09:10:19 2019
==>实现了同一共享名均为share,但是不同的用户登录,接触的共享目录不相同,windows不具备此功能。
- 可设置记录日志,其中每个用户具有独立的日志记录
- Log file=/var/log/samba/log.%m 不同客户机采用不同日志
- log level = 2 日志级别,默认为0,不记录日志
- max log size=50 日志文件达到50K,将轮循rotate,单位KB
[root@localhost samba]# vim /etc/samba/smb.conf
[global]
log file=/var/log/samba/log.%m
log level = 2
[root@localhost samba]# systemctl restart smb
测试:连接访问:
[root@centos7-17 ~]# smbclient //192.168.38.8/share -Usambauser1%123
查看生产的日志:
[root@localhost data]# cat /var/log/samba/log.
log.192.168.38.17 ....
[root@localhost data]# cat /var/log/samba/log.192.168.38.17
[2019/10/17 20:49:05.883593, 2] ../source3/auth/auth.c:316(auth_check_ntlm_password)
check_ntlm_password: authentication for user [sambauser1] -> [sambauser1] -> [sambauser1] succeeded
==>可见192.168.38.17以sambauser1用户登录的~~
...
SMB客户端访问
- 汇总上述Samba客户端的访问
1.windows上的访问:
- UNC路径:Universal Naming Convention,通用命名规范
- 格式:\\sambaserver\sharename
如下图:
- 格式:\\sambaserver\sharename
2.linux上访问:
- 终端下使用smbclient登录服务器
- smbclient -L instructor.example.com
匿名用户访问:
[root@centos7-17 ~]# smbclient //192.168.38.8/share
samba用户访问:
[root@centos7-17 ~]# smbclient //192.168.38.8/share -Usambauser1%123
- 可以使用-U选项来指定用户%密码,或通过设置和导出USER和PASSWD环境变量来指定
挂载CIFS文件系统
-
cifs-utils 挂载相关的包,需要挂载cifs时安装
-
手动挂载
mount -o user=wang,password=magedu //server//shared /mnt/smb -
开机自动挂载
-
cat /etc/fstab 可以用文件代替用户名和密码的输入
//server/homes /mnt cifs credentials=/etc/smb.txt 0 0 -
cat /etc/smb.txt
username=wang
password=password -
chmod 600 /etc/smb.txt
-
1.手动挂载
[root@centos7-17 ~]# mount -o username=sambauser1,password=123 //192.168.38.8/share /mnt
2.编辑/etc/fstab使其开机自动挂载
[root@centos7-17 ~]# vim /etc/fstab
//192.168.38.8/share /mnt cifs username=sambauser1,password=123 0 0
3.由于centos6和centos8的安全验证不同
centos6 sec=mssp
centos8 sec=ntlmssp
==> centos6挂载时:
[root@centos6 ~]#vim /etc/fstab
//192.168.38.8/share /mnt cifs sec=ntlmssp,username=sambauser1,password=123 0 0
- 利用autofs实现自动挂载
[root@centos7-17 ~]# vim /etc/auto.master
/- /etc/auto.cifs
[root@centos7-17 ~]# cat /etc/auto.cifs
/data/samba -fstype=cifs,username=sambauser1,password=123 ://192.168.38.8/share
其中上面的username可缩写为user
其中上面的password可缩写为pass
[root@centos7-17 samba]# systemctl restart autofs
==> 利用autofs实现Samba自动挂载/data/samba目录