简介
SMB(Server Message Block)服务器消息块,IBM发布,最早是DOS网络文件共享协议。
Cifs(Common internet file system),微软基于SMB发布。
NFS不支持windows平台。
samba能在任何支持SMB协议的主机之间共享文件的一种实现,包括windows。由服务端和客户端组成。
功能
共享文件和打印,实现在线编辑;
实现登录samba用户的身份认证
可以进行NetBIOS名称解析
外围设备共享
计算机网络管理模式
工作组workgroup:计算机对等关系,账号信息各自管理
域domain:C/S架构,账号信息集中管理,DC,AD
详解
相关包
Samba 提供smb服务
Samba-client 客户端软件
samba-common 通用软件
cifs-utils smb客户端工具
samba-winbind 和AD有关
相关服务进程
smbd提供smb(cifs)服务;监听端口TCP 139、445
nmbd提供NetBIOS名称解析;监听端口UDP 137、138
主配置文件
/etc/samba/smb.conf 帮助文档:man smb.conf
/etc/samba/smb.conf.example 配置文件示例
其中
[global] 全局设置
[homes] 用户的家目录共享
[printers] 定义打印机资源和服务
[sharename] 自定义的共享目录
workgroup 指定工作组名称
server string 主机注释信息
netbios name 指定NetBIOS名
interfaces 指定服务侦听接口和IP
host allow 可用逗号 , 和空格 或tab分隔,默认允许所有主机访问,也可在每个共享独立配置,在[global]设置,将应用所有共享配置,如:hosts allow = 172.25. 允许以172.25. 开头的IP访问;host allow = .example.com 允许以 .example.com结尾的主机名访问
host deny 拒绝指定主机访问
config file=/etc/samba/conf.d/%U 用户独立的配置文件
Log file=/var/log/samba/log.%m 不同客户机采用不同日志
max log size=50 日志文件达到50K,将轮询rotate,单位KB
Security三种认证方式:
- share:匿名(Centos7不再支持)
- user:samba用户(采用Linux用户,samba独立口令)
- domain:使用DC(Domain Controller)认证
passdb backend=tdbsam 密码数据库格式
此外还有变量可用:
%m | 客户端主机的NetBIOS名 |
%M | 客户端主机的FQDN |
%H | 当前用户家目录路径 |
%U | 当前用户名 |
%g | 当前用户所属组 |
%h | samba服务器主机名 |
%L | samba服务器的NetBIOS名 |
%I | 客户端主机IP |
%T | 当前日期和时间 |
%S | 可登录用户名 |
自定义目录共享
每个共享目录应该有独立的[]部分
- [共享名称] 远程网络看到的共享名称
- comment 注释信息
- path 所共享的目录路径
- public 能否被guest访问的共享,默认no
- browsable 是否允许所有用户浏览此共享目录,默认yes
- writeable=yes 是否被所有用户读写,默认no
- read only=no 和writeable=yes等价,如与其冲突,则放在后面的生效,默认只读
- write list 三种形式:用户,@组名,+组名;用逗号 , 分隔;如writeable=no,列表中的用户或组可读写,不在列表中的只读
- valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔
语法检查
testparm [-v] [/etc/samba/smb.conf]
客户端工具
smbclient,mount.cifs
管理samba用户
前提:Linux系统中存在该用户,才能在samba中添加用户
添加用户 smbpasswd -a username
修改用户密码 smbpasswd username
删除用户和密码 smbpasswd -x username
查看用户列表 pdbedit -L -v
查看samba服务器状态 smbstatus
实验
基于特定用户和组的共享
smb服务器端(Centos8):192.168.29.149 客户端(Centos8):192.168.29.141
共享目录:/smbshare/aaa
zhangsan:隶属于smb组,允许访问共享目录/smbshare/aaa,不可登陆系统
lisi:不属于smb组,不允许访问共享目录,不可登陆系统
#SMB服务器
#安装
[root@server ~]#yum -y install samba
#创建组smb;创建用户zhangsan,隶属于smb组。创建用户lisi,不属于smb组,都不可登陆系统
[root@server ~]#groupadd smb
# -s 指定用户的shell -G 附加组 -M 不建立用户家目录
[root@server ~]#useradd zhangsan -s /sbin/nologin -G smb -M
[root@server ~]#useradd lisi -s /sbin/nologin -M
#创建共享目录/smbshare/aaa,更改其所属目录为smb
[root@server ~]#mkdir /smbshare/aaa
[root@server ~]#chgrp smb /smbshare/aaa/
[root@server ~]#chmod 2755 /smbshare/aaa/
[root@server ~]#touch /smbshare/aaa/123
#创建samba用户
[root@server ~]#smbpasswd -a zhangsan
New SMB password:
Retype new SMB password:
Added user zhangsan.
[root@server ~]#smbpasswd -a lisi
New SMB password:
Retype new SMB password:
Added user lisi.
#编辑smb服务器端配置文件
[root@server ~]#vim /etc/samba/smb.conf
...
[share]
comment = This is ceshi
path = /smbshare/aaa
valid users = @smb
writeable = no
browseable = no
...
#重启smb服务
[root@server ~]#systemctl restart smb.service
#客户端
#安装
[root@client ~]#yum -y install samba-client cifs-utils
[root@client ~]#touch 456
#访问smb共享目录 访问共享目录使用share,而不是实际目录/smbshare/aaa
[root@client ~]#smbclient //192.168.29.149/share -U zhangsan
Enter SAMBA\zhangsan's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu May 18 16:39:13 2023
.. D 0 Thu May 18 16:26:47 2023
123 N 0 Thu May 18 16:39:13 2023
17811456 blocks of size 1024. 15934416 blocks available
smb: \> get 123 #使用get下载
getting file \123 of size 0 as 123 (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)
smb: \> put 456 #使用put上传
NT_STATUS_ACCESS_DENIED opening remote file \456
[root@client ~]#smbclient //192.168.29.149/share -U lisi
Enter SAMBA\lisi's password:
tree connect failed: NT_STATUS_ACCESS_DENIED
如上,当smbclient使用zhangsan进入共享目录后,put /456时提示“NT_STATUS_ACCESS_DENIED opening remote file \456“拒绝访问。
解决
#修改配置文件
[root@server ~]#vim /etc/samba/smb.conf
...
[share]
comment = This is ceshi
path = /smbshare/aaa
valid users = @smb
writeable = no
browseable = no
#给予zhangsan读写权限;当writeable=no时,write list中列出的有读写权限,未列出的只有读
write list = zhangsan
...
#给予smb组对共享目录的写权限
[root@client ~]#chmod 2775 /smbshare/aaa/
#再次访问,put测试
[root@client ~]#smbclient //192.168.29.149/share -U zhangsan
Enter SAMBA\zhangsan's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu May 18 21:00:06 2023
.. D 0 Thu May 18 16:26:47 2023
123 N 0 Thu May 18 17:43:35 2023
17811456 blocks of size 1024. 15933200 blocks available
smb: \> put 456
putting file 456 as \456 (0.0 kb/s) (average 0.0 kb/s)
挂载cifs文件系统
#手动挂载
[root@client ~]#mkdir /mnt/smbzhangsan
[root@client ~]#mount -t cifs -o user=zhangsan,password=admin //192.168.29.149/share /mnt/smbzhangsan
[root@client ~]#df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 379M 0 379M 0% /dev
tmpfs tmpfs 396M 0 396M 0% /dev/shm
tmpfs tmpfs 396M 5.7M 391M 2% /run
tmpfs tmpfs 396M 0 396M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 17G 1.8G 16G 11% /
/dev/nvme0n1p1 ext4 976M 142M 767M 16% /boot
tmpfs tmpfs 80M 0 80M 0% /run/user/0
//192.168.29.149/share cifs 17G 1.8G 16G 11% /mnt/smbzhangsan
#自动挂载
[root@client ~]#vim /etc/fstab
//192.168.29.149/share /mnt/smbzhangsan cifs defaults,username=zhangsan,password=admin 0 0
#也可将登录用户的账号密码存储在文件中去读取
[root@client ~]#vim /etc/fstab
//192.168.29.149/share /mnt/smbzhangsan cifs credentials=/etc/smb.txt 0 0
[root@client ~]#df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 379M 0 379M 0% /dev
tmpfs tmpfs 396M 0 396M 0% /dev/shm
tmpfs tmpfs 396M 5.7M 391M 2% /run
tmpfs tmpfs 396M 0 396M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 17G 1.8G 16G 11% /
/dev/nvme0n1p1 ext4 976M 142M 768M 16% /boot
tmpfs tmpfs 80M 0 80M 0% /run/user/0
//192.168.29.149/share cifs 17G 1.8G 16G 11% /mnt/smbzhangsan