Samba详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Samba详解相关的知识,希望对你有一定的参考价值。
一、Samba简介
二、安装
三、smb.conf详解
四、实验
五、其他
一、Samba简介
实现Windows和Linux之间互相共享资源
SMB:service message block:服务信息块,SMB协议在局域网上用于服务器文件访问和打印的协议
cifs:common internet filesystem//CIFS是开放的SMB协议版本,由microsoft提供
SMB的windows实现:CIFS
SMB的linux实现:Samba
windows《========》linux //之间互相访问
Linux为samba server,
win:使用cifs作为客户端访问
linux:作为samba client访问
Linux client-------[samba/cifs]-----------[Linux/windows]-server
Windows client------[cifs/samba]------------[Linux/windows]-server
功能:
1.文件系统共享
2.打印机共享
3.NetBios协议,linux主机拥有一个windows名称,共享在windows的网上邻居中 //让linux主机变成windows主机
实现方案:
peer/peer/:点到点,工作站模式
domain mode:域模式
二、安装
1.yum安装
yum info smaba-client //linux可以访问windows的共享
yum -y install samba
/usr/sbin/nmbd //名称服务,NetBIOS,实现windows访问linux
/usr/sbin/smbd //文件共享,提供smb/cifs服务
/etc/pam.d/samba //samba可基于pam认证
/usr/lib/systemd/system/nmb.service
/usr/lib/systemd/system/smb.servic
rpm -ql samba-common //提供配置文件
/etc/samba/smb.conf
/etc/samba/lmhosts //主机映射NetBIOS
yum -y install samba-client
smbclient:交互式的命令行客户端
mount -t cifs
smb: 139,445/tcp
nmb: 137,138/udp
2.samba简单配置:smb.conf
两类配置段
全局配置:
[global]
每共享的专用配置:
[共享资源的共享名称]
directive = value
[home] //用户的家目录
[printers] //打印机
实现:
[samba]
comment = ftp root
path = /tmp/samba
browseable = yes
guest ok = yes
writable = no
testparm //samba-common-tools 提供的语法测试工具
systemctl reload smb
访问smaba共享
Linux:
smbclient:交互式
mount -t cifs 挂载
windows:
浏览器: \\Host or IP\shared_source_name
win+e:空白处[右键]->添加一个网络位置[\\192.168.2.112\samba]
windows:
删除网络位置
上面-->工具--->断开网络驱动器即可
smbclient //192.168.4.118/samba //回车即可,匿名访问
smbclient -L 192.168.4.118 //查看目标主机共享资源,可以匿名查看,回车即可
Server Comment --------- ------- WOLF Samba 4.4.4 //WOLF是主机名NETBIOS的主机名 Workgroup Master --------- ------- MYGROUP MT SAMBA WOLF
三、smb.conf详解
[pzk] # 自定义共享名 comment = Home Directories # 描述符,是给系统管理员看的 path = /tmp # 共享的路径 public = yes # 是否公开,也就是是否能在网上邻居看到该共享 browseable = yes # 共享的目录是否让所有人可见 writable = yes # 是否可写 guest ok = no # 是否拒绝匿名访问,仅当安全级别为 share 时才生效 workgroup = WORKGROUP # 工作组,要设置成跟 Windows 的工作组一致 server string = Samba Server Version %v # 其他 Linux 主机查看共享时的提示符 netbios name = MYSERVER # 用于在 Windows 网上邻居上显示的主机名 hosts allow = 127. 192.168.12. 192.168.13. EXCEPT 192.168.13.13 # 指定允许访问 samba 服务器的主机 security = share # 定义安全级别;取值为{share,user,domain} share:匿名共享 user:使用samba服务自我管理的账号和密码进行用户认证;用户必须是OS用户,但密码为samab密码 domain:使用DC进行用户认证;后面的--Domain Controler Options--将会生效 log file = /var/log/samba/log.%m # 定义日志文件,每个访问的主机会产生独立的日志文件,%m 是客户端主机名 max log size = 50 # 定义单个日志的最大容量(KB) passdb backend = tdbsam # Samba 用户的存储方式,smbpasswd 表示明文存储,tdbsam 表示密文存储 deadtime = 10 # 客户端在10分钟内没有打开任何 Samba 资源,服务器将自动关闭会话,在大量的并发访问环境中,这样的设置可以提高服务器性能 display charset = UTF8 # 设置显示的字符集 max connections = 0 # 设置最大连接数,0表示无限制,如果超过最大连接数则拒绝连接 guest account = nobody # 设置匿名账户为nobody load printers = yes # 是否在启动 Samba 时就共享打印机 cups options = raw # 设置打印机使用的方式 valid users = user1 user2 user3 # 指定哪些用户可以访问,如果不指定则所有用户都可访问 invalid users = user1 user2 # 指定哪些用户不可以访问 create mask = 0775 # 客户端上传文件的默认权限 directory mask = 0775 # 客户端创建目录的默认权限 write list = user1 user2 user3 # 设置可对文件进行写操作的用户 admin users = user1 # 设置共享目录的管理员,具有完全权限 unix charset = UTF8 #当前Linux主机所用的字符集 dos charset = #windows端的字符集;gbk,gb2312等 passdb backend = tdbsam //密码文件,tdbsam是一种非常安全的文件格式 cups options = raw //cups:通用unix打印机选项
共享配置:
[共享名称]:此即为共享的服务名 comment:注释信息 path:此共享对应本地fs路径 browseable:是否可浏览,是否可被所有用户看到 writable:是否可写// read only: //谁在后面,谁最终生效 writelist //可写用户列表或组列表 用户名 @组名 +组名 guest ok //是否允许来宾账号访问 public //是否是公开的服务 //public = no 或者guest ok = no就关闭了来宾账号
可用的宏列表:
%m :客户端主机的NetBIOS名称 %M :客户端的internet主机名,即HOSTNAME %H :当前用户的家目录 %U:当前用户的用户名 %g:当前用户所属的组名 %h:当前SAMBA主机的hostname %I:client端的ip %T:当前的日期时间
四、实验
基于用户做认证
[home] //定义了用户是否能够访问自己的家目录
browseable = no //每一个用户的家目录,不能被别人浏览
密码生成工具:smbpasswd,pdbedit
man smbpasswd
-a //添加os用户为samba用户
-e-d //enable/disable该用户
-n //set-no-password,不设置密码
-x //删除该用户
smbpasswd -a wolf //添加该用户
smbclient //192.168.4.118/samba -U wolf //
smbclient -L 192.168.4.118 -U wolf //browseable = no 在这里是看不到的
pdbedit命令:
类似于smbpasswd,管理本地用户成为samba用户
-L //列出samba用
-a //添加samba用户
-u //指定用户名
-x :删除该用户
-r 修改用户的相关信息
pdbedit -a -u wolf //添加wolf为samba用户
smbstatus:显示连接状态信息
-b 简要信息
-v 详细信息
实验一:权限测试
[tt] comment = Test for test path = /tmp/test browseable = Yes guest ok = Yes writable = Yes //定义所有用户可写,和write list只需一项就可以了 write list = @test //定义哪些用户可写 注意:writable和write list不应该同时写
groupadd test
testparm
usermod -a -G test wolf //添加该用户到test组
client:
smbclinet //192.168.4.118/tt -U wolf //测试
get //可以下载文件,但是不能上传
put //提示:NT_STATUS_ACCESS_DENIED opening remote file \resolv.conf
server:
setfacl -m g:test:rwx /tmp/test/
客户端再次put就可以实现了
windows访问:
\\192.168.4.118\tt //即可实现连接
mount -t cifs //192.168.4.118/tt -o username=wolf /usr/tt
mount -t cifs -o username=wolf,password=testwolf //192.168.4.118/tt /usr/smb/
实验二:权限测试
创建一个共享data,路径为/ftp/data
要求仅centos和fedora能上传文件
此路径队其他用户不可见
s:
mkdir -pv /ftp/data
vim /etc/samba/smb.conf
[data] comment = DaTA path = /ftp/data browseable = Yes write list = centos,gento public = no //禁止来宾账户访问 smbclient //192.168.4.118/data不输入账户名和密码将不能登录
testparm
useradd centos
echo centos | passwd --stdin centos
useradd fedora
echo fedora | passwd --stdin fedora
setfacl -m u:centos:rwx /ftp/data/
setfacl -m u:fedora:rwx /ftp/data/
systemctl restart smb
C:
smbclient -L 192.16 8.4.118
smbclient //192.168.4.118/data -U fedora //可以上传
问题1:挂载mount 失败
mount: block device //192.168.4.118/tt is write-protected, mounting r
mount: cannot mount block device //192.168.4.118/tt read-only
mount -t cifs -o username=wolf,password=testwolf //192.168.4.118/tt /usr/smb/
实验三:windows的共享设置
右键该目录:共享-->共享[添加用户--读取/写入]
smbclient -L 192.168.4.107
mount -t cifs -o username=wolf,passwd=wolf //192.168.4.107/test /usr/win/
注意:NT_STATUS_LOGON_FAILURE
原因:没有敲回车,使用匿名登录
或者:samba和系统中同时有该用户,没有把该用户加入到smaba账户
最终权限取决于:共享权限+fs权限
五、其他
winbind:在办公环境中一般windows AD域占据霸主地位,针对生产环境的linux集群机器才会选择LDAP,不过有时候在办公环境中也混杂了linux机器,为了规范管理,需要把linux机器加入window是 AD中的。
linux加入windows AD中方便操作的有两种方案(分为centos/ubuntu两种情况)。
1 likewise-open
在debian/ubuntu中使用,可以使用apt安装,配置方便,但是由于likewise的公司被收购,likewise的相关产品不再是开源产品,更杯具的是网上连以前的源码包都找不到,还好ubuntu中目前还是可以通过apt安装的。
2 winbind+samba
在centos上采用winbind+samba方案。
针对其他的命令请自行了解
[[email protected] ~]# rpm -ql samba-client /usr/bin/findsmb /usr/bin/nmblookup /usr/bin/rpcclient /usr/bin/sharesec /usr/bin/smbcacls /usr/bin/smbclient /usr/bin/smbget /usr/bin/smbprint /usr/bin/smbspool /usr/bin/smbta-util /usr/bin/smbtar /usr/bin/smbtree [[email protected] html]# rpm -ql samba-common |egrep -v "share|lib|log" /etc/samba/lmhosts /etc/samba/smb.conf /etc/sysconfig/samba /usr/bin/net /usr/bin/pdbedit /usr/bin/profiles /usr/bin/smbcontrol /usr/bin/smbcquotas /usr/bin/smbpasswd /usr/bin/testparm [[email protected] html]# rpm -ql samba |egrep -v "share|log|.so" /etc/openldap/schema/samba.schema /etc/pam.d/samba /etc/samba/smbusers /usr/bin/mksmbpasswd.sh /usr/bin/smbstatus /usr/sbin/nmbd /usr/sbin/smbd
以上是关于Samba详解的主要内容,如果未能解决你的问题,请参考以下文章