SAMBA服务_第1张图片

SAMBA服务简介

SMBServer Message Block服务器消息块,IBM发布,最早是DOS网络文件共享协议

Cifscommon internet file system,微软基于SMB发布

SAMBA:1991Andrew Tridgell,实现windowsUNIX相通

SAMBA的功能:

•共享文件和打印,实现在线编辑

•实现登录SAMBA用户的身份认证

•可以进行NetBIOS名称解析

•外围设备共享

计算机网络管理模式:

•工作组WORKGROUP:计算机对等关系,帐号信息各自管理

•域DOMAIN:C/S结构,帐号信息集中管理,DC,ADDC:域控制器)

 

Windows上使用的就是SAMBA服务

samba:smb 服务

linux unix:nfs

linux linus: kernel git svn

 

netbios = computername+[00]

netbios最长16个字符

netbios可直接ping通,因为netbios也有解析功能,可以由以下服务实现

lmhost|wins|dns|c:\windows\system32\drivers\etc\hosts

 

SAMBA介绍

相关包:

Samba 提供smb服务

Samba-client 客户端软件

samba-common 通用软件

cifs-utils smb客户端工具

samba-winbind AD相关  #一般不用装

相关服务进程:

smbd 提供smbcifs)服务 TCP:139,445

nmbd NetBIOS名称解析 UDP:137,138

主配置文件:/etc/samba/smb.conf

范例文件:/etc/samba/smb.conf.example

帮助参看:man smb.conf

语法检查:testparm [-v] [/etc/samba/smb.conf]

客户端工具:smbclient,mount.cifs

 

SAMBA服务器配置

smb.conf继承了.ini文件的格式,用[ ] 分成不同的部分

全局设置:

[global] 服务器通用或全局设置的部分

特定共享设置:

[homes] 用户的家目录共享

[printers] 定义打印机资源和服务

[sharename] 自定义的共享目录配置

其中:#;开头的语句为注释,大小写不敏感

宏定义:

%m 客户端主机的NetBIOS %M 客户端主机的FQDN

%H 当前用户家目录路径 %U 当前用户用户名

%g 当前用户所属组 %h samba服务器的主机名

%L samba服务器的NetBIOS %I 客户端主机的IP

%T 当前日期和时间 %S 可登录的用户名

 

SAMBA服务器全局配置

workgroup 指定工作组名称

server string 主机注释信息

netbios name 指定NetBIOS

interfaces 指定服务侦听接口和IP

hosts allow 可用“, ,空格,或tab分隔,默认允许所有主机访问,也可在每个共享独立配置,如在[global]设置,将应用并覆盖所有共享设置

IPv4 network/prefix: 172.25.0.0/24 IPv4前缀: 172.25.0.

IPv4 network/netmask: 172.25.0.0/255.255.255.0

主机名: desktop.example.com

example.com后缀的主机名: .example.com

示例:

hosts allow = 172.25.

hosts allow = 172.25. .example.com

hosts deny 拒绝指定主机访问

config file=/etc/samba/conf.d/%U 用户独立的配置文件

Log file=/var/log/samba/log.%m 不同客户机采用不同日志

log level = 2 设置记录日志的级别

max log size=50 日志文件达到50K,将轮循rotate,单位KB

Security三种认证方式:

share:匿名(CentOS7不再支持)

usersamba用户(采有linux用户,samba的独立口令)

domain:使用DCDOMAIN CONTROLLER)认证

passdb backend = tdbsam 密码数据库格式

实现samba用户:

包:samba-common-tools

工具:smbpasswd pdbedit

samba用户须是Linux用户,建议使用/sbin/nologin

 

管理SAMBA用户

添加samba用户

smbpasswd -a

pdbedit -a -u

修改用户密码

smbpasswd

删除用户和密码:

smbpasswd -x

pdbedit -x -u

查看samba用户列表:

/var/lib/samba/private/passdb.tdb

pdbedit -L -v

查看samba服务器状态

smbstatus

 

Windows

运行 --> \\sambaip --> 输用户名密码

登出:

cmd>net use

