一、Samba介绍
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
SMB (Server Messages Block,信息服务块) 是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
CIFS:Common Internet File System通用网络文件系统,是windows主机之间共享的协议,samba实现了这个协议,所以可以实现wondows与linux之间的文件共享服务。
SAMBA的功能:
共享文件和打印,实现在线编辑
实现登录SAMBA用户的身份认证
可以进行NetBIOS名称解析
外围设备共享
二、Samba服务
1、相关包
Samba 提供smb服务
Samba-client 客户端软件
samba-common 通用软件
cifs-utils smb 客户端工具
samba-winbind 和AD相关
2、服务进程
smbd 提供smb (cifs) 服务;监听端口 TCP: 139,445
nmbd 提供NetBIOS名称解;监听端口 UDP: 137,138
3、配置文件
主配置文件:/etc/samba/smb.conf (通过 man smb.conf 可查看帮助)
语法检查:testparm [-v] [/etc/samba/smb.conf]
客户端工具:smbclient,mount.cifs
smb.conf 配置文件:(#和; 开头的语名为注释,大小写不敏感)
[global] #全局设置
workgroup=name #指定工作组名称
server=string #主机注释信息
netbios=name #指定NetBIOS名
interfaces #指定服务侦听接口和IP
hosts allow host #允许指定主机访问,默认允许所有主机访问,用逗号、空格、tab分隔,如host allow = 172.16. .example.com
host deny host #拒绝指定主机访问
config file=/etc/samba/conf.d/%U #用户独立的配置文件
Log file=/var/log/samba/log.%m #不同客户机采用不同日志
log level = 2 #日志级别,默认为0,不记录日志
max log size=50 #日志文件达到50K,将轮循rotate,单位KB
security三种认证方式:
share:匿名(CentOS7不再支持)
user:samba用户(采有linux用户,samba的独立口令)
domain:使用DC(DOMAIN CONTROLLER)认证
passdb backend = tdbsam#密码数据库格式
[homes] #用户家目录共享
[printers] #定义打印机资源和服务
[sharename] #自定义的共享目录配置
[共享名称] #远程网络看到的共享名称
comment #注释信息
path #所共享的目录路径
public #能否被guest访问的共享,默认no,和guest ok 类似
browsable #是否允许所有用户浏览此共享,默认为yes,no为隐藏
writable=yes #可以被所有用户读写,默认为no
read only=no #和writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读
write list #三种形式:用户,@组名,+组名,用,分隔 如writable=no,列表中用户或组可读写,不在列表中用户只读
valid users #特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔
宏定义:
%m 客户端主机的NetBIOS名
%H 当前用户家目录路径
%g 当前用户所属组
%L samba服务器的NetBIOS名
%T 当前日期和时间
%M 客户端主机的FQDN
%U 当前用户用户名
%h samba服务器的主机名
%I 客户端主机的IP
%S 可登录的用户名
4、samba用户管理
实现samba用户需要安装 samba-common-tools 包,samba用户须是Linux用户,建议使用/sbin/nologin
[root@centos7 ~]# yum install -y samba-common-tools
添加samba用户
smbpasswd -a
pdbedit -a -u
修改用户密码
smbpasswd
删除用户和密码
smbpasswd -x
pdbedit -x -u
查看samba用户列表
/var/lib/samba/private/passdb.tdb
pdbedit -L -v
查看samba服务器状态
smbstatus
5、smb客户端访问
1. UNC路径:(Universal Naming Convention,通用命名规范),格式:\sambaserversharename
2. 终端下使用smbclient登录服务器
smbclient -L instructor.example.com
smbclient -L instructor.example.com -U smbuser
smbclient //instructor.example.com/shared -U smbuser
可以使用-U选项来指定用户%密码,或通过设置和导出USER和PASSWD环境变量来指定
6、挂载cifs文件系统
1. 手动挂载
mount -o user=smbuser,password=centos //server/shared /mnt/smb
2. 开机自动挂载
cat /etc/fstab 可以用文件代替用户名和密码的输入
//server/shared /mnt cifs credentials=/etc/smb.txt 0 0
如://192.168.214.17/smbshare /mnt/smbshare cifs crendentials=/etc/smb.txt 0 0(如果是centos6还需加 sec=ntlmssp 挂载选项)
cat /etc/smb.txt
username=smbuser
password=centos
chmod 600 /etc/smb.txt
三、实现smb共享
1、实验环境
系统:CentOS7.6
主机:一台服务器端(192.168.214.17),一台客户端(192.168.214.27)
软件:samba (服务器端),cifs-utils (客户端),光盘yum源
2、实现过程
1. 在服务器上安装samba包
[root@centos7 ~]# yum install -y samba
2. 创建samba用户和组
[root@centos7 ~]# yum install -y samba-common-tools #实现samba用户需要装此包 [root@centos7 ~]# groupadd -r smbgroup [root@centos7 ~]# useradd -s /sbin/nologin -G smbgroup smbuser1 [root@centos7 ~]# smbpasswd -a smbuser1 [root@centos7 ~]# useradd -s /sbin/nologin smbuser2 [root@centos7 ~]# smbpasswd -a smbuser2
3. 创建samba共享目录,并设置SELinux
[root@centos7 ~]# mkdir /data/smbshare [root@centos7 ~]# chgrp smbgroup /data/smbshare [root@centos7 ~]# chmod 2775 /data/smbshare #以下为SELinux设置,SELinux关闭的不用设置 [root@centos7 ~]# semanage fcontext -a -t samba_share_t '/data/smbshare(/.*)?' [root@centos7 ~]# restorecon -vvFR /data/smbshare
4. samba服务器配置
[root@centos7 ~]# vim /etc/samba/smb.conf #在[global]选项下,设置以下两项,如有默认选项,则不用改 security = user passdb backend = tdbsam #以下为自定义共享配置 [smbshare] path = /data/smbshare writeable = no write list = @smbgroup #writeable = no时只有smbgroup组的用户才有写权限
5. 启动samba服务
[root@centos7 ~]# systemctl start smb nmb [root@centos7 ~]# systemctl enable smb nmb #设置开机启动 #以下为防火墙设置,已关闭的不用设置 [root@centos7 ~]# firewall-cmd --permanent --add-service=samba [root@centos7 ~]# firewall-cmd --reload
6. 客户端访问测试
[root@centos7-27 ~]# yum install -y cifs-utils #安装包 #用smbuser1用户挂载smb共享并访问 [root@centos7-27 ~]# mkdir /mnt/smbuser1 [root@centos7-27 ~]# mount -o username=smbuser1 //192.168.214.17/smbshare /mnt/smbuser1 Password for smbuser1@//192.168.214.17/smbshare: ****** #输入密码 #或用mount -o username=smbuser1,password=centos //192.168.214.17/smbshare /mnt/smbuser1 #注意centos6挂载centos7时还要加一个挂载选项sec=ntlmssp #mount -o sec=ntlmssp,username=smbuser1,password=centos //192.168.214.17/smbshare /mnt/smbuser1 [root@centos7-27 ~]# cd /mnt/smbuser1/ #进入挂载目录 [root@centos7-27 smbuser1]# ls #可以看到可以访问了 a.txt initial-setup-ks.cfg #根据之前的smb.conf设置知道,smbuser1有写权限,smbuser2无写权限,可以来测试下 [root@centos7-27 smbuser1]# touch b.txt [root@centos7-27 smbuser1]# ls #smbuser1成功了 a.txt b.txt initial-setup-ks.cfg #用smbuser2用户挂载smb共享并访问 [root@centos7-27 ~]# mkdir /mnt/smbuser2 [root@centos7-27 ~]# mount -o username=smbuser2,password=centos //192.168.214.17/smbshare /mnt/smbuser2 [root@centos7-27 ~]# cd /mnt/smbuser2/ [root@centos7-27 smbuser2]# ls #可以看到挂载成功了 a.txt b.txt initial-setup-ks.cfg [root@centos7-27 smbuser2]# touch c.txt #可以看到无写权限 touch: cannot touch ‘c.txt’: Permission denied