欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Linux的samba服务

时间:2023-07-13
Centos7 samba的简介:

我们都知道windows上面有一个很方便的文件共享的功能,samba服务主要就是实现了linux平台上的文件共享功能,使得linux平台也能够和windows进行文件共享,但是使用linux搭建的文件共享服务器对于windows来说和平常windows和windows之间进行文件共享没有什么区别。

因为samba服务与windows的文件共享差不多,所以它的作用范围和windows的文件共享一样,只能在其所在的局域网生效。

samba服务有两个服务,但是起主要作用的还是smbd服务,nmbd的主要工作就是解析其他客户机发送的计算机名到ip地址的解析。

 

samba服务的相关软件包

samba-common :使用的工具,语法检测工具
samba-client :samba的客户端
samba-lib : 相关的库文件
samba :主要的程序文件
samba-swat :samba的web界面

在centos7中直接yum install samba -y 就会将相关的软件包都暗装好

samba的主要配置文件

1、/etc/samba/smb.conf :主要的配置文件,所有samba的相关服务几乎都是在这里配置

2、/etc/samba/lmhosts :这个配置文件记录着当前局域网的主机名和对应ip的关系

3、/var/lib/samba/private下的passdb.tdb和secrets.tdb是samba文件的相关密码文件

主配置文件的相关参数 PS!!!:如果参数是单个用户,那么直接输入用户名即可,如果参数是用户组,那么就需要在用户组的前面输入@,比如@用户组1,这样才会识别成用户组。

主配置文件分为两个部分,第一部分是全局配置,对全部的共享目录都生效。第二部分是共享配置,主要是针对每个共享内容,共享配置这块内容需要单独区分出来去配置。

(1)全局配置项与相关参数


workgroup=WORKGROUP :工作组
server string = “xxxxx” :服务器的备注
netbios name = “xxx” :主机名
interfaces = lo /eth0 /192.168.12.2/24 /192.168.13.2/24 :可以写网卡或者地址
hosts allow =xxx :允许的IP地址
max connection = 0 : 最大连接数,0表示不限制
deadtime = 0 :表示最大空闲时间
log file=/var/log/samba/log.%m :日志文件的位置,其中%m是用户名
每个用户一个日志文件
max log size =50 :日志文件的最大容量为50kb
security =user :如果要设置为share模式,在这条下面输入

map to guest =Bad User

passdb backend = tdbsam
说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam: 该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库 可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的 参数很多,我们列出几个主要的。
  pdbedit –a username:新建Samba账户。
  pdbedit –x username:删除Samba账户。
  pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
  pdbedit –Lv:列出Samba用户列表的详细信息。
  pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
  pdbedit –c “[]” –u username:恢复该Samba用户的账号。
3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”

上面几种的验证方式我没有认真去研究,但是默认使用smbpasswd -a添加用户即可完成使用相关用户登录。

encrypt passwords =yes / no :是否开启密码加密保存,默认开启
smb passwd file =/etc/samba/smbpasswd : 定义samba用户的密码文件路径
username map =/etc/samba/smbusers :定义用户映射文件路径
guest account=nobody :设置guest的用户名

(2)共享文件的配置项与相关参数


comment ="xxxxxx" :被共享文件的相关备注
path =共享目录路径 :定义共享目录
browseable=yes / no :是否可以看到,看不到依然可以指定具体路径并去访问
writable = yes /no :该资源是否可写
available =yes/no :该资源是否有用 
admin users= 该共享的管理者 :定义该共享目录的管理员,可以随便操作该共享目录
valid users =允许访问的人  :定义哪些用户是合法的且可以访问
invalid users =不允许访问的人   :定义哪些用户是非法不能访问
write list =允许写入该共享的用户   :定义哪些用户对该共享目录拥有写权限
public =yes /no :是否允许匿名登录  
guest ok =on   :是否预先匿名登录
create mask = 0775                         # 客户端上传文件的默认权限
directory mask = 0775                      # 客户端创建目录的默认权限
read list = @kevin     :定义哪些用户对该共享目录拥有读权限

如何使用用户登录

如果我们想要使用用户登录,先添加一个系统用户,然后再使用“smbpasswd -a 用户名 ” 添加刚刚创建的系统用户,就能够使用这个用户去登录了。

