Samba服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享软件,实现了Linux与Windows系统间的文件共享。
1、安装Samba服务软件包:
[[email protected] Desktop]# yum install samba
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分安装过程………………
Installing:
samba x86_64 4.1.1-31.el7 rhel7 527 k
………………省略部分安装过程………………
Complete!
浏览Samba配置文件:
[[email protected] ~]# cat /etc/samba/smb.conf
备份原始的配置文件:
[[email protected] ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
过滤掉无用的内容:
先使用cat命令读入Smb配置文件后通过grep命令-v参数(反向选择)去掉所有注释信息,然后分别删选掉包含#号的行(“#”),包含;号的行(“;”)以及所有的空白行(“^$”),最后最后将过滤后的信息覆盖写入到/etc/samba/smb.conf文件中。
cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf
让我们来看看过滤后的配置文件吧:
[global] |
#全局参数。 |
|
workgroup = MYGROUP |
#工作组名称。 |
|
server string = Samba Server Version %v |
#服务器介绍信息,参数%v为显示SMB版本号。 |
|
log file = /var/log/samba/log.%m |
#定义日志文件存放位置与名称,参数%m为来访的主机名。 |
|
max log size = 50 |
#定义日志文件最大容量为50Kb。 |
|
security = user |
#安全验证的方式,总共有4种。 |
|
#share:来访主机无需验证口令,更加方便,但安全性很差。 |
||
#user:需由SMB服务验证来访主机提供的口令后才可建立访问,更加的安全。 |
||
#server:使用独立的远程主机验证来访主机提供的口令(集中管理帐号)。 |
||
#domain:使用PDC来完成验证 |
||
passdb backend = tdbsam |
#定义用户后台的类型,共有3种。 |
|
#smbpasswd:使用SMB服务的smbpasswd命令给系统用户设置SMB密码。 |
||
#tdbsam:创建数据库文件并使用pdbedit建立SMB独立的用户。 |
||
#ldapsam:基于LDAP服务进行帐户验证。 |
||
load printers = yes |
#设置是否当Samba服务启动时共享打印机设备。 |
|
cups options = raw |
#打印机的选项 |
|
[homes] |
#共享参数 |
|
comment = Home Directories |
#描述信息 |
|
browseable = no |
#指定共享是否在“网上邻居”中可见。 |
|
writable = yes |
#定义是否可写入操作,与"read only"相反。 |
|
[printers] |
#打印机共享参数 |
|
comment = All Printers |
||
path = /var/spool/samba |
#共享文件的实际路径(重要)。 |
|
browseable = no |
||
guest ok = no |
#是否所有人可见,等同于"public"参数。 |
|
writable = no |
||
printable = yes |
标准的Samba共享参数是这样的:
参数 |
作用 |
[linuxprobe] |
共享名称为linuxprobe |
comment = Do not arbitrarily modify the database file |
警告用户不要随意修改数据库 |
path = /home/database |
共享文件夹在/home/database |
public = no |
关闭所有人可见 |
writable = yes |
允许写入操作 |
我们将上面的配置参数直接追加到SMB服务配置文件(/etc/samba/smb.conf)并重启SMB服务程序即可生效。
但此时SMB服务默认的验证模式为user,我们需要先创建用户数据库后才可以正常使用。
2、安全共享文件
使用Samba服务口令验证方式可以让共享文件更加的安全,做到仅让信任的用户访问,而且验证过程也很简单,要想使用口令验证模式,我们需要先需要创建Samba服务独立的数据库。
第1步:检查当前是否为user验证模式。
[[email protected] ~]# cat /etc/samba/smb.conf
第2步:创建共享文件夹:
[[email protected] ~]# mkdir /database
第3步:描述共享文件夹信息。
在SMB服务主配置文件的最下面追加共享文件夹的配置参数:
[database]
comment = Do not arbitrarily modify the database file
path = /database
public = no
writable = yes
保存smb.conf文件后重启启动SMB服务:
[[email protected] ~]# systemctl restart smb
添加到开机启动项:
[[email protected] ~]# systemctl enable smb
ln -s ‘/usr/lib/systemd/system/smb.service‘ ‘/etc/systemd/system/multi-user.target.wants/smb.service‘
第4步:使用Windows主机尝试访问
手动配置下Windows的网卡参数
主机名称 |
操作系统 |
IP地址 |
Samba共享服务器 |
红帽RHEL7操作系统 |
192.168.10.10 |
客户端 |
微软Windows7操作系统 |
192.168.10.30 |
在Windows主机的运行框中输入远程主机的信息
此时访问Samba服务报错
第5步:清空防火墙规则链:
Windows访问Samba主机提示报错,我们怀疑是Iptables阻止了访问操作,于是执行:
[[email protected] ~]# iptables -F
[[email protected] ~]# service iptables save
因为Windows系统的缓存关系,可能需要先重启下Windows主机再尝试访问Samba共享。
Windows系统被要求验证帐户口令
这个问题就是出在Iptables防火墙的默认规则中
第6步:创建SMB服务独立的帐号。
现在Windows系统要求先验证后才能访问共享,而SMB服务配置文件中密码数据库后台类型为”tdbsam“,所以这个帐户和口令是Samba服务的独立帐号信息,我们需要使用pdbedit命令来创建SMB服务的用户数据库。
pdbedit命令用于管理SMB服务的帐户信息数据库,格式为:“pdbedit [选项] 帐户”。
参数 |
作用 |
-a 用户名 |
建立Samba用户 |
-x 用户名 |
删除Samba用户 |
-L |
列出用户列表 |
-Lv |
列出用户详细信息的列表 |
创建系统用户:
[[email protected] ~]# useradd smbuser
将此系统用户提升为SMB用户:
[[email protected] ~]# pdbedit -a -u smbuser
new password:设置SMB服务独立的密码
retype new password:
Unix username: smbuser
NT username:
Account Flags: [U ]
User SID: S-1-5-21-4146456071-3435711857-2069708454-1000
Primary Group SID: S-1-5-21-4146456071-3435711857-2069708454-513
Full Name:
Home Directory: \\linuxprobe\smbuser
HomeDir Drive:
Logon Script:
Profile Path: \\linuxprobe\smbuser\profile
Domain: LINUXPROBE
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 23:06:39 CST
Kickoff time: Wed, 06 Feb 2036 23:06:39 CST
Password last set: Sat, 11 Jul 2015 18:27:04 CST
Password can change: Sat, 11 Jul 2015 18:27:04 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
第7步:使用Windows主机验证共享结果:
Windows验证SMB服务口令
Windows成功访问SMB服务
Windows进入共享目录失败
第8步:允许SELinux规则
使用Windows主机访问Samba共享果然可以使用smbuser用户登入,但对于共享文件这么重要的事情,SELinux一定会强制管理,刚刚没有妥当的配置好SELinux,现在果然又报错了。
将共享目录的所有者和所有组设置为smbuser用户:
[[email protected] ~]# chown -Rf smbuser:smbuser /database
允许SELinux对于SMB用户共享家目录的布尔值:
[[email protected] ~]# setsebool -P samba_enable_home_dirs on
将共享目录的SELinux安全上下文设置妥当:
[[email protected] ~]# semanage fcontext -a -t samba_share_t /database
使新的安全上下文立即生效:
[[email protected] ~]# restorecon -Rv /database/
第9步:使用Windows主机验证共享结果
我们配置好Samba服务后又陆续的调整好了Iptables防火墙与SELinux安全规则,现在终于可以正常的使用共享了。
使用SMB服务并创建文件
第10步:使用Linux主机验证共享结果
主机名称 |
操作系统 |
IP地址 |
Samba共享服务器 |
红帽RHEL7操作系统 |
192.168.10.10 |
客户端 |
红帽RHEL7操作系统 |
192.168.10.20 |
在客户端安装cifs-utils软件包:
[[email protected] ~]# yum install -y cifs-utils
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分安装过程………………
Installing:
cifs-utils x86_64 6.2-6.el7 rhel7 83 k
………………省略部分安装过程………………
Complete!
创建挂载目录:
[[email protected] ~]# mkdir /database
在root家目录创建认证文件(依次为SMB用户名、SMB用户密码、SMB共享域):
[[email protected] ~]# vim auth.smb
username=smbuser
password=redhat
domain=MYGROUP
此文件太重要了,权限应该给小一些:
[[email protected] ~]# chmod -Rf 600 auth.smb
配置其挂载信息(内容依次为远程共享信息、本地挂载目录、文件系统类型、认证文件以及开机自检选项):
[[email protected] ~]# vim /etc/fstab
//192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0
使用mount命令的-a参数挂载所有在fstab文件中定义的文件信息:
[[email protected] ~]# mount -a
成功挂载Samba的共享目录(能够看到共享文件了):
[[email protected] ~]# cat /database/Memo.txt
i can edit it .
Samba服务真的是太强大了,不仅能够实现Linux系统之间分享数据还能与Windows主机进行文件共享。
Windows成功访问SMB服务在Windows主机的运行框中输入远程主机的信息
/etc/samba/smb.conf