一、背景
FTP协议能让主机之间的文件传输变得简单方便,但是FTP协议的本质是传输文件。
举个栗子:当客户端想修改服务器上的test.txt,需要先get test.txt将文件下载下来,修改后再put test.txt
有没有一种方式能使客户端直接修改服务器的test.txt并自动更新服务器的上test.txt?那就是资源共享
二、基本概念
(1)SMB协议:服务器消息协议,旨在解决局域网内的文件或打印机等资源共享的问题。
(2)Samba服务程序:是实现SMB协议的免费软件。
三、安装和配置Samba
1、安装Samba服务程序的软件包,
yum install samba
运行后见到Complete!就成功了
2.建立访问共享资源的账户信息。Samba服务程序的账户信息数据库要求账户必须在当前系统中已经存在(简单的说就是选择一个目前系统中已经有的用户作为访问共享资源的用户)
pdbedit -a -u bjy //-a选项为建立Samba账户 -u选项为指定Smaba用户的名称为bjy,即选择bjy这个已经存在的用户作为访问共享资源的用户
执行了pdbedit指令之后会让你输入两次密码,这个密码可以与该用户之前登录linux时的相同,也可以不相同
3.创建用于共享资源的文件目录
mkdir /home/database // database就是共享目录,里面放的文件和文件夹等资源用于共享
chown -Rf bjy:bjy /home/database //将这个目录的用户和用户组修改为bjy用户下和bjy用户组下,这样可以使得bjy这个用户对database有读写的权限,方便后续操作
semanage fcontext -a -t samba_share_t /home/database //因为其他主机要访问/home/database,即要访问家目录下面的的东西,增加SElinux安全上下文,允许访问的操作
restorecon -Rv /home/database //让新的安全上下文立即生效
4、设置SElinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录
5.配置Samba服务程序的配置文件
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.[global]workgroup = MYGROUP security = userserver string = Samba Server Version %vlog file = /var/log/samba/log.%mmax log size=50passdb backend = tdbsamprinting = cupsprintcap name = cupsload printers = yescups options = raw[homes]comment = Home Directoriesvalid users = %S, %D%w%Sbrowseable = Noread only = Noinherit acls = Yes[printers]comment = All Printerspath = /var/tmpprintable = Yescreate mask = 0600browseable = No[print$]comment = Printer Driverspath = /var/lib/samba/driverswrite list = @printadmin rootforce group = @printadmincreate mask = 0664directory mask = 0775
[database] //这里的database是简历的共享会话名,最好和共享文件夹同名,避免混淆comment= Do not arbitrarily modify the database filepath=/home/database //这里要按照自己的共享文件的位置进行更改public=nowritable=yes
6.重启Samba服务程序并清空防火墙
systemctl restart smb //samba服务程序在linux系统中的名字就叫smb
systemctl enable smb
iptables -F
iptables-save > /etc/sysconfig/iptables //这句话是为了把防火墙当前的配置保存在文件里,使配置永久生效
四、功能验证1:Windows与linux之间共享文件
1、在windows上输入\\+linux的ip地址,点打开
2、如果是第一次使用,会让你输入用户和密码,这时候就输入3.2节所创建的用于共享资源访问的用户和密码,随后可以看见共享文件database,至于为什么用户bjy的家目录也会成为共享的文件,目前不是很清楚。另外需要注意的是,如果共享会话文件夹名更改为share,只要不改变Samba配置文件中的共享会话名(见第三节),下面这个database文件夹就还是叫database,而不会变为share。
3、在bjy和database里创建和修改文件、文件夹等,在linux上也可以同步看得见。
举个栗子:在database里新建 hhh.txt,在linux里可以看到这个文件
五、功能验证2:Linux和linux之间资源共享
因为实验环境有限,我在一个VMWare上面开了两个centos,模拟两个linux之间的共享
其中centos1 ip地址为192.168.153.129 (视为服务器)
centos2 ip地址为192.168.153.132 (视为客户端)
1、在centos2上安装支持文件共享服务的软件包cifs-utils
yum install cifs-utils
2、按照Samba服务的用户名、密码、共享域的顺序写入一个认证文件中。
vim auth.smb //新建一个auth.smb文件
在auth.smb中写入
username=wukong //写入的是centos2所配置的共享账户
password=123456 //如果不小心写成了centos的共享账户或者其他七七八八的账户
domain=MYGROUP //后面挂载的时候会被samba服务器拒绝挂载
修改认证文件的权限,仅root管理员才能够读写
chmod 600 auth.smb
3、在客户端上建立共享资源的目录/database,并把服务器共享资源的目录(/home/wukongshare)挂载在/database下。通俗一点说类似于:你和同学共享一本书(共享资源),轮到你看书时,你需要把书从同学的书架(/home/wukongshare)转放在你自己的书架(/database)上,随后你才能随时查看、改写。转放的过程就是挂载。
mkdir /datatbase //客户端创建共享目录
vim /etc/fstab//打开文件之后写入://192.168.153.129/wukongshare /database cifs credential=/root/auth.smb 0 0
现对写入内容的各参数进行解释:
(1) //192.168.153.129/wukongshare 是cent0s2(服务器)的ip地址和共享会话名称,不要以为/wukongshare是共享目录的绝对路径,其实这个/只是起分割作用,wukongshare是共享会话名称,在samba.conf文件中可以查询得到(见第三节)
(2)/database 是centos1(客户端)的共享目录 也是服务器共享目录的挂载点,这里是绝对路径
(3)cifs :表明使用CIFS协议进行挂载
(4)credential=/root/auth.smb
:指定用于访问远程共享的凭据文件,即使用/root/auth.smb文件中存储的凭据进行身份验证。
(5)两个0 0 是默认参数
随后,对fstab里的文件进行挂载
mount -a
4、在客户端创建文件夹kkk
在服务器的wukongshare下面能看见 kkk这个文件,同理在服务器的wukongshare下删除、创建文件时,在客户端的database里也能看见
六、思考与总结
1、挂载点问题
在第三节配置时共享文件是设置的/home/database,因为是家目录下的文件,需要考虑SElinux安全上下文的限制,在第三节配置时添加了一条安全上下文。由此,实现了linux和windows的通信。
在linux与linux之间共享资源时,客户端新建了/database文件作为共享文件,因为是在根目录下,此时没有改selinux的安全上下文。但是为什么要多此一举创建两个共享目录?能否直接将将/home/database当作挂载点?
答:亲测,可以的。先利用umount /database 解挂载
然后在vim /etc/fstab 里把挂载点改在 /home/database上。
但是此时windows无法访问/home/database这个共享目录了,这是正常的,如果能访问那就危险了。想象,如果windows和centos1共享的文件能同时被centos2看到,那windows和centos1之间还有什么隐私可言?所以我们在设置挂载点的时候,最好不用之前的共享文件。
2.auth.smb文件里面的用户名和密码是是谁的重要吗?因为挂载后发现切换其他的用户也可以实现linux与linux之间的共享
答:重要。必须使用服务器(centos2)的账户和密码,否则挂载会失败。