24 Linux-网络基础-SAMBA服务

24.1 Samba 概述

SMB Server Messages Block ,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同 操作系统的 计算机之间提供文件及打印机等资源的共享服务。 SMB 协议是客户机 服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。

 

 

ftp的 优缺点

优点:文件传输、应用层协议、可跨平台

缺点:只能实现文件传输无法实现文件系统挂载无法直接修改服务器端文件

Samba 的特性

使用 smb/cifs 协议、可跨平台、可实现文件系统挂载、可实现服务器端修改文件

Smb协议和 Cifs 之间的关系

随着Internet 的流行, Microsoft 希望将这个协议扩展到 Internet 上去,成为 Internet 上计算机之间相互共享数据的一种标 准。因此它 将原有的几乎没有多少技术文档的 SMB 协议进行整理,重新命名为 CIFS Common Internet File System 它使程序可以访问远程 Internet 计算机上的文件并要求此计算机提供服务 。

客户程序请求远在服务器上的服务器程序为它 提供 服务 。服务器获得请求并返回响应。 CI FS 是公共的或开放的 SMB 协议版本,并由 Microsoft 使用。SMB 协议在局域 网上用于服务器文件访问和打印的协议。

24.2 Samba 服务详解

24.2.1 Samba 软件相关信息

协议:SMB/CIFS
服务:
smb 实现资源共享、权限验证 TCP 139、445
配置文件(/etc/samba/)
smb.conf 主配置文件
smbusers 别名配置文件

24.2.2 登录验证模式安全级别

  • share 匿名验证

  • user 本地用户验证(Samba服务器默认的安全级别,用户在访问共享资源之前必须提供用户名和密码进行验证)拓展:tdbsam:该方式是使用一个数据库文件来验证。数据库文件叫passdb.tdb。可以通过pdbedit -a 向数据库中添加新用户,不过要建立的Samba用户必须先是系统用户。也可以理解为我们使用pdbedit -a 将系统用户转化为了samba 用户。pdbedit命令的参数很多,列出几个主要的。

pdbedit -a username:新建Samba账户(将系统用户转化为samba用户,并设置密码)
pdbedit -x username:删除Samba账户
pdbedit -L:列出Samba用户列表,读取passdb.tdb数据库文件。
  • 别名用户访问(虚拟用户)

24.2.3 常见配置参数解释

[global]用于定义Samba服务器的总体特性,其配置项对所有共享资源生效
workgroup = WORKGROUP
# 设定 Samba Server 所要加入的工作组或者域。
server string = Samba Server Version %v
# 设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
interfaces = lo eth0 192.168.12.2/24
# 设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
hosts allow = 127. 192.168.1. 192.168.10.1
# 表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反(二选一)。
例如:
hosts allow=172.17.2. EXCEPT172.17.2.50
表示容许来自172.17.2.*.*的主机连接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
log file = /var/log/samba/log.%m
#设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。
max log size = 50
#设置Samba Server日志文件的最大容量,单位为kB,0代表不限制
security = user
#设置用户访问Samba Server的验证方式。
passdb backend = tdbsam
load printers = yes/no
#设置是否在启动Samba时就共享打印机

[homes]用于设置用户宿主目录的共享属性(特殊共享)
[homes] # 共享名(特殊共享,泛指每个用户对应的家目录)
comment = Home Directories # 共享描述
browseable = no # 共享是否可被查看
writable = yes # 共享是否可写
;valid users = %S # 允许访问该共享的用户
例如:valid users = bob,@bob(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@组名”表示。)

[printers]用于设置打印机共享资源的属性(特殊共享,共享打印设备,现在基本不用)
[printers] # 共享名
comment = All Printers # 共享描述
path = /var/spool/samba # 共享路径
browseable = no # 共享是否可被查看
guest ok = no # 是否可以匿名访问,类似于public
writable = no # 是否可写
printable = yes # 是否可以打印

[自定义]自定义共享区域
[自定义]  # 共享名
comment = the share is xbz  # 共享描述
path = /share/zdy # 共享路径
public = yes # 是否可以匿名访问,类似于guest ok
browseable = yes # 共享是否可被查看
writable = yes # 是否可写(同时设置目录的W)

配置文件检查工具

testparm :若显示"Loaded services file OK."信息表示配置文件的语法是正确的
-v:显示samba所支持的所有选项

24.2.4 访问控制

写入权限的控制方式(类似于vsftp的限制方式):

  • 配置文件开启,文件系统严格控制(尽量采用这种)

    writable = yes
    setfacl 或 chmod 777
  • 文件系统开启,配置文件严格控制

    chmod 777 /dir
    read only = yes
    write list = 用户,@组

24.2.5 服务启动管理

  • 启动、停止、重新启动和重新加载Samba服务

    service smb start|stop|restart|reload
  • 开机自动启动samba服务

    chkconfig --level 2345 smb on|off

