Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置"NetBIOS over TCP/IP"使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
案例
需求
在虚拟机上发布两个共享文件夹,具体要求如下:
1.此服务器必须是 STAFF 工作组的一个成员
2.发布目录 /common,共享名为 common
3.发布目录 /devops,共享名为 devops
4.这两个共享必须是可浏览的,只有 example.com 域内的客户端可以访问
5.用户 harry 对共享 common 只读,密码是 migwhisk
6.用户 kenji 对共享 devops 只读,密码是 atenorth
7.用户 chihiro 对共享 devops 可读写,密码是atenorth
解决方案
Samba的用途:为多个客户机提供共享使用的文件夹。
Samba服务端:软件包samba、系统服务smb
Samba客户端:软件包samba-client和cifs-utils、客户端工具smbclient
传输协议及端口:TCP 139、TCP 445
Samba服务端配置文件:/etc/samba/smb.conf
Samba共享账号:存在独立的账号数据文件里,必须有同名系统账号(方便给权限)
Samba账号管理工具:
pdbedit -a 用户名
pdbedit -L [用户名]
pdbedit -x 用户名
测试Samba共享资源:
smbclient -L 服务器地址 【密码为空(直接回车)】
smbclient -U 用户名 //服务器地址/共享名 【需要密码】
步骤
步骤一:在服务器server0发布Samba共享文件夹
1) 安装软件包samba
[root@localhost 桌面]# yum -y install samba
2)创建共享账号
添加共享账号harry,密码为migwhisk:
[root@localhost 桌面]# useradd harry
[root@localhost 桌面]# pdbedit -a harry
new password:
retype new password:
添加共享账号chihiro,密码为atenorth:
[root@localhost 桌面]# useradd chihiro
[root@localhost 桌面]# pdbedit -a chihiro
new password:
retype new password:
添加共享账号kenji,密码为atenorth:
[root@localhost 桌面]# useradd kenji
[root@localhost 桌面]# pdbedit -a kenji
new password:
retype new password:
确认共享账号:
[root@localhost 桌面]# pdbedit -L
harry:1004:
kenji:1005:
chihiro:1006:
3)准备共享文件夹
[root@localhost 桌面]# mkdir /common
[root@localhost 桌面]# mkdir /devops
[root@localhost 桌面]# setfacl -m u:chihiro:rwx /devops
4)调整SELinux开关策略,允许发布可写的Samba共享资源
[root@localhost 桌面]# getsebool -a | grep^samba_exp
bash: grep^samba_exp: 未找到命令...
getsebool: SELinux is disabled
因为配置环境搭建过LNMP,所以SElinux是关闭的需要进行开启。
[root@localhost 桌面]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=enforcing
进行完selinux的配置记得重启
[root@localhost 桌面]# getsebool -a | grep ^samba_exp #查看默认配置
samba_export_all_ro --> off
samba_export_all_rw --> off
[root@localhost 桌面]# setsebool -P samba_export_all_rw=on #永久打开设置
[root@localhost 桌面]# getsebool -a | grep ^samba_exp #查看结果
samba_export_all_ro --> off
samba_export_all_rw --> on
5)配置共享目录
[root@localhost 桌面]# vim /etc/samba/smb.conf
[global]
workgroup = STAFF
server string = Samba Server Version %v
[common]
path = /common
hosts allow = 192.168.82.0/24
[devops]
path = /devops
hosts allow = 192.168.82.0/24
write list = chihiro
6)启动系统服务smb,并设置开机自启
[root@localhost 桌面]# systemctl restart smb
[root@localhost 桌面]# systemctl enable smb
[root@localhost 桌面]# netstat -antpu | grep smb
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 5239/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 5239/smbd
tcp6 0 0 :::139 :::* LISTEN 5239/smbd
tcp6 0 0 :::445 :::* LISTEN 5239/smbd
步骤二:在客户机desktop0测试Samba共享资源
1)安装软件包samba-client
[root@desktop0 桌面]# yum -y install samba-client
2)浏览目标主机提供了哪些共享资源
[root@desktop0 桌面]# smbclient -L 192.168.82.76
Enter root's password: #不需要输入密码,直接回车进入
Anonymous login successful
Domain=[STAFF] OS=[Windows 6.1] Server=[Samba 4.2.3]
Sharename Type Comment
--------- ---- -------
common Disk
devops Disk
IPC$ IPC IPC Service (Samba Server Version 4.2.3)
Anonymous login successful
Domain=[STAFF] OS=[Windows 6.1] Server=[Samba 4.2.3]
Server Comment
--------- -------
Workgroup Master
--------- -------
3)连接到目标主机的共享目录
[root@desktop0 桌面]# smbclient //192.168.82.76/harry -U harry
Enter harry's password:
Domain=[STAFF] OS=[Windows 6.1] Server=[Samba 4.2.3]
smb: \> ls
. D 0 Thu Mar 28 00:24:10 2019
.. D 0 Thu Mar 28 00:27:28 2019
.mozilla DH 0 Tue Mar 19 05:07:51 2019
.bash_logout H 18 Fri Nov 20 13:02:30 2015
.bash_profile H 193 Fri Nov 20 13:02:30 2015
.bashrc H 231 Fri Nov 20 13:02:30 2015
18307072 blocks of size 1024. 13667760 blocks available
smb: \> quit
至此Samba已经完成,下面是一些关于Samba的资料(均来自百度)
samba监听的端口有
TCP | UDP |
139 | 137 |
445 | 138 |
samba进程:
进程 | 对应 |
nmbd | 对应netbios |
smbd | 对应cifs协议 |
winbindd+ldap | 对应Windows AD活动目录 |
samba用户:
|
账号 | 密码 |
都是系统用户 | samba服务自有密码文件 |
/etc/passwd | 通过smbpasswd -a USERNAME命令设置 |
smbpasswd命令:
-a Sys_User //添加系统用户为samba用户并设置密码
-d //禁用用户账号
-e //启用用户账号
-x //删除用户账号
安全级别 | 作用 |
user | 基于本地的验证 |
server | 另一台指定的服务器对用户身份进行认证 |
domain | 由域控进行身份验证 |
samba配置文件
/etc/samba/smb.conf(主配置文件)
常见配置文件参数
参数 | 作用 |
workgroup | 表示设置工作组名称 |
server string | 表示描述samba服务器 |
security | 表示设置安全级别,其值可为share user server domain |
passdb backend | 表示设置共享账户文件类型,其值可为tdbsam(tdb数据库文件) |
ldapsam(LDAP目录认证) | smbpasswd (兼容旧版本sambda密码文件) |
comment | 表示设置对应共享目录的注释,说明信息,及文件名 |
browseable | 表示设置共享是否可见 |
writable | 表示设置目录是否可写 |
path | 表示设置共享目录的路径 |
guest ok | 表示设置是否所有人均可访问共享目录 |
public | 表示设置是否允许匿名用户访问 |
write list | 表示设置允许写的用户和组,组要用@表示,例如 write list = root,@root |
valid users | 设置可以访问的用户和组,例如 valid users = root,@root |
hosts deny | 设置拒绝哪台主机访问,例如 hosts deny = 192.168.169.10 |
hosts allow | 设置允许哪台主机访问,例如 hosts allow = 192.168.169.10 |
printabl | 表示是否为打印机 |