当前位置:文档之家› linux Samba服务器详解以及配置

linux Samba服务器详解以及配置

FTP:
工作在应用层
两台主机之间的交互、资源的请求、资源的响应或对请求的响应都是通过应用层报文向对方建立的,即 TCP/IP 只负责将数据报文安全的传达到目的地,而 FTP 是一种应用层协议,当请求方去请求数据的时候能实现的操作很简单,只能在对应的服务器上对文件进行增删的操作,却无法直接对远程服务器上的文件进行修改

NFS:Network File System
可以实现将一台主机上的文件让另一台主机直接挂载,只要被挂载的主机输出了对应的权限,挂载至本地的主机就可以像使用本地文件系统一样使用被挂载的文件,而这个过程对用户而言是透明的
数据传输基于 RPC(远程过程调用) 的方式进行传输

RPC:基于较高的效率,二进制的传输方式

CIFS/SMB:
主要供 windows 操作系统使用
CIFS:Common Internet File System
SMB:Service Message Block
类似于 RPC 的机制
CIFS/SMB 还依赖于 NETBIOS
NETBIOS:Network Basic Input Output System
通过广播的方式在同一个工作组或同一个网络之内实现主机名称解析的协议(效率较低)
也可以基于二进制的方式通过 UNC 在主机之间实现共享文件
UNC:\\IP\Shared_path\
Wins:
类似于 DNS 服务,只为 Windows 主机内部,以类似于 NETBIOS 的方式通过单播解析主机名,客户端只需第一次通过单播将主机名和 IP 地址发送给 Wins 服务器或请求网络内主机名即可

Samba:跨 Linux、Unix 与 Windows 平台进行文件传输
在 Linux/Unix 上使用软件模拟 NetBIOS 与 CIFS/SMB 的功能实现与 Windows 的交互,即:
当 Linux/Unix 主机上使用 Samba 的软件将某个目录共享出来,即可在同一网段内的 Windows 的主机上通过 UNC 路径直接对 Linux/Unix 上的该文件进行操作,也可以将 Windows 上共享出的目录通过 CIFS 协议挂载至 Linux/Unix 下直接进行操作

Samba 通过 CIFS 弥合了 Windows 与 Linux/Unix 系统间的文件传输的差异性
Samba 受 SELinux 控制,当启用 Samba 服务时需调整 SELinux 的状态
Samba 还能提供 Winbind 服务,使得 Linux 主机加入到 Windows 的 AD 域中

监听端口:
NetBIOS: 137/udp,138/udp,139/tcp
共享文件: 445/tcp

即开启 Samba 服务时应当开启以上端口

Samba 身份验证
Samba 的本地认证
当客户端访问 Samba 服务器时应该持有服务器端所认证的用户与对应的秘钥
即该用户一定是 Samba 服务器上的系统用户,但为保证服务器系统的安全,由于 CIFS 认证的过程并不加密,如果没有 kerberos 等相关的加密机制则很容易被第三方截取用户的相关安全信息,因而在提供 Samba 服务时,所创建的用户是服务器上的系统用户,而对应的密码不是系统上的密码,而是另有一套 Samba 的密

码文件为该用户提供访问 Samba 服务时做身份认证,且该文件一定是加密存放

Samba 的服务器认证
对于 Samba 而言,可以实现集中身份验证,即由另一台认证服务器实现对访问 Samba 的用户的身份进行认证,而这个认证可以基于 kerberos 实现,也可以将该用户加入 Windows AD 域中,因而该用户并不是 Samba 服务器上的用户,而是认证服务器上的用户,从而加强了对 Samba 服务器的安全性

Samba 的安全等级
即匿名访问控制,默认的安全级别为 “user” 即必须提供用户名和密码才能进行访问,“share” 即为匿名访问,“server” 为旁路服务器认证,如kerberos,“domain” 为通过 Windows AD 认证,“ads” 为 winbindd 进行认证(在authconfig-tui 的第二页进行选择)

Samba 的共享文件名与该目录的文件名可以不同,而同一主机上共享出的多个目录的 UNC 文件名一定不能相同

Samba 的访问权限
取决于共享权限与文件系统权限的交集

Samba 访问控制
基于 IP 地址的白名单和黑名单的访问控制,可以定义用户和组对指定目录的权限