smbpasswd 的用法:

-a :添加一个用户

-d:冻结用户

-e:解冻用户

-x:删除用户

-s:非交互方式创建用户,比如echo 111 | smbpasswd -a xxx

用户映射文件

如果只是单纯的将系统用户作为samba用户,那么别人如果拿到samba用户的话,依然可以将这个用户去登录服务器。所以就有了用户映射文件。

实现方式:

1、usernamed map =/etc/samba/smbusers :定义用户映射文件的位置

2、在映射文件内部添加内容:

samba用户=虚拟用户

比如我们创建了一个samba用户AA,然后我想使用另外一个虚拟用户去登录这个samba用户,那么就可以在文件内部输入:AA=BB CC ,这样的话我们就可以使用BB或者CC去登录samba服务器,但是本质上我们使用的还是AA用户。

定义了一个samba共享目录,如果没有用配置项明确指出,那么它的默认权限是什么? 

我们看这个目录,关于共享配置项只定义了一个共享目录,当然全局配置已经配置好了,我一般使用的习惯还是将cmd.conf.example拿来复制然后进行一些修改,然后作为主要的配置文件。

针对上面这个例子,如果用配置项和参数来表示的话应该是下面这样的:

[test]

path = /test

borwseable = yes

read only = yes

guest ok = no

valid users = 所有人

如果我们对共享文件赋予用户写入的权限,那么写入的文件的权限、所有者和所属组又会是什么呢?

默认下相所有者和所属组和当前登录的用户的所有者和所属组相同,同时权限是744.

但是如果当前用户被设置为当前共享目录的管理员,那么创建出来后的内容的所有者是root,所属者和该用户的所属组相同。

配置项available 和 browseable的区别

如果一个共享文件的available被设置为no,那么这个共享文件就相当于不能用了。

如果一个共享文件的browseable被设置为no,那么这个资源只是不可见,只要输入完整的路径依然能够访问。

系统权限对文件共享的影响

我们访问共享内容,都是以一个系统用户的身份去访问的,这个系统用户对这个共享内容来说要么是拥有者,同组的成员,或者是其他,所以去访问这些共享内容的时候,限制其访问的权限的组成仅只有rwx这三个的排列组合。

共享目录的默认权限是RX,我们做权限的修改只能在RX之上,而不能在之下,即共享目录的权限要么是RX,要么是RWX。如果改为其他的会有如下这些影响:

WX:该共享目录无法访问

RW:该共享目录无法访问

R:该共享目录无法访问

X:该共享目录无法访问

W:该共享目录无法访问

将用户设置为管理员有什么用?

个人认为如果只是在samba中将某个用户设置为管理员,只是代表在samba这边放行了该用户的相关限制。但是在系统权限上并没有放开,我们还是需要在系统权限上面下功夫。

来个例子:

我们来看这样一个例子:假如我们需要一个共享目录,然后将其共享出去,只有A组内部的人才能访问这个共享文件夹,A组有一个管理员,它对这个共享目录有完全控制权限,普通用户能够读取共享文件夹的内容,而且能创建自己和删除自己的东西。那这个东西应该如何实现呢?

很容易看出来,如果我们仅仅使用samba内部的权限限制项是不能完成这个需求的,所以我们要使用系统权限配置。

我们将这个共享文件夹的拥有者设置为管理员,所属组设置为A组,然后将该文件夹的权限设置为770(注意这里所属组也要有写权限,但是其他人就没有必要有任何的权限了),然后为该文件夹添加粘滞位,使得每个用户自己创建的东西只有自己才能删除。

我们现在来总体看一些该目录的权限:770的权限+粘滞位

1、首先770的权限保证了管理员和组内成员的读写权限,同时还拒绝了其他用户的访问

2、粘滞位保证了组内成员只能管理自己的内容,而不能删除该目录中的其他内容

3、如果将管理员设置为拥有者且拥有RWX权限,而且该目录还有粘滞位权限,那么拥有者可以无视该粘滞位权限,即其他用户创建的内容,他都可以进行任意的操作。

不知道为什么如果用windows去访问samba服务器,那么使用用户登录之后,再次访问默认就把你登录成之前的那个用户了,很烦每次都要重启。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。