cmd>net use \\192.168.30.3\IPC$ /del

nbtstat -a IPADDR  查看IP对应的netbios

 

配置目录共享

每个共享目录应该有独立的[ ]部分

[共享名称] 远程网络看到的共享名称

comment 注释信息

path 所共享的目录路径

public 能否被guest访问的共享,默认no,和guest ok 类似

browsable 是否允许所有用户浏览此共享,默认为yesno为隐藏,no的话可以起到访问根目录时看不见此文件夹的效果

writable=yes 可以被所有用户读写,默认为no

read only=no writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读

write list 三种形式:用户,@组名,+组名,用,分隔

writable=no,列表中用户或组可读写,不在列表中用户只读

valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔

 

基于特定用户和组的共享

编辑/etc/samba/smb.conf

[share]

path = /app/dir

valid users=wind,@admins

writable = no

browseable = no

public = no  #改成yes的话谁都能写,所有者所属组是nobody

 

SMB客户端访问

UNC路径: Universal Naming Convention,通用命名规范

格式:\\sambaserver\sharename

终端下使用smbclient登录服务器

smbclient -L instructor.example.com

smbclient -L instructor.example.com -U wind

> cd directory

> get file1

> put file2

smbclient //instructor.example.com/shared -U wind

可以使用-U选项来指定用户%密码,或通过设置和导出USERPASSWD环境变量来指定

 

挂载CIFS文件系统

手动挂载

mount -t cifs -o user=wind,password=centos //server//shared /mnt/smb

开机自动挂载

cat /etc/fstab 可以用文件代替用户名和密码的输入

//server/homes /mnt cifs credentials=/etc/smb.txt 0 0

cat /etc/smb.txt

username=wind

password=password

chmod 600 /etc/smb.txt

 

实验:实现SMB共享

一、在samba服务器上安装samba

yum -y install samba

 

二、创建samba用户和组

groupadd -r admins

useradd -s /sbin/nologin -G admins wind

smbpasswd -a wind

useradd -s /sbin/nologin cloud

smbpasswd -a cloud

pdbedit -L

 

三、创建samba共享目录,并设置SElinux

mkdir /testdir/smbshare

chgrp admins /testdir/smbshare

chmod 2775 /testdir/smbshare

semanage fcontext -a -t samba_share_t '/testdir/smbshare(/.*)?'

restorecon -vvFR /testdir/smbshare

 

四、samba服务器配置

vim /etc/samba/smb.conf

security = user

passdb backend = tdbsam

[share]

path = /testdir/smbshare

write list = @admins

systemctl start smb nmb

systemctl enable smb nmb

firewall-cmd --permanent --add-service=samba

firewall-cmd --reload

 

五、samba客户端访问

安装包

yum -y install cifs-utils

wind用户挂载smb共享并访问

mkdir /mnt/wind

mount -o username=wind //smbserver/share /mnt/wind

echo "Hello wind" >/mnt/wind/windfile.txt

cloud用户挂载smb共享并访问

mkdir /mnt/cloud

mount -o username=cloud //smbserver/share /mnt/cloud

touch /mnt/cloud/cloudfile.txt

  

实验:针对不同用户设置不同的共享目录和权限

一、在samba服务器上安装samba

yum -y install samba

 

二、创建samba用户和组

useradd -s /sbin/nologin smb1

smbpasswd -a smb1

useradd -s /sbin/nologin smb2

smbpasswd -a smb2

useradd -s /sbin/nologin smb3

smbpasswd -a smb3

pdbedit -L

 

三、创建samba共享目录,并设置SElinux

mkdir -pv /data/{tools,smb2,smb3}

chmod 777 /data/{tools,smb2,smb3}

touch /data/tools/defaultdir.txt  #3个共享目录创建不同的文件作标识

touch /data/smb2/smb2dir.txt

touch /data/smb3/smb3dir.txt

semanage fcontext -a -t samba_share_t '/data(/.*)?'

restorecon -vvFR /data

 

四、samba服务器配置

vim /etc/samba/smb.conf

[global]

workgroup = SAMBA

