smaba(跨平台文件共享)
文章目录
samba (跨平台文件共享)
介绍
samba简单理解其实就是linux和windows的共享
主要涉及到smb和nmb服务(二选一使用)
smb tcp 139/445 端口 (一般新系统只需要用smb即可)
nmb udp 137/138 端口(主要是用于兼容windows xp之类较老的系统)
服务端配置
这里配置的是smb:
-
如果开启防火墙的,先吧samba服务开放:firewall-cmd --add-service=samba , firewall-cmd --add-service=samba --permanent
-
安装samba服务:yum -y install samba ,配置文件为/etc/samba/下的 smb.conf
-
查看所有未注释的配置信息:grep -o ‘[#|^;].*’ smb.conf
其中global -全局设置 -
启动smb服务并设置开机自启:systemctl resart smb , systemctl enable smb
并且smb默认端口是对所有地址开放的:netstat -ntulp | grep smb
文件各功能解释即需要修改的地方:
- 编辑配置文件:vi /etc/samba/smb.conf
- 把workgroup改为和需要通信的windows组一样:windows查看组的方法:右键计算机-属性:
修改后:
- 如下图:interfaces:网络接口,比如,现在有2张网卡,eth0和eth1,默认2张都使用,如果现在只想用eht0这张网卡,则把注释取消,ip替换为任意即可
hosts allow :默认是全部ip开放的,如果需要指定ip开放,取消注释,输入需指定ip即可
- 日志存放路径
日志存放于:/var/log/samba/log.%m,第二行就是说 当日志大小达到50KB的时候,会自动归档(日志名称后面追加日期)保存,然后当前日志就会被清空。
- 登陆时到当前服务器时的安全验证
配置为user时如下图,打开命令面板输入 \ip 即可:
登陆成功后:
- 家目录共享:
- 修改玩配置文件需要重启smb服务:systemctl restart smb
创建smb用户并使用
- 创建samba用户:当我们想创建samba用户的时候,这个samba用户必须是本地用户即出现在/etc/passwd里。
- 安装smbpasswd命令:先查看包名: yum whatprovides */smbpasswd ,然后 yum -y install 包名
- 添加用户到smbpasswd中:smbpasswd -a 用户(必须本地存在的用户,可id 用户查看是否存在),密码自定义,也可以和用户密码一致。
禁用用户:smbpasswd -d 用户名
启用已禁用的用户:smbpasswd -e 用户名
删除用户:smbpasswd -x 用户名
重置密码:smbpasswd 用户名
- 添加系统中不存的用户时报错
如果创建了一系列的smb用户,为了安全性,这些用户他们的shell设置为:/sbin/nologin(就是说不允许 ssh登陆,仅允许smb方式登陆) - 添加权限让通过smb登陆的用户能够访问家目录,如果不添加权限,则登陆成功后是没有权限访问家目录的:setsebool -P samba_enable_home_dirs on
如果不添加权限访问时:
添加权限以后访问:
- 清除缓存,如果我们使用windows访问smb家目录以后,windows存在缓存,可以清除缓存:打开cmd控制面板后输入:nct use * /del (清除的作用,如果不清除缓存,可能无法切换到其他smb用户)
共享文件夹(目录)设置
- 创建格式
[***] -smb登陆后显示的目录
comment-注释(可有可无)
path-需共享的文件夹(目录)(必须存在)
writable-是否允许写入文件
保存后重启smb服务:systemctl restart smb - 添加上下文到 共享的目录:chcon -R -t samba_share_t /456/
- 添加权限:chmod o+w 共享路径,如:chmod o+w /456
- windows中使用smb登陆便可看到
如果不添加上下文则没有权限:
添加上下文后可正常访问:
- 无法(没有权限)创建文件
配置完毕没有权限排查思路
当你搭建了一个服务器,然后想从客户端网这个服务器里写东西,写不进去,排查思路:1、配置文件 2、文件的系统权限 3、selinux
注:1和2必须满足,一般情况满足1和2便正常的。
检查配置文件:是否有 writable=yes
文件的系统权限:因为共享文件属于other权限,默认是没有w权限的,所以共享的文件需要o+w:chmod o+w 共享路径
仅允许部分用户拥有写权限
配置文件设置仅允许部分用户拥有写权限:
如果要允许组,则在用户前面加 + ,如 +tom,+bob
命令设置仅允许部分用户拥有写权限
配置文件中:writable=yes
把o权限关闭:chmod o-w 文件名 , 如:chmod o-w /456
然后指定用户开启权限:setfacl -m u:允许写如用户名:权限 文件 ,如:setfacl -m u:tom:rwx /456
关闭指定用户开启权限:setfacl -x u:用户名 文件名 ,如:setfacl -x u:tom /456
隐藏(不可见)共享文件(目录)设置
意思是,共享的文件,在windows上并看不到目录
- 编辑配置文件:vi /etc/samba/smb.conf
browseable=no (这样别人就看不到设置的共享目录了)
重启服务:systemctl restart smb
再用windows登陆后变看不到xxyy了:
- 设置部门用户不可见共享文件
这个有点复杂,首先在smb.conf文件中91行左右加入一行:config file = /etc/samba/smb.con.%U ,%U是一个变量,整行意思就是,如果有/etc/samba/smb.con.tom(%U替换为任意用户时,就调用该配置文件)
所以,现在cd /etc/samba,把smb.conf配置文件cp 一份,以tom为例:cp smb.conf smb.conf.tom
注意:现在vi smb.conf.tom ,在该文件中,browseable=yes
在原配置文件中:vi smb.conf, browseable=no
重启服务:systemctl restart smb
这时候 使用tom用户时,实际调用的就是smb.conf.tom配置文件的信息,而.tom中browseable=yes,所以 tom用户可以见到共享文件,其他用户见不到共享文件。
当然,此方法不限于browseable,也可以单独配置smb.conf中的任意规则,也就是 ,可以不同用户定义不同规则。
设置允许/拒绝访问ip地址段
允许:
出现在 hosts allow中的ip都是允许访问的ip。
- 允许单个ip :hosts allow = ip ,如hosts allow = 192.2168.26.200
- 允许ip段:hosts allow = ip/掩码 ,如:hosts allow = 192.168.26.0/24 意思是 仅允许192.168.26段的所有ip访问:
拒绝:
出现在hosts deny 中的ip都是不允许访问的ip。
- 拒绝单个ip: hosts deny = ip ,如:hostsdeny = 192.168.26.1
- 拒绝ip段:hosts allow = ip/掩码 ,如:hosts allow = 192.168.26.0/24
使用samba
windows上使用
打开命令面板输入 \ip 即可:
登陆成功后:
linux上使用
- 访问:
smbclient //ip/共享目录 -U 用户%密码 ,如:smbclient //192.168.26.100/xxyy -U tom%123123 (192.168.26.100是服务端)
quit退出。 - 挂载:
指定samba用户挂载:mount -o username=samba用户名,password=samba用户密码 //ip/分享目录 挂载路径 , 如,挂载到bob用户:mount -o username=bob,password=123123 //192.168.26.100/xxyy /smb/
multiuser的配置
也称之为多用户挂载
我们吧服务器上的用户 理解为 “ 马甲” , 客户端挂载了samba的共享目录,此时是没有任何权限的,让客户端用户披上 不同的“马甲” 则可获取到不同的权限。
使用
先挂载,后获取用户权限即可。
- 指定samba用户挂载:mount -o username=samba用户名,password=samba密码 multiuser,sec=ntlmssp //ip/分享目录 挂载路径 , 如,挂载到bob用户:mount -o username=bob,password=123123,multiuser,sec=ntlmssp //192.168.26.100/xxyy /smb/
注:如果不知道ntlmssp是什么意思:man mount.cifs查看
- 获取用户权限:cifscreds add 服务端ip -u 用户名,如获取bob用户的权限: cifscreds add 192.168.26.100 -u bob
如果需要永久挂载:vi /etc/fstab