Linux基础服务3——samba

2023-10-26

一、基本了解

什么是samba?

  1. samba与nfs作用相同,也是网络文件系统,还有一个是ftp。
  2. samba能够在任何支持SMB协议的主机之间共享文件的一种实现,也包括windows,弥补了nfs的弊端。
  3. SMB协议是C/S型协议,一种在局域网上共享文件和打印机的一种通信协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。

1.1 服务安装

1.服务端安装。

yum -y install samba*

2.客户端安装。

 yum -y install samba-client

3.服务端关闭防火墙和selinux,并启动服务。

systemctl  stop firewalld
systemctl  disable firewalld
setenforce 0

systemctl start smb nmb

4.客户都安关闭防火墙和selinux。

systemctl  stop firewalld
systemctl  disable firewalld
setenforce 0

1.2 服务进程和端口

进程 作用 端口
nmbd 提供基于NetBIOS主机名称的解析。 139/tcp,445/tcp
smbd 提供对服务器中文件、打印资源的共享访问。 137/udp,138/udp
winbindd + ldap 对应Windows AD活动目录,现已淘汰使用。

1.3 samba用户

账户 密码
samba服务端系统用户 Samba服务单独设置密码,与系统用户登录密码是单独分开的。
通过smbpasswd -a USERNAME命令设置
smbpasswd命令参数 释义
-a Sys_User 添加系统用户为samba用户并为其设置密码
-d 禁用用户帐号
-e 启用用户帐号
-x 删除用户帐号

1.服务端创建samba账户tom,此时的tom账户就是服务器系统账户。

useradd -r -M -s /sbin/nologin tom

在这里插入图片描述
2.给samba用户设置密码,注意该密码与服务器登录密码不同。
在这里插入图片描述
3.登录。

在这里插入图片描述
在这里插入图片描述

1.4 配置文件

  • 配置文件地址:/etc/samba/smb.conf,为主配置文件。

1.4.1 主配置文件

配置文件三大组成 作用
[global] 全局配置,此处的设置项对整个samba服务器都有效
[homes] 宿主机目录共享设置,此处用来设置Linux用户的默认共享,对应用户的宿主目录。
当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的宿主目录中
[printers] 打印机共享设置,一般不用。

在这里插入图片描述

1.testparm命令检查配置文件是否有语法错误,以及显示最终生效的配置,ok说明没有语法错误。
在这里插入图片描述

1.4.2 配置文件参数