security = user

netbios name = smbsrv7

passdb backend = tdbsam

log file = /var/log/samba/log.%I

log level = 2

……

config file = /etc/samba/conf.d/%U

[share]

comment=samba share dir

path=/data/tools

read only = yes

SAMBA服务_第2张图片

SAMBA服务_第3张图片 

vim /etc/samba/conf.d/smb2

[share]

path=/data/smb2

writable=yes

vim /etc/samba/conf.d/smb3

[share]

path=/data/smb3

SAMBA服务_第4张图片

五、samba客户端访问

安装包

yum -y install cifs-utils

smb1用户挂载smb共享并访问

mkdir /mnt/smb1

mount -o username=smb1 //smbserver/share /mnt/smb1

ls /mnt/smb1

echo "Hello smb1" >/mnt/smb1/smb1file.txt

看到smb1用户进入到了默认的共享目录,smb1写权限被拒绝,符合的服务端配置

SAMBA服务_第5张图片

smb2用户挂载smb共享并访问

mkdir /mnt/smb2

mount -o username=smb2 //smbserver/share /mnt/smb2

ls /mnt/smb2

touch /mnt/smb2/smb2file.txt

看到smb2用户的进入到了smb2自己的的共享目录,smb2有写权限,符合服务端配置

SAMBA服务_第6张图片

smb3用户挂载smb共享并访问

mkdir /mnt/smb3

mount -o username=smb3 //smbserver/share /mnt/smb3

ls /mnt/smb3

touch /mnt/smb3/smb3file.txt

看到smb3用户的进入到了smb3自己的的共享目录,smb3写权限被拒绝,符合的服务端配置

SAMBA服务_第7张图片 

多用户SMB挂载

SAMBA共享默认只支持同时用一个用户挂载SMB共享

CentOS7中可启用多用户挂载功能

客户端挂载samba共享目录后,在客户端登录的不同用户访问同一个samba的挂载点,可获得不同权限

 

实验:多用户SMB挂载

一、samba服务器配置

yum install samba

mkdir /testdir/multiuser

vim /etc/samba/smb.conf

[smbshare]

path=/testdir/multiuser

writable=no

write list= @admins

SAMBA服务_第8张图片

二、samba服务器创建samba用户

useradd -s /sbin/nologin smbuser

smbpasswd -a smbuser

groupadd admins

useradd -s /sbin/nologin -G admins wind

smbpasswd -a wind

useradd -s /sbin/nologin cloud

smbpasswd -a cloud

SAMBA服务_第9张图片

三、samba服务器设置目录权限和SELinux

wind,admins组分配目录读写权限

chmod 777 /testdir/multiuser

SAMBA 多用户挂载 03 设置目录权限.jpg

或者

setfacl -m u:wind:rwx /testdir/multiuser

setfacl -m g:admins:rwx /testdir/multiuser

设置SELinux标签:

semanage fcontext -a -t samba_share_t '/testdir/multiuser(/.*)?'

restorecon /testdir/multiuser

systemctl restart smb

 

四、samba客户端启用多用户挂载

yum -y install cifs-utils

mkdir /mnt/smb

echo 'username=smbuser' >/etc/multiuser

echo 'password=centos' >>/etc/multiuser

chmod 600 /etc/multiuser

以多用户方式挂载:

vim /etc/fstab

//smbserver/smbshare /mnt/smb cifs credentials=/etc/multiuser,multiuser 0 0

mount -a

SAMBA服务_第10张图片

五、在samba客户端用实现多用户访问

useradd wind;useradd cloud

root访问

ls /mnt/smb; touch /mnt/smb/root.txt

wind访问

su - wind

ls /mnt/smb; touch /mnt/smb/wind.txt

cifscreds add -u wind smbserver

touch /mnt/smb/wind.txt

cloud访问

su - cloud

cifscreds add -u cloud smbserver

ls /mnt/smb

touch /mnt/smb/cloud.txt

可以看到,只有wind用户进行验证后有写权限,rootcloud用户写权限被拒绝,符合的服务端配置

SAMBA服务_第11张图片