大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
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 就会将相关的软件包都暗装好
语法检查
testparm 直接输入即可
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组管理员,所属组设置为A组,然后将该文件夹的权限设置为770(注意这里所属组也要有写权限,但是其他人就没有必要有任何的权限了),然后为该文件夹添加粘滞位,使得每个用户自己创建的东西只有自己才能删除。
我们现在来总体看一些该目录的权限:770的权限+粘滞位
1、首先770的权限保证了管理员和组内成员的读写权限,同时还拒绝了其他用户的访问
2、粘滞位保证了组内成员只能管理自己的内容,而不能删除该目录中的其他内容
3、如果将管理员设置为拥有者且拥有RWX权限,而且该目录还有粘滞位权限,那么拥有者可以无视该粘滞位权限,即其他用户创建的内容,他都可以进行任意的操作。
不知道为什么如果用windows去访问samba服务器,那么使用用户登录之后,再次访问默认就把你登录成之前的那个用户了,很烦每次都要重启。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194185.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...