samba 基本配置及自定义控制

https://www.cnblogs.com/l-hh/p/9473937.html

Samba简介:

Samba实现的是Linux和Windows之间的一种共享,为两种不同的操作系统架起了一座桥梁,使Linux系统和Windows系统之间能够实现互相通信,共享文件系统、打印机及其他资源。

实验环境:

基本配置

[root@lhh ~]# yum install samba -y # server安装Samba服务

[root@lhh ~]# firewall-cmd --add-service=samba # 防火墙开启Samba服务

success

[root@lhh ~]# firewall-cmd --add-service=samba --permanent # 永久生效

success

[root@lhh samba]# cd /etc/samba/ # Samba配置文件目录

[root@lhh samba]# ls

lmhosts smb.conf

[root@lhh ]# vim /etc/samba/smb.conf # Samba的主配置文件

---------------- 配置文件重要的条目注释说明 ------------------------

[global] # Samba全局配置

  1. workgroup = MYGROUP # 工作组名称,Windows的为:WORKGROUP
  2. server string = Samba Server Version %v # 服务器介绍信息,参数%v为显示SMB版本号

interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 # Samba运行端口,默认是运行在所有端口上

hosts allow = 127. 192.168.12. 192.168.13. # 访问控制,默认是允许所以都可以访问

====================================================================

  1. log file = /var/log/samba/log.%m # 定义日志文件的存放位置与名称,参数%m为来访的主机名
  2. max log size = 50 # 定义日志文件的最大容量为50KB

=====================================================================

  1. security = user # 安全验证的方式,总共有4种,如下:
  2. #share:来访主机无需验证口令;比较方便,但安全性很差
  3. #user:需验证来访主机提供的口令后才可以访问;提升了安全性
  4. #server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)
  5. #domain:使用域控制器进行身份验证
  6. passdb backend = tdbsam #定义用户后台的类型,共有3种 ,如下:
  7. # smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码
  8. # tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户
  9. # ldapsam:基于LDAP服务进行账户验证

==============================================================

  1. load printers = yes # 设置在Samba服务启动时是否共享打印机设备,保存默认即可!
  2. cups options = raw # 打印机的选项,保存默认即可!

温馨提醒:

创建Samba用户时,本地必须存在此用户,但是Samba密码可以与系统密码不一致。

创建两个作为Samba测试用户

[root@lhh ~]# useradd -s /sbin/nologin test1

[root@lhh ~]# useradd -s /sbin/nologin test2

/sbin/nologin:表示此用户不可以登录系统,可以作为服务用户使用

=================================================

[root@lhh ~]# echo 123456 | passwd --stdin test1

[root@lhh ~]# echo 123456 | passwd --stdin test2

设置两个测试用户密码为:123456

如果没有 smbpasswd 这个命令,则需要安装命令

[root@lhh ~]# yum whatprovides */smbpasswd # 查询命令相关的包

samba-client-4.1.1-31.el7.x86_64 : Samba client programs

[root@lhh ~]# yum install samba-client -y # 安装命令

将两个用户添加到Samba服务里

[root@lhh ~]# smbpasswd -a test1 # -a:添加用户

New SMB password: # 设置 test1 密码

Retype new SMB password: # 再次确认密码

Added user test1. # 添加用户完成

[root@lhh ~]# smbpasswd -a test2 # 继续添加test2

New SMB password:

Retype new SMB password:

Added user test2.

=============================================

命令说明:# smbpasswd [选项] 用户名

-a:添加用户

-d:禁用用户

-e:启用用户

-x:删除用户

=======================================

[root@lhh ~]# pdbedit -L # 查看Samba的用户

test1:1001:

test2:1002:

继续注释说明主配置文件

------------- 配置文件重要的条目注释说明 ----------------

[homes] # 共享参数

  1. comment = Home Directories # 描述信息
  2. browseable = no # 指定共享信息是否在“网上邻居”中可见
  3. writable = yes # 定义是否可以执行写入操作,与“read only”相反

