linux下samba服务器的搭建与配置

1.什么是samba?

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议
它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务
SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源
通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源
事实上, SAMBA 的安装一点也不难,而且在各主要 distribution上面都有提供,也都大同小异
所以,比较建议使用distribution 所提供的 RPM 档案来安装!当然,也可以自行使用Tarball 来安装!

使用 RPM或者yum来安装samba

使用 RPM 来安装真是一点都不难。不过,要注意安装的套件名称,因为不同的distribution 对于 RPM 档案的命名都不太一样!
举例, Red Hat 9 对于SAMBA 这个服务器总共需要至少三个套件,分别是:
samba:这个套件主要包含了 SAMBA 的
主要 daemon档案 ( smbd 及 nmbd )、 SAMBA 的文件档 ( document )、以及其它与 SAMBA 相关的logrotate 设定文件及开机预设选项档案等
samba-common:这个套件则主要提供了 SAMBA 的主要设定档(smb.conf) 、 smb.conf 语法检验的测试程序 ( testparm )等等;
samba-client:这个套件则提供了当 Linux 做为SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 档案格式的执行档 smbmount等等

2.搭建一个samba服务器

虚拟机的网络以及Yum源我已提前搭建好

 

编辑本地解析文件/etc/hosts,写入提供网络yum源的主机的ip

更改主机名

Desktop

server

 

接下来我将在desktop(172.25.72.100)这台主机上面搭建smaba服务器,用server(172.25.72.200)来进行测试

在client200客户端上面

yum install samba-client -y 安装这个服务,这个客户端才可以使用smb服务端的资源

在server100服务器上面

yum search samba 寻找可以提供

rpm -qa samba 查看samba服务的版本
rpm -ql samba-common 查看samba服务的主配置文件

getenforce查看一下selinux的状态
vim /etc/sysconfig/selinux编辑selinux的配置文件

reboot 重启主机

开机后再次查看

vim /etc/samba/smb.conf 查看samba配置文件里面的要求

可以看到如果selinux开启,必须更改samba共享目录的安全上下文

mkdir /westos在samba服务器上面建立一个共享目录
semanage fcontext -a -t samba_share_t '/westos(/.*)?'更改安全上下文
restorecon -RvvF /westos加载使其生效

vim /etc/samba/smb.conf编辑配置文件
加入:
[huan]samba服务器对外共享的总名称
path=/westossamba服务器实际共享的目录

systemctl restart smb 重启samba服务
systemctl enable smb 设置samba服务开机启动
systemctl status firewalld查看samba服务器防火墙的状态
systemctl stop firewalld关闭火墙

id westos查看samba服务器上面westos用户是否存在
smbpasswd -a westos建立westos用户为samba用户,必须先存在,才能假如samba用户
useradd westos先建立westos用户
smbpasswd -a westos将westos用户加入samba用户里面,并且设置密码
pdbedit -L查看samba服务器的samba用户

getenforce查看一下selinux的状态
cd /westos切换到samba服务器的共享目录下面
ls查看
touch file 建立准备用于在客户端测试的文件
ls查看

在client200上面(客户端)

smbclient -L //172.25.72.200 以匿名用户的身份查看一下samba服务器共享的目录(-L表示list列出)

smbclient //172.25.72.100/huan  -U westos 以smb服务器中westos用户直接查看215共享的文件
ls

这种方式只能查看,而想进行上传下载等操作,可以mount到本地

发现并不能删除和建立文件

3.在samba服务修改权限

加入服务端对共享目录的说明

重启服务
在客户端查看,在Comment处,有加入的Share File

browseable = no 隐藏这个共享目录,使客户端-L看不到samba服务器对外的共享目录,但实际是存在的

重启服务

valid users = westos
客户端只可以用samba服务器的westos用户身份来登陆samba

而lee用户就不可以登陆

valid users = +westos 表示只有属于westos组的用户可以登陆

 

pdbedit -L查看samba用户
useradd lee新建用户lee
smbpasswd -a lee加入samba用户的队伍里面
pdbedit -L列出samba服务器的samba用户
smbpasswd -a student(student是系统本身的本地用户,现在加到smb服务里面)
pdbedit -L列出samba用户
pdbedit -x student取消student用户的samba身份
pdbedit -L列出samba用户

再次用lee登陆,发现可以登陆了

writable = yes 表示可以写入

重启服务
用客户端:

发现此时还是不能上传和删除,为什么?因为虽然服务允许了,但是文件系统的权限还没有允许
ls -ld /ming查看文件夹权限,发现只对于root用户可写
现在给ming用户一个满权限

然后再测试

注意:文件系统的权限和服务权限都要开启

write list = lee 服务只允许lee用户对samba目录可写,这个和writable只能存在一个,开启这个就必须将writable注释掉

