supetan 2015-11-09
由于计算机很少作为一个独立的系统工作,作为一个系统管理员或工程师,就应该知道如何在有多种类型的服务器之间搭设和维护网络。
在本篇以及该系列后面的文章中,我们会介绍用 Windows/Linux 配置 Samba 和 NFS 服务器以及 Linux 客户端。
RHCE 系列第六部分 - 设置 Samba 文件共享
如果有人让你设置文件服务器用于协作或者配置很可能有多种不同类型操作系统和设备的企业环境,这篇文章就能派上用场。
由于你可以在网上找到很多关于 Samba 和 NFS 背景和技术方面的介绍,在这篇文章以及后续文章中我们就省略了这些部分直接进入到我们的主题。
我们当前的测试环境包括两台 RHEL 7 和一台 Windows 8:
<span class="lit">1.</span><span class="typ">Samba</span><span class="pun">/</span><span class="pln"> NFS </span><span class="pun">服务器</span><span class="pun">[</span><span class="pln">box1 </span><span class="pun">(</span><span class="pln">RHEL </span><span class="lit">7</span><span class="pun">):</span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.18</span><span class="pun">],</span>
<span class="lit">2.</span><span class="typ">Samba</span><span class="pun">客户端</span><span class="com">#</span><span class="lit">1</span><span class="pun">[</span><span class="pln">box2 </span><span class="pun">(</span><span class="pln">RHEL </span><span class="lit">7</span><span class="pun">):</span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.20</span><span class="pun">]</span>
<span class="lit">3.</span><span class="typ">Samba</span><span class="pun">客户端</span><span class="com">#</span><span class="lit">2</span><span class="pun">[</span><span class="typ">Windows</span><span class="lit">8</span><span class="pln"> machine</span><span class="pun">:</span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.106</span><span class="pun">]</span>
测试安装 Samba
在 box1 中安装以下软件包:
<span class="com">#</span><span class="kwd">yum</span><span class="pln"> update </span><span class="pun">&&</span><span class="kwd">yum</span><span class="pln"> install samba samba</span><span class="pun">-</span><span class="pln">client samba</span><span class="pun">-</span><span class="pln">common</span>
在 box2:
<span class="com">#</span><span class="kwd">yum</span><span class="pln"> update </span><span class="pun">&&</span><span class="kwd">yum</span><span class="pln"> install samba samba</span><span class="pun">-</span><span class="pln">client samba</span><span class="pun">-</span><span class="pln">common cifs</span><span class="pun">-</span><span class="pln">utils</span>
安装完成后,就可以配置我们的共享了。
Samba 这么重要的原因之一是它为 SMB/CIFS 客户端(LCTT 译注:SMB 是微软和英特尔制定的一种通信协议,CIFS 是其中一个版本,更详细的介绍可以参考 Wiki)提供了文件和打印设备,这使得服务器在客户端看起来就是一个 Windows 系统(我必须承认写这篇文章的时候我有一点激动,因为这是我多年前作为一个新手 Linux 系统管理员的第一次设置)。
添加系统用户并设置权限和属性
为了允许组协作,我们会在 box1 中用 useradd 命令创建一个有两个用户(user1 和 user2)的组 finance 和目录 /finance。
我们同时会把这个目录的组所有者更改为 finance 并把权限设置为 0777(所有者和组属主可读可写可执行):
<span class="com">#</span><span class="kwd">groupadd</span><span class="pln"> finance</span>
<span class="com">#</span><span class="kwd">useradd</span><span class="pln"> user1</span>
<span class="com">#</span><span class="kwd">useradd</span><span class="pln"> user2</span>
<span class="com">#</span><span class="kwd">usermod</span><span class="pun">-</span><span class="pln">a </span><span class="pun">-</span><span class="pln">G finance user1</span>
<span class="com">#</span><span class="kwd">usermod</span><span class="pun">-</span><span class="pln">a </span><span class="pun">-</span><span class="pln">G finance user2</span>
<span class="com">#</span><span class="kwd">mkdir</span><span class="pun">/</span><span class="pln">finance</span>
<span class="com">#</span><span class="kwd">chmod</span><span class="lit">0770</span><span class="pun">/</span><span class="pln">finance</span>
<span class="com">#</span><span class="kwd">chgrp</span><span class="pln"> finance </span><span class="pun">/</span><span class="pln">finance</span>
在配置 /finance 作为 Samba 共享目录之前,我们需要像下面那样停用 SELinux 或设置恰当的布尔值和安全选项(否则,SELinux 会阻止客户端访问共享目录):
<span class="com">#</span><span class="pln"> setsebool </span><span class="pun">-</span><span class="pln">P samba_export_all_ro</span><span class="pun">=</span><span class="lit">1</span><span class="pln"> samba_export_all_rw</span><span class="pun">=</span><span class="lit">1</span>
<span class="com">#</span><span class="pln"> getsebool </span><span class="pun">–</span><span class="pln">a </span><span class="pun">|</span><span class="kwd">grep</span><span class="pln"> samba_export</span>
<span class="com">#</span><span class="pln"> semanage fcontext </span><span class="pun">–</span><span class="pln">at </span><span class="typ">samba_share_t</span><span class="str">"/finance(/.*)?"</span>
<span class="com">#</span><span class="pln"> restorecon </span><span class="pun">/</span><span class="pln">finance</span>
另外我们必须确保 firewalld 允许 Samba 流量通过。
<span class="com">#</span><span class="pln"> firewall</span><span class="pun">-</span><span class="pln">cmd </span><span class="pun">--</span><span class="pln">permanent </span><span class="pun">--</span><span class="pln">add</span><span class="pun">-</span><span class="pln">service</span><span class="pun">=</span><span class="pln">samba</span>
<span class="com">#</span><span class="pln"> firewall</span><span class="pun">-</span><span class="pln">cmd </span><span class="pun">--</span><span class="pln">reload</span>
现在我们来看看配置文件 /etc/samba/smb.conf 并添加用于共享的章节(section):我们希望组 finance 的成员可以浏览 /finance 的内容,在里面保存/创建文件或者子目录(默认权限为 0777,组所有者为 finance):
smb.conf
<span class="pun">[</span><span class="pln">finance</span><span class="pun">]</span>
<span class="pln">comment</span><span class="pun">=</span><span class="typ">Directory</span><span class="kwd">for</span><span class="pln"> collaboration of the company</span><span class="str">'s finance team</span>
<span class="str">browsable=yes</span>
<span class="str">path=/finance</span>
<span class="str">public=no</span>
<span class="str">valid users=@finance</span>
<span class="str">write list=@finance</span>
<span class="str">writeable=yes</span>
<span class="str">create mask=0770</span>
<span class="str">Force create mode=0770</span>
<span class="str">force group=finance</span>
保存文件然后用 testparm 工具进行测试。如果这里有任何错误,命令的输出或提示你需要如何修复。否则,会显示你 Samba 服务器配置的回顾:
测试 Samba 配置
如果你要添加另一个公开的共享目录(意味着不需要任何验证),在 /etc/samba/smb.conf 中创建另一章节,在共享目录名称下面复制上面的章节,只需要把 public=no 更改为 public=yes 并去掉有效用户(valid users)和写列表(write list)命令。
下一步,你需要添加 user1 和 user2 作为 Samba 的用户。要做到这点,你需要用 smbpasswd 命令,它会和 Samba 的数据库进行交互。会提示你输入一个命令用于你之后和共享目录连接:
<span class="com">#</span><span class="pln"> smbpasswd </span><span class="pun">-</span><span class="pln">a user1</span>
<span class="com">#</span><span class="pln"> smbpasswd </span><span class="pun">-</span><span class="pln">a user2</span>
最后,重启 Samda,并让系统启动时自动启动该服务,确保共享目录对网络客户端可用:
<span class="com">#</span><span class="kwd">systemctl</span><span class="pln"> start smb</span>
<span class="com">#</span><span class="kwd">systemctl</span><span class="pln"> enable smb</span>
<span class="com">#</span><span class="pln"> smbclient </span><span class="pun">-</span><span class="pln">L localhost </span><span class="pun">–</span><span class="pln">U user1</span>
<span class="com">#</span><span class="pln"> smbclient </span><span class="pun">-</span><span class="pln">L localhost </span><span class="pun">–</span><span class="pln">U user2</span>
验证 Samba 共享
到这里,已经正确安装和配置了 Samba 文件服务器。现在让我们在 RHEL 7 和 Windows 8 客户端中测试该配置。
首先,确保客户端可以访问 Samba 共享:
<span class="com"># </span><span class="pln">smbclient </span><span class="pun">–</span><span class="pln">L </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.18</span><span class="pun">-</span><span class="pln">U user2</span>
在 Linux 上挂载 Samba 共享
(为 user1 重复上面的命令)
正如任何其它存储介质,当你需要的时候你可以挂载(之后卸载)该网络共享:
<span class="com">#</span><span class="kwd">mount</span><span class="com">//192.168.0.18/finance /media/samba -o username=user1</span>
挂载 Samba 网络共享
(其中 /media/samba 是一个已有的目录)
或者在 /etc/fstab 文件中添加下面的条目以自动挂载:
fstab
<span class="com">//192.168.0.18/finance /media/samba cifs credentials=/media/samba/.smbcredentials,defaults 0 0</span>
其中隐藏文件 /media/samba/.smbcredentials(它的权限被设置为 600 和 root:root)有两行内容,指示允许使用共享的账户的用户名和密码:
.smbcredentials
<span class="pln">username</span><span class="pun">=</span><span class="pln">user1</span>
<span class="pln">password</span><span class="pun">=</span><span class="typ">PasswordForUser1</span>
最后,让我们在 /finance 中创建一个文件并检查权限和属性:
<span class="com">#</span><span class="kwd">touch</span><span class="pun">/</span><span class="pln">media</span><span class="pun">/</span><span class="pln">samba</span><span class="pun">/</span><span class="typ">FileCreatedInRHELClient</span><span class="pun">.</span><span class="pln">txt</span>
在 Samba 共享中创建文件
正如你看到的,用权限 0770 和属主 user1:finance 创建了文件。
要在 Windows 上挂载 Samba 共享,进入 ‘我的计算机’ 并选择 ‘计算机’,‘网络驱动映射’。下一步,为要映射的驱动分配一个驱动器盘符并用不同的认证身份检查是否可以连接(下面的截图使用我的母语西班牙语):
在 Windows 中挂载 Samba 共享
最后,让我们新建一个文件并检查权限和属性:
在 Windows Samba 共享中新建文件
在 Windows Samba 共享中新建文件
<span class="com">#</span><span class="kwd">ls</span><span class="pun">-</span><span class="pln">l </span><span class="pun">/</span><span class="pln">finance</span>
这次文件属于 user2,因为这是我们用于从 Windows 客户端中连接的账户。
在这篇文章中我们不仅介绍了如何使用不同操作系统设置 Samba 服务器和两个客户端,也介绍了如何配置 Firewalld 和 服务器中的 SELinux 以获取所需的组协作功能。
最后,同样重要的是,我推荐阅读网上的 smb.conf man 手册 ,查看其它比本文中介绍的场景更加合适你的场景的配置命令。
正如往常,欢迎在下面的评论框中留下你的评论或建议。
via: http://www.tecmint.com/setup-samba-file-sharing-for-linux-windows-clients/
作者:Gabriel Cánepa 译者:ictlyh 校对:wxy
用户可执行文件:/bin、/usr/bin、/usr/local/bin. 系统可执行文件:/sbin、/usr/sbin、/usr/local/sbin. 内核数据与Bootloader:/boot