===============================================================

[printers] # 打印机共享参数

  1. comment = All Printers
  2. path = /var/spool/samba # 共享文件的实际路径(重要)。
  3. browseable = no
  4. guest ok = no # 是否所有人可见,等同于"public"参数。
  5. writable = no
  6. printable = yes

我们了解完Samba配置文件的参数后,开始共享目录测试

[root@lhh ~]# mkdir /aaa # 创建一个 aaa目录作为共享

[root@lhh ~]# vim /etc/samba/smb.conf # 编辑主配置文件,在底部编辑条目将aaa共享出去

-------------------- 省略部分输出信息 ------------------------

[aaa-test] # 共享名称,可以随意定义

  1. comment = aaa-test # 描述名称,可以随意定义
  2. path = /aaa # 共享的路径

===========================================

[root@lhh ~]# systemctl restart smb # 重启Samba服务

Windows访问测试

虽然可以访问samba-server的共享了,但是无访问里面的目录!

[root@lhh ~]# chcon -R -t samba_share_t /aaa/ # 修改上下文,就可以访问共享目录了

[root@lhh ~]# setsebool -P samba_enable_home_dirs on # 开启家目录的bool值

此时就可以访问里面的内容

此时我们想创建文件发现没权限!

检查思路:

1、检查配置文件

[root@lhh ~]# vim /etc/samba/smb.conf # 进入主配置文件

----------------------- 省略部分输出信息 ----------------------------------

[aaa-test] # 共享名称,可以随意定义

  1. comment = aaa-test # 描述名称,可以随意定义
  2. path = /aaa # 共享的路径
  3. writable = yes # 可写权限

=============================================

[root@lhh ~]# systemctl restart smb # 重启Samba服务

发现还是无法创建

2、检查文件系统权限

[root@lhh ~]# ls -ld /aaa/ # 查看共享目录权限,发现test1没有可写权限!

drwxr-xr-x. 2 root root 6 8月 13 20:16 /aaa/

[root@lhh ~]# chmod o+w /aaa/ # 给其他用户加上可写权限,因为test1是属于其他用户

此时两个用户都可以正常有写的权限

访问控制设置

一、自定义用户写的权限

[root@lhh ~]# vim /etc/samba/smb.conf # 进入主配置文件

---------------- 省略部分输出信息 ----------------------

[aaa-test] # 共享名称,可以随意定义

  1. comment = aaa-test # 描述名称,可以随意定义
  2. path = /aaa # 共享的路径
  3. writable = no # 可写权限
  4. write list = test1 # 指定某个用户可写,如需要多个用户格式为:test,test2..........

=========================================================

[root@lhh ~]# systemctl restart smb # 重启Samba服务

Windows使用的是:test1用户

Linux使用的是:test2用户

[root@mail ~]# yum install samba-client -y # 安装Samba客户端

[root@mail ~]# smbclient //192.168.115.201/aaa-test -U test2%123456

----------------------- 命令注释 ------------------------

//192.168.115.201/aaa-test:共享IP地址+ 共享名称

test2%123456:用户为:test2;密码为:123456

-------------------- 输出信息 ------------------

Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.1.1]

smb: > mkdir test2 # 创建目录

NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory \test2 # test2是没有权限无法创建

二、自定义用户浏览的权限

[root@lhh ~]# vim /etc/samba/smb.conf # 进入主配置文件

------------- 省略部分输出信息 ----------------------

[aaa-test] # 共享名称,可以随意定义

  1. comment = aaa-test # 描述名称,可以随意定义
  2. path = /aaa # 共享的路径
  3. writable = no # 可写权限
  4. write list = test1 # 指定某个用户可写
  5. browseable = no # 拒绝所有用户浏览共享目录,增加条目

==================================================

[root@lhh ~]# systemctl restart smb # 重启Samba服务

Linux客户端浏览不了共享目录

