Samba服务

samba 服务

一、简介

Samba 是一种在 Linux 和 Unix 系统上实现 SMB(Server Message Block)协议的服务,其目的是提供文件和打印服务。它可以让 Windows、Linux 和 Unix 之间实现文件和打印机的共享,并且支持通过 SMB/CIFS 协议进行身份验证和密钥,以保护共享资源的安全。

二、部署

2.1 安装

  • 这里以 centos7.9 为例
[root@test-server ~]# yum install -y samba
[root@test-server ~]# rpm -q samba
samba-4.10.16-25.el7_9.x86_64

2.2 配置

  • samba的配置文件默认是在 /etc/samba/smb.conf
[global]
		# 网络信息培训
        workgroup = WORKGROUP  # 工作名称
        server string = Samba Server Version %v  # 描述信息
        netbios name = Samba  # 网络中显示的名称
    	# 用户相关配置
        security = user # 安全模式,user | share | domain
        passdb backend = tdbsam  # 存放用户账户密码信息的后端数据库
        username map = /etc/samba/smbusers  # Samba用户指定相应的系统用户或组
        map to guest = "定义未经过身份验证应该映射到的用户"
        guest account = "访客用户使用的用户"
        config file = /etc/samba/smb.conf.%U  # 指定用户配置文件
        # 日志相关配置
        log file = /var/log/samba/log.%m  # 日志路径
        max log size = 50  # 日志文件的最大大小
        # 网络相关配置
        dns proxy = "是否作为DNS代理"
        hosts allow = "允许访问的ip段或ip,用空格间隔,格式: ip/mask"
        hosts deny = "拒绝访问的ip段或ip,用空格间隔,格式: ip/mask"
		# 打印机相关配置
		printing = cups  # 使用CUPS作为打印系统
		printcap name = cups  # 指定打印机配置文件的名称
		load printers = yes  # 定义所有打印机都可用
		cups options = raw

[xxx]
        comment = xxx  # 简介
        path = /project/samba/public  # 共享目录
        public = no  # 是否公共共享
        writable = yes  # 是否可写
        read only = yes  # 只读
        write list = xxx  # 可写的用户和组,配合read only使用
        admin users = xxx,@xxx  # 管理员用户和组
        valid users = xxx,@xxx  #  有效用户和组
        create mask = 0644  # 文件创建掩码
        directory mask = 0755  # 目录创建掩码
  • /etc/samba/smbusers:用户配置文件
user1
user2
user3
group1
group2
group3

2.3 管理命令

  • pdbedit
# 查看单个用户信息
pdbedit -u p1

# 查看所有用户,
pdbedit -L

# 查看所有用户详细信息
pdbedit -L -v

# 查看帮助
pdbedit --help
  • smbpasswd
# 创建用户
smbpasswd -a username

# 删除用户
smbpasswd -a username

# 启动用户
smbpasswd -e username

# 关闭用户
smbpasswd -d username

# 查看帮助
smbpasswd -h

2.4 启动

[root@test-server ~]# systemctl enable --now smb

三、示例

在这里插入图片描述

3.1 准备环境

# 安装
[root@test-server ~]# yum install -y samba

# 创建用户
[root@test-server ~]# groupadd Pod
[root@test-server ~]# groupadd HR
[root@test-server ~]# groupadd Qc
[root@test-server ~]# useradd p1 -g Pod -s /sbin/nologin -M
[root@test-server ~]# useradd p2 -g Pod -s /sbin/nologin -M
[root@test-server ~]# useradd h1 -g HR -s /sbin/nologin -M
[root@test-server ~]# useradd h2 -g HR -s /sbin/nologin -M
[root@test-server ~]# useradd q1 -g Qc -s /sbin/nologin -M
[root@test-server ~]# useradd q2 -g Qc -s /sbin/nologin -M

# 创建目录
[root@test-server ~]# mkdir -p /share/{Pod,HR,Qc,Public}

# 设置权限
[root@test-server ~]# chown -R :Pod /share/Pod
[root@test-server ~]# chown -R :Qc /share/Qc
[root@test-server ~]# chown -R :HR /share/HR

# 这里加了t,只允许用户删除自己的文件
[root@test-server ~]# chmod -R 1771 /share/Pod
[root@test-server ~]# chmod -R 1771 /share/HR
[root@test-server ~]# chmod -R 1771 /share/Qc
[root@test-server ~]# chmod -R 1777 /share/Public

3.2 配置 samba

  • 编辑 /etc/samba/smb.conf
[root@test-server ~]# vim /etc/samba/smb.conf
[global]
		workgroup = SAMBA
		server string = Samba Server Version %v
		netbios name = Samba
		
		security = user
		passdb backend = tdbsam
		username map = /etc/samba/smbusers
		# config file = /etc/samba/smb.conf.%U
		
		log file = /var/log/samba/log.%m
		max log size = 50
		
		printing = cups
		printcap name = cups
		load printers = yes
		cups options = raw

