Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。第三版不仅可访问及分享SMB的文件夹及打印机,本身还可以集成入Windows Server的网域,扮演为网域控制站(Domain Controller)以及加入Active Directory成员。简而言之,此软件在Windows与UNIX系列OS之间搭起一座桥梁,让两者的资源可互通有无。
samba的两个服务
安装samba
yum -y install samba
以下安装包会作为依赖被安装
samba-common.noarch 0:4.2.3-10.el7
samba-common-libs.x86_64 0:4.2.3-10.el7 samba-common-tools.x86_64 0:4.2.3-10.el7 samba-libs.x86_64 0:4.2.3-10.el7```
安装samba后执行命令
rpm -ql samba
会发现有两个服务程序如下图
服务名 | 作用 |
---|---|
nmbd | 主要利用UDP 137 和138 端口负责名称解析的服务 |
smbd | 主要功能就是用来管理samba主机分享的目录 文件和打印机等 主要利用TCP协定来传输资料,使用端口为139 及445 |
让我们先用一个示例快速了解samba具体是如何使用的吧!(准备两台CentOS7.2的主机,一台做server(172.18.20.96)另一台做client(172.18.20.69)),步骤如下:
Server端操作
1. 关闭防火墙与SELinux
setenforce 0;
service iptables stop (CentOS6 CentOS7)
chkconfig iptables off (CentOS6)
systemctl stop firewalld
systemctl disable firewalld # 没有关闭在客户端连接的时候可能会提示失
败信息如"没有到主机的路由"之类的```
- 在服务器安装Samba软件
yum -y install samba
- 在server创建samb共享目录
mkdir /common
chmod 777 /common
echo "This is a test file in common dir named smb.txt" > /common/smb.txt
- 配置samba的配置文件(/etc/samba/smb.conf)
vim /etc/samba/smb.conf 在最后"Share Definitions"处添加samba
服务器的共享目录,设置如下几行
[common]
comment = Common Share
path = /common #第3步创建的共享路径
browseable = yes #所有人可见
guest ok = no #拒绝匿名访问
writeable = yes #支持写入数据
testparm命令可测试配置文件语法
- 在server端创建访问帐号
useradd -s /sbin/nologin uangianlap
smbpasswd -a uangianlap # 这个工具由samba-common-tools提供.这里也可以使用pdbedit这个工具来创建samba用户且更方便好用,具体用法后面介绍
New SMB password: # 提示输入密码 假设密码为123456吧
Retype new SMB password:
Added user smbuser.
- 在server端启动samba服务(完毕做个检查是个好习惯)
systemctl start smb.service; [systemctl enable smb.service]
systemctl status smb.service
ss -lntu # 查看samba服务监听的139 445 [137 138]等端口是否开启
###### Client端操作
- client端访问samba服务
yum -y install samba-client # 安装samba客户端工具
smbclient -L //172.18.20.96 # 查看server主机共享信息,仅查看不需要密码,直接回车即可
smbclient -U uangianlap //172.18.20.96/common
Enter smbuser's password: # 输入samba帐户密码,就是123456啦
错误:smbclient: relocation error: /lib64/libsamba-credentials.so.0: symbol GSS_KRB5_CRED_NO_CI_FLAGS_X, version gssapi_krb5_2_MIT not defined in file libgssapi_krb5.so.2 with link time reference. 解决办法:安装krb5
yum install krb5-devel krb5-libs pam_krb5 krb5-workstation
上面的访问形式为命令行交互式,我们还可以用挂载的方式实现如本地文件系统一样的使用体验,方法如下:
mkdir /com
mount -t cifs //172.18.20.96/common /com -o username=uangianlap,password=123456 # 临时挂载,注意:挂载操作中的用户,与-o选项中指定的用户直接产生映射关系(客户端以root挂载,那么其对应server端就是uangianlap);访问挂载,是以-o选项指定的用户身份运行,与本地用户以ID产生映射;
echo "//172.18.20.96/common /com cifs defaults,username=uangianlap,password=123456 0 0">> /etc/fstab #开机即挂载
**smbpasswd命令的用法:**
> ***smbpasswd [options] USERNAME***
> *options:*
>> -a 添加帐户并设置密码
>> -x 删除SMB帐户
>> -d 禁用SMB帐户
>> -e 启用SMB帐户
**更好用的pdbedit使用**
> ***pdbedit [options] USERNAME***
> -L: 列出samba服务中的所有用户
> -a: 添加用户samba用户
-u USERNAME(具体添加的哪个用户)
> -x: 删除
-u USERNAME(同上)
> -t: 从标准输入接收密码
##### Samba配置文件指令详解
**[global]**
>**workgroup** = *MYGROUP* # 定义工作组
**server string** = Samba Server Version %v # 服务器提示字串,默认显示samba版本,建议修改默认值以防止针对版本的网络攻击
**interfaces** = lo eth0 192.168.12.2/24 192.168.13.2/24 # 监听指定网络接口
**host allow** = 127. 192.168.12. 192.168.13.5 EXCEPT 192.168.13.13 # 指定仅允许哪些主机有权访问Samba服务器资源
**log file** = /var/log/samba/log.%m # 定义日志文件 %m会被替换为客户端的主机名
**max log size** = 50 # 定义日志单个文件最大容量为50Kb,可以调大点 如50MB等
***security*** = user # 安全模式为user,表示需要通过用户名与密码验证访问者的身份
**passdb backend** = tdbsam # 账户与密码的存储方式, smbpasswd代表使用老的明文格式存储帐户及密码 tdbsam代表基于TDB的密文格式存储
***deadtime*** = 10 # 客户端在10分钟内没有打开任何Samba资源,服务器将自动关闭会话,在大量的并发访问环境中,这样的设置 可以提高 服务器性能.
***display charset*** = UTF8 # 设置显示使用的字符集为UTF8
***设置最大连接数*** = 0 # 0代表无限制,超过此限制的连接请求服务器将拒绝连接
**guest account** = nobody # 设置匿名帐号为nobody
**load printers** = yes # 是否共享打印机
**cups options** = raw # 打印属性
**[homes]**
>**comment** = Home Directories # 共享的描述信息
**browseable** = no # 共享的目录是 否可以被浏览
**wriable** = yes # 共享的目录是否可以进行写操作
**[printers]**
>**path = /var/spool/samba** # 打印机共享池
**browseable** = no
**guest ok** = no
**printable** = yes
**writeable** = no
**[common]**
>**comment** = Common share
**path** = /common
**valid users** = tom jerry # 白名单
**invalid users** = xx xx xx # 黑名单(与白名单冲突的话,黑名单优先生效)
**writable** = yes
**browseable** = yes # 共享目录是否对所有的人可见
**write list** = uangianlap # 拥有写权限帐户或组列表 @组名 or +组名
**admin users** = uangianlap # 该共享的管理员,具有完全权限