首先安装并配置samba
在日常工作中我们可能经常会遇到在Linux和Windows系统之间相互传递文件的事情,像这种情况我们可以使用类似于FileZila这种软件,但是如果我们有很多的Windows系统,那么就需要在所有的Windows系统中安装这种软件。为了解决这个问题,我们可以在Linux系统中安装samba软件。当然这个软件的功能还有很多,要想详细了解可以到百度百科:
https://baike.baidu.com/item/samba/455025?fr=aladdin
一、进行软件安装
进行samba的安装,首先要配置好yum源,然后使用以下命令:
~]# yum install samba
然后启动下面这两个服务,其中nmb.service是NetBios协议,这是一个简短的主机名解析协议,如果这个服务没有开启的话,就不能识别别人的主机名;smb.service是Service Message Block――服务消息块。这两个服务必须全部开启才能进行正常的访问:
~]# systemctl start nmb.service ~]# systemctl start smb.service
二、配置文件含义
在安装完成之后会在“/etc/samba”下自动生成两个配置文件――lmhosts和smb.conf,其中lmhosts是针对主机进行解析,但是只有在使用samba的时候生效,和“/etc/hosts”是两个不沾边的东西;另外一个配置文件smb.conf则是samba这个软件的配置文件,这个配置文件中所有的配置信息分成了两类,第一类是全局配置信息,这部分负责设置samba服务的整个工作环境,第二类是共享定义,分别由下图中这两个东西隔开:
在全局配置中又分出了三个更加详细的部分,分别是:
Network Related Options 在这里配置网络的接口信息Logging Options 在这里配置日志信息Standalone Server Options 在这里配置安全等信息
在Network Related Options中有以下几个参数:
workgroup = MYGROUP 设置工作组名(一般保持和windows中一致)
server string = Samba Server Version %v 设置服务器名字
netbios name = MYSERVER 设置当在Windows中访问时所用到的名字
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 设置网络接口信息
hosts allow = 127. 192.168.12. 192.168.13. 设置允许访问此服务器的IP地址范围
在Logging Options中有以下两个参数:
log file = /var/log/samba/log.%m 设置日志文件保存位置
max log size = 50 设置日志最大条数
在Standalone Server Options中有以下几个参数
security = user 设置samba服务的安全级别,取值有四个,分别是:
share级别:匿名共享,允许所有人以来宾用户身份匿名访问所有的共享目录
user级别(主流、默认):使用samba服务自我管理的账户和密码进行用户认证;用户账户必须首先是系统用户,但是密码并非为/etc/shadow中的密码,而是由samba自行管理的数据库文件中存放的密码;存放密码的文件的格式由passdb backend指令进行定义
server级别:由第三方服务器进行统一用户身份认证
domain级别:使用域控制器进行用户身份验证;基于kerberos协议进行
passdb backend = tdbsam 设置即用户后台,有三种后台,分别是:
smbpasswd,tdbsam,dapsam(在这里着重记住smbpasswd和tdbsam,后面还会提到)
以上为全局配置信息,在没有必要的时候一般不需要去更改,而我们经常做的操作是修改共享的配置信息,即Share Definitions,在这里边又分为了三类,分别是:
[homes]――为每个samba用户定义其是否可以通过samba访问自己的家目录
[printers]――定义共享打印机
[share_fs]――定义共享目录或文件系统
在共享配置中经常使用到的指令有以下几种:
comment:注释信息
path:定义当前共享的目录的路径,建议使用绝对路径
browseable:是否可以被浏览,其实指的是是否能够在访问的页面里直接被看到(虽然看不到,但是有可能访问的到)
public:是否将共享的目录公开给所有的用户访问,一般与“share”安全级别同时使用
guest ok:是否允许来宾账户访问
注:public = yes 相当于 guest ok = yes
writable:对共享目录是否有“写”共享权限;针对于所有的合法用户
read only:对共享目录是否有“只读”共享权限;针对于所有的合法用户
注意:writable = yes 相当于 read only = no
write list(这个才是真正控制访问的) = username @groupname +groupname:允许哪些用户或组对此共享目录有“写”共享权限
valid users = username @groupname +groupname:定义哪些用户或组为此共享目录的有效访问用户
注意:
writable = yes +valid users = username @groupname +groupname 相当于write list = username @groupname +groupname
create mode = 0644:通过共享方式创建的文件的默认权限
dir mode = 0755
directory mode = 0755(和上面的是一样的)
上述两个指令的意思是:通过共享方式创建的文件的默认权限
上面所说的这些配置信息在“/etc/samba/smb.conf”都可以查看到,如果英语好可以直接使用man命令查看帮助:
~]# man smb.conf
当然,上面所列举的配置参数并不全,如果想了解更多可以访问:
http://linux.chinaunix.net/techdoc/system/2006/02/14/927715.shtml
在说完配置信息之后,我们再回头看全局配置信息的第二行,有个%v,如图:
这是samba的配置文件中使用的宏,一些常用的宏如下(全部的宏也可以通过man手册查看):
%v:samba程序的版本号
%m:客户端主机的NetBIOS名称
%H:当前用户的家目录的路径
%U:当前用户的用户名
%g:当前用户的属组的组名
%h:当前samba主机的HOSTNAME
%I:当前的系统日期和时间
三、进行配置
在修改配置文件的时候其实并不用修改很多,只需要在其中加入自己的配置信息即可,像现在,我需要将“/myshare”文件进行共享,允许IP号为172.16.0.0掩码为16的主机通过在组mytest中的mytest用户访问,只需要将下面的信息写入“/etc/samba/smb.conf”中最后面即可:
[myshare]
comment = my shared directory for LAN
hosts allow = 172.16.
path = /myshare
public = no
browsable = yes
write list = @mytest mytest (@后面跟的是组名,另一个是用户名)
create mask = 0644
dir mask = 0755
添加之后保存退出即可,但是现在我们还不能开启服务,因为samba要求登陆的用户和组必须在系统中真实存在,所以我们要先建立对应的组和账户(也可以创建一个用户,然后添加到相应的组中):
~]# useradd mytest~]# passwd mytest
然后我们创建要共享的目录并修改其属组、属主和权限:
[root@localhost ~]# mkdir /myshare[root@localhost ~]# chmod 1777 /myshare[root@localhost ~]# chown mytest:mytest /myshare/
在添加了系统账号以后还需要将这个账号作为samba的账号,使用的命令会根据配置文件的不同而有所不同,还记得上面提到后面还会说的那个参数么,就是“passdb backend”,如果他的参数是smbpasswd就使用smbpasswd命令:
smbpasswd:
-a:添加samba用户
-x:删除samba用户
-d:禁用samba用户
-e:启用被禁用的samba用户
而如果参数是tdbsam的时候就使用pdbedit命令:
pdbedit:
-L:列出所有被成功添加的samba用户
-a,--create:添加samba用户
-u username:指明要管理的用户面积大幅海南板块vde
-x,--delete:删除samba用户
-t,--password
在进行配置的时候我并没有修改这个参数,所以它依然保持默认的“tdbsam”:
所以下面我要用pdbedit命令来添加账户到samba中:
添加完成之后可以使用“-L”选项查看是否添加成功:
四、开启服务
到此,一个基于samba的文件共享配置就完成了,下面开启此服务即可(可以使用testparm命令测试配置文件的语法是否正确)(如果是CentOS 6使用service进行开启):
[root@localhost ~]# systemctl start smb.service[root@localhost ~]# systemctl start nmb.service
下面就在windows系统中进行远程连接,首先到我的电脑中,在空白处右键-->添加一个网络位置
然后一直下一步,直到这一步:
在这里输入的格式为“\\刚才进行配置的主机IP\刚才写到配置文件中第一行[]中的内容”:
然后再点击下一步就会跳出要输入账号密码的弹框(如果没有跳出来请检查上面的步骤是否做错或者刚才进行配置的主机上防火墙和SELinux是否关闭),账号是mytest,密码是mytest的密码:
之后一路点击下一步至结束,返回我的电脑就可以看到如下图所示的图标:
然后我们就可以通过这个文件夹来进行windows系统和linux系统之间的文件共享了。
samba与wordpress
将samba和wordpress放到一起只是为了举这么一个例子,在有的时候web页面的开发人员已经将开发后的web页面上传到服务器上开始运行,但是在过了一段时间之后,发现这个页面有了点小问题需要修改,于是就要在自己的电脑上进行修改,修改的时候还需要记住修改了哪里,然后到服务器上通过软件再修改一遍,这无疑是大大增加了开发人员的工作量。而如果我们将服务器上存放网页的那个目录通过samba的方式挂载到开发人员的电脑上,那么开发人员只需要修改一次就好了。
一、上传软件
首先将从网上下载到的wordpress压缩包拷贝到分享目录中(下载地址参考前几篇博客):
然后鼠标右键点击解压到当前文件夹:
在解压完成之后就会看到如下图所示的wordpress文件夹:
回到xshell中使用命令查看,发现刚才上传的文件的属组和属主都是“mytest”:
二、进行配置
在文件上传完毕之后就要开始配置了,由于在这台主机上我已经配置过wordpress,所以现在直接复制一份配置文件:
~]# cp /etc/httpd/conf.d/vhost-mywebwordpress{,bysamba}.conf
将配置文件中的内容修改为:
NameVirtualHost *:80<VirtualHost *:80> ServerName myshare.wordpress.com DocumentRoot /myshare/wordpress ErrorLog logs/wordpress-error_log CustomLog logs/wordpress-access_log combiend <Directory "/myshare/wordpress"> Options None AllowOverride None Require all granted </Directory></VirtualHost>
然后再从原来配置好的wordpress中复制一份配置文件(如果之前没有配置过,那么可以到下面这个链接查看):
(http://11142243.blog.51cto.com/11132243/1964468)
~]# cp /myweb/wordpress/wp-config.php /myshare/wordpress/
最后重新载入配置文件(如果失败的话有可能是httpd服务还没有开启,要先开启服务-将reload改成start):
~]# systemctl reload httpd
此时,samba+wordpress就构建完成了,但是在使用的过程中,我发现不能上传图片:
原来使用wordpress登陆的时候默认使用的是apache账户,而“wp-content/uploads”这个目录对于其他用户没有“w”权限,所以才会报错,解决这个问题的方法有很多,在这里我就直接使用以下命令来给其赋予“w”权限:
~]# chmod o+w /myshare/wordpress/wp-content/
到这里,samba+wordpress的配置就完成了:
挂载的方式使用
上面已经完成了基础的wordpress+samba的配置,但是这只是在同一台机器上,毕竟一台机器的资源是有限的,所以我们可以将wordpress部署在一台机器上,然后通过挂载的方式挂载到刚才配置的主机上,这样就能实现简单的负载均衡,避免了一台主机过于忙碌而挂掉的事情。下面就进行相关的部署:
一、准备另外一台主机安装并配置Samba
在我的虚拟机上正好有一台IP为172.16.7.101的主机,我现在就在这台主机上部署samba,使用到的命令如下(详细的过程上面已经说过了,就不再重复了):
yum install samba #安装sambavim /etc/samba/smb.conf #修改配置文件(到上面去看)mkdir /myshare #创建要分享的文件useradd mytest #添加系统账户systemctl start smb.service #开启服务systemctl start nmb.servicepdbedit -a mytest #添加samba用户chown mytest:mytest /myshare/ #修改要分享的目录的属主和属组setenforce 0 #关闭SELinux防火墙iptables -F #清空防火墙列表(全部放行)
当上面的命令全都运行一遍之后,samba服务器就布置好了,在这里我们可以在windows系统中使用另一种方法连接:使用Win+R打开运行对话框,对话框中输入IP地址和目录,如图所示:
如果前头都没有出错,那么稍等一会就会跳出如下图所示的对话框:
在输入密码之后就会跳出如下图所示的文件夹(这种方式不会在我的电脑中创建快捷方式,适合临时使用或者测试):
二、复制文件并挂载使用
到了这一步,相信你也能猜到下一步该干什么了,就是将刚才在172.16.7.100主机上的wordpress所有文件复制到这个共享目录中,使用以下命令复制并修改属组和属主:
scp -r mytest@172.16.7.100:/myshare /chown mytest:mytest /myshare/ -R
为了避免出现意外,现在将172.16.7.100主机上原来的wordpress改个名字:
~]# mv /myshare/wordpress{,.bak}
改完名字之后再去访问http://myshare.wordpress.com/网址发现已经找不到了:
接下来我们要做的就是将172.16.7.101上共享的目录挂载到172.16.7.100的共享目录上,替换掉原来的wordpress,在172.16.7.100上使用以下命令完成挂载:
~]# mount.cifs -o username="mytest",password="123456" //172.16.7.101/myshare /myshare
但是这种方式不安全,因为密码被明文显示,所以我们可以将密码写到一个文件中,然后调用这个文件完成挂载:
mount.cifs -o credentials=/root/passwd //172.16.7.101/myshare /myshare
然后文件中写入以下内容:
username=mytestpassword=123456
或者将挂载信息写到“/etc/fstab”中实现开机自动挂载,但是不推荐这种方式,因为如果172.16.7.101这台主机在172.16.7.100这台主机开机之前没能正常开启samba服务,那么172.16.7.100这台主机有可能会启动失败。挂载信息:
//172.16.7.101/myshare /myshare cifds defaults,credentials=/root/passwd 0 0
在挂载完成之后回到刚才的网页再刷新,发现又可以连接了