RHEL7中安装Samba 并配置Firewalld、SELinux和Windows共享文件
本篇文章我们会介绍用Windows/Linux 配置Samba 和NFS 服务器以及Linux 客户端。如果企业内需要让你设置文件服务器用于协作或者配置很可能有多种不同类型操作系统和设备的企业环境,这篇文章就能派上用场。
在网上可以找到很多关于Samba 和NFS 背景和技术方面的介绍,我们省略了这些部分直接进入主题。
步骤一: 安装Samba 服务器
我们当前的测试环境包括两台RHEL 7 和一台Windows 8:
1.Samba/ NFS 服务器[box1 (RHEL 7): 192.168.0.18], 
2.Samba客户端#1[box2 (RHEL 7): 192.168.0.20]
3.Samba客户端#2[Windows8machine: 192.168.0.106]


测试安装Samba
在box1 中安装以下软件包:
#yumupdate && yuminstall samba samba-client samba-common
在box2:
#yumupdate && yuminstall samba samba-client samba-common cifs-utils
安装完成后,就可以配置我们的共享了。
步骤二: 设置通过Samba 进行文件共享
Samba 这么重要的原因之一是它为SMB/CIFS 客户端(LCTT 译注:SMB 是微软和英特尔制定的一种通信协议,CIFS 是其中一个版本,更详细的介绍可以参考 Wiki)提供了文件和打印设备,这使得服务器在客户端看起来就是一个Windows 系统(我必须承认写这篇文章的时候我有一点激动,因为这是我多年前作为一个新手Linux 系统管理员的第一次设置)。
添加系统用户并设置权限和属性
为了允许组协作,我们会在box1 中用 useradd 命令创建一个有两个用户(user1 和user2)的组finance 和目录/finance。
我们同时会把这个目录的组所有者更改为finance 并把权限设置为0770(所有者和组属主可读可写可执行):
#groupaddfinance
#useradduser1
#useradduser2
#usermod-a -G finance user1
#usermod-a -G finance user2
#mkdir/finance
#chmod0770/finance
#chgrpfinance /finance
步骤三: 配置SELinux 和Firewalld
在配置/finance 作为Samba 共享目录之前,我们需要像下面那样停用SELinux 或设置恰当的布尔值和安全选项(否则,SELinux 会阻止客户端访问共享目录):
#setsebool -P samba_export_all_ro=1samba_export_all_rw=1
#getsebool –a | grepsamba_export
#semanage fcontext –at samba_share_t"/finance(/.*)?"
#restorecon /finance
另外我们必须确保 firewalld 允许Samba 流量通过。
#firewall-cmd --permanent --add-service=samba
#firewall-cmd --reload
步骤四: 配置Samba 共享目录
现在我们来看看配置文件/etc/samba/smb.conf 并添加用于共享的章节section:我们希望组 finance 的成员可以浏览/finance 的内容,在里面保存/创建文件或者子目录(默认权限为0777,组所有者为finance):
smb.conf

[finance]
comment=Directoryforcollaboration of the company's finance team
browsable=yes
path=/finance
public=no
valid users=@finance
write list=@finance
writeable=yes
create mask=0770
Force create mode=0770
force group=finance
保存文件然后用testparm 工具进行测试。如果这里有任何错误,命令的输出或提示你需要如何修复。否则,会显示你Samba 服务器配置的回顾:


测试Samba 配置

如果你要添加另一个公开的共享目录(意味着不需要任何验证),在/etc/samba/smb.conf 中创建另一章节,在共享目录名称下面复制上面的章节,只需要把public=no 更改为public=yes 并去掉有效用户valid users写列表write list命令。
步骤五: 添加Samba 用户
下一步,你需要添加user1 和user2 作为Samba 的用户。要做到这点,你需要用smbpasswd 命令,它会和Samba 的数据库进行交互。会提示你输入一个命令用于你之后和共享目录连接:
#smbpasswd -a user1
#smbpasswd -a user2
最后,重启Samda,并让系统启动时自动启动该服务,确保共享目录对网络客户端可用:
#systemctlstart smb
#systemctlenable smb
#smbclient -L localhost –U user1
#smbclient -L localhost –U user2


验证Samba 共享

到这里,已经正确安装和配置了Samba 文件服务器。现在让我们在RHEL 7 和Windows 8 客户端中测试该配置。
步骤六: 在Linux 中挂载Samba 共享
首先,确保客户端可以访问Samba 共享:
# smbclient –L 192.168.0.18-U user2


在Linux 上挂载Samba 共享

(为user1 重复上面的命令)
正如任何其它存储介质,当你需要的时候你可以挂载(之后卸载)该网络共享:
#mount//192.168.0.18/finance /media/samba -o username=user1


挂载Samba 网络共享

(其中/media/samba 是一个已有的目录)
或者在/etc/fstab 文件中添加下面的条目以自动挂载:
fstab

//192.168.0.18/finance /media/samba cifs credentials=/media/samba/.smbcredentials,defaults 0 0
其中隐藏文件/media/samba/.smbcredentials(它的权限被设置为600 和root:root)有两行内容,指示允许使用共享的账户的用户名和密码:
.smbcredentials

1.   username=user1
2.   password=PasswordForUser1
最后,让我们在/finance 中创建一个文件并检查权限和属性:
1.   #touch/media/samba/FileCreatedInRHELClient.txt


在Samba 共享中创建文件

正如你看到的,用权限0770 和属主user1:finance 创建了文件。
步骤七: 在Windows 上挂载Samba 共享
要在Windows 上挂载Samba 共享,进入 ‘我的计算机’ 并选择 ‘计算机’,‘网络驱动映射’。下一步,为要映射的驱动分配一个驱动器盘符并用不同的认证身份检查是否可以连接(下面的截图使用我的母语西班牙语):

在Windows 中挂载Samba 共享
最后,让我们新建一个文件并检查权限和属性:



在Windows Samba 共享中新建文件

在Windows Samba 共享中新建文件
#ls-l /finance
这次文件属于user2,因为这是我们用于从Windows 客户端中连接的账户。