# 中间的home printers print$不用修改

[Pod]
        comment = Pod Directory
        path = /share/Pod
        public = no
        writable = yes
        valid users = @Pod
        create mask = 0640
        directory mask = 0750

[HR]
		comment = HR Directory
		path = /share/HR
		public = no
		writable = yes
		valid users = @HR
		create mask = 0640
		directory mask = 0750

[Qc]
		comment = Qc Directory
		path = /share/Qc
		public = no
		writable = yes
		valid users = @Qc
		create mask = 0640
		directory mask = 0750

[Public]
        comment = Public Directory
        path = /share/Public
        public = no
        writable = yes
        valid users = @Pod,@HR,@Qc
        create mask = 0644
        directory mask = 0755
  • 添加 /etc/samba/smbusers
# 添加用户和组
[root@test-server ~]# vim /etc/samba/smbusers
p1
p2
Pod
h1
h2
HR
q1
q2
Qc
  • 设置用户密码
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a p1
Added user p1.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a p2
Added user p2.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a h1
Added user h1.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a h2
Added user h2.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a q1
Added user q1.
[root@test-server ~]# echo -e "123456\n123456" | smbpasswd -s -a q2
Added user q2.

3.3 启动 samba

# 加载配置
[root@test-server ~]# systemctl reload smb

3.4 测试 samba

[root@test-server ~]# yum install -y samba-client
# 使用p1登录,在Pod创建一个p1目录,在Public创建一个p1目录
[root@test-server ~]# smbclient //127.0.0.1/Pod -U p1%123456
smb: \> mkdir p1
smb: \> ls
.     D        0  Wed Sep  4 15:31:06 2024
..    D        0  Wed Sep  4 14:46:56 2024
p1    D        0  Wed Sep  4 15:31:06 2024
smb: \> exit

[root@test-server ~]# smbclient //127.0.0.1/Public -U p1%123456
smb: \> mkdir p1
smb: \> ls
.     D        0  Wed Sep  4 15:31:06 2024
..    D        0  Wed Sep  4 14:46:56 2024
p1    D        0  Wed Sep  4 15:31:16 2024
smb: \> exit

# 使用p2登录Pod,测试权限
[root@test-server ~]# smbclient //127.0.0.1/Pod -U p2%123456
Try "help" to get a list of possible commands.
smb: \> 
smb: \> ls
.     D        0  Wed Sep  4 15:30:56 2024
..    D        0  Wed Sep  4 14:46:56 2024
p1    D        0  Wed Sep  4 15:31:06 2024

smb: \> cd p1  # 测试是有权限的
smb: \p1\> cd ..
smb: \> deltree p1  # 无法删除
NT_STATUS_ACCESS_DENIED deleting remote directory \p1
smb: \> exit

# 使用h1登录Pod,测试权限
[root@test-server ~]# smbclient //127.0.0.1/Pod -U h1%123456
tree connect failed: NT_STATUS_ACCESS_DENIED

# 使用h1登录Public,测试权限
[root@test-server ~]# smbclient //127.0.0.1/Public -U h1%123456
Try "help" to get a list of possible commands.
smb: \> cd p1  # 可以查看
smb: \p1\> cd ..
smb: \> deltree ../p1  # 无法删除
NT_STATUS_ACCESS_DENIED deleting remote directory \p1
smb: \> exit

# 使用p1登录Pod,测试自己能否删除
[root@test-server ~]# smbclient //127.0.0.1/Pod -U p1%123456
Try "help" to get a list of possible commands.
smb: \> deltree p1  # 可以删除
smb: \> ls
.     D        0  Wed Sep  4 15:40:18 2024
..    D        0  Wed Sep  4 14:46:56 2024
smb: \> exit

四、总结

4.1 问题

  1. session setup failed: NT_STATUS_UNSUCCESSFUL 问题
# 通用情况
# 系统、samba必须都存在该用户,必须是启用状态
id [username]  # 检查系统中是否存在该用户
pdbedit -u [username]  # 检查samba是否存在该用户
pdbedit -u [username] -v | grep "Account Flags"  # 查看用户是否被禁用,DU代表禁用,U是启用状态

# 个别情况
# 我这里在部署测试的时候,使用smbpasswd创建了p1用户,然后将系统的p1用户删掉了重新创建,导致登录samba的时候一直报这个错误,需要删除samba的用户并重新创建
# 解决办法: smbpasswd -x p1; smbpasswd -a p1
  1. tree connect failed: NT_STATUS_BAD_NETWORK_NAME 问题
# 检查目录权限
# 检查smb.conf中的权限
# 检查防火墙和selinux

4.2 详细配置

  • 可以通过 acl 对目录进行更细致的权限控制
  • 可以设置 config file = /etc/samba/smb.conf.%U 来对二级目录进行权限配置
  • 如果想设置某个目录只读,只有某个特定用户或者组可以上传和修改,可以使用 read onlywrite list
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值