samba学习笔记
RHEL7搭建samba服务器
实验环境:Centos7
smbd
服务提供文件共享
和打印服务
,并侦听TCP
端口139
和445
。nmbd
服务向客户端提供基于IP命名服务
的NetBIOS
,并侦听UDP
端口137
。
1.安装samba服务
# 安装samba依赖包
yum install -y samba samba-client
# 设置samba服务自启动
systemctl enable --now smb.service
# 查看smb服务是否启动
systemctl status smb
按需关闭防火墙和SELinux
## 关闭防火墙
systemctl stop firewalld.service
## 禁止防火墙开机启动
systemctl disable firewalld.service
## 永久关闭selinux
vi /etc/selinux/config
将`SELINUX=enforcing`改为`SELINUX=disabled`
# 关闭selinux服务
setenforce 0
注意:如果要配置SELinux版samba,参考
https://zh.codepre.com/centos-7493.html
2.备份主配置文件
配置文件位置:/etc/samba/smb.conf
备份并过滤
smb.conf
# 备份samba配置文件
cp /etc/samba/smb.conf{,.bak}
# cd到Samba配置文件目录
[root@localhost ~]# cd /etc/samba/
# 过滤配置文件
## 过滤所有注释行
[root@localhost samba]# grep -v "#" smb.conf.bak
## 过滤所有注释行和“;”行
[root@localhost samba]# grep -v "#" smb.conf.bak | grep -v ";"
## 过滤所有注释行 和“;”行 和 空行(^$)
[root@localhost samba]# grep -v "#" smb.conf.bak | grep -v ";" | grep -v "^$"
## 过滤并重新写入主配置文件
[root@localhost samba]# grep -v "#" smb.conf.bak | grep -v ";" | grep -v "^$" > smb.conf
3.修改配置文件
示例文件:
注意
:=(等号)两侧
是有空格
的
# Samba服务器的全局设置--必须配置
[global]
# 指定Samba服务器所在的工作组名称
workgroup = WORKGROUP
# 指定Samba服务器的描述信息。"%v"会被Samba版本号替换
server string = Samba Server %v
# 指定Samba服务器在网络上的NetBIOS名称
netbios name = samba-server
# 指定Samba服务器的安全模式为user口令验证
## user : 口令验证
## share : 公开不需要验证
## server domain : 根据来源信息进行验证
security = user
# 允许匿名用户访问Samba共享
## 此设置意思为:当客户端无法提供有效的用户名和密码时,Samba服务器将会将其映射到一个名为“bad user”的用户帐户。
map to guest = bad user
# 指定Samba服务器是否充当DNS代理。
## 如果设置为“yes”,Samba服务器将会尝试将DNS查询转发到其他DNS服务器。
## 如果设置为“no”,Samba服务器不会充当DNS代理。
dns proxy = no
## 共享名称--共享站点配置
[Depp_Public]
# 设置共享目录的描述信息为 "深度恭喜"。
comment = 深度共享
# 指定共享目录的服务器路径。
path = /var/disk1/share
# 设置共享目录在网络邻居中可见
browseable = yes
# 允许未经认证的用户(访客)访问。
guest ok = yes
## 可写权限
writable = yes
# 设置共享目录为非读写(可写)
read only = no
# 设置文件创建时的权限掩码为 0755
## (即文件拥有者具有读、写和执行权限;同组用户和其他用户只具有读和执行权限)
create mask = 0755
- 3种常用
验证
方式:
配置参数 | 解释 |
---|---|
user | 口令验证 |
share | 公开不需要验证 |
server domain | 根据来源信息进行验证 |
配置用户口令验证模式
注意
:=(等号)两侧
是有空格
的
# Samba服务器的全局设置
[global]
# 工作组名称
workgroup = WORKGROUP
# 指定Samba服务器的描述信息。"%v"会被Samba版本号替换
server string = Samba Server Version %v
# 日志保存路径,%m是按月进行保存
log file = /var/log/samba/log.%m
# 日志保存大小,50kb
max log size = 50
# 验证方式:user口令验证 share公开不需要验证 server domain 根据来源信息进行验证
security = user
# 用pdbedit生成pam信息的数据库文件
passdb backend = tdbsam
# 共享站点名称
[rick]
comment = 站点描述信息,用户登录后提示的信息
# 共享的目录
path = /data/sahre
# 不允许公开访问,也就是不认证不能访问
public = no
# 允许写权限
writable = yes
配置完成后,重启服务
# 重启smb服务
systemctl restart smb
添加smb的验证用户
# 添加用户zhangsan
useradd zhangsan
# 为张三添加smb密码
## -a 将用户添加到pdbsam数据库中,第一次添加用户时使用
## -u 指定的账户名
pdbeidt -a -u zhangsan
# 提示两次输入密码,为zhangsan创建samba的访问密码
示例:创建smb站点并开启服务
下面是一个创建smb站点的演示过程。
1.创建共享目录
# 创建共享目录
mkdir -p /data/sahre
# 给共享目录设置属主和属组
chown -Rf zhangsan:zhangsan /data/sahre
# 考虑到其他人也要读写这个目录,权限给大一点
chmod -Rf 777 /data/sahre
2.配置SELinux策略
# 查看SELinux的安全上下文值
getsebool -a |grep samba
# 开启SELinux中samba对于文件读写的权限
setsebool -P samba_export_all_w=on
重启smb服务
# 重启smb服务
systemctl restart smb
Windows访问samba服务器
前置条件: Windows机器
需要跟Samba服务器
在同一局域网,且互联互通
。
使用WIN+R
快捷键,输入\\samba服务器IP地址
# 访问samba服务
\\192.168.2.244
根据提示
输入账号密码
,这里输入的密码不是
Linux的用户密码
,而是pdbsam数据库
中的对应的smb账号的密码
。
用Windows
在smb共享目录
中创建一个测试文件:111.txt
。
# 查看共享文件目录,查看到创建的文本
[root@localhost samba]# cd /data/sahre
# 查看Windows下创建的文件在Linux服务器上能够看到
[root@localhost share]# ll
-rw-r--r--. 1 nobody nobody 0 11月 5 15:51 111.txt
LInux访问samba
# 安装samba的Linux客户端cifs-utils
yum install cifs-utils -y
# 手动挂载samba
[root@localhost ~]# smbclient -U zhangsan -L 192.168.10.10
Enter SAMBA\zhangsan's password: 此处输入该账户在Samba服务数据库中的密码
Sharename Type Comment
--------- ---- -------
database Disk Do not arbitrarily modify the database file
IPC$ IPC IPC Service (Samba 4.9.1)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
# 查看挂载结果
df -h
Linux持久挂载samba
在Linux用户端
新建并配置samba账户验证文件
# 在home目录(也可其他目录,你记得就行)新建auth.smb
vim /root/auth.smb
# 配置auth.smb
## 将下面内容添加到auth.smb中
### 注意:这里的WORKGROUP名称一定要与服务器配置中的一致
username=zhangsan
passwdord=123456
domain=WORKGROUP
将samba挂载信息写入/etc/fstab中
# 新建本地挂载点
mkdir /mnt/share
# 将samba挂载信息写入/etc/fstab中
vim /etc/fstab
## 写入samba挂载信息
## 挂载路径 挂载点 文件系统格式 权限(认证文件路径) 是否自动备份 是否自动校验
//192.168.10.10/share /mnt/share cifs credential=/root/auth.smb 0 0
自动挂载/etc/fstab
中的设备
mount -a
ansible配置samba
---
- name: 安装samba server
hosts: samba_servers
# 使用的用户
user: devops
# 使用提权
become: true
# 变量
vars:
# 安装状态
install_state: installed
random_var:
- This is colon: test
tasks:
# 安装samba
- name: install samba
yum:
name: samba
state: "{{ install_state }}"
# 安装防火墙
- name: install firewalld
yum:
name: firewalld
state: installed
- name: debug install_state variable
debug:
msg: "The state for the samba service is {{ install_state }}"
# 启动samba服务,并设置开机自启
- name: start samba
service:
name: smb
state: started
enabled: yes
# 启动防火墙服务
- name: start firewalld
service:
name: firewalld
state: started
enabled: yes
# 防火墙放行samba服务
- name: configure firewall for samba
firewalld:
state: enabled
permanent: true
immediate: true
service: samba
# 备份samba配置文件
- name: back samba config
copy:
src: /etc/samba/smb.conf
dest: /etc/samba/smb.conf.bak
# 是samba配置文件生效
- name: deliver samba config
template:
src: samba.conf.j2
dest: /etc/samba/smb.conf
owner: root
group: root
mode: 0644