一, Samba 简介
二, 安装
三, smb.conf 详解
四, 实验
五, 其他
一, Samba 简介
实现 Windows 和 Linux 之间互相共享资源
SMB:service message block: 服务信息块, SMB 协议在局域网上用于服务器文件访问和打印的协议
cifs:common internet filesystem//CIFS 是开放的 SMB 协议版本, 由 microsoft 提供
SMB 的 windows 实现: CIFS
SMB 的 linux 实现: Samba
windows《========》linux // 之间互相访问
Linux 为 samba server,
win: 使用 cifs 作为客户端访问
linux: 作为 samba client 访问
Linux client-------[samba/cifs]-----------[Linux/windows]-server
Windows client------[cifs/samba]------------[Linux/windows]-server
功能:
1. 文件系统共享
2. 打印机共享
3.NetBIOS 协议, linux 主机拥有一个 windows 名称, 共享在 windows 的网上邻居中 // 让 linux 主机变成 windows 主机
实现方案:
peer/peer/: 点到点, 工作站模式
domain mode: 域模式
二, 安装
1.yum 安装
yum info smaba-client //linux 可以访问 windows 的共享
yum -y install samba
/usr/sbin/nmbd // 名称服务, NetBIOS, 实现 windows 访问 linux
/usr/sbin/smbd // 文件共享, 提供 smb/cifs 服务
/etc/pam.d/samba //samba 可基于 pam 认证
/usr/lib/systemd/system/nmb.service
/usr/lib/systemd/system/smb.servic
rpm -ql samba-common // 提供配置文件
/etc/samba/smb.conf
/etc/samba/lmhosts // 主机映射 NetBIOS
yum -y install samba-client
smbclient: 交互式的命令行客户端
mount - t cifs smb: 139,
445 / tcp nmb: 137,
138 / udp
2.samba 简单配置: smb.conf
两类配置段
全局配置:
[global]
每共享的专用配置:
[共享资源的共享名称]
directive = value [home] // 用户的家目录
[printers] // 打印机
实现:
[samba]
comment = ftp root
path = /tmp/samba
browseable = yes
guest ok = yes
writable = no
testparm //samba-common-tools 提供的语法测试工具
systemctl reload smb
访问 smaba 共享
Linux:
smbclient: 交互式
mount -t cifs 挂载
windows:
浏览器: \\Host or IP\shared_source_name
win+e: 空白处 [右键]-> 添加一个网络位置 [\\192.168.2.112\samba]
windows:
删除网络位置
上面 --> 工具 ---> 断开网络驱动器即可
smbclient //192.168.4.118/samba // 回车即可, 匿名访问
smbclient -L 192.168.4.118 // 查看目标主机共享资源, 可以匿名查看, 回车即可
Server Comment
--------- -------
WOLF Samba 4.4.4 //WOLF 是主机名 NETBIOS 的主机名
Workgroup Master
--------- -------
MYGROUP MT
SAMBA WOLF
三, smb.conf 详解
[pzk] # 自定义共享名
comment = Home Directories # 描述符, 是给系统管理员看的
path = /tmp # 共享的路径
public = yes # 是否公开, 也就是是否能在网上邻居看到该共享
browseable = yes # 共享的目录是否让所有人可见
writable = yes # 是否可写
guest ok = no # 是否拒绝匿名访问, 仅当安全级别为 share 时才生效
workgroup = WORKGROUP # 工作组, 要设置成跟 Windows 的工作组一致
server string = Samba Server Version %v # 其他 Linux 主机查看共享时的提示符
netbios name = MYSERVER # 用于在 Windows 网上邻居上显示的主机名
hosts allow = 127. 192.168.12. 192.168.13. EXCEPT 192.168.13.13 # 指定允许访问 samba 服务器的主机
security = share # 定义安全级别; 取值为 {share,user,domain}
share: 匿名共享
user: 使用 samba 服务自我管理的账号和密码进行用户认证; 用户必须是 OS 用户, 但密码为 samab 密码
domain: 使用 DC 进行用户认证; 后面的 --Domain Controler Options-- 将会生效
log file = /var/log/samba/log.%m # 定义日志文件, 每个访问的主机会产生独立的日志文件,%m 是客户端主机名
max log size = 50 # 定义单个日志的最大容量 (KB)
passdb backend = tdbsam # Samba 用户的存储方式, smbpasswd 表示明文存储, tdbsam 表示密文存储
deadtime = 10 # 客户端在 10 分钟内没有打开任何 Samba 资源, 服务器将自动关闭会话, 在大量的并发访问环境中, 这样的设置可以提高服务器性能
display charset = UTF8 # 设置显示的字符集
max connections = 0 # 设置最大连接数, 0 表示无限制, 如果超过最大连接数则拒绝连接
guest account = nobody # 设置匿名账户为 nobody
load printers = yes # 是否在启动 Samba 时就共享打印机
cups options = raw # 设置打印机使用的方式
valid users = user1 user2 user3 # 指定哪些用户可以访问, 如果不指定则所有用户都可访问
invalid users = user1 user2 # 指定哪些用户不可以访问
create mask = 0775 # 客户端上传文件的默认权限
directory mask = 0775 # 客户端创建目录的默认权限
write list = user1 user2 user3 # 设置可对文件进行写操作的用户
admin users = user1 # 设置共享目录的管理员, 具有完全权限
unix charset = UTF8 # 当前 Linux 主机所用的字符集
dos charset = #windows 端的字符集; gbk,gb2312 等
passdb backend = tdbsam // 密码文件, tdbsam 是一种非常安全的文件格式
cups options = raw //cups: 通用 unix 打印机选项
共享配置:
[共享名称]: 此即为共享的服务名
comment: 注释信息
path: 此共享对应本地 fs 路径
browseable: 是否可浏览, 是否可被所有用户看到
writable: 是否可写 //
read only: // 谁在后面, 谁最终生效
writelist // 可写用户列表或组列表
用户名
@组名
+ 组名
guest ok // 是否允许来宾账号访问
public // 是否是公开的服务 //public = no 或者 guest ok = no 就关闭了来宾账号
可用的宏列表:
%m : 客户端主机的 NetBIOS 名称
%M : 客户端的 internet 主机名, 即 HOSTNAME
%H : 当前用户的家目录
%U: 当前用户的用户名
%g: 当前用户所属的组名
%h: 当前 SAMBA 主机的 hostname
%I:client 端的 ip
%T: 当前的日期时间
四, 实验
基于用户做认证
[home] // 定义了用户是否能够访问自己的家目录
browseable = no // 每一个用户的家目录, 不能被别人浏览
密码生成工具: smbpasswd,pdbedit
man smbpasswd - a // 添加 os 用户为 samba 用户
- e - d //enable/disable 该用户
- n //set-no-password, 不设置密码
- x // 删除该用户
smbpasswd - a wolf // 添加该用户
smbclient //192.168.4.118/samba -U wolf //
smbclient - L 192.168.4.118 - U wolf //browseable = no 在这里是看不到的
pdbedit 命令:
类似于 smbpasswd, 管理本地用户成为 samba 用户
-L // 列出 samba 用
-a // 添加 samba 用户
-u // 指定用户名
-x : 删除该用户
-r 修改用户的相关信息
pdbedit -a -u wolf // 添加 wolf 为 samba 用户
smbstatus: 显示连接状态信息
-b 简要信息
-v 详细信息
实验一: 权限测试
[tt]
comment = Test for test
path = /tmp/test
browseable = Yes
guest ok = Yes
writable = Yes // 定义所有用户可写, 和 write list 只需一项就可以了
write list = @test // 定义哪些用户可写
注意: writable 和 write list 不应该同时写
groupadd test
testparm
usermod -a -G test wolf // 添加该用户到 test 组
client:
smbclinet //192.168.4.118/tt -U wolf // 测试
get // 可以下载文件, 但是不能上传
put // 提示: NT_STATUS_ACCESS_DENIED opening remote file \resolv.conf
server:
setfacl -m g:test:rwx /tmp/test/
客户端再次 put 就可以实现了
windows 访问:
\\192.168.4.118\tt // 即可实现连接
mount -t cifs //192.168.4.118/tt -o username=wolf /usr/tt
mount -t cifs -o username=wolf,password=testwolf //192.168.4.118/tt /usr/smb/
实验二: 权限测试
创建一个共享 data, 路径为 / ftp/data
要求仅 centos 和 fedora 能上传文件
此路径队其他用户不可见
s:
mkdir -pv /ftp/data
vim /etc/samba/smb.conf
[data]
comment = DaTA
path = /ftp/data
browseable = Yes
write list = centos,gento
public = no // 禁止来宾账户访问 smbclient //192.168.4.118/data 不输入账户名和密码将不能登录
testparm
useradd centos
echo centos | passwd --stdin centos
useradd fedora
echo fedora | passwd --stdin fedora
setfacl -m u:centos:rwx /ftp/data/
setfacl -m u:fedora:rwx /ftp/data/
systemctl restart smb
C:
smbclient -L 192.16 8.4.118
smbclient //192.168.4.118/data -U fedora // 可以上传
问题 1: 挂载 mount 失败
mount: block device //192.168.4.118/tt is write-protected, mounting r
mount: cannot mount block device //192.168.4.118/tt read-only
mount -t cifs -o username=wolf,password=testwolf //192.168.4.118/tt /usr/smb/
实验三: windows 的共享设置
右键该目录: 共享 --> 共享 [添加用户 -- 读取 / 写入]
smbclient -L 192.168.4.107
mount -t cifs -o username=wolf,passwd=wolf //192.168.4.107/test /usr/win/
注意: NT_STATUS_LOGON_FAILURE
原因: 没有敲回车, 使用匿名登录
或者: samba 和系统中同时有该用户, 没有把该用户加入到 smaba 账户
最终权限取决于: 共享权限 + fs 权限
五, 其他
winbind: 在办公环境中一般 windows AD 域占据霸主地位, 针对生产环境的 linux 集群机器才会选择 LDAP, 不过有时候在办公环境中也混杂了 linux 机器, 为了规范管理, 需要把 linux 机器加入 window 是 AD 中的.
linux 加入 windows AD 中方便操作的有两种方案 (分为 centos/ubuntu 两种情况).
1 likewise-open
在 debian/ubuntu 中使用, 可以使用 apt 安装, 配置方便, 但是由于 likewise 的公司被收购, likewise 的相关产品不再是开源产品, 更杯具的是网上连以前的源码包都找不到, 还好 ubuntu 中目前还是可以通过 apt 安装的.
2 winbind+samba
在 centos 上采用 winbind+samba 方案.
针对其他的命令请自行了解
[root@wolf ~]# rpm -ql samba-client
/usr/bin/findsmb
/usr/bin/nmblookup
/usr/bin/rpcclient
/usr/bin/sharesec
/usr/bin/smbcacls
/usr/bin/smbclient
/usr/bin/smbget
/usr/bin/smbprint
/usr/bin/smbspool
/usr/bin/smbta-util
/usr/bin/smbtar
/usr/bin/smbtree
[root@wolf html]# rpm -ql samba-common |egrep -v "share|lib|log"
/etc/samba/lmhosts
/etc/samba/smb.conf
/etc/sysconfig/samba
/usr/bin/net
/usr/bin/pdbedit
/usr/bin/profiles
/usr/bin/smbcontrol
/usr/bin/smbcquotas
/usr/bin/smbpasswd
/usr/bin/testparm
[root@wolf html]# rpm -ql samba |egrep -v "share|log|.so"
/etc/openldap/schema/samba.schema
/etc/pam.d/samba
/etc/samba/smbusers
/usr/bin/mksmbpasswd.sh
/usr/bin/smbstatus
/usr/sbin/nmbd
/usr/sbin/smbd
来源: http://www.bubuko.com/infodetail-2476666.html