linux学习-Samba服务

Samba服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享软件,实现了Linux与Windows系统间的文件共享。

1、安装Samba服务软件包:

[root@linuxprobe 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配置文件:

[root@linuxprobe ~]# cat /etc/samba/smb.conf

备份原始的配置文件:

[root@linuxprobe ~]# 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验证模式。

[root@linuxprobe ~]# cat /etc/samba/smb.conf

 

2步:创建共享文件夹:

[root@linuxprobe ~]# mkdir /database

3步:描述共享文件夹信息。

SMB服务主配置文件最下面追加共享文件夹的配置参数:

[database]
comment = Do not arbitrarily modify the database file
path = /database
public = no
writable = yes

保存smb.conf文件后重启启动SMB服务:

[root@linuxprobe ~]# systemctl restart smb

 添加到开机启动项:

[root@linuxprobe ~]# 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阻止了访问操作,于是执行:

[root@linuxprobe ~]# iptables -F

[root@linuxprobe ~]# 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

列出用户详细信息的列表

创建系统用户:

[root@linuxprobe ~]# useradd smbuser

将此系统用户提升为SMB用户:

[root@linuxprobe ~]# 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用户:

[root@linuxprobe ~]# chown -Rf smbuser:smbuser /database

允许SELinux对于SMB用户共享家目录的布尔值:

[root@linuxprobe ~]# setsebool -P samba_enable_home_dirs on

将共享目录的SELinux安全上下文设置妥当:

[root@linuxprobe ~]# semanage fcontext -a -t samba_share_t /database

使新的安全上下文立即生效:

[root@linuxprobe ~]# 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软件包:

[root@linuxprobe ~]# 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!

创建挂载目录:

[root@linuxprobe ~]# mkdir /database

root家目录创建认证文件(依次为SMB用户名、SMB用户密码、SMB共享域):

[root@linuxprobe ~]# vim auth.smb

username=smbuser

password=redhat

domain=MYGROUP

此文件太重要了,权限应该给小一些:

[root@linuxprobe ~]# chmod -Rf 600 auth.smb

配置其挂载信息(内容依次为远程共享信息、本地挂载目录、文件系统类型、认证文件以及开机自检选项):

[root@linuxprobe ~]# vim /etc/fstab

//192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0

使用mount命令的-a参数挂载所有在fstab文件中定义的文件信息:

[root@linuxprobe ~]# mount -a

成功挂载Samba的共享目录(能够看到共享文件了):

[root@linuxprobe ~]# cat /database/Memo.txt

i can edit it .

Samba服务真的是太强大了,不仅能够实现Linux系统之间分享数据还能与Windows主机进行文件共享。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Windows成功访问SMB服务Windows主机的运行框中输入远程主机的信息

/etc/samba/smb.conf

posted @ 2017-09-17 10:29  抬头纹  阅读(600)  评论(0编辑  收藏  举报