[root@mail ~]# smbclient -L //192.168.115.201/ -U test2%123456

--------------- 省略了输出信息 -------------------

  1. test2 Disk Home Directories

此时就无法浏览aaa-test目录,只能看见test2家目录

Windows客户端也浏览不了共享目录

接下来我们就自定义某个用户可以浏览共享目录

------------ 省略输出信息,跳到配置文件90行左右,添加条目 ------------

[global]

89 workgroup = WORKGROUP # 保存默认

90 server string = Samba Server Version %v # 保存默认

91 config file = /etc/samba/smb.conf.%U # 添加此条目

===================== 添加的条目简单注释 =============

哪个用户登录过来的时候,回去看/etc/samba/有没有 smb.conf.用户名 的配置文件

如果有,则使用自己后缀名的配置文件

如果没有,则使用 /etc/samba/smb.conf 主配置文件

[root@lhh ~]# cp /etc/samba/smb.conf /etc/samba/smb.conf.test1

将主配置文件复制一份作为test1的配置文件

[root@lhh ~]# vim /etc/samba/smb.conf.test1 # 编辑test1生成的配置文件

-------------------- 省略输出信息,直接跳到底端 ----------------------

[aaa-test]

  1. comment = aaa-test
  2. path = /aaa
  3. writable = no
  4. write list = test1
  5. browseable = yes # 原本是:no;修改为:yes

此时 Windows可以看得到共享目录

但是Linux客户端浏览不了共享目录,就实现了自定义浏览控制

[root@mail ~]# smbclient -L //192.168.115.201/ -U test2%123456

----------------- 省略了输出信息 -----------------------

  1. test2 Disk Home Directories

[root@lhh ~]# ls /etc/samba/

lmhosts smb.conf smb.conf.test1

------------------ 最后整体的解释 ----------------------

因为上面主配置文件添加了:config file = /etc/samba/smb.conf.%U

当test1访问Samba时,会使用自己后缀名的配置文件(smb.conf.test1)

test1 不会使用主配置文件,自己的配置文件时允许可以浏览的,所以就可以浏览共享目录

test2 没有自己的配置文件,只能使用主配置文件( smb.conf),但是主配置文件是拒绝所有用户浏览的,所有无法浏览

三、自定义IP地址访问

[root@lhh ~]# vim /etc/samba/smb.conf # 进入主配置文件

--------------- 省略部分输出信息 -----------------------

[aaa-test]

  1. comment = aaa-test
  2. path = /aaa
  3. writable = yes
  4. hosts allow = 192.168.x.x # 如果增加这条目,只允许某个IP地址访问

hosts deny = 192.168.x.x # 如果增加这条目,只拒绝某个IP地址访问

接下来我们只测试允许的条目,拒绝的同理

Windows-IP地址115.1,无法访问

Linux-IP地址为:115.202-成功访问

[root@mail ~]# smbclient //192.168.115.201/aaa-test -U test2%123456

---------------- 省略部分输出信息 --------------

111 D 0 Mon Aug 13 21:18:33 2018

222 D 0 Mon Aug 13 21:18:37 2018

Linux是可以正常访问的

到此已经完成Samba的基本配置和自定义控制了

