服务部署-Samba服务器
共 9605字,需浏览 20分钟
·
2021-06-24 13:09
目录
1 基础知识
1.1 Samba 服务介绍
1987
年,微软公司和英特尔公司共同制定了SMB
(Server Messages Block,服务器消息块
)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了1991
年,当时还在读大学的Tridgwell为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB
协议开发出了SMBServer
服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。
所需的软件包括:
Samba
服务端软件包Samba-client
客户端软件包Samba-common
公共文件软件包
Samba由smbd
和nmbd
两个守护进程组成,两个进程的启动脚本相互独立。
nmbd
nmb启动脚本: /etc/rc.d/init.d/nmb
nmbd服务进程提供 NetBIOS
名称服务,以满足基于通过网络文件系统(CIFS
)协议的共享访问环境NetBIOS
名称服务是Windows基于主机实现互相通信的机制,性能差,一般使用CIFSsmbd服务默认监听的端口是 UCP
协议的137
,通过nmb服务启动nmbd进程
smbd
smb启动脚本: /etc/rc.d/init.d/smb
smbd服务进程为客户端提供文件共享与打印机服务,还负责用户权限验证以及锁功能 smbd服务默认监听的端口是 TCP
协议的139
与445
,通过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】
往期推荐