文章目录
我们知道Windows系统之间可以共享文件系统和打印机,Linux系统采用Samba来实现共享文件系统和打印机的功能。通过SMB协议,Windows和Linux系统之间的文件系统和打印机可以互相访问。
SMB(Server Messages Block)协议是一种在局域网上共享文件系统和打印机的TCP应用层协议,它为局域网内的不同计算机之间提供文件系统和打印机的共享服务。SMB协议是客户/服务器型,Samba是在Linux系统上实现SMB协议的一个免费软件。
一、安装软件包
Samba涉及到四个软件包,有些功能您可能用不上,但是安装了也不会有问题。
1)samba:Samba服务器。
2)samba-client:Samba客户端。
3)samba-common:Samba服务器和客户端相关的软件。
4)cifs-utils:通用的Internet文件系统实用程序,支持与Windows、OS X和其他Unix系统进行跨平台文件共享。
yum -y install samba samba-client samba-common cifs-utils
二、修改系统配置
1、关闭SELINUX
修改/etc/selinux/config文件,把SELINUX参数的值改为disabled。
SELINUX =disabled
重启linux系统或执行 setenforce 0 使修改马上生效。
2、开通防火墙端口
Samba 涉及到以四个端口:UDP 137、UDP 138、TCP 139、TCP 445。
1)防火墙开通samba服务。
firewall-cmd --zone=public --add-service=samba --permanent
2)重启防火墙。
systemctl restart firewalld
3、启用smb服务
Samba的服务名是smb。
1)启动smb服务。
systemctl start smb
2)把smb服务设置为开机自启动。
systemctl enable smb
三、Samba服务的参数文件
Samba服务的参数文件是/etc/samba/smb.conf,在CentOS7版本的系统中,该文件的原始内容如下:
# 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 = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775
[global]组是全局参数,根据不同的需求,我们会修改部分参数。
[homes]组是用户主目录参数,我们不关心它。
[printers]和[print$]组是共享打印机参数,我们不关心它。
testparm命令可以测试smb.conf配置是否正确。
testparm -v命令可以详细的列出smb.conf支持的配置参数。
smb.conf文件的配置比较麻烦,网上有很多资料,但大部分不准确。我先不介绍smb.conf文件中参数的含义,我用实际应用的场景来介绍它的配置。
共享文件系统的应用场景主要有两种:
1)匿名方式:不需要输入用户名和密码,任何人都可以访问共享文件系统;
2)用户名/密码方式:需要用户名和密码成功登录后才可以访问共享文件系统。
四、配置任何人都可以访问的共享文件系统
例如您想把服务器/tmp/docs目录共享出来。
1、创建测试目录和文件
执行以下脚本,创建/tmp/docs目录,生成测试和文件,并指定用户和组。
mkdir /tmp/docs # 创建/tmp/docs目录。
ls /usr > /tmp/docs/usr.txt # 把ls /usr的结果输出到/tmp/docs/usr.txt文件。
ls /etc > /tmp/docs/etc.txt # 把ls /etc的结果输出到/tmp/docs/etc