Samba 的用户授权
设置指定用户对目录的权限

Samba 共享功能
文件与打印机共享

Samba 的名称解析
通过 Samba_winbind 实现名称解析,基于单播的方式可以被 Windows 直接访问到,监听在 udp 的端口上

Samba 浏览的属性
定义指定目录是否除了属主与属组对其他用户是否可浏览,即看到该目录与其相关属性


软件包介绍
samba.x86_64 || Samba 的服务器端
samba-client.x86_64 || Samba 的客户端
samba-libs.i686
samba-python.x86_64
samba-winbind.x86_64 || winbind 工具
samba-winbind-modules.i686
samba-winbind-modules.x86_64

进程介绍
开启 Samba 服务后会自动启动两个进程 nmbd 和 smbd
nmbd:提供 NetBIOS 服务,工作在 137/udp,138/udp,139/tcp
smbd:提供文件共享协议,工作在 445/tcp
winbind:为 Windows AD 服务

加入 Windows 的 AD
1.安装 Samba、Samba-client、Samba-conmmon、Samba-winbind 软件包
2.使用 authconfig-tui 工具两次勾选 winbind 后,填写 Domain、Domain Controllers、ADS Realm 即可添加到 Windows 的域服务器

添加 Samba 服务的用户
# smbpasswd -a user1 || user1 必须为该服务器系统上已存在的用户,通过该命令将 user1 设置为 Samba 的用户,并为 user1 使用 Samba 服务重新设置密码,-a 为添加用户,建议在系统上添加 user1 时不设置密码
# smbpasswd user1 || 重新设置 user1 的 Samba 的服务密码
# pdbedit -L || 查看该主机上有哪些 Samba 的用户

Samba 的配置文件为 /etc/samba/smb.conf 与 /etc/samba/下的所有文件
了解 /etc/samba/smb.conf
以“#”开头则为注释

信息,以“;”开头则为默认生效,若修改默认值则必须去掉“;”改写默认值
如果发生语法错误,则自动忽略该行,以默认值运行

该配置文件分为全局配置和共享配置两个部分

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@以下为/etc/samba/smb.conf 详解@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 。。。。。。。。。。。。
@ # setsebool -P samba_domain_controller on || Samba 可加入 Windows 的域服务器,但 SELinux 会阻挡,使用该命令即可通过 authconfig-tui 加入 Windows 的域服务器
@ # setsebool -P samba_enable_home_dirs on || Samba 会共享其 Home 目录,但 SELinux 会阻止该共享,使用该命令可开启 Home 目录的共享
@ # chcon -t samba_share_t /path/to/directory || Samba 可以共享任意目录,因而该共享目录无对应的安全上下文,因此 SELinux 默认阻挡,若要开启访问,需使用该命令设置 context 值
@ # setsebool -P samba_export_all_rw on || 若要共享系统文件则必须使用该命令开启 SELinux 的访问控制
@ =============== Global Settings ================ || 双横线以下为全局配置
@ [global]
@ --------------------------- Network-Related Options----------------- || 单横线为全局配置下的子配置
@ 。。。。。。。。。。。。
@ 。。。。。。。。。。。。
@ workgroup = MYGROUP || 工作组,同 Window 中的计算机工作组,仅实现分类
@ server string = Samba Server Version %v || Samba 的描述,“%v”即为版本号的变量,应修改
@
@ ; netbios name = MYSERVER || 设置广播名,默认显示计算机,可去掉“;”后自定义
@
@ ; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 || 设置服务监听的端口,默认监听所有网络端口
@ ; hosts allow = 127. 192.168.12. 192.168.13. || 设置允许哪些主机可以进行访问,对以下所有配置生效,默认允许所有,建议写在各目录的配置下以实现自定义
@
@ ; max protocol = SMB2 || 设置 Samba 的协议版本
@ 。。。。。。。。。。。。
@ ----------------------------- Logging Options------------------------- || 日志相关的配置选项
@ 。。。。。。。。。。。。。
@ # log files split per-machine:
@ log file = /var/log/samba/log.%m || “%m”为访问该 Samba 服务器主机的计算机的主机名,当 server1 来访问时会在 /var/log/samba/log.server1 的日志
@ # maximum size of 50KB per log file, then rotate:
@ max log size = 50 || 日志大于50 KB 轮询一次(可根据时间或大小设置轮询)
@ 。。。。。。。。。。。。。
@ 。。。。。。。。。。。。。
@ --------------------------- Standalone Server Options ---------------- || 认证相关的配置
@ 。。。。。。

