一、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 //查看目标主机共享资源,可以匿名查看,回车即可
1
2
3
4
5
6
7
|
Server Comment
--------- -------
WOLF Samba 4.4.4
//WOLF
是主机名NETBIOS的主机名
Workgroup Master
--------- -------
MYGROUP MT
SAMBA WOLF
|
三、smb.conf详解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
[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打印机选项
|
共享配置:
1
2
3
4
5
6
7
8
9
10
11
12
|
[共享名称]:此即为共享的服务名
comment:注释信息
path:此共享对应本地fs路径
browseable:是否可浏览,是否可被所有用户看到
writable:是否可写
//
read
only:
//
谁在后面,谁最终生效
writelist
//
可写用户列表或组列表
用户名
@组名
+组名
guest ok
//
是否允许来宾账号访问
public
//
是否是公开的服务
//public
= no 或者guest ok = no就关闭了来宾账号
|
可用的宏列表:
1
2
3
4
5
6
7
8
|
%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 详细信息
实验一:权限测试
1
2
3
4
5
6
7
8
|
[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
1
2
3
4
5
6
|
[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方案。
针对其他的命令请自行了解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
[root@wolf ~]
# 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
[root@wolf 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
[root@wolf 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
|