实现的是Linux和Windows之间的一种共享--samba的更多相关文章

  1. 设置共享,实现Linux和Windows之间的共享

    设置共享,实现Linux和Windows之间的共享 前提: 安装虚拟机.可以参考:在Windows上安装虚拟机详细图文教程 安装Linux.可以参考:在VMware Workstation里的Linu ...

  2. Linux和windows之间通过scp复制文件

    Windows是不支持ssh协议的 需要安装WinSSHD 安装以及设置过程如下: BvSshServer(原名winsshd)官方下载页在这里:https://www.bitvise.com/dow ...

  3. linux与linux,linux与windows之间用SSH传输文件

    linux与linux,linux与windows之间用SSH传输文件linux与linux之间传送文件:scp file username@hostIP:文件地址    例: scp abc.txt ...

  4. 虚拟机中实现Linux与Windows之间的文件传输

    虚拟机中实现Linux与Windows之间的文件传输 标签: linux 2016年06月28日 11:17:37 2092人阅读 评论(0) 收藏 举报  分类: linux(2)    一.配置环 ...

  5. [转载]【转】教你如何实现linux和Windows之间的文件共享,samba的安

    原文地址:[转]教你如何实现linux和Windows之间的文件共享,samba的安装与配置作者:铅笔小蜡 本人在虚拟机下装fedora13,已经实现.1. 首先检查os是否安装好了samba. [r ...

  6. 在Ubuntu14.04下配置Samba 完成linux和windows之间的文件共享

    在Windows和Linux之间传递文件可以使用Samba服务.下面是安装步骤: 1. 安装Samba. sudo apt-get install samba 2. 修改配置文件 sudo gedit ...

  7. Linux和Windows之间传递文件

    由于自己的计算机的性能不足,代码只能在服务器上运行,要把代码搬到服务器上运行在没有root权限的情况下,本身就是一件不太容易的事情,我准备下次再写一下这方面的技巧.这篇博客,我只说比较一下几种在不同操 ...

  8. 在Linux和Windows之间的远程控制的实现

    主要开发工作用Linux,邮件和文档等主要在Windows,两者之间经常需要传输数据,两台主机都必须同时运行着. 但是,通常来说,它们需要同时准备两套显示器.鼠标和键盘,既占地方又不够方便. 远程控制 ...

  9. Linux和windows之间使用scp无密码传输文件,脚本自动化

    1.环境 windows2008 R2 和rhel 6.5 2.需求 通过在windows上指定计划任务,自动完成从Linux系统上备份文件到windows 3.工具 win: SSH Secure ...

随机推荐

  1. 【Ajax 4】Ajax、JavaScript和JQuery的联系和区别

    导读:在之前,就分别学习了Ajax.JavaScript和JQuery,然后对于这三者之间的关系,是一直云里雾里的.尤其是后来学到了Ajax,就更是不明白了.现在,就给总结总结. 一.基本概述 1.1 ...

  2. CSU 1605 数独

    题目大意: 9宫格每个位置都有对应的分数,填完数独后根据对应位置的分数相加之和求个最大值,不存在输出-1 说什么用位运算加速可以解决问题,但是对着标程还是T,最近学了dlx,发现这样解决数独快了很多 ...

  3. IPython的常见用法

    IPython :交互式的Python命令行 安装: pip install ipython 使用(命令行中启动): ipython # 与Python解释器的使用方法一致 IPython高级功能: ...

  4. 深入理解ajax系列第五篇

    前面的话 一般地,使用readystatechange事件探测HTTP请求的完成.XHR2规范草案定义了进度事件Progress Events规范,XMLHttpRequest对象在请求的不同阶段触发 ...

  5. msp430项目编程30

    msp430中项目---电压检测系统 1.SVS工作原理 2.电路工作原理 3.代码(显示部分) 4.代码(功能实现) 5.项目总结

  6. CSS介绍&选择器&选择器优先级

    CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 '''se ...

  7. poj1273最大流初破

    第一次网络流,学了一天的DINIC算法(个人比较愚),切了这个入门题,开始的时候怎么调连 测试都过不了,后来发现犯了一个低级错误!把判断条件放在for(:)!里面和放在for下面大大 不同啊!里面的话 ...

  8. MongoDB学习day07--mongoose入门,数据库增删改查,默认参数,模块化

    一.mongoose介绍 Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具. Mongoose 是 NodeJS 的驱动, 不能作为其他语言的驱动. M ...

  9. 移动端CSS小结

    Meta 标签 <meta name="viewport"  content="width=device-width, user-scalable=no, init ...

  10. System.Diagnostics.Debug.WriteLine 在OutPut中无输出

    TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);              Debug ...