。。。。。。。
@ security = user || 设置默认的认证模式为 user,即 Samba 数据库认证
@ passdb backend = tdbsam || 定义密码存放在 Samba 数据库中的方式
@ ----------------------- Browser Control Options ---------------------- || 浏览控制,使用默认设置
@ 。。。。。。。。。。。。。
@ ; local master = no
@ ; os level = 33
@ ; preferred master = yes
@ =============== Share Definitions =============== || 以下所有配置均为共享配置
@ [homes] || 定义共享名为 homes,共享配置中的语法无先后顺序
@ comment = Home Directories || 对共享出的对应用户的 Home 目录的描述
@ browseable = no
@ writable = yes
@ ; valid users = %S
@ ; valid users = MYDOMAIN\%S
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@以上为/etc/samba/smb.conf 详解@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Windows 提供服务,Linux 访问:
清除当前 Windows 计算机上的远程连接会话: cmd下 执行 net use * /del
Windows 上的操作:
1.创建新文件夹,重命名为 RHCE

2.在 RHCE 目录下创建新文件 text1、text2

3.对该目录开启共享并设置贡献权限
右键 ==> 属性 ==> 共享 ==> 高级共享 ==> 勾选共享此文件夹,共享名“RHCE” (可自定义)==> 应用 ==> 权限 ==> 勾选所有允许权限 ==> 应用

4.设置指定用户对该文件夹的权限(该用户必须存在于该计算机中)
属性 ==> 安全 ==> 编辑 ==> 添加 ==> 在“输入队形名称来选择”下填写新增的用户如:admin ==> 检查名称 ==> 高级 ==> 立即检查 ==> 点击 “admin” ==> 确定 ==> 确定 ==> 允许下勾选“完全控制”

Linux 下对该文件夹进行访问:
1.安装 Samba-client 软件包
# yum -y install samba-client

2.浏览 Windows 共享出的文件夹
# smbclient -L //10.202.251.11 -U admin
输入对应的密码即可浏览该计算机共享出的目录

3.安装 cifs-utils 驱动软件包(要挂载对应的文件系统的时候必须要安装该文件系统对应的驱动)
# yum -y install cifs-utils

4.挂载该共享文件夹至本地的 /mnt 目录下
# mount -t cifs //10.202.251.11/RHCE /mnt -o username=admin

5.查看是否已挂载成功
# df
# ls /mnt


Linux 挂载 Linux 上的 Samba 目录的操作同上


Linux 下提供共享服务,Windows 访问,并实现以下功能:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 1.创建 /video/test/ 目录,使用 Samba 共享该目录 @
@ 2.该共享目录的共享名为 rhce @
@ 3.仅允许 user11 对该目录有写权限,其他人均为只读权限 @
@ 4.该目录仅对 user11 可见 @
@ 5.该贡献仅允许 10.202.251.0/24 的计算机可以访问 @
@ 6.该共享允许所有人浏览,拒

绝匿名访问 @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Linux 下的操作
1.安装 Samba 服务器端软件
# yum -y install

2.开启 Samba 服务
# systemctl start smb
# systemctl enable smb

3.查看 Samba 监听的端口
# netstat -tunlp | grep smbd

4.开启 NetBIOS 服务即 nmb
# systemctl start nmb
# systemctl enable nmb

5.查看 NetBIOS 监听的端口
# netstat -tunlp | grep nmbd || 得知该服务监听的是广播地址

6.在防火墙上添加对应的服务
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload

7.创建需共享的目录 /video/test
# mkdir /video/test