24.2.6 客户端登录方式

  • Linux端:

    smbclient -U 用户名 -L //服务器IP 		# 查看服务器共享
    smbclient -U 用户名 //服务器ip/共享名 # 登录服务器共享
  • Window端

    \\服务器ip\共享名
    net use * /del # 清空登录缓存

24.3 Samba 部署与实验

注:先关闭服务器和客户机上的防火墙和SELinux

部署流程:

# 服务器端安装samba
yum -y install samba

# 确认客户端和相关命令软件包是否安装(默认是安装的)
rpm -q samba-client
rpm -q samba-common

# 创建共享区域
备份主配置文件
创建独立的共享区间(仿照模板编写)

# 启动smb 服务并查看默认共享区域
a、service smb start
b、smbclient -U 用户名 -L smbserverIP

24.3.1 本地验证(登录、上传、下载)

1)修改配置文件(添加自定义共享)

[自定义]
comment = the share is xbz
path = /share/zdy
public = yes
browseable = yes
writable = yes

2)创建共享目录并给定相应权限

mkdir /share/zdy
chmod 777 /share/zdy # 最好使用ACL权限

3)测试配置文件并重启服务

testparm
service smb restart

4)首先,创建Linux用户

useradd -s /sbin/nologin zhangsan
passwd zhangsan # 不需要创建系统密码

5)转换为samba用户

pdbedit -a zhangsan

6)客户端查看共享文件夹并登录测试

smbcient -U zhangsan –L IP地址
smbclient –U zhangsan //IP地址/共享名

注:由于未设置上传文件的默认权限,指定用户上传的文件只有自己能修改和覆盖。

24.3.2 访问控制 - 通过配置限制

valid users 仅允许部分用户访问共享区域

注:前提条件是指定目录权限给到最大,通过修改配置文件来实现实验结果

部分用户登录samba服务器

修改/etc/samba/smb.conf中自定义的共享区域
添加:设置合法用户列表
valid users = 用户,@组(多个逗号分隔)

部分用户对共享区域有写权限

修改/etc/samba/smb.conf中自定义的共享区域
添加:开启只读,设置可写列表
read only = yes
write list = lisi

设置上传文件的默认权限

create mask 文件的默认权限
directory mask 目录的默认权限
修改配置文件自定义的共享区域
添加:
create mask = 666
directory mask = 777

24.3.3 用户别名(虚拟用户)

1)添加别名(/etc/samba/smbusers)

添加:
zhangsan = zs

2)启用别名(修改主配置文件)

vim /etc/samba/smb.conf
添加:
username map = /etc/samba/smbusers

3)测试

smbclient -U 别名 //服务器ip/共享名

24.3.4 映射网络驱动器(挂载)

1)Linux下:

临时挂载:
mount -t cifs -o username=xxx,password=xxx //服务器ip/服务器共享 /本地挂载目录
永久挂载:/etc/fstab
//服务器ip/服务器共享 /本地挂载目录 cifs defaults,username=xxx,password=xxx 0 0

2)Window下:

我的电脑、计算机、此电脑、这台电脑等右键映射网络驱动器		[注意是反斜杠\]

24.4 SAMBA 配置文件详解

24.4.1 全局参数

==================Global Settings ===================
[global]
config file = /usr/local/samba/lib/smb.conf.%m
# 说明:config file 可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件 不存在,则该项无效。这个参数很有用,可以使得 samba 配置更灵活,可以让一台 samba 服务器模拟多台不同配置的服务器。比如,你想让 PC1 (主机名)这台电脑在访问 Samba Server 时使用它自己的配置文件,那么先在 /etc/samba/ 下为 PC1 配置一个名为 smb.conf.pc1 的文件,然后在 smb.conf 中加入: conf igfile = /etc/samba/host/smb.conf.%m 。这样当 PC1 请求连接 Samba Server 时, smb.conf.%m 就被替换成 smb.conf .pc1 。这样,对于 PC1 来说,它所使用的 Samba 服务就是由 smb.conf.pc1 定义的,而其他机器访问 Samba Server 则还是应用 smb.conf 。

workgroup = WORKGROUP
# 说明:设定Samba Server 所要加入的工作组或者域。

server string = Samba Server Version %v
# 说明:设定Samba Server 的注释,可以是任何字符串,也可以不填。宏 %v 表示显示 Samba 的版本号。

netbios name = smbserver
# 说明:设置Samba Server 的 NetBIOS 名称。如果不填,则默认会使用该服务器的 DNS 名称的第一部分。 netbios name 和 workgroup 名字不要 设置成一样了。

interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
# 说明:设置Samba Server 监听哪些网卡,可以写网卡名,也可以写该网卡的 IP 地址。

