linux下实现文件共享:搭建samba服务器
Posted Tuki_a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下实现文件共享:搭建samba服务器相关的知识,希望对你有一定的参考价值。
samba
什么是samba?
我们在使用Apache,ftp等服务共享服务时,并不能在client端做更改操作,搭建文件共享系统可以解决这个问题。
先说下什么是存储分离:
存储分离:所有的主机数据全部提交到存储服务器上,
那么即使一台主机挂掉,其他主机依然可以通过网络访问那台主机的数据,
这样可以防止把鸡蛋放到一个篮子里,降低风险。
在某台主机里把这台主机的文件系统共享出来,
共享的是磁盘或者文件系统的一些权力,不是共享某个文件。
Samba就可以实现存储分离。
Samba:
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
SMB协议:
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,
它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
SMB协议是客户机/服务器(C/S)型协议,
客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。
SMB使用了NetBios的应用程序接口 (Application Program Interface,简称API)。
另外,它是一个开放性的协议,允许了协议扩展。
最新的SMB改名为CIFS(Common Internet File System),并且加入了许多新的特色。
SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445。
如果客户端和服务器既有linux既有windows,
那么要用samba来实现linux和windows间文件共享
samba基本信息
服务启动脚本:smb.service
主配置目录:/etc/samba
主配置文件:/etc/smb.conf
安全上下文:samba_share_t
端口:139、445
安装包:samba、samba-common、samba-client
samba:这个套件主要包含了 SAMBA 的主要 daemon档案 ( smbd 及 nmbd )、 SAMBA 的文件档 ( document )、以及其它与 SAMBA 相关的logrotate 设定文件及开机预设选项档案等;
samba-common:这个套件则主要提供了 SAMBA 的主要设定档(smb.conf) 、 smb.conf 语法检验的测试程序 ( testparm )等等;
samba-client:这个套件则提供了当 Linux 做为SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 档案格式的执行档 smbmount等等。
samba的安装与启用
samba的安装:
dnf install samba samba-common samba-client -y
#安装了samba库、与Windows机器互操作的服务器和客户端软件、Samba服务器和客户端工具
samba服务启动:
systemctl enable --now smb.service
samba服务启用
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
得到一个详细的配置文件:
#原本的配置文件较简单,所以我们复制模板得到详细的配置文件
cd /etc/samba/
mv smb.conf smb.conf.backup
cp smb.conf.example smb.conf
测试:
smbclient -L //172.25.254.20 ##当要输入root密码时请直接回车,root密码默认没有
得到详细的配置文件
如图访问成功!
samba用户的建立
1.samba用户必须是本地存在的用户
useradd -s /sbin/nologin -M smbuser #先在系统中建立一个不能登录且不建立家目录的用户
2.samba用户的建立
smbpasswd -a smbuser #添加可以访问samba的用户
pdbedit -L #查看用户列表
pdbedit -x smbuser #删除用户
建立samba服务共享目录
如果是自己建立的共享目录,那么目录的安全上下文标签必须是samba_share_t !!!
mkdir /lucky #该目录用来共享
chmod 777 /lucky #防止文件本身权利的影响所以我们先给777权限
semanage fcontext -a -t samba_share_t '/lucky(/.*)?' #目录及目录里的内容都改标签
restorecon -RvvF /lucky/ #刷新标签
vim /etc/samba/smb.conf #编辑配置文件
添加:
[LUCKY] #共享名称
comment = lucky #共享说明
path = /lucky #共享路径
writeable = yes #可写
systemctl restart smb.service
测试:
smbclient //IP/LUCKY -U smbuser #访问LUCKY这个共享目录
#输入exit可以退出
更改标签
更改配置文件
访问成功!
samba用户访问家目录
当给了上下文标签的时候,就只有samba用户可以访问,别的服务(比如Apache)就访问不了这个文件了,所以当别的服务想访问时(可以不改标签),只需要使samba对所有用户的读写权力开放即可。
当selinux开启时:
getsebool -a | grep samba #查看samba服务的“开关”
setsebool -P samba_export_all_rw on #打开“开关”使samba对所有用户的读写权力开放
测试:
在windows下:
\\\\172.25.254.20 ##访问
net use ##查看访问记录
net use * /del ##删除访问记录
在linux下:
smbclient //IP/LUCKY -U smbuser
挂载:
mount //192.168.187.129/LUCKY /mnt/ -o password=smbuser,username=smbuser
挂载成功!
测试完记得卸载掉!
samba的访问控制
vim /etc/samba/smb.conf #编辑配置文件设置
hosts allow 192.168.187. #只允许192.168.187.0/24这个网段访问samba
##当写到单独共享时只对此共享生效
hosts deny #当写到全局时对samba整体生效
##当写到单独共享时只对此共享生效
前面加;即是注释
写在全局的拒绝
访问被拒
把全局的拒绝注释掉,在LUCKY共享里单独写允许哪些访问
测试完记得卸载掉!
samba对共享的常用配置参数
writable = yes ##可写
write list = smbuser ##指定用户可写
write list = +smbuser ##指定组可写或者@
write list = @smbuser
valid users = lucky ##指定访问用户
valid users = +lucky|@lucky ##指定访问组
browseable = yes|no ##是否隐藏共享,yes否,no是,默认yes
guest ok = yes ##允许匿名用户访问,写这个就要写下面这个
map to guest = bad user ##写到全局设定中,在86行左右
#bad user映射成没有用户的身份,为了告诉系统guest是什么
admin users = lucky ##指定此共享的超级用户身份,此用户创建的文件属主会显示root
挂载测试:
mount //192.168.187.129/LUCKY /mnt/ -o password=smbuser,username=smbuser
只有smbuser组的用户有写权利(创建文件等)
lucky不是smbuer组的用户,没有写权利,创建文件被拒绝
把lucky加进smbuser组后有了写权利
设置允许匿名访问,修改两个地方
允许匿名访问后,让输密码直接回车就可以访问
测试完记得卸载掉!
samba的多用户挂载
我们在使用mount //192.168.187.129/LUCKY /mnt/ -o password=smbuser,username=smbuser这个命令进行挂载时,如果别人看了我们的命令历史就会知道我们的用户名和密码,而且在我们挂载上后即使切换用户,挂载依然生效(依然登录着),别的用户也能随便看我们的文件,这样不安全,cifs-utils插件就可以解决这个问题!
将用户名密码写进文件里,使用文件进行登陆,别人就看不到密码账号
dnf install cifs-utils -y #这个插件解决这个问题
man mount.cifs #查看帮助说明
vim /root/luckysmb #文件位置随意
写入文件的内容:
username=lucky
password=lucky
chmod 600 /root/luckysmb #只有文件的属主(也就是我们自己)能看
测试:
mount -o credentials=/root/luckysmb //192.168.187.129/LUCKY /mnt
#使用文件形式的账号密码登录
#credentials=/root/smbpass 指定认证文件
在客户端如果用普通的挂载方式,没有用过用户验证的人也可以访问samba服务,mount后su切换个用户登录也可以访问
下面这个命令可以解决这个问题:
mount -o credentials=/root/luckysmb,sec=ntlmssp,multiuser //192.168.187.129/LUCKY /mnt
#sec=ntlmssp 指定认证类型,支持多用户认证,让不能访问的用户可以做了认证访问
#multiuser 支持多用户,使切换到别的没做认证的用户不能访问
su - 其他用户
做认证:
cifscreds add -u lucky 192.168.187.129
#################################################################
[root@test /]$ cifscreds add -u lucky 192.168.187.129
Key search failed: Key has expired ##当遇到此报错信息,执行下面两条命令解决报错
[root@test /]$ cifscreds add -u lucky -d 192.168.187.129
Password:
[root@test ~]$ cifscreds clearall
用密码文件登录访问
挂载后切换用户,新的用户看挂载的目录被拒绝,做了认证后访问成功!
测试完记得卸载掉!
autofs+samba实现自动挂载/卸载samba共享
有的时候挂载上但不用,这样就占用了资源,应该在不用的时候自动卸载,autofs是可以实现在客户端自动挂载卸载的软件,实现客户端共享的优化,减少服务器的负载。
autofs:
在客户端实现自动挂载卸载的软件
autofs的主策略文件/etc/auto.master,访问共享时的挂载策略
autofs的主配置文件/etc/autofs.conf
dnf install autofs -y #安装autofs
systemctl enable autofs.service #启用autofs
配置方式:
vim /etc/auto.master #编辑主策略文件
写入:
/dir /etc/auto.samba #名字随意,只要是xxx.samba以samba结尾就可以
最终挂载点的上层目录 自动以子策略文件进行挂载
!!!最终挂载点的上层目录不需要实际存在!!!
#如果上层目录是/(根)目录,那么最终挂载点的上层目录要写成/-,尽量不要以根目录作为上层目录
#如果上层目录是/(根)目录,下面的子策略文件就的最终挂载点就要写绝对路径
编辑子策略文件(要和上面写的一致/etc/auto.samba):
vim /etc/auto.samba
最终挂载点 挂载参数 挂载资源
samba -fstype=cifs,credentials=/root/luckysmb,sec=ntlmssp,multiuser ://192.168.187.129/LUCKY
#-fstype=cifs,告诉你是samba共享
#这样自动挂载就会挂载在/dir/samba下,会自动产生这个目录,不需要我们手动创建,不用时自动卸载消失
vim /etc/autofs.conf
将15行的timeout=300改为3
##自动卸载时间默认300秒,我们改成3秒
重启使设置生效:
systemctl restart autofs
systemctl restart smb.service
测试:
我们上面写的配置最终挂载点是/dir/samba
所以直接cd /dir/samba就是自动挂载了!!!
cd /root换到其他目录,过了我们设置的等待时间(上面设置了3秒)即等待资源闲置超时,挂载资源自动卸载
df可以查看挂载情况
配置主策略文件
配置子策略文件
配置主配置文件
测试成功!
以上是关于linux下实现文件共享:搭建samba服务器的主要内容,如果未能解决你的问题,请参考以下文章
linux下实现文件共享:搭建nfs服务器(网络共享文件系统)
在Ubuntu16.04 64位下搭建samba,实现linux与windows之间的资源共享