给文件权限系统加入lee用户满权限

此时westos用户,虽然文件系统有rwx权限,但是服务只允许lee用户可写,所以它仍不能上传删除文件

write list = @lee 表示属于lee组的用户可以写

用客户端westos用户登陆,发现还是无法上传,因为还没有把westos用户加入lee组

 

usermod -G lee westos
id westos

 

此时westos用户可以上传删除文件

guest ok = yes 使匿名用户可以登陆

此时匿名用户不能登陆

此时再次尝试,匿名用户可以登陆了

尝试用匿名用户挂载

 mount //172.25.72.100/huan /mnt -o username=guest.password=""

 

发现不能挂载,因为挂载这个进程没有识别smaba服务器的匿名用户
在配置文件中加入 map to guest = bad user 使挂载进程映射你名用户bad user

admin users = westos 将/westos_smb目录的root用户设置为westos用户

此时需要把writable权限也开开

用westos用户挂载/ming,然后上传文件file{7..10}
ll 查看文件的权限所属
发现file7-file10属于root用户,1001组,1001即为服务端westos组,只是因为客户端没有1001这个组所以就直接用组id表示,但是所属用户是root

如何共享系统文件夹,(非自己创建例如/mnt)

前文说到可以通过修改安全上下文的方式来使文件夹被共享,而如果我想共享系统/mnt目录,就不可以使用这个方法了
因为还有别的地方需要用到/mnt的安全上下文,如果修改了/mnt的安全上下文为smaba的就会导致别的地方不能使用/mnt
所以只能通过降低samba安全性的方法来使/mnt共享,这个方法就是修改Selinux的samba功能开关
getsebool -a | grep samba

 

发现都是关闭的状态

 vim /etc/smaba/smb.conf 写入共享/mnt的信息

在/mnt下创建10个文件,查看安全上下文,发现并不是smaba服务要求的安全上下文

在客户端用westos用户登陆后ls也不能看到10个文件

这时在服务端修改Selinux对于samba的服务控制
setsebool  -P samba_export_all_ro on(1) 打开只读权限 -P永久打开
客户端再次用westos用户登陆samba服务器

发现可以查看到10个文件了

尝试删除和上传文件,发现并不能

这时候需要再开启Selinux控制smaba的读写权限
setsebool -P samba_export_all_ro on(1) -P 永久打开
再次登陆,rm file10 还是不能删除,因为文件系统没有给westos对于/mnt的满权限,切换到samba端,给westos对于/mnt的满权限

再次用westos登陆,发现可以删除

如何实现samba的多用户挂载 在客户端做实验

刚才在服务端将smb服务设置好后,客户端实现挂载,对smb的共享目录进行修改
这时候客户端以服务端的westos用户进行登陆,而客户端的student用户可以看到root用户下的/mnt的挂载内容,这样就很不安全
应该客户端每一个用户在smb服务端中均有自己对应的smb用户
root ---->westos
student----->lee

先在root用户下,用smb端的huan用户挂载共享目录到/mnt下

 

在客户端切换student用户,cd /mnt 后仍然可以看到/mnt里的东西

此时需要在客户端安装可以实现多用户挂载的服务,客户端每个用户只能看到自己的挂载内容

切换到root用户 yum install cifs-utils -y 

man mount.cifs 查看cifs的挂载配置
vim /root/smb 写入挂载用户身份的认证文件

之前挂载的时候samba用户的密码和用户名是裸露在外的
现在把它写入文件里面
并且给这个文件一个600的权限,只能让root用户查看
chmod 600 /root/smb

mount //172.25.72.100/huan /mnt -o credentials=/root/smb 以认证文件的方式挂载,不用裸露用户身份

成功挂载
输入mount依然可以看到挂载的用户是westos

 

切换到student用户,发现仍然可以看到挂载到/mnt下的文件

卸载/mnt

 mount //172.25.72.100/huan /mnt -o credentials=/root/smb,sec=ntlmssp,multiuser  root用户挂载的时候不让别的用户看到自己的操作,并开启多用户挂载

再次切换用户student,发现不能看到/mnt里的内容了

现在为student用户创建挂载用户

cifscreds --help 查看多用户挂载的命令用法

cifsscreds add -u lee 172.25.72.100为本地student用户创建samba用户lee

cd /mnt切换到挂载目录
ls此时就可以看到/mnt里的内容了
touch file000 
ll 在客户端属于student用户的
cifscreds clear -u lee 172.25.72.100 取消samba用户

此时file00的所属用户是1002,是因为在客户端没有lee这个用户,而lee这个用户在服务端是1002,所以客户端显示的就是1002.
在服务端 可以看到file00是属于lee用户的

取消student用户的smaba用户lee
cifscreds clear -u lee 172.25.72.100
卸载,再次挂载,切换用户student,又不能看到了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值