hosts allow = 127. 192.168.1. 192.168.10.1
# 说明:表示允许连接到Samba Server 的客户端,多个参数以空格隔开。可以用一个 IP 表示,也可以用一个网段表示。 hosts deny 与 hosts allow 刚好相反。
例如: hosts allow= 172.17.2.EXCEPT 172.17.2.50
表示容许来自172.17.2.*.* 的主机连接,但排除 172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容许来自172.17.2.0/255.255.0.0 子网中的所有主机连接
hosts allow=M1 M2
表示容许来自
M1 和 M2 两台计算机连接
hosts allow=@xq
表示容许来自XQ 网域的所有计算机连接

max connections = 0
# 说明:max connections 用来指定 连接 Samba Server 的最大连接数目。 如果超出连接数目,则新的连接请求将被拒绝。 0 表示不限制。

deadtime = 0
# 说明:deadtime 用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟, 0 代表 Samba Server不自动切断任何连接。


time server =yes/no
# 说明:time server 用来设置让 nmdb 成为 windows 客户端的时间服务器。

log file = /var/log/samba/log.%m
# 说明:设置Samba Server 日志文件的存 储位置以及日志文件名称。在文件名后加个宏 %m 主机名),表示对每台访问 Samba Server 的机器都单独记录一个日志文件。如果 pc1 、 pc2 访问过 Samba Server就会在 /var/log/samba 目录下留下 log.pc1 和 log.pc2 两个日志文件。

max log size =50
# 说明:设置Samba Server 日志文件的最大容量,单位为 kB 0 代表不限制。



