您的位置:首页 > 运维架构 > Linux

CentOS7配置samba4.2到Win8

2016-07-05 11:29 323 查看
环境与目标的说明:VMware11内的系统CentOS7通过samba4.2共享文件夹到主机Win8上。

samba服务在配置的时候老是出错,让我非常郁闷,今天临睡前突然想到一个问题,我在securecrt上登录的是root账号,而samba上配置的是另一账号,结果导致权限不足。因为是用root登录的所以对权限不足一直没考虑到用户去,只是一直在考虑配置问题,想到这点后,起来测试下,果然可以了。

配置samba服务的过程还是遇到蛮多问题的,在这里简要记录下。

systemctl

CentOS7 与之前的版本有一个区别就是使用systemctl来管理系统上的服务

这个指令在之前的版本是没有的

启动一个服务:systemctl start smb nmb

关闭一个服务:systemctl stop smb nmb

显示一个服务的状态:systemctl status smb

在开机时启用一个服务:systemctl enable smb

在开机时禁用一个服务:systemctl disable smb

所以我们需要使用systemctl来管理samba服务的,不过如果使用之前的service命令的话也会自动重定向到systemctl上。

防火墙 和 selinux

如果没有配置过防火墙的话,会直接阻挡了samba服务。

网上很多教程都说要关了防火墙 service iptables stop ,但是发现iptables根本就没启动。还一度以为已经关闭了,其实CentOS7已经默认没用iptables了。CentOS7使用的防火墙是firewalld,我们需要使用 systemctl stop firewalld.service 关闭了防火墙。

直接关闭是比较简单粗暴的,最好配置成支持samba服务的。

重启系统后会发现防火墙又启动了,如果想要启动系统时不启动防火墙就使用上面说的指令

systemctl disable firewalld.service

这个命令类似于 chkconfig iptables off

把disable换成enable,或把off换成on 就是表明启动系统时也启动该服务

selinux 用 setenforce 0 关闭,getenforce查看当前等级状态

setenforce 0 是临时关闭,重启后还是会开启

如果要重启后生效,则需修改
/etc/selinux/config
文件,将 SELINUX=enforcing 改为
SELINUX=disabled


samba

配置samba的过程就是不断修改
/etc/samba/smb.conf
,重启samba,查看服务是否生效的过程。

一开始我并不知道有
testparm
smbclient
这么好用的工具,导致samba服务启动后就直接去windows上映射网路驱动器。这样的测试过程是非常低效的,因为映射失败后通过windows上的反馈,很难知道错误的原因。根本不知道是windows的问题还是centos的问题,是samba配置权限问题还是路径问题,还是配置文件无法解析的问题。我们需要一个能明确看到报错信息的地方。

这里对于解决此类配置问题有一个很好的启发就是要能够便捷修改,然后能够运行,在运行的基础上可以看到报错,继续修改。不然一切都是瞎忙活,可惜我花了好多时间瞎忙活,而没有去考虑这个解决问题的过程本身就出现的问题,无法有效看到问题的报错!

后来发现了两个重要的工具,testparm 和 smbclient 。

1

testparm 这个工具是用来测试smb.conf文件的配置是否正确,非常好用。可以通过这个工具的提示来查看那里配置出错。

2

smbclient 本地smb客户端工具,就算testparm测试通过也不代表能够正确连接,还是需要smbclient来进行测试连接的。

[root@bogon ~]# smbclient //192.168.204.128/regulus
Enter root's password:
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.2.10]
tree connect failed: NT_STATUS_ACCESS_DENIED


导致NT_STATUS_ACCESS_DENIED 报错的情况有多种,网上有教程说其中一种情况就是global的配置和共享目录的配置相互冲突的问题,大概是global的security=share和public=yes冲突的问题。

需要记录的一点是,samba4.2是不支持security=share的配置的,默认使用sercurity=user + map to guest=Bad User来等同于 sercurity=share的配置。

我配置的是不开放所有用户,只开放给指定用户,所以用了 sercurity=user,public=no。

共享目录配置了valid users,public不设置,默认为no。然而还是遇到了一个小坑,就是文章最开始讲到的,用户问题了。

以下为 smb.conf

[root@bogon ~]# vim /etc/samba/smb.conf
[global]
workgroup=WORKGROUP
netbios name=centos
server string=Samba Server
#security=share
security=user
#map to guest = Bad User
[regulus]
path=/home/regulus
#readonly=yes
writable=yes
browseable=yes
#guest ok=yes
valid users=root ## 问题在于这里的用户一开始不是root,而smbclient的使用者
write list=root  ## 就是root,所以有NT_STATUS_ACCESS_DENIED报错
create mask=0777
directory mask=0777
#public=yes
[root@bogon ~]#


win8

centos上的服务配置好了,win8上的操作就简单很多了,只需要 “映射网络驱动器”,然后 //IP/regulus , 要勾选 “使用其他凭证连接”。最后输入用户名和密码就可以连上去了。

反思

很多程序在配置过程中肯定会遇到问题的,关键的地方在于明确问题,然后有所针对地去修改。之前一直没弄好,就是连问题是什么都不知道!后面我又想到为什么不去查看下samba的日志呢,也许通过日志文件能能快速的发现问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息