参数 释义
workgroup 表示设置工作组名称
server string 表示描述samba服务器
security 表示设置安全级别,其值可为share、user、server、domain
passdb backend 表示设置共享帐户文件的类型,其值可为tdbsam(tdb数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(兼容旧版本samba密码文件)
comment 表示设置对应共享目录的注释,说明信息,即文件共享名
browseable 表示设置共享是否可见
writable 表示设置目录是否可写
path 表示共享目录的路径
guest ok 表示设置是否所有人均可访问共享目录
public 表示设置是否允许匿名用户访问
write list 表示设置允许写的用户和组,组要用@表示,例如 write list = root,@root
valid users 设置可以访问的用户和组,例如 valid users = root,@root
hosts deny 设置拒绝哪台主机访问,例如 hosts deny = 192.168.72.1
hosts allow 设置允许哪台主机访问,例如 hosts allow = 192.168.72.2
printable 表示设置是否为打印机

1.5 安全级别

  • Samba服务器的安全级别有三个,分别是user,server,domain
  • 以前的samba版本支持的安全级别有四个,分别是share,user,server,domain.
  • share是用来设置匿名访问的,但现在的版本已经不支持share了,但是还是可以实现匿名访问的,只是配置方式变了。
安全级别 作用
user 基于本地的验证
server 由另一台指定的服务器对用户身份进行认证
domain 由域控进行身份验证

二、访问samba

2.1 参数测试

1.服务端创建系统用户qingjun,并设置远程访问共享文件夹时的登录密码。

useradd qingjun
smbpasswd -a qingjun

2.测试配置文件参数browseable参数。不添加该参数时,客户端查看时会显示出共享目录。
在这里插入图片描述
在这里插入图片描述
3.添加该参数时,则不显示共享目录。

在这里插入图片描述

2.2 交互式访问

1.客户端查看配置信息,指定服务端系统用户查看。

smbclient -L 192.168.130.160 -U qingjun

在这里插入图片描述

2.客户端命令访问。

smbclient //192.168.130.160/qingjun -U qingjun

在这里插入图片描述

3.使用?查看操作命令。
在这里插入图片描述
4.客户端创建目录111,服务端查看。
在这里插入图片描述

2.3 挂载访问

2.3.1 临时挂载

1.将服务端的qingjun用户家目录目录挂载到客户端本地的/opt目录。

mount -t cifs //192.168.130.160/qingjun /opt -o username=qingjun,password=citms

在这里插入图片描述
2.客户端/opt目录下创建文件baimu,服务端查看效果。

在这里插入图片描述

2.3.2 永久挂载

1.将服务端的qingjun用户家目录挂载到客户端本地的/opt/111目录。

//192.168.130.160/qingjun /opt/111 cifs defaults,username=qingjun,password=citms 0 0

mount -a

在这里插入图片描述
在这里插入图片描述

2.查看挂载效果。已将服务端的/home/qingjun目录下的内容挂载到客户端的/opt/111目录下。
在这里插入图片描述

2.4 配置用户认证共享

  • 使用上面方式存在一定安全问题,用户会知道系统用户,这是非常不安全的,所以这时可以将服务端上的系统用户映射成一个不存在的假用户,客户端使用假用户访问。

1.此时服务端存在系统用户qingjun。
在这里插入图片描述
2.创建/etc/samba/smbusers文件,将左边的系统用户映射成右边不存在的假用户。
在这里插入图片描述
3.修改配置文件,指定刚才创建的文件,并配置共享目录。
在这里插入图片描述

4.创建共享目录,修改属主属组。
在这里插入图片描述
5.重启服务。

 systemctl restart smb nmb

6.客户端使用假用户查看共享资源。

smbclient -L 192.168.130.160 -U 999

在这里插入图片描述
7.客户端挂载。

vim /etc/fstab
//192.168.130.160/beijing /opt cifs defaults,username=999,password=citms 0 0

##############################################
mount -a

在这里插入图片描述

8.验证效果。此时客户端上显示的文件属主属组为1000普通用户创建,而服务端显示的文件属主属组为qingjun用户。
在这里插入图片描述

2.5 匿名共享

  • 以上方式存在密码泄露问题,这种情况下可以使用匿名共享,不输入密码直接挂载访问。

1.创建共享目录/opt/baimu1,修改目录权限为777。
在这里插入图片描述
2.修改配置文件,指定使用BadUser用户访问,配置共享策略。
在这里插入图片描述
3.重启服务。

systemctl  restart smb nmb

4.在客户机查看共享资源。
在这里插入图片描述
5.客户端挂载。

vim /etc/fstab 
//192.168.130.160/wuhan /opt cifs defaults,username=BadUser 0 0

#######################################
mount -a

在这里插入图片描述
6.验证效果。
在这里插入图片描述
7.windows本地访问。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux基础服务3——samba 的相关文章

  • 出现错误 /usr/bin/env: 节点:权限被拒绝

    我已经在我的服务器 Centos 上完成了 ODOO v9 安装 一切都已安装成功 登录页面也可以正常工作 但登录后我收到一个包含以下错误的页面 usr bin env node Permission Denied 我尝试更改权限 但我的问
  • 无法在 Linux 中阻止从命名管道 (FIFO) 读取

    很奇怪 我似乎无法完成这项工作 这是我的架构 我有一个命名管道 它将在永远运行 root读取器进程和多个应用程序编写器进程 读者进程必须是blocking当作家们在nonblocking 因此 这就是我在阅读器进程中所做的 该进程将运行ro
  • python kivy在矩形内添加文本

    如何在矩形内添加文本 我使用下面的代码并在画布内添加了一个标签 希望它能显示在矩形内 import kivy from kivy app import App from kivy uix anchorlayout import Anchor
  • 如何将目录路径转换为唯一的数字标识符 (Linux/C++)?

    我正在研究获取目录 文件夹 并派生某种形式的唯一数字标识符的方法 我研究了 字符串到哈希 方法 但是 鸽子洞原理 http www codinghorror com blog 2007 12 hashtables pigeonholes a
  • Python:文本覆盖在所有窗口顶部,包括 Linux 中的全屏

    我正在尝试用 python 编写一个简单的脚本 在所有窗口和全屏应用程序之上输出文本 该脚本的目的是以类似于 Steam FPS 计数器工作方式的方式输出平均负载和可用内存 以及其他有用的统计数据 到目前为止 我尝试了 pygame 但据我
  • 如果从 Java 启动,子进程将忽略 SIGQUIT

    举这个简单的例子 public class Main public static void main String args throws Exception Runtime getRuntime exec sleep 1000 This
  • Python 在打开套接字时可以选择哪个网络适配器吗?

    运行 python 应用程序的目标计算机将具有三个可用的网络接口 一般来说 所有三个网络都会有很大不同 但是三个网络中的两个可能位于相似的网络上 在下面的示例中 我无法控制 ETH 2 上的目标地址 因为它是预先配置的系统 因此我被迫以编程
  • 修改文本文件而不读入内存

    我试图找出一种修改文本文件 特别是删除特定行 的方法 而无需将文件的大部分读取到内存中或重写整个文件 这里讨论的是大于主内存约 15 50 Gigs 的文件 附 我正在使用Linux 你不会逃避创建一个新文件 所以就硬着头皮去做吧 使用gr
  • Qt 的 sysroot 和前缀选项的实际示例是什么

    我正在查看可以运行的所有选项configureQt 提供的脚本 特别是 qt everywhere opensource src 5 2 0 经过大量搜索后 我确定这些东西充其量记录很少 所以我希望我能得到一些帮助 当我查看描述时prefi
  • 在 Kali (Debian) 中安装 mono-devel 时,软件包具有未满足的依赖关系

    我尝试安装 mono devel 并输入sudo apt get mono devel在终端中 但失败了 得到以下结果 apt get install mono devel Reading package lists Done Buildi
  • php.ini 更改,但在 Ubuntu 上无效

    我想更改 PHP 上传文件大小的限制 这是我的输出的一些信息phpinfo https www php net manual en function phpinfo php Configuration File php ini Path e
  • 如何在 Linux 中检测通过 GUI 登录的用户

    我想在我的程序中捕获通过 GUI 登录的用户名 我的程序作为守护进程从 root 登录运行 如果非 root 用户通过 GUI 登录 我的程序应该会收到通知 我正在粘贴我当前的程序 该程序调用一个 perl 脚本 利用系统调用来检查当前登录
  • 为 bash 脚本创建应答文件

    我想为别人的 bash 脚本创建一个应答文件 当您运行 bash 脚本时 第一次安装该软件时 系统会询问您 5 个问题 我用的是yes script命令并且有效 它会自动应答yes对所有问题 不过我还是想回答一下no对于最后一个问题 有办法
  • 哪个信号被传递到信号处理程序中死锁的进程

    我有一个来自调用信号处理程序后死锁的进程的核心转储 如何确定传送了哪个信号以及是谁发送的 GDB 为接收信号的线程生成的回溯如下 信号处理程序在第 15 帧中被调用 gdb bt 0 0x00007fa9c204654b in sys fu
  • 编译错误:linux/module.h:没有这样的文件或目录

    我写了一个简单的模块 define KERNEL define MODULE include
  • 您可以bind()和connect() UDP连接的两端吗

    我正在编写一个点对点消息队列系统 它必须能够通过 UDP 运行 我可以任意选择一侧或另一侧作为 服务器 但这似乎不太正确 因为两端都从另一端发送和接收相同类型的数据 是否可以绑定 和连接 两端 以便它们只能彼此发送 接收 这似乎是一种非常对
  • 即使退出命令后,Shell 脚本仍继续运行

    我的shell脚本如下所示 bin bash Make sure only root can run our script EUID ne 0 echo This script must be run as root 1 gt 2 exit
  • “排序文件名 | uniq”不适用于大文件

    我可以从小文本文件中删除重复条目 但不能从大文本文件中删除重复条目 我有一个 4MB 的文件 文件的开头如下所示 aa aah aahed aahed aahing aahing aahs aahs aal aalii aalii aali
  • PHP exec - 检查是否启用或禁用

    有没有办法检查 php 脚本是否exec 在服务器上启用还是禁用 这将检查该功能是否确实有效 权限 权利等 if exec echo EXEC EXEC echo exec works
  • 如果specfile中的某些条件不满足,如何中止rpm包的安装?

    还有一些事情Requires标签不满足 所以我写了一个脚本来验证这些东西 但是我把它们放在哪里呢 如果没有找到 那么我想退出安装 提示用户在尝试再次安装此 rpm 之前执行这些步骤 writing exit 1 in installtag

随机推荐