security = user
# 说明:设置用户访问Samba Server 的验证方式,一共有四种验证方式。
1. share :用户访问 Samba Server 不需要提供用户名和口令 , 安全性能较低。
2. userSamba Server 共享目录只能被授权的用户访问 由 Samba Server 负责检查账号和密码的正确性。账号和密码要在本 Samba Server 中建立。
3.server :依靠其他 Windows NT/2000 或 Samba Server 来验证用户的账号和密码 是一种代理验证。此种安全模式下 系统管理员可以把所有的 Windows 用户和口令集中到一个 NT 系统上 使用 Windows NT进行 Samba 认证 , 远程服 务器可以自动认证全部用户和口令 如果认证失败 ,Samba 将使用用户级安全模式作为替代的方式。
4. domain:域安全级别 使用主域控制器 ( 来完成认证。


passdb backend = tdbsam
# 说明:passdb backend 就是用户 后台的意思。目前有三种后台: smbpasswd 、 tdbsam 和 ldapsam 。 sam应该是 security account manager (安全账户管理)的简写。
1.smbpasswd:该方式是使用 smb 自己的工具 smbpasswd 来给系统用户(真实用户或者虚拟用户)设置一个Samba 密码,客户端就用这个密码来访问 Samba 的资源。 smbpasswd 文件默认在 /etc/samba 目录下,不过有时候要手工建立该文件。
2.tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫 passdb .tdb ,默认在/etc/samba 目录下。 passdb.tdb 用户数据库可以使用 smbpasswd a 来建立 Samba 用户,不过要建立的 Samba 用户必须先是系统用户。我们也可以使用 pdbedit 命令来建立 Samba 账户。 pdbedit 命令的参数很多 ,我们列出几个主要的。
pdbedit -a username :新建 Samba 账户。
pdbedit -x username :删除 Samba 账户。
pdbedit -L :列出 Samba 用户列表,读取 passdb.tdb 数据库文件。
pdbedit -Lv :列 出 Samba 用户列表的详细信息。
pdbedit -c "[D]"[ u username :暂停该 Samba 用户的账号。
pdbedit -c "[]" username :恢复该 Samba 用户的账号。
3.ldapsam:该方式则是基于 LDAP 的账 户管理方式来验证用户。首先要建立 LDAP 服务, 然后设置passdb backend = ldapsam:ldap://LDAP Server

encrypt passwords = yes/no
# 说明:是否将认证密码加密。因为现在windows 操作系 统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。

smb passwd file = /etc/samba/smbpasswd
# 说明:用来定义samba 用户的密码文件。 smbpasswd 文件如果没有那就要手工新建。

username map = /etc/samba/smbusers
# 说明:用来定义用户名映射,比如可以将root 换成 administrator 、 admin 等。不过要事先在 smbusers文件中定义好。比如: root = administrator admin ,这样就可以 用 administrator 或 admin 这两个用户来代替 root 登陆 Samba Server ,更贴近 windows 用户的习惯。

guest account = nobody
# 说明:用来设置guest 用户名。

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
# 说明:用来设置服务器和客户端之间会话的Socket 选项,可以优化传输速度。

domain master = yes/no
# 说明:设置Samba 服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。

local master = yes/no
# 说明:local master 用来指定 Samba Server 是否试图成为本地网域主浏览器。如果设为 no ,则永远不会成为本地网域主浏览器。但是即使设置为 yes ,也不等 于该 Samba Server 就能成为主浏览器,还需要参加选举。

preferred master = yes/no
# 说明:设置Samba Server 一开机就强迫进行主浏览器选举,可以提高 Samba S erver 成为本地网域主浏览器的机会。如果该参数指定为 yes 时,最好把 domain master 也指定为 yes 。使用该参数时要注意:如果在本 Samba Server 所在的子网有其他的机器(不论是 windows NT 还是其他 Samba Server也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而 在网络上大发广播,影响网络性能。如果同一个区域内有多台Samba Server ,将上面三个参数设定在一台即可。

os level = 200
# 说明:设置samba 服务器的 os level 。该参数决定 S amba Server 是否有机会成为本地网域的主浏览器。 os level 从 0 到 255 winNT 的 os level 是 32 win95/98 的 os level 是 1 。 Windows 2000 的os level是 64 。如果设置为 0 ,则意味着 Samba Server 将失去浏览选择。如果想让 Samba Server 成为 PDC ,那么将它的 os level 值设大些。

domain logons = yes/no
# 说明:设置Samba Server 是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。

logon . = %u.bat
# 说明:当使用者用windows 客户端登陆,那么 Samba 将提供一个登陆档。如果设置成 %u.bat ,那么就要为每个用户提供一个登陆档。如果人比较多,那就比较麻烦。可以设置成一个具体的文件名,比如start.bat ,那么用户登陆后都会去执行 start.bat ,而不用为每个用户设 定一个登陆档了。这个文件要放置在 [ 的 path 设置的目录路径下。

wins support = yes/no
# 说明:设置samba 服务器是否提供 wins 服务。

wins server = wins 服务器 IP 地址
# 说明:设置Samba Server 是否使用别的 wins 服务器提供 wins 服务。

wins proxy = yes/no
# 说明:设置Samba Server 是否开启 wins 代理服务。

dns proxy = yes/no
# 说明:设置Samba Server 是否开启 dns 代理服务。

load printers = yes/no
# 说明:设置是否在启动Samba 时就共享打印机。

printcap name = cups
# 说明:设置共享打印机的配置文件。

printing = cups
# 说明:设置Samba 共享打印机的类型。现在支持的打印系统有: bsd, sysv, plp, lprng, aix, hpux,qnx

24.4.2 共享参数

================== Share Definitions ==================
[共享名]
comment = 任意字符串
# 说明:comment 是对该共享的描述,可以是任意字符串。

path = 共享目录路径
# 说明:path 用来指定共享目录的路径。可以用 %u 、 %m 这样的宏来代替路径里的 unix 用户和客户机的Netbios 名,用宏表示主要用于 [ 共享域。例如:如果我们不打算用 home 段做为客户的共享,而是在 /home/ 下为每个 Linux 用户以他的用户名建个目录,作为他的共享目录,这样 path 就可以写成: path = /home/share/%u; 。用户在连接到这共享时具体的路径 会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来 划分目录,而是以客户机来划分目录,为网络上每台可以访问 samba 的机器都各自建个以它的netbios 名的路径,作为不同机器的共享资源,就可以这样写: path = /home/share/%m 。

browseable = yes/no
# 说明:browseable 用来指定该共享是否可以浏览。

writable = yes/no
# 说明:writable 用来指定该共享路径是否可写。

available = yes/no
# 说明:available 用来指定该共享资源是否可用。

admin users = 该共享的管理者
# 说明:admin users 用来指定该共享的管理员(对该共享具有完全控制权限)。在 samba 3.0 中,如果用户验证方式设置成“ security=share ”时,此项无效。
# 例如:admin users =bobyuan jane (多个用户中间用逗号隔开)。

valid users = 允许访问该共享的用户
# 说明:valid users 用来指定允许访问该共享资源的用户。
# 例如:valid users = bobyuan ,,@bob ,,@tech (多个用户或者组中间用逗号隔开,如果要加入一个组就用“ 组名”表示。)

invalid users = 禁止访问该共享的用户
# 说明:invalid users 用来指定不允许访问该共享资源的用户。
# 例如:invalid users = root ,,@bob (多个用户或者组中间用逗号隔开。

write list = 允许写入该共享的用户
# 说明:write list 用来指定可以在该共享下写入文件的用户。
# 例如:write list = bobyuan ,,@bob

public = yes/no
# 说明:public 用来指定该共享是否允许 guest 账户访问。

guest ok = yes/no
# 说明:意义同“public ”。

# 几个特殊共享:

[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
; valid users = MYDOMAIN\%S

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes

[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no

[Profiles]
path = /var/lib/samba/profiles
browseable = no
guest ok = yes

 

本文摘抄或总结其他笔记,笔记不涉及任何商业用途,如果侵权请及时联系处理