SAMBA是解决Windows和Linux的互通。
相关包
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
语法检查: testparm [-v] [/etc/samba/smb.conf]
客户端工具:smbclient,mount.cifs
内核:
[root@centos7 ~]# locate cifs.ko
/root/linux-4.16.8/fs/cifs/.cifs.ko.cmd
/root/linux-4.16.8/fs/cifs/cifs.ko
/usr/lib/modules/3.10.0-693.el7.x86_64/kernel/fs/cifs/cifs.ko.xz
/usr/lib/modules/4.16.8-4.4-lianglinux/kernel/fs/cifs/cifs.ko
安装方法
yum install samba
查看各安装包:
rpm -ql samba-client
rpm -ql samba
smbclient使用
1. 在windows上共享一目录
2. 在windows cmd下建立一用户net user test 123 /add
3. 在windows上查看共享的资源net share; net share testdir=d:
fs(把d盘下的nfs文件夹共享为testdir)
4. 在同网段的Linux上,执行smbclient -L 172.20.107.222 -U test%123查看共享资源
5. 访问共享资源 smbclient //172.20.107.222/testdir -U test%123
6. smb: > get liang.txt (下载)
7. smb:> put test (上传)
8. mount -o username=test,password=123 //172.20.107.222/testdir /mnt/win (临时挂载到Linux服务器上)
9. vim /etc/fstab
//172.20.107.222/testdir /mnt/win cifs username=test,password=123 0 0
/etc/fstab的权限为-rw-r--r--,系统默认的权限最好保留,因此把username和password放在/etc/fstab是很不安全的
10. 更安全的永久挂载
/172.20.107.222/testdir /mnt/win cifs credentials=/etc/user.txt 0 0
vim /etc/user.txt
username=test
password=123
chmod 600 user.txt
SMB服务器端
启动:systemctl start smb
建立SMB账号,SMB的账号必须首先是Linux账号:
useradd -s /sbin/nologin smb1
smbpasswd -a smb1(把linux账号smb1加为smb账号)
smbpasswd smb1(更改smb1的口令)
SMB账号存储在/var/lib/samba/private/passdb.tdb
/etc/samba/smb.conf(#指说明 ;表是指令,同时注释)
1. netbios name = smbsrv7 (配合systemctl status nmb服务使用)
客户端验证:smbclient -L //smbsrv7 -U smb1%verimatrix
2. hosts allow = 网段名字如192.168.12.
3. log设置
log file = /var/log/samba/log.%m
log level = 2
max log size = 50
4. 家目录共享
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No (yes表示隐藏,类似windows里共享加$)
read only = No
inherit acls = Yes
5. 共享目录
[share] (共享文件夹名)
comment=tools share
path=/data/tools (实际共享的文件夹)
writable = yes (/data/tools也要对smb用户对应的linux用户有写权限)
read only = no
public = yes (可以匿名访问,文件权限映射为Linux用户nobody)
valid user = smb1
write list = +staff(在staff组里的可以写,不在此组的只读)
valid user = smb1 smb2 (只允许smb1, smb2用户访问)
valid user =+staff (staff组的用户可以访问)
实验
不同的用户访问同样的SAMBA共享文件夹,访问的资源不同
SAMBA服务器:
mkdir /data/smb1
mkdir /data/smb2
vim /etc/samba/smb.conf
config file = /etc/samba/conf.d/%U
/etc/samba/conf.d
vim smb1
[share]
path=/data/smb1
writeable = yes
vim smb2
[share]
path=/data/smb2
writeable = yes
SAMBA客户端:smb1和smb2访问是同一共享share,但是访问的资源不一。
smbclient //172.20.42.201/share -U smb2%verimatrix
smbclient //172.20.42.201/share -U smb1%verimatrix
多用户挂载(CentOS7支持)
客户端:
建立和服务器同名的账户:
useradd smb1
useradd smb2
useradd smb3
mount -o username=smb3,password=verimatrix,multiuser //172.20.42.201/share /mnt/test
su - smb1
cifscreds add -u smb1 172.20.42.201 (输入密码是服务器smb1用户的密码)
cd /mnt/test
touch test.txt
su - smb2
cifscreds add -u smb2 172.20.42.201
cd /mnt/test
touch test2.txt (失败,因为smb2不属于staff组)
服务器:
[share]
path=/data/tools
writable = no
write list = +staff
创建smb1, smb2, smb3用户,同时smb1,smb3属于staff组。同时用smbpasswd –s把三个用户加入到smb用户数据库里。