现在的位置: 首页 > 综合 > 正文

linux samba 安装与配置

2018年04月15日 ⁄ 综合 ⁄ 共 3578字 ⁄ 字号 评论关闭

前言:samba是一款实现局域网中linux与windows进行资源共享的软件,但它的功能远不只是进行资源共享,它同样可以配置成一台类似于windows server的域控制器~~windows与windows之间可以通过工作组(对等网络,且必须是局域网,计算机之间认证是独立的)和域(不对等,存在一个域控制器DC,由DC来对域中的所有计算机进行域名解析和认证)来进行资源共享。

安装时使用的是源码安装~可以到官网(http://www.samba.org/)上去下载源码,然后进行安装~

下载的是最新的samba-3.6.0.tar.gz,安装过程如下:

tar -zxvf samba-3.6.0.tar.gz 解压得到samba-3.6.0
cd samba-3.6.0

cat README,看看是否关于安装有特别的说明,这里没发现,但这个过程非常有必要,有时候一些错误就是配置的问题,而且很难找到问题所在~

find . -name configure 寻找configure文件

./source3/configure 这里有两个源码文件夹,我也没弄清楚,看到网上有人用的是source3,就直接按他的来了

cd source/

mkdir /usr/local/samba 创建安装目录
./configure --prefix=/usr/local/samba/ 安装到/usr/loca/samba
make && make install
cd /usr/local/samba/ 到安装目录看看

ls
bin include lib man private sbin swat var 安装成功

注意点1samba的两个服务程序放在/usr/local/samba/sbin中,分别是nmbd和smbd(不明白这两个服务程序作用的可以百度一下),如果这时候启动nmbd和smbd,则会产生找不到库文件的错误,错误类似于: error while loading shared libraries: libwbclient.so.0:
cannot open shared object file: No such file or directory,所以我们要把samba的共享库路径告诉计算机,在/etc/ld.so.conf中加入/usr/local/samba/lib,然后使用ldconfig命令~

安装完后,也会在/etc下产生一个samba文件夹,里面有两个文件lmhosts和smb.conf,其实这里/etc/samba文件夹没起作用~因为samba启动并非从这里获取配置文件,其实在官方文档有说明,配置文件smb.conf应该放在/usr/local/samba/lib下(这里/usr/local是samba安装的路径)~

但是/usr/local/samba/lib下并没有smb.conf,所以我们需要从/etc/samba下把smb.conf拷贝过来~

注意点2:如果你认为smb.conf应该放在/etc或/etc/samba下,你可以这时候启动nmbd和smbd,你会发现服务根本起不来;而且你又可能连哪里出错都不知道,因为在终端里没有报任何错误(这里我也搞的好久);后来,发现在/usr/local/samba/var文件夹下有nmbd和smbd的日志文件,可以打开日志文件查找错误原因,发现是找不到配置文件smb.conf

现在,我们需要配置smb.conf,这里我只做过把samba配置成一个简单的对等网络计算机,并没有尝试过配置samba成域控制器~

在smb.conf中,配置workgroup成所需要加入的工作组,配置netbios name,为计算机取一个局域网惟一标识名(这里关于netbios不明白的可看下关于netbios协议介绍),然后就是security,可以有四种情况,我只配了两种常用的情况share和user,passdb backend保持不变(这里samba用户账号和密码管理与以前的版本有差别)~~

这里我先介绍security = share,就是提供共享访问,不需要进行用户验证~

现在我们就可以启动服务,./nmbd -D和./smbd -D,-D是表示守护进程的意思~,然后你会发现可以在windows的网上邻居中的相应的工作组可以看到samba所在的计算机~我们可以直接访问,不过这时候只有默认的共享打印机服务~

我们也可以创建一个共享文件夹,比如share文件夹,然后在smb.conf的最后添加一个段,段名为share,然后里面的内容可以大概里面的示例来写~然后保存,重新启动samba服务,即./nmbd -D和./smbd -D,这里要注意,重启服务之前必须要先停止服务,我没有发现停止服务的命令,所以我们要使用pgrep nmbd和pgrep smbd获取进程号,然后使用kill来终止进程~这里还要说明一点,samba服务并需要使用root权限才能启动~samba是否正确启动要看启动日志文件,这里很容易出现错误,但是在日志文件中找不到出错原因,切记~

然后,你在windows网上邻居的对应工作组下可以看到共享的文件夹test,但是你无权访问,因为linux的每一个文件本身都有对应的权限,我们访问时没有提供任何的身份验证,肯定不能访问~

注意点3:linux下有一个用户,用户名为nobody,组也为nobody,如果我们把test文件夹的拥有者变为nobody(使用chown命令),这我们就可以在windows上访问test文件夹,但是也要注意文件的读写权限~

我们还没有添加samba用户,可以使用/usr/local/samba/bin下的smbpasswd命令来添加,删除samba用户,注意,这里samba用户必须首先为本地的系统用户,且使用smbpasswd时samba服务必须开启(这里我们smb.conf文件中global对应的security = share)~添加用户后,你会发现/etc/samba文件夹下多了两个文件,分别为passwd.tdb和secrets.tdb,我们的用户名和密码就保存在这里~

我们可以使用/usr/local/samba/bin下的smbclient来登录本机,发现只能进行匿名登录,也就是不能输入密码(如果只给定用户名不输入密码也认为是匿名登录)~如果给出用户名和密码,则会出现session setup failed:NT_STATUS_LOGON_FAILURE错误,这错误也就是认证错误,和用户名密码错误是一个意思~但是怎么会呢,输入的用户名和密码肯定是正确的,确实有点迷糊~~同样,你可以在windows网上邻居里进行访问共享文件,弹出认证对话框,但是对话框用户名是灰色的,为Guest用户,不让输入用户名,但是无论你输入什么密码,总是登录不上去~

注意点4:其实或许你没注意到,存在/usr/local/samba/private文件夹(也存在passwd.tdb和secrets.tdb),它是干什么的呢~它其实也是保存samba用户和密码的,那为什么添加用户时用户信息没有添加到这里的passwd.tdb呢,这就与smb.conf的配置有关了,如果配置文件中global字段的security
= user,则会把用户和密码信息保存在这里~

然后,我们修改smb.conf,使security = user,然后重启samba服务,使用smbpasswd添加用户,可以使用/usr/local/samba/bin下的tdbdump命令来查看passwd.tdb的内容,发现这时候用户信息确实添加进来了~,我们也可以使用smbclient登录本机,使用对应的samba用户名和密码,可以登录~在windows网上邻居对应的工作组里也可以访问共享文件,这时候弹出的认证对话框,可以输入用户名了,输入刚添加的samba用户名和密码,可以成功访问~

以上就是我配置samba过程中出现的一些问题,希望能给新手提供一点参考~

思考的一个问题:

如果我有一些目录是给所有用户共享的,即使用匿名认证就够了,但是有一些目录(用户属主为对应的samba用户,也存在对应的系统用户)具有私密性,必须要经过samba用户认证才能访问(这里先不谈linux文件本身及读写权限),那么应该如何配置smb.conf呢?

smb.conf中global字段的security要么=share,要么=usr,如果=share,则在windows网络邻居中登录计算机时不需要进行认证,可以访问支持匿名用户访问的文件,但是访问需要samba用户权限的文件时,则会出现没有权限的错误~同样,如果=user,则在windows网上邻居登录计算机时就需要认证,那就不能让匿名用户访问它可以访问的共享文件~

抱歉!评论已关闭.