1、用途:
文件共享:可以在Linux/Windows之间,类似于windows之间的网上邻居,可以直接访问文件并修改。
- a服务器全局设置smb.conf [global]主机信息部分,以global为依据
- b规划准备共享的目录参数smb.conf [....]共享的信息,以个别的目录名称为依据
- c建立所需要的文件系统
- d建立samba账户
- e启动服务smbd、nmdb
2、创建用户:
用tdbsam方式建立samba用户数据库,可以使用smbpasswd -a 来建立samba用户,不过要建立的用户必须是系统中存在的用户,不过我们可以不用smbpasswd,用pdbedit命令来完成操作,它的参数很多这里列出几个常用的:
- pdbedit -a -u username 添加一个用户 -r修改 -x删除
- pdbedit -L (username) 查看samba用户
- smbpasswd username 修改用户密码
3、在Linux上测试
smbclient -L //192.168.1.144 -U username
[root@CentOS6 adduser]# smbclient -L //127.0.0.1 -U user1 Enter user1's password: Domain=[SAMBA3-SHARE] OS=[Unix] Server=[Samba 3.6.23-42.el6_9] Sharename Type Comment --------- ---- ------- homes Disk Home Directories IPC$ IPC IPC Service (Samba Server Version 3.6.23-42.el6_9) user1 Disk Home Directories Domain=[SAMBA3-SHARE] OS=[Unix] Server=[Samba 3.6.23-42.el6_9] Server Comment --------- ------- CENTOS6-SMB Samba Server Version 3.6.23-42.el6_9 Workgroup Master --------- ------- SAMBA3-SHARE CENTOS6-SMB
linux挂载smb
sudo mount -o username=colorv,password=123456 //192.168.0.239/data2 /mnt/smb-data2/
4、协议、端口、进程
1)没有使用类似TCP/IP之类的传输协议,因此不需要IP设置的。采用NetBIOS协议:主机在NetBIOS协议当中的定义为使用“NetBIOS Nmae“,每台主机必须要有不同的NetBIOS Name才行。
2)(windows网上邻居:允许你登陆,开放资源给你)samba通过两个服务来控制这两个步骤:
nmbd:该daemon用来管理工作组、NetBIOS Name等的解析。用到UDP137、UDP138端口负责名称解析任务。['di:mən]守护进程
smdb:该daemon用来管理samba主机共享个的目录、文件、打印机等。用到TCP139、tcp445(445不一定使用)传输数据
3)开放以上端口、启动以上两个服务
5、局域网连接方式
1)Peer/Peer(Workgroup, 对等模式)
各台电脑都是平等的,互相访问资源,此时需要知道对方电脑的用户名密码。
2)Domain model(主控模式)
由一台服务器,大家去访问服务器。
(samba可以实现于上术两种模式)
6、samba配置文件
/etc/samba/smb.conf
1)#和;都是注释
2)[global]
工作组、主机的NetBIOS名称、字符编码的显示、日志文件的设置、是否使用密码、密码验证机制等
workgroup = 工作组的名称:注意,工作组要相同
netbios name = 主机的NetBIOS名称,每部主句都不同
server string = 主机的简易说明
display charset = 本服务器上面的显示编码,一般与unix charset相同
unix charset = 在linux服务器上面所使用的编码, /etc/sysconfig/i18n
dos charset = windows客户端的编码,gb2312写为cp936,(CMD:chcp命令查看)
log file = 日志文件存储位置,可使用变量处理
max log size = 日志文件最大能达到多少Kbytes,
security = share、user、domain(安全程度:不需要密码、使用samba服务器本身的密码数据库,用户必须存在于linux账户、使用外部服务器密码,也就是samba是客户端之意,此时需要提供password server = IP参数)
encrypt passwords = Yes 密码要加密,为默认
passdb back = 数据库格式,默认为tdbsam(/var/lib/samba/private/passwd.tdb)
# 跟防火墙的议题有关的设定
hosts allow = 127. 192.168.100.254 192.168.100.10 192.168.1.
3)[共享资源名称]
目录权限、谁可以浏览该目录、读写等
comment = 目录说明
path = 共享目录
browseable = 是否让所有用户看到这个项目
writalbe = (read only =)
create mode = 文件权限
directory mode = 目录权限(不要与系统目录权限冲突)
writelist = 用户或 @组,这个选项可以指定能够进入到此资源名称的特定用户
注:变量功能,eg
- %S
[home]
valid users = %S #允许的登陆着:表示任何可登陆的用户都能够登陆的意思,如果是user1,homes就会自动变为[user1]
- %m:代表client端的netbios主机名 logfile = /var/log/samba/log.%m
- %M
- %L
- %H
- %U
- %g
- %h
- %I
- %T
7、例子:
1)无密码
[root@www samba]# vim smb.conf
# 1. 先设定好服务器整体环境方面的参数
[global]
# 与主机名有关的设定信息
workgroup = vbirdhouse
netbios name = vbirdserver
server string = This is vbird's samba server
# 与语系方面有关的设定项目喔,为何如此设定请参考前面的说明
unix charset = utf8
display charset = utf8
dos charset = cp950
# 与登录文件有关的设定项目,注意变量 (%m)
log file = /var/log/samba/log.%m
max log size = 50
# 这里才是与密码有关的设定项目哩!
security = share
# 修改一下打印机的加载方式,不要加载啦!
load printers = no
# 2. 分享的资源设定方面:主要得将旧的批注,新的加入!
# 先取消 [homes], [printers] 的项目,然后针对 /tmp 的设定,可浏览且可写入喔
[temp] <==分享资源名称
comment = Temporary file space <==简单的解释此资源
path = /tmp <==实际 Linux 分享的目录
writable = yes <==是否可写入?在此例为是的
browseable = yes <==能不能被浏览到资源名称
guest ok = yes <==单纯分享时,让用户随意登入的设定值
testparm (-v)检查配置文件,若有中括号表示有问题(这个不台清楚了)
开启服务、开机自启、查看端口(端口是自动开放吗,这个问题好幼稚吗)
本机测试,见上边(//127.0.0.1)
linux挂载:mount -t cifs //127.0.0.1/temp /mnt,然后df能看到
2)密码user
[root@www ~]# vim /etc/samba/smb.conf [global] workgroup = vbirdhouse netbios name = vbirdserver server string = This is vbird's samba server unix charset = utf8 display charset = utf8 dos charset = cp950 log file = /var/log/samba/log.%m max log size = 50 load printers = no # 与密码有关的设定项目,包括密码档案所在格式喔! security = user <==这行就是重点啦!改成 user 层级 passdb backend = tdbsam <==使用的是 TDB 数据库格式! # 2. 分享的资源设定方面:删除 temp 加入 homes 与 project [homes] <==分享的资源名称 homes是最特殊的资源目录名称! comment = Home Directories browseable = no <==除了使用者自己外,不可被其他人浏览 writable = yes <==挂载后可擦写此分享 create mode = 0664 <==建立档案的权限为 664 directory mode = 0775 <==建立目录的权限为 775 [project] <==就是那三位使用者的共享资源 comment = smbuser's project path = /home/project <==实际的 Linux 上面的目录位置 browseable = yes <==可被其他人所浏览到资源名称(非内容) writable = yes <==可以被写入 write list = @users <==写入者有哪些人的意思:@用户组 # 2. 每次改完 smb.conf 你都需要重新检查一下语法正确否! [root@www ~]# testparm
注意共享目录的用户组,权限等设置!
添加samba账户(先linux账户)
可能需要修改selinux:setsebool -P samba_enable_home_dirs=1
8、以samba为例子,介绍selinux
1)找出与samba有关的selinuxguize:getsebool -a | grep samba
[root@www ~]# getsebool -a | grep samba samba_domain_controller --> off <==PDC 时可能会用到 samba_enable_home_dirs --> off <==开放用户使用家目录 samba_export_all_ro --> off <==允许只读文件系统的功能 samba_export_all_rw --> off <==允许读写文件系统的功能 samba_share_fusefs --> off samba_share_nfs --> off use_samba_home_dirs --> off <==类似用户家目录的开放! virt_use_samba --> off
2)设置:setseboll -P samba_enable_home_dirs=1解决无法挂载等问题
对共享目录使用 chcon -t samba_share_t /home/project
如果共享的目录不只是samba,还包含ftp等,那就可能需要使用public_content_t这个大家都能够读取的类型才行。
其他:
iptable
利用 Quota 限制用户磁盘使用
Linux 上挂载 Samba(Windows & macOS 共享文件夹)的正确姿势
sudo mount -t cifs -o username=colorv,password=123456 //192.168.0.239/data2 smb-dir/