一、samba服务介绍
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
端口号:
139 tcp/udp
445 tcp/udp
模式:C/S模式
二、实验过程
windows作为客户端访问服务器
1、先在linux上查看一下要安装的软件包
yum list | grep samba
图示三个软件包
samba-client.x86_64
#客户端软件,主要提供Linux主机作为客户端时所需要的指令集
samba-common-libs.x86_64
#主要提供samba服务器的设置文件与设置文件语法检验程序
samba.x86_64
#服务端软件
2、安装完毕后,启动服务
systemctl start smb
3、设置服务开机自启
systemctl enable smb
4、开启服务后,查看smb服务使用的端口是否正常监听
netstat -lntup | grep smb
只要发现139和445端口都处于LISTEN状态,就说明服务成功启动了。
5、用户的创建
(1)先在系统中创建用户
useradd -s /sbin/nologin tom
useradd -s /sbin/nologin jim
#创建用户,但该用户无法登陆系统。可以保护主机的安全
(2)在samba服务中添加用户
smbpasswd -a tom
smbpasswd -a jim
#将用户添加到samba服务器中并设置访问密码
smbpasswd tom
#如果忘记密码,可以通过该命令进行修改
(3)查看添加到samba服务器中的用户
pdbedit -L
(4)创建IT组,并把用户添加到IT组里
groupadd IT
usermod -G IT tom
usermod -G IT jim
6、共享文件夹的配置
mkdir /share #创建一个共享文件夹、
chgrp IT /share #改变文件或目录所属的用户组
chmod 770 /share
cp /etc/passwd/share #向共享文件中复制一个文件
7、配置smb.conf文件
vim /etc/samba/smb.conf
在文件最后一行添加如下内容:
[smbshare] #设置共享名,即其他成员看到的共享文件夹的名称
comment = This is a share file #共享文件的描述
path = /share #共享文件的路径,要写绝对路径
public = no #不公平
valid users = tom
#允许访问共享的用户,多个用户之间用逗号隔开。或者直接添加组valid users = @组名
write list = tom #允许写入共享的用户
配置完毕后重启服务
查看更多配置信息,可以查看文章末尾的扩展笔记
8、防火墙的配置
代码如下:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.91.0/24
service name=samba accept'
设置完重载防火墙
firewall-cmd --reload
SElinux(内核防火墙)的配置(两种方法)
(1)关闭SElinux
vim /etc/selinux/config
将SELINUX=enforcing改为disabled
(2)设置Selinux对/share/ 文件放行
chcon -R -t samba_share_t /share
#####SELINUX的三种模式
Disabled、Permissive 和 Enforcing
Disable工作模式(关闭模式)
SElinux被关闭
Permissive工作模式(宽容模式)
SELinux 被启用,但安全策略规则并没有被强制执行。当安全策略规则应该拒绝访问时,访问仍然被允许。
然而,此时会向日志文件发送一条消息,表示该访问应该被拒绝。
Enforcing工作模式(强制模式)
从此模式的名称就可以看出,在 Enforcing 模式中, SELinux 被启动,并强制执行所有的安全策略规则。
三、演示过程
1、windows访问samba服务器
在windows上按windows键+R键
在输入框中输入\\192.168.91.133(服务器的IP地址)
2、弹出一个登陆验证框,输入用户和密码
3、 进入文件,可以看到服务器中的文件
4、打开文件夹可以看到里边的文件
5、可以在共享文件夹中实现下载和上传
linux作为客户端访问服务器
(1)下载samba客户端
yum install samba-client
(2)我们先匿名登陆一下服务器,查看服务器中的资源
smbclient -L 192.168.91.133
#这里会提示你输入密码,直接回车就行
可以看到服务器中的共享文件夹是smbshare
(3)登陆服务器
smbclient -U tom //192.168.91.133 /smbshare
注意这里的共享文件夹名称是配置文件中的名称
(4)登陆后可以输入help可以查看相关操作
put 上传
mput 批量上传
#上传文件所在的目录是你当前所在的目录
get 下载
mget 批量下载
rm 删除文件
linux客户端临时挂载samba服务器
1、在客户端创建一个挂载点
mkdir /mnt/smb
2、进行挂载
mount -o username = tom //192.168.91.133/smbshare /mnt/smb
如果出现这种错误
yum install cifs-utils.x86_64
需要安装一个安装包
3、然后输入tom的密码
df -Th
挂载成功后可以看到samba服务器上的文件夹
同样,可以实现上传和下载
Linux客户端实现永久挂载
- vim /etc/fstab
- //IP/smbshare /挂载点 cifs username=用户名,password=密码 0 0
3.mount -a
4.通过这种方式可以将samba服务器挂载到客户端上,以后开机系统会默认挂载samba资源到本地,可以直接把文件存储到共享文件夹中。这时使用的就是服务器的空间。
5.但是通过这种方式挂载的服务器,会存在一个问题
因为文件里挂载的用户是tom,那么服务器中其他用户就失去了意义,服务器中做的用户限制也就失去了意义。
6.基于这种问题,我们可以做些改进
使用multiuser多用户认证模式
新建一个文件
Vim /root/user.txt
写入如下内容:
username=tom
password=12345
vim /etc/fstab
把samba服务器的配置修改一下
将username=tom,password=12345修改为
credentials=/root/user.txt,multiuser,sec=ntlmssp
#credentials表示借用/root/user.txt中的用户来进行挂载
可以把/root/user.txt中的数据当成一个管理员的账户,借用管理员的身份进行服务挂载,但不允许普通用户查看修改。(因为是在root目录下)
Multiuser:通过多用户认证的方式来进行认证
sec=ntlmssp:安全认证方式为ntlmssp
保存退出
重新挂载一下
umount /mnt/smb
mount -a
实验演示
useradd tom
useradd jim
切换用户
su – tom
cifscreds add ServerIP
将用户添加到samba数据库中,并且输入tom的密码
如果密码输入错误
cifscreds update ServerIP 重新输入密码
然后是jim,jim在samba服务配置中设置的是禁止访问
一般这种方式更适用于现实中主机的管理:给每台主机都进行samba服务的挂载,然后给予每台主机一个相对应的账户,就可以在服务器中进行用户的权限限制。
四、补充知识点
共享参数:
[共享名]
comment = 任意字符串
说明:comment是对该共享文件的描述,可以是任意字符串
path = 共享目录路径
说明:path用来指定共享目录的路径
browseable = yes/no
说明:browseable用来指定该共享文件是否可以浏览,如果想查看隐藏文件夹,要在IP地址后边加上共享文件夹的名称。
\\114.114.114.114\filename
writable = yes/no
说明:writable用来指定该共享文件是否可写
available =yes/no
说明:available用来指定该共享资源是否可用
admin users = 该共享的管理者
说明:admin users用来指定该共享的管理员(对该共享具有完全的控制权)
valid users = 允许访问该共享的用户
invalid users = 禁止访问该共享的用户
write list = 允许写入该共享的用户 (组名前面要加上一个加号)
#当与writable同时存在时,writable的权限高于write list
#write list = john,+IT
public = yes/no
说明:public用来指定该共享是否允许guest账户访问
guest ok = yes/no
说明:意义同”public”
host allow = 192.168.1.
说明:允许192.168.1.0/24网段访问
host deny = 192.168.1.3
说明:禁止192.168.1.3主机访问
host allow =192.168.1. except 192.168.1.3
说明:允许192.168.1.0/24网段访问,除了192.168.1.3
我使用的是4.6.2-8版本,发现hosts deny命令不起作用,想要禁止IP地址的同学可以使用hosts allow = …… except
五、清除Windows主机上的登陆账户的缓存信息
如果要进行多个用户登陆访问实验,可以利用这个进行清除之前登陆的用户缓存信息
打开命令行输入
net use * /delete