运维基础-存储04 Samba
1、Samba简介
1、samba是什么
- Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
- 通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
- SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
- Samba实现了linux与windows之间相互共享。
2、samba的组件
- samba:主要提供了SMB服务器所需的各项服务程序(smbd及nmbd)、samba的文件档、以及其他与samba相关的logrotate配置文件及开机默认选项档案等。
- samba-client:提供了当Linux做为SAMBA Client端时,所需要的工具指令,例如挂载SAMBA文件格式的mount.cifs、取得类似网芳相关树形图的smbtree等。
- samba-common:提供的则是服务器与客户端都会使用到的数据,包括SAMBA的主要配置文件(smb.conf)、语法检验指令(testparm)等。
1、samba服务端由几个部件组成
- smbd守护程序为SMB客户端提供文件共享和打印服务。
- nmbd守护程序提供NetBIOS名字服务和浏览支持。
- testparm工具让你可以测试你的smb.conf配置文件。
- smbstatus工具用来列出当前在smbd服务器上的联接。
- nmblookup工具用来向UNIX机器查询NetBIOS名字。
- smbpasswd工具用来在samba和NT服务器上改变SMB加密口令。
2、samba客户端的组件
- smbclient程序实现了一种简单的类似FTP的客户端应用。对于访问位于其它兼容服务器(如NT)上的SMB共享资源非常有用,同时它也可用于UNIX机器向任何SMB服务器(如运行NT的PC机)上的打印机提交打印作业。
2、安装和启动Samba
1、部署环境
- 软件版本
- samba-4.10.16-15.el7_9.x86_64
- samba-client-4.10.16-15.el7_9.x86_64
- 系统环境
- samba服务端:192.168.248.130,CentOS Linux release 7.7.1908 (Core)
- samba客户端:192.168.248.131,CentOS Linux release 7.7.1908 (Core)
- windows10:192.168.248.1
2、Samba服务端
1、安装Samba
]# yum install samba
2、配置Samba
]# vim /etc/samba/smb.conf #配置samba。共享每个samba用户的家目录,读写权限;共享/data/目录,读写权限 [global] workgroup = WORKGROUP server string = My Workgroup netbios name =smaba etbios interfaces = 192.168.248.0/24 security = user passdb backend = tdbsam log file = /usr/local/samba/var/log.%m max log size = 5000 hosts allow = 192.168.248.0/24 [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [data] comment = my /data share path = /data browseable = Yes writeable = Yes inherit acls = Yes ]# testparm #检查配置文件
3、关闭防火墙和selinux
]# systemctl stop firewalld.service #停止防火墙 ]# systemctl disable firewalld.service #禁止防火墙开机自启 ]# setenforce 0 #禁用selinux,临时有效 ]# vim /etc/selinux/config #SELINUX=disabled,重启机器后生效。禁止selinux,永久生效
4、启动Samba
]# systemctl start smb.service #(139/tcp,445/tcp)如果只是linux之间使用samba服务,可以只启动smb.service,不用启动nmb.service ]# systemctl start nmb.service #(137/udp,138/udp)只有需要和windows交互,才启动nmb.service服务
5、创建samba用户
- 注意:当SECURITY = user时,samba服务自我管理的账号和密码进行用户认证。用户必须是系统用户(/etc/passwd),但密码不是/etc/shadow中的密码,而是在samba自行管理的文件中,其密码文件的格式由passdb backend进行定义。
]# useradd smbuser1 #添加系统用户 ]# smbpasswd -a smbuser1 #将系统用添加为samba用户
6、samba的联接状态
]# smbstatus -b #状态的简要信息 ]# smbstatus -v #状态的详情信息
3、samba客户端
1、安装samba-client
]# yum install samba-client
2、连接samba服务器
]# smbclient //192.168.248.130/smbuser1 -U smbuser1 #访问samba服务器的smbuser1用户的家目录,使用方法和FTP类似 ]# smbclient //192.168.248.130/data -U smbuser1 #使用smbuser1用户访问/data/共享目录
3、Samba的主配置文件
1、samba的主配置文件
- samba的主配置文件路径:/etc/samba/smb.conf,由samba-common包提供。
- smb.conf文件说明
]# man smb.conf #查看smb.conf文件说明
2、smb.conf文件的配置段
- 配置段有:
- 普通段
- 三个特殊段:[global]、[homes]、[printers]
- 配置文件的每一段([global]段除外)描述一个共享资源。段名就是共享名,段内的选项设置确定了该共享资源的属性。
1、普通段(自定义段)
- 一个共享资源由一个文件目录和用户对此目录的操作权限的说明构成。另外,还列入了一些用于内部管理的选项。
- 每一个普通段都定义了一个文件服务(客户端可以把它看作其本机文件系统的延伸)或打印服务(客户端可以通过它来使用服务器提供的打印服务)。
- 段可以定义成guest服务类型,在这种情况下,客户无需口令就可以访问该资源。一个特定的UNIX系统下的guest account通常用来指定这种情况下的客户访问权限。
- 其他类型的段定义的共享资源都需要口令才能访问。用户名是由客户端提供的。
- 注意,对于资源的操作权限还取决于主机系统赋予指定用户或来访者账户的权限。samba提供的服务权限不能超出主机系统指定的权限范围。
示例:
#下面的示范段定义了一项文件服务,用户拥有对/home/bar目录进行写操作的权限。这个共享资源是通过共享名"foo"来访问的。 [foo] path = /home/bar read only = no
2、特殊段
- [global] #全局选项段
- 这一段中定义的选项是服务器的全局性设置,如果在其他段中没有再对这些选项进行重新设置的话还可以作为它们的缺省选项。
- [homes] #家目录段
- 如果配置文件中包含名为'homes'的段,就可以建立在客户端登录用户到自己在服务器上的家目录的连接。
- [printers] #打印机共享设置段
3、smb.conf文件常用选项
- 标记(G)表示此选项只能在[global]段中使用。
- 标记(S)表示此选项可以在服务定义段中使用。
- 注意,有(S)标记的选项也可以用在[global]段中,在这种情况下,这个选项设置被当作所有其他段的缺省设置。
- (G)workgroup =:工作组
- 此选项规定Samba所在的工作组以便让客户查询。注意它也规定在使用security = domain时所用的域名。
- 默认值是WORKGROUP。
- (G)server string =:提示信息
- 在net view(网上邻居)的IPC连接中显示的服务器信息。
- 缺省设置:server string = Samba %v(%v将替换为Samba版本号,%h将替换为主机名)
- 示例:server string = University of GNUs Samba Server
- (G)netbios name =:自定义共享计算机名称,默认是hostname的第一段
- 此项对一已知的samba服务器设置它的Net‐BIOS名。
- 缺省情况下会使用此主机DNS名字的主机名部分。
- 缺省设置:machine DNS name
- (G)interfaces =:要监听的网卡或ip地址列表
- 默认情况Samba向内核查询所有活动的接口列表并且使用除了127.0.0.1 之外的接口。
- 缺省设置:除了127.0.0.1 之外的所有活动接口。
- 示例:interfaces = eth0 192.168.2.10/24 192.168.3.10/255.255.255.0。
- 将配置三个网络接口,对应eth0设备以及IP地址192.168.2.10 和192.168.3.10。后两个接口的网络掩码将设置为255.255.255.0。
- (G)security =:登录samba是否需要密码
- 这个选项设置了“安全模式位”用于答复协议协商以使smbd调整共享安全级是开或者关。客户端根据此位决定是否(以及如何)向服务器传送用户和口令信息。
- 可选的值security = user | share | server | domain
- 缺省值是security = user(2.0.0版本之前是share)
-
- SECURITY = SHARE:设置共享而不用口令,相当于匿名用户。
- SECURITY = user:SHARE使用samba服务自我管理的账号和密码进行用户认证。用户必须是系统用户(/etc/passwd),但密码不是/etc/shadow中的密码,而是在samba自行管理的文件中,其密码文件的格式由passdb backend进行定义。
- (G)passdb backend = :samba用户密码的存储位置
- 此选项允许管理员选择使用哪个后端检索和存储密码。这允许(例如)使用smbpasswd和tdbsam,而不需要重新编译。
- 缺省设置:passdb backend = smbpasswd
- smbpasswd:默认的smbpasswd后端。将smbpasswd文件的路径作为可选参数
- tdbsam:基于TDB的密码存储后端。将TDB的路径作为可选参数(默认为passdb)。私有目录下的TDB
- (G)log file = :日志为文件路径
- 这个选项允许设置其它的文件名字来替代Samba日志文件(也就是调试文件)。
- 这个选项支持标准的文件名代换变量,允许方便的为每个用户或者机器设置专用的日志文件。
- 示例:log file = /usr/local/samba/var/log.%m(%m是客户端ip或主机名)
- (G)max log size =:日志达到最大值开始滚动
- 这个选项(一个kB为单位的整数)用来指定使用的记录文件最大到多少容量。samba会周期性地检查这个容量,如果超过这个选项值就把老的文件换名成扩展名为.old的文件。
- 把这个选项设为0说明没有限制。
- 缺省设置:max log size = 5000
- (S)hosts allow =:主机白名单列表
- 这个选项是一个由逗号、空格或者tab字符隔开的一组主机名,列入其中的主机才允许访问。
- 用ip地址或主机名来指定主机
- 使用子网号/子网掩码对来指定主机
- 缺省设置:none (也就是说,所有机器都可以访问)
- 这个选项是一个由逗号、空格或者tab字符隔开的一组主机名,列入其中的主机才允许访问。
-
- Example 1:允许150.203.*.* 中除了一台机器之外的所有IP访问
- hosts allow = 150.203. EXCEPT 150.203.6.66
- Example 2:允许满足给定的子网号/子网掩码的IP访问
- hosts allow = 150.203.15.0/255.255.255.0
- Example 3:允许一系列主机访问
- hosts allow = lapland, arvidsjaur
- Example 4:允许NIS网络组"foonet"访问,但是禁止其中的一台主机
- hosts allow = @foonet
- hosts deny = pirate
- Example 1:允许150.203.*.* 中除了一台机器之外的所有IP访问
- (S)hosts deny =:主机黑名单列表
- 所有被列入这个选项中的主机的服务都不允许被访问,除非这个被访问的服务定义了自己的允许列表。当允许的主机列表和禁止的主机列表发生冲突的时候,allow优先。
- 用ip地址或主机名来指定主机
- 使用子网号/子网掩码对来指定主机
- 缺省设置:none (没有禁止访问的主机)
- 示例:hosts deny = 150.203.4. badhost.mynet.edu.au
- 所有被列入这个选项中的主机的服务都不允许被访问,除非这个被访问的服务定义了自己的允许列表。当允许的主机列表和禁止的主机列表发生冲突的时候,allow优先。
- (S)valid users =:samba用户白名单
- 这是一份允许登录服务项的用户列表。以'@','+'和'&'开始的名称用invalid users 选项中的规则进行解析。
- 如果此项为空(缺省)则任何用户都可以登录。如果一个用户名同时存在于此列表及invalid users列表,则拒绝此用户访问。
- 缺省设置:空 (任何人都不会被拒绝)
- 示例:valid users = greg,@pcusers
- (S)invalid users = :samba用户黑名单
- 这是一个不允许在这个服务上登录的用户的名单。这的确是一个非常严格的(paranoid)检查,确保任何可能的不适当的设置都不会破坏你的系统的安全。
- 以@开头的用户名首先被当作NIS网络组名(如果你的系统支持NIS的话),如果在NIS的网络组数据库中找不到这个组,那么这个名字就被当作一个UNIX用户组名来处理。
- 以+开头的用户名仅表示UNIX用户组名,以&开头的用户名仅表示NIX网络组名(这个设置要求你的系统中有NIS在运行)。'+'和'&'符号可以以任何顺序出现在用户组名前,因此,你可以指定对这个名称的查找次序,比如+&group表示先在UNIX用户组中查找,再在NIS网络组中查找,而&+group则相反,先在NIX网络组中查找,再到UNIX用户组中查找。(这与使用@前缀的效果相同)。
- 缺省设置:没有非法用户
- 示例:invalid users = root fred admin @wheel
- (S)comment =:注释信息
- 这是一段当客户用网上邻居(net view)察看服务器上共享资源时显示的说明文字。
- 缺省设置:No comment string
- 示例:comment = Fred's Files
- (S)path =:当前共享所映射的文件系统路径。
- 路径出现%u的地方将以正处于联接状态的UNIX用户名来替换;同样出现%m的地方将以请求联接的主机NetBIOS名替换。在设定伪主目录时,这种替换项很有用的。
- 缺省设置:无
- 示例:path = /home/fred
- (S)browseable =:是否可浏览,指是否可被用户查看
- 这个选项控制共享资源在可获得共享列表、net view命令及浏览列表里是否可见。
- 缺省设置:browseable = yes
- (S)guest ok =:是否允许来宾账号访问
- 如果一个服务的这个选项的值设为yes, 那末, 连接到这个服务不需要口令, 权限设置为 guest account的权限。
- 缺省设置:guest ok = no
- (S)public =:
- 与 guest ok 同义
- (S)read only =:是否为只读
- 注意它与 writeable 反义。
- 如果这个参数是yes, 那么服务的用户不能建立或修改服务目录中的文件。
- 注意一个可打印的服务(printable = yes) 的目录 总是 可写的(需要用户可写权限)但是只能通过缓冲操作来写。
- 缺省设置:read only = yes
- (S)writeable =:是否可写
- 注意它与 read only 反义
- (S)read list =:拥有读权限的用户列表
- 此处给出对服务项有只读权限的用户清单。如果正在联接的用户属于此列表,那么他们将没有写权限,此时是不管read only选项是否设置的。此列表可以包括用在invalid users选项中描述的语法定义的组名称。
- 缺省设置:read list = <空字符串>
- 示例:read list = mary, @students
- (S)write list =:拥有写权限的用户列表
- 此选项设置对服务项有读写权的用户列表。如果正在连接的用户属于此列表,那他们就可以有写入权,而不管read only为何值。此列表可以用@group形式描述组名。
- 注意如果一个用户同时属于读列表和写列表则拥有写入权。
- 缺省设置:write list = <空字符串>
- 示例:write list = admin,root,@staff
- (S)inheritacls
- 此参数可用于确保如果父目录上存在默认acl,则在创建子目录时始终使用默认acl。默认行为是使用创建目录时指定的模式。启用此选项将模式设置为0777,从而保证传播默认目录acl。
- 缺省设置:inherit acls = no
4、smb.conf示例
[global] workgroup = WORKGROUP #工作组 server string = My Workgroup #提示信息 netbios name =smaba etbios #自定义共享计算机名称,默认是hostname的第一段(最多15个字符) interfaces = 192.168.248.0/24 #要监听的网卡或ip地址列表 security = user #登录samba是否需要密码 passdb backend = tdbsam #samba用户密码的存储位置 log file = /usr/local/samba/var/log.%m #日志为文件路径 max log size = 5000 #日志达到最大值开始滚动 hosts allow = 192.168.248.0/24 #主机白名单列表 [homes] comment = Home Directories #注释信息 valid users = %S, %D%w%S browseable = No #是否可浏览,指是否可被用户查看 read only = No #是否可写 inherit acls = Yes [data] comment = my /data share #注释信息 path = /data browseable = Yes #是否可浏览,指是否可被用户查看 writeable = Yes #是否可写 inherit acls = Yes
4、Samba工具
1、samba用户管理
1、smbpasswd命令
smbpasswd [options] USERNAME -a:添加 -x:删除 -d:禁用 -e:启用
2、pdbedit命令
pdbedit [options] USERNAME -L:列出samba服务中的所有用户; -a,--create:添加用户为samba用户 -x,--delete:删除用户; -u,--user=USER:要管理的用户 -t,--password-from-stain:从标准输出接收字符串作为用户密码。使用空提示符,而后将密码输入两次
2、smbstatus命令
- 报告当前 samba 的联接状态
smbstatus [-b] [-d] [-L] [-p] [-S] [-s configuration file] [-u username] -b:显示简要格式信息; -v:显示详细格式信息;
5、访问samba服务器
- window开启共享
1、客户端是Linux
- 查看服务器端的共享
smbclient -L SMB_SERVER [-U USERNAME]
- 交互式文件访问
smbclient //SMB_SERVER/SHARE_NAME [-U USERNAME]
- 挂载访问
-
samba挂载的权限是三者的交集:本地用户对本地挂载目录的权限、samba共享的权限、在服务端samba用户对共享目录的权限。
-
mount -t cifs //SMB_SERVER/SAHRE_NAME /path -o username=USERNAME,password=PASSWORD
- 开机自动挂载:(/etc/fstab)
//SMB_SERVER/SAHRE_NAME /path cifs defaults,rw,uid=UID,gid=GID,username=USERNAME,password=PASSWORD 0 0
示例:
###查看服务器端的共享 ]# smbclient -L 192.168.248.130 -U smbuser1 #linux服务端。smbuser1是samba服务的共享用户,需要samba服务自己的共享密码 ]# smbclient -L 192.168.248.1 -U root #windows服务端。root是windows的登录用户,需要root自己的密码 ###交互式文件访问 ]# smbclient //192.168.248.130/smbuser1 -U smbuser1 ]# smbclient //192.168.248.1/本周 -U root ###挂载访问 ]# mount -t cifs //192.168.248.130/smbuser1 /data1 -o username=smbuser1,password=****** #注意,密码是明文的 ]# mount -t cifs -r //192.168.248.1/本周 /data2 -o username=root,password=******
2、客户端是Windows
- 连接samba服务端
\\SMB_SERVER\SAHRE_NAME