服务部署-Samba服务器

共 9605字,需浏览 20分钟

 ·

2021-06-24 13:09

关注「开源Linux」,选择“设为星标”
回复「学习」,有我为您特别筛选的学习资料~

目录

1 基础知识

1.1 Samba 服务介绍

1987年,微软公司和英特尔公司共同制定了SMB(Server Messages Block,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了1991年,当时还在读大学的Tridgwell为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB协议开发出了SMBServer服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。

所需的软件包括:

  • Samba服务端软件包
  • Samba-client客户端软件包
  • Samba-common公共文件软件包

Samba由smbdnmbd两个守护进程组成,两个进程的启动脚本相互独立。

nmbd

  • nmb启动脚本:/etc/rc.d/init.d/nmb
  • nmbd服务进程提供NetBIOS名称服务,以满足基于通过网络文件系统(CIFS)协议的共享访问环境
  • NetBIOS名称服务是Windows基于主机实现互相通信的机制,性能差,一般使用CIFS
  • smbd服务默认监听的端口是UCP协议的137,通过nmb服务启动nmbd进程

smbd

  • smb启动脚本:/etc/rc.d/init.d/smb
  • smbd服务进程为客户端提供文件共享与打印机服务,还负责用户权限验证以及锁功能
  • smbd服务默认监听的端口是TCP协议的139445,通过smb服务启动smbd进程

1.2 安装 Samba 服务程序

[root@localhost ~ ]# yum install samba
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分输出信息………………
Installing:
samba x86_64 4.1.1-31.el7 rhel 527 k
Transaction Summary
================================================================================
Install 1 Package
samba.x86_64 0:4.1.1-31.el7
Complete!

2 Samba 服务主配置文件

Samba服务程序的主配置文件与前面学习过的Apache服务很相似,包括全局配置参数和区域配置参数。全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。创建共享资源的方法很简单,如下表自定义共享配置。

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

2.1 全局设定

全局设定:可以共享的设置

2.2 私有家目录

  • 私有家目录:不能共享的设置

2.3 打印机共享

  • 打印机共享:可以共享的设置

2.4 自定义共享

  • 自定义共享:不能共享的设置

3 Samba 服务命令工具

  • smbclient命令用于交互式的数据访问
  • smbpasswd命令为Samba账号系统独立密码
  • pdbedit命令用于管理SMB服务程序的账户信息数据库
  • testparm命令,用于测试配置文件是否有语法错误,以及显示最终生效的配置

3.1 smbclient 命令

注意事项

  • smbclient命令可以直接指定用户名和密码,也可以交互式给定
  • 查看指定主机上用户的所有共享的资源

使用方式

  • 查看指定主机上用户的所有共享的资源:smbclient -L HOST -U USERNAME
  • 获取到共享信息:smbclint //SERVER/shared_name -U USERNAME
# 1、列出某个IP地址所提供的共享文件夹
smbclient -L 198.168.0.1 -U username%password

# 2、像FTP客户端一样使用smbclient
# 有许多命令和ftp命令相似,如cd 、lcd、get、megt、put、mput等
smbclient //192.168.0.1/tmp -U username%password

# 3、直接一次性使用smbclient命令
smbclient -c "ls" //192.168.0.1/tmp -U username%password
smbclient //192.168.0.1/tmp -U username%password
smb:/>ls

# 4、除了使用smbclient,还可以通过mount和smbcount挂载远程共享文件夹
# 挂载
mount -t cifs -o username=escape,password=123456 //192.168.0.1/tmp /mnt/tmp
# 取消挂载
umount /mnt/tmp

3.2 smbpasswd 命令

客户端访问Samba共享服务所使用的账号名称就是服务器端系统中真实存在的系统账号名称,但是不同于微软的共享设置,访问Samba共享的密码必须是独立的Samba密码,而不能使系统密码。即使有人获取了Samba的账号和密码,也难以控制系统。

注意事项:

  • smbpasswd命令为系统用户添加Samba登录密码

命令参数:

[root@localhost ~ ]# smbpasswd -a escape

3.3 pdbedit 命令

注意事项:

  • pdbedit命令用于管理SMB服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”
  • 在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了

命令参数:

[root@localhost ~ ]# pdbedit -a escape

4 实战演示

4.1 服务端配置

第 1 步:创建用于访问共享资源的账户信息

  • CentOS系统中,Samba服务程序默认使用的是用户口令认证,即user模式
  • 只有建立账户信息数据库之后,才能使用用户口令认证模式,确保仅让有密码且受信任的用户访问共享资源
  • Samba服务的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪
[root@localhost ~]# id escape
uid=1000(escape) gid=1000(escape) groups=1000(escape)

[root@localhost ~]# pdbedit -a -u escape
new password:此处输入该账户在Samba服务数据库中的密码
retype new password:再次输入密码进行确认
Unix username: escape
NT username:
Account Flags: [U ]
User SID: S-1-5-21-507407404-3243012849-3065158664-1000
Primary Group SID: S-1-5-21-507407404-3243012849-3065158664-513
Full Name: escape
Home Directory: \\\\localhost\escape
HomeDir Drive:
Logon Script:
Profile Path: \\localhost\escape\profile
Domain: LOCALHOST
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 10:06:39 EST
Kickoff time: Wed, 06 Feb 2036 10:06:39 EST
Password last set: Mon, 13 Mar 2017 04:22:25 EDT
Password can change: Mon, 13 Mar 2017 04:22:25 EDT
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

第 2 步:创建用于共享资源的文件目录

  • 在创建时,不仅要考虑到文件读写权限的问题,还需要考虑应用于该目录的SELinux安全上下文所带来的限制
  • Samba配置文件中就有关于SELinux安全上下文策略的说明,只需按照说明中给的值进行修改即可
  • 修改完毕后执行restorecon命令,让应用于目录的新SELinux安全上下文立即生效
[root@localhost ~]# mkdir /home/database
[root@localhost ~]# chown -Rf escape:escape /home/database

[root@localhost ~]# semanage fcontext -a -t samba_share_t /home/database
[root@localhost ~]# restorecon -Rv /home/database
restorecon reset /home/database context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:samba_share_t:s0

第 3 步:设置 SELinux 服务与策略

  • 设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录
  • 执行getsebool命令筛选出所有与Samba相关的SELinux域策略
  • 根据策略的名称和经验,在使用setsebool命令选择出正确的策略条目进行开启
[root@localhost ~]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_sandbox_use_samba --> off
virt_use_samba --> off

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

第 4 步:修改 Samba 服务的主配置文件

  • 在配置文件中,[homes]参数为来访用户的家目录共享信息,[printers]参数为共享的打印机设备
  • 如果这两项如果在今后的工作中不需要,可以像手动删除,这没有任何问题,需要的时候可以手动再次创建
[root@localhost ~]# vim /etc/samba/smb.conf
[global]
    workgroup = MYGROUP
    server string = Samba Server Version %v
    log file = /var/log/samba/log.%m
    max log size = 50
    security = user
    passdb backend = tdbsam
    load printers = yes
    cups options = raw
[database]
    comment = Do not arbitrarily modify the database file
    path = /home/database
    public = no
    writable = yes

第 5 步:重启 smb 服务

[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl enable smb
ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service'

[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

4.2 Windows 客户端

Samba服务程序可以解决Linux系统和Windows系统的资源共享问题

  • 要在Windows系统中访问共享资源,只需要在命令框中输入两个反斜杠,然后再加服务器的IP地址即可
  • 如果已经清空了Linux系统上iptables防火墙的默认策略,应该能看到Samba共享服务的登录界面
  • 正确输入escape账户名以及使用pdbedit命令设置的密码后,就可以登录到共享界面中了

4.3 Linux 客户端

Samba服务程序还可以实现Linux系统之间的文件共享

  • 客户端安装支持文件共享服务的软件包cifs-utils
[root@localhost ~]# yum install cifs-utils
Loaded plugins: langpacks, product-id, subscription-manager
......
Installing:
cifs-utils x86_64 6.2-6.el7 rhel 83 k
Transaction Summary
================================================================================
Install 1 Package
cifs-utils.x86_64 0:6.2-6.el7
Complete!
  • Linux客户端,按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中
  • 为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅root管理员才能够读写
[root@localhost ~]# vim auth.smb
username=escape
password=redhat
domain=MYGROUP

[root@localhost ~]# chmod -Rf 600 auth.smb
  • Linux客户端上创建一个用于挂载Samba服务共享资源的目录
  • 把挂载信息写入到/etc/fstab文件中,以确保共享挂载信息在服务器重启后依然生效
[root@localhost ~]# mkdir /database

[root@localhost ~]# vim /etc/fstab
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
//192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0

[root@localhost ~]# mount -a
# 或者自行手动挂载
mount -t cifs //SERVER/shared_name  /mount_point -o username=USERNAME,password=PASSWORD
  • 进入到挂载目录/database后就可以看到Windows系统访问Samba服务程序时留下来的文件了
[root@localhost ~]# cat /database/Memo.txt
i can edit it .

文章作者: Escape 

链接: https://escapelife.github.io/posts/f4e4ea9e.html 

整理:微信公众号【开源Linux】




往期推荐








服务部署-NFS服务器







服务部署-Vsftpd服务器







服务部署-Chrony时间同步服务







服务部署-NTP时间同步服务







CentOS8安装MySQL8







CentOS8安装GitLab13.7.2







实战 Kubernetes 中部署 MySQL 集群







教你在 Kubernetes 上部署 Redis 高可用集群




浏览 55
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报