在 CentOS 7 中使用 yum 安装 Samba
yum install -y samba samba-client
Samba 的配置文件在/etc/samba/smb.conf
配置说明如下:
# 定义全局的配置
[global]
# 可选设置。让你使用另一个配置文件来覆盖默认的配置文件。如果文件不存在,则该设置无效
# 这个设置可以使 Samba 的配置更灵活,能够让一台 Samba 服务器模拟多台不同配置的服务器
# 比如:让 PC1(主机名)这台电脑在访问共享文档时,使用 Samba 服务器上 PC1 它自己的配置文件,那么先在 /etc/samba/ 下为 PC1 建立一个名为 smb.conf.pc1 的文件,然后在默认的 smb.conf 配置文件中加入 config file = /etc/samba/smb.conf.%m 这条内容。之后,当 PC1 访问 Samba 服务器的共享文档时,本该生效的 smb.conf 就被换成 smb.conf.pc1。而其他机器访问 Samba 服务器则还是使用 smb.conf 里的配置
# 如果没有此方面需求,可以去掉这条设置内容
#config file = /etc/samba/smb.conf.%m
# 设定 Samba 所要加入的工作组或域。默认配置的工作组是 MYGROUP,而 Windows 下的工作组默认为WORKGROUP,因此要改为和 Windows 的工作组一样,才能顺利访问到共享文件
workgroup = WORKGROUP
# 设定注释,%v 表示显示 Samba 的版本号
server string = Samba Server %v
# 设置出现在“网上邻居”中的主机名,注意 netbios name 和 workgroup 不要设置成一样的内容
netbios name = CentOS_Chai_SMB
# 设置允许访问的主机
# 可以用一个IP表示,也可以用一个网段表示
# 以下表示允许来自 192.168.1.* 的主机连接
#hosts allow = 192.168.1.*
# 开启匿名访问
map to guest = bad user
# 日志选项
# 设置日志文件存储位置及名称,%m 指的是主机名,表示对每台访问 Samba 的机器都单独记录一个日志文件
log file = /var/log/samba/log.%m
# 设置 Samba 日志文件的最大容量,单位为KB,0代表不限制
max log size = 512
# 共享级别:这里指定 Samba 的安全等级,主要有三种
# user:由提供服务的 samba 服务器负责检查账户及密码,认证用户来源为 Samba 服务器本机(默认)
# share:用户不需要账户及密码即可登录 Samba 服务器,,属于匿名访问
# server:检查账户及密码的工作由另一台 Windows 或 Samba 服务器负责,认证用户来源为另一台 Samba 服务器或 Windows 服务器
security = user
# 建立安全账户管理后台
# Samba 有三种用户后台:smbpasswd、tdbsam 和 ldapsam
# tdbsam:使用一个 .db 的文件来存储用户信息,使用 pdbedit 命令来管理用户,要添加或管理的用户必须先是系统用户(默认)
# smbpasswd:该方式是使用 smbpasswd 命令给系统用户设置一个 Samba 密码,客户端就用此密码访问 Samba 资源。新版 Samba 的密码验证方式已使用 tdbsam 取代 smbpasswd 了,但如果要继续使用 smbpasswd 也是可以的(不推荐)
# ldapsam:基于 LDAP 账户管理方式验证用户
passdb backend = tdbsam
# 打印选项,设置是否在启动 Samba 时共享打印机
load printers = no
# 通用打印选项
#cups options = raw
# 该部分内容是共享用户自己的家目录,也就是说,当用户登录到 Samba 服务器上时,实际上是进入到了该用户的家目录,用户登陆后,共享名不是 homes 而是用户自己的标识符,对于单纯的文件共享的环境来说,这部分可以注视掉。
#[homes]
#comment = Home Directories
#valid users = %S, %D%w%S
#browseable = No
#read only = No
#writable = Yes
# 该部分内容为设置打印机共享
#[printers]
#comment = All Printers
#path = /var/tmp
#browseable = No
#guest ok = No
#writable = No
#printable = No
# 设置一个共享目录
[smb]
# 定义该目录的描述信息
comment = CentOS Share
# 共享目录的路径
path = /usr/share/nginx/smb
# 是否允许 guest 账户访问
public = yes
# 是否允许用户写入或者创建文件
writable = No
# 白名单,指定能够进入此资源目录的特定用户,使用逗号隔开,如果是组的话,使用 @ 指明
valid users = @smb,@guest
# 允许写入该共享的用户
write list = smber
# 指明新建立的文件的属性
create mask = 0755
# 指明新建立的目录的属性
directory mask = 0755
使用 tdbsam 指令来管理帐号:
pdbedit -a username # 新建 Samba 用户账号
pdbedit -x username # 删除 Samba 用户账号
pdbedit -v username # 显示该用户账号详细信息
pdbedit -L # 列出 Samba 用户列表,读取 passdb.tdb 数据库文件
pdbedit -Lv # 列出 Samba 用户列表详细信息
pdbedit -c “[D]” -u username # 暂停该 Samba 用户账号
pdbedit -c “[]” -u username # 恢复该 Samba 用户账号
CentOS 7 中,设置了passdb backend = tdbsam
的 Samba 服务,其 passwd.db 文件存放在/var/lib/samba/private
目录下,而查看 .tdb 文件需要安装必要的工具:
yum install -y tdb-tools
tdbdump *.tdb
如果开启了 SELinux,可以考虑关闭它,以便 Samba 可以正常使用:
# 关闭SELinux
setenforce 0
# 开启SELinux
setenforce 1
启动 Samba 服务,并设置开机自启动:
# Samba 的服务名并不叫做 samba,而是 smb
systemctl start smb.service
# 在 Samba 3.0.7 以后的版本,nmb 不会随着 smb 启动,nmb 服务跟 NetBIOS Name 名称解析有关,没有启动会造成Windows 端找不到 Linux 主机
systemctl start nmb.service
# 设置 smb 和 nmb 开机自启动
systemctl enable smb.service
systemctl enable nmb.service
# 查看 smb 和 nmb 的进程
systemctl status smb nmb
开启 Samba 需要的防火墙端口:
firewall-cmd --add-port=137/tcp --permanent
firewall-cmd --add-port=138/tcp --permanent
firewall-cmd --add-port=139/tcp --permanent
firewall-cmd --add-port=445/tcp --permanent
firewall-cmd --add-port=901/tcp --permanent
firewall-cmd --reload
Linux 访问 Samba 共享文档
查看 Samba 服务器上的共享资料
smbclient –L //Samba服务器的ip地址 -U Samba用户名
-L
即为 list 的含义,-U
是 user 的意思,如果 Samba 服务器是无密码访问的话,可以省略-U Samba用户名
,提示要输入 password 时直接回车即可。
登陆 Samba 服务器
smbclient //Samba服务器的ip地址 -U Samba用户名
执行 smbclient 命令成功后,进入 smbclient 环境,出现提示符smb:\>
。
有许多命令和 ftp 命令相似,如cd
、lcd
、get
、megt
、put
、mput
等。也可以通过输入?
来查看在 smb 命令行可用的所有命令。
另外,Samba 服务器共享出来的文档,还可以在 Linux 客户端进行挂载,需要用到mount
命令:
mount -t cifs -l //Samba服务器的ip地址 /挂载名
PC 访问 Samba 共享文档
在 Windows 下通过\\ip地址
的方式访问其它文件资源时,一般第一次需要输入密码,以后就无需输入密码直接登陆了。
如果要切换到其它 Samba 用户该怎么办?可以在windows下执行如下指令实现:
首先通过开始-->运行-->cmd
输入net use
命令查看现有的连接,然后执行net use \\Samba服务器IP地址
或者netbios名称\ipc$ /del
,删除 Samba 服务器已经建立的连接。也可以执行net use * /del
命令将现在所有的连接全部删除。
最后,再次执行\\ip地址
时,就又可以切换用户了。