8.编辑 /etc/samba/smb.conf 实现共享目录
# vim /etc/samba/smb.conf
# tail -7 /etc/samba/smb.conf
[rhce] || 定义共享的名字为 rhce
;comment = Filesystem || 定义该共享目录的描述,去除“;”则启用
path = /vedio/test || 定义共享的目录的绝对路径
writable = no || 意为所有人都不可写,不写该行则默认所有人不可写
write list = user11 || 定义允许 user11 有写权限,多个用户以“,”隔开,“@it”或 “+it”则意为 it 组中的所有成员
vaild users = user11 || 定义该目录仅对指定用户可读
browseable = yes || 定义该目录是否可浏览
hosts deny = 10.202.251.55 || 定义拒绝从该地址对 Samba 服务器进行访问,即黑名单
hosts allow = 10.202.251.0/24 || 定义白名单,多个主机或网络以“,”隔开,只有白名单则以白名单为主,只有黑名单则以黑名单为主,如果有冲突则以允许优先
public = no || 定义是否可以匿名访问,默认拒绝

9.测试 Samba 的配置文本
# testparm || 测试 Samba 的语法,并查看生效的语法规则

10.对该目录设置 context 值
# chcon -R -t samba_share_t /vedio/test || "-R" 意为递归设置
# semanage fcontext -a -t || 重写 context 数据库,重打标签也不会还原

12.设置该共享目录对 user11 的权限
# setfacl user11 rwx /vedio/test || 用户在客户端访问该共享目录所拥有的权限是共享权限与目录权限的交集

13.添加 Samba 服务器的访问用户
# smbpasswd -a user1 || user1 必须为该服务器系统上已存在的用户,通过该命令将 user1 设置为 Samba 的用户,并为 user1 使用 Samba 服务重新设置密码
# smbpasswd user1 || 重新设置 user1 的 Samba 的服务密码
# pdbedit -L || 查看该主机上有哪些 Samba 的用户

14.重新载入配置文件
# systemctl reload smb


根据以上的配置设置,共享目录 rhce 对 user1 可浏览,对 user2 不可浏览
1.定义 /etc/samba/smb.conf
# vim /etc/samba/smb.conf
# cat /etc/samba

/smb.conf
=============Global Settings==============
...............................
config file = /etc/samba/%U.conf || 在主配置区域添加该行

......................................
[rhce]
............................
browseable = no
public = no
....................................
.............................

2.针对 user1 编辑配置文件 user1.conf
# cd /etc/samba/
# cp smb.conf user1.conf
# vim user1.conf
# cat user1.conf
........................
......................
browseable = yes || 仅针对 user1 可浏览
public = no
.........................

3.重启服务
# systemctl restart smb



将 Samba 共享出的文件夹挂载至本地,并设置开机自动挂载
挂载至本地时需安装 cifs-utils 软件包
1.将 Samba 共享出的文件夹挂载至本地
# mount -t cifs //10.202.251.51/rhce /mnt/ -o username=user1 || 以 user1 的身份将 Samba 共享出的文件夹挂载至本地,需单独输入 user1 的密码

2.设置开机自动挂载
1>将 user1 的用户名和密码编辑为一份文件
# cd /etc/samba/
# vim automount.txt
# cat automount.txt
username=user1
password=redhat

2>设置该文件的权限
# chmod 400 automount.txt

3>设置自动挂载
# vim /etc/fstab
# tail -1 /etc/fstab || man smb.conf 查找 credentials
//10.202.251.51/rhce /mnt cifs defaults,credentials=/etc/samba/automount.txt 0 0



当 root 用户将 Samba 共享目录挂载至本地后所有 root 用户对该目录的操作相当于 user1 对该目录的操作,如果系统上的用户切换到 test 用户后,却无法实现对该目录的写操作,此时应开启 Samba 的 multiuser 的功能

开启 multiuser 的功能
1.编辑 /etc/fstab
# vim /etc/fstab
# tail -1 /etc/fstab
//10.202.251.51/rhce /mnt cifs defaults,credentials=/etc/samba/automount.txt,multiuser,sec=ntlmssp 0 0 || man smb.conf 查找

2.切换至 test 用户
# su - test

3.启用 Samba 服务器上 user1 的身份,使得 test 用户可使用该目录
# cifscreds add -u user1 10.202.251.51 || 地址为 Samba 的地址,随机需输入 user1 在 Samba 上的密码

# cifscreds clearall || 清除当前 Samba 上的 user1 的密码











相关主题
文本预览
相关文档 最新文档