简介
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
监听的端口
- nmbd
- 137/udp
- 138/udp
- smbd
- 139/tcp
- 445/tcp
安装
环境准备
关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
安装
yum install -y samba samba-common samba-libs
启动samba需要启动两个服务
systemctl start nmb ##NetBIOS name server,类似DNS的一个服务
systemctl start smb
查看一下启动了没
在linux上访问samba服务器需要再客户端下载一个客户端的工具
yum install samba-client
在客户端我们可以看一下192.168.253.128(samba服务端)是否提供了服务
可以看出是提供了。而且服务端还将操作系统模拟成windows 6.1了
到此可以确认安装成功了
配置文件
[root@localhost samba]# tree -L 1 /etc/samba
/etc/samba
├── lmhosts
├── smb.conf ##smb配置文件
└── smb.conf.example##smb的配置文件范例,里面有指令的详细信息
在范例配置文件的配置段
[root@localhost samba]# grep -E -i "#(====| ---)" /etc/samba/smb.conf.example
#======================= Global Settings =====================================
# ----------------------- Network-Related Options -------------------------
# --------------------------- Logging Options -----------------------------
# ----------------------- Standalone Server Options ------------------------
# ----------------------- Domain Members Options ------------------------
# ----------------------- Domain Controller Options ------------------------
# ----------------------- Browser Control Options ----------------------------
# --------------------------- Printing Options -----------------------------
# --------------------------- File System Options ---------------------------
#============================ Share Definitions =============================
其中比较常用的几个配置段有
- Global Settings 全局配置
- Network-Related Options 网络相关配置
- workgroup = MYGROUP:Windows NT域名或工作组名称 ,默认 MYGROUP
- server string = Samba Server Version %v:服务器字符串,在window上吧鼠标放在一个图标上会显示一些信息,这个就是那个字符串设置,这里的%v是一个宏定义,表示samba的版本
- netbios name = MYSERVER:用于指定与主机名无关的服务器名称,最大值为15个字符。
- interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24:监听的网卡接口或ip地址
- hosts allow = 127. 192.168.12. 192.168.13. :设置白名单,仅允许某些ip访问
- Logging Options 日志相关配置
- log file = /var/log/samba/log.%m #日志文件这里的%m表示不同的主机,也可以用%u表示按照用户划分日志文件,或者取消%m把所有记录都放在一个文件
- max log size = 50##日志文件最大大小为50kb,达到最大值便开始轮询
- Standalone Server Options 独立运行的配置
- security = user
- 设定安全级别:取值有四个;
- share:匿名共享;(废弃)
- user:使用samba服务自我管理的账号和密码进行用户认证;用户必须是系统用户,但密码非为/etc/shadow中的密码,而由samba自行管理的文件,其密码文件的格式由passdb backend进行定义;(一般都是这个模式)
- server:由第三方服务进行统一认证;(废弃)
- domain:使用DC进行认证;基于kerberos协议进行;
- 设定安全级别:取值有四个;
- passdb backend = tdbsam :在上一个配置说了,使用samba认证的用户,必须是系统账号,密码是另一套密码,与/etc/passwd不同的一套密码,所以这一个配置项是关于密码的。基本不需要动
- security = user
- Share Definitions 共享目录的配置
- 主要有三类共享目录
- [homes]:为每个samba用户定义其是否能够通过samba服务访问自己的家目录;
- [printers]:定义打印服务;
- [shared_fs]:定义共享的文件系统;
- 常用指令:
- comment:注释信息;
- path:当前共享所映射的文件系统路径;
- browseable:是否可浏览,指是否可被用户查看;
- guest ok:是否允许来宾账号访问;
- public:是否公开所有用户;
- writable:是否可写;
- read only:是否为只读;
- write list:拥有写权限的用户列表;
- 格式
- 用户名
- @组名
- +组名
- 格式
- 主要有三类共享目录
相关的命令
这里先介绍几个命令,后面我们设置共享目录会用到。
samba用户管理类的命令
smbpasswd
格式:smbpasswd [options] USERNAME
常用选项:
- -a:添加
- -x:删除
- -d:禁用
- -e:启用
pdbedit
常用选项:
- -L:列出samba服务中的所有用户;
- -a, –create:添加用户为samba用户;
- -u, –user=USER:要管理的用户;
- -x, –delete:删除用户;
- -t, –password-from-stdin:使用空提示符,而后将密码输入两次;
查看服务器端的共享:
smbclient -L SMB_SERVER [-U USERNAME]
交互式文件访问:
smbclient //SMB_SERVER/SHARE_NAME [-U USERNAME]
挂载访问:
mount -t cifs //SMB_SERVER/SAHRE_NAME -o username=USERNAME,password=PASSWORD
显示samba服务的状态信息
smbstatus命令:
- -b:显示简要格式信息;
- -v:显示详细格式信息;
共享系统用户的家目录
samba共享目录有3类
- [homes]:为每个samba用户定义其是否能够通过samba服务访问自己的家目录;
- [printers]:定义打印服务;
- [shared_fs]:定义共享的文件系统;
samba是可以跨操作系统进行文件共享的,而window和linux用户认证机制是不同的。为了迁就window。所以linux的用户必须是系统用户,但是密码则需要重新设置,而不是在/etc/shadow内的密码。
也就是我们要做的很简单。我们创建一个用户,共享出去家目录,就可以了 ,因为homes配置文件已经默认写好了。所以我们只需要创建一下用户。
创建用户ice
useradd ice
为这个用户设置samba认证需要的密码
pdbedit -a -u ice
检查一下配置
testparm ##检查的命令
[root@localhost samba]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
printcap name = cups
security = USER
workgroup = SAMBA
idmap config * : backend = tdb
cups options = raw
[homes]
browseable = No
comment = Home Directories
inherit acls = Yes
read only = No
valid users = %S %D%w%S
[printers]
browseable = No
comment = All Printers
create mask = 0600
path = /var/tmp
printable = Yes
[print$]
comment = Printer Drivers
create mask = 0664
directory mask = 0775
force group = @printadmin
path = /var/lib/samba/drivers
write list = @printadmin root
[root@localhost samba]#
重启一下服务
systemctl restart smb nmb
在window物理机上测试一下
可以在我的电脑的地址栏写\192.168.253.128\ice
访问的时候出现这个错误,这是因为在之前测试的时候已经有链接了所以我们进入命令行 输入
net use * /del /y
然后重新登陆一下
这里就可以了
我们也可以在另一台linux测试
需要安装客户端工具
yum install samba-client
smbclient //192.168.253.128/ice -U ice
可以看到成功了
共享自定义的文件系统
我们先创建一个共享的目录出来
mkdir -pv /data/test
然后修改一下配置文件/etc/samba/smb.conf,添加下列段
[testfs]
comment = This is test
path = /data/test
read only = No
public = Yes
write list = ice
检查一下没有问题就重启服务
testparm
systemctl restart smb nmb
这次我们再登陆看看就可以看到多了一个目录了
我们创建个文本文件试试
这里显示我们权限不够,我们分析一下为什么呢?
samba在这里的权限主要有2层,第一层,我们samba服务是否允许,第二层,文件系统的真实路径的权限是否允许,我们在samba已经允许了,所以我么你定位问题肯定是目录权限拒绝
我们服务器上的/data 目录属组与属主是root,而我们想进行写操作的用户是ice,我们可以看到other的权限是可读和可执行,所以我们不能创建。
问题找到了,我们怎么解决呢?
方法很多,可以修改目录权限,也可以修改目录属主或属组
这里我们这样,我们吧属主和属组设置为ice,当然了 如果用户很多,可以让其他用户加入ice组从而对文件有读写权限
chown ice.ice /data/test
然后再次创建文本文件
成功了。
细心地朋友还会发现,这里权限多了个可执行。这是因为window的默认设置。
说明自定义共享文件系统也成功了
挂载samba共享的目录
samba也允许将服务器共享的文件系统挂载到本地。
所以我们测试一下。
我们将共享出去的testfs这个文件系统挂在到/mnt 目录
客户端执行命令
mount -t cifs //192.168.253.128/testfs /mnt -o username=ice,password=123456
注意:挂载操作的用户,与-o选项中指定用户直接产生映射关系;
此时,访问挂载点,是以-o选项中的username指定的用户身份进行;本地用户对指定的路径访问,首先得拥有对应的本地文件系统权限