如果局域网中既有Windows也有Linux,并且想要共享文件系统的话,我们该怎么办呢???
答案就是:使用SAMBA服务器!!!!SAMBA可以让Linux加入Windows的网上邻居支持,让不同的平台可以共享文件,非常好用!!!
那么,什么是SAMBA呢????
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成,提供CIFS协议实现文件共享通用internet文件系统,也称为SMB。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议, 它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、 打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
如何在LINUX下搭建SAMBA服务,并模拟Windows客户端访问呢????
首先我们要先配置好我们的实验环境:
我们用两台虚拟机模拟搭建服务器和客户端,设置服务端ip=172.25.254.222,客户端ip=172.25.254.122,并配置好yum源,方便我们接下来搭建服务时,安装各种安装包。
配置好实验环境,接下来就开始搭建SAMBA服务吧!!
配置服务端
第一步:安装samba服务,samba客户端以及samba-common
yum install samba samba-common samba-client -y
##samba 这个软件主要提供SMB服务器所需要的各项服务程序
##samba-common 主要提供服务器和客户端都会用到的一些数据,比如说smb.conf以及语法检测命令等。
注意:我们可以不在服务端安装samba-client,但是为了方便作后面的实验,我们最好把它也安装上
第二步:启动服务,并查看服务状态
systemctl start smb
systemctl status smb
第三步:将本地用户添加到smb用户,并查看
useradd westos
smbpasswd -a westos ##添加smb用户
pdbedit -L ##查看smb用户
第四步:设置selinux为警告模式并关闭火墙
getenforce ##查看selinux的模式
setenforce 0 ##设置为警告模式
systemctl status firewalld
systemctl stop firewalld
systemctl status firewalld
配置客户端
第一步:安装samba客户端
yum install samba-client -y
查看服务器提供的目录资源
smbclient -L //172.25.254.222 ##匿名查看服务器锁提供的共享的目录资源
smbclient -L //172.25.254.222 -U westos ##查看SMB用户能够尝试访问的资源
第二步:登陆samba服务器,实现共享共享目录/home/westos
注意: 不能匿名登陆,会报错
smbclient //172.25.254.222/westos
如何实现文件系统共享???
第一种方式:
smbclient //172.25.254.222/westos -U westos ##登陆samba服务器
第二种方式:
mount -o username=westos,password=lee //172.25.254.122/westos /mnt
测试:在客户端的/mnt下创建文件,在服务端查看客户端上传的文件
touch file{1..5} ##上传文件,可以在samba服务端看到
到此,我们的samba服务就搭建完成了,但是现在的服务是步安全的,任何主机都能够通过smb用户登录上我们的服务,这是很不安全的,那么问题来落,我们该怎样设置samba服务的权限,使我们的服务器变得安全呢????
samba权限设置
1.如何设置哪些主机能够访问服务?
服务端
1.权限设置,编辑 /etc/samba/smb.conf 文件
; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
; hosts allow = 127. 192.168.12. 192.168.13.
hosts allow = 172.25.254.222 ##允许哪些ip访问samba
; hosts deny =172.25.254.222 ##不允许哪些ip访问
重启服务,进行测试:
1.172.25.254.222测试
在文件中我们给172.25.254.222这个ip对应的主机设置的权限是可以访问,我们的实验结果也符合我们的预想!!
[root@shareserver yum.repos.d]# smbclient //172.25.254.222/westos -U westos
Enter westos's password:
Domain=[WESTOS] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
. D 0 Fri Nov 23 22:54:29 2018
.. D 0 Fri Nov 23 22:54:29 2018
.bash_logout H 18 Wed Jan 29 07:45:18 2014
.bash_profile H 193 Wed Jan 29 07:45:18 2014
.bashrc H 231 Wed Jan 29 07:45:18 2014
.mozilla DH 0 Thu Jul 10 18:29:32 2014
.config DH 0 Thu Jul 10 19:06:52 2014
40913 blocks of size 262144. 28459 blocks available
smb: \> quit
若我们在文件中我们给172.25.254.222这个ip对应的主机设置的权限是不可以访问,我们的实验中访问将会被拒绝!!
[root@client yum.repos.d]# smbclient //172.25.254.222/westos -U westos
Enter westos's password:
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
2.如何使客户端访问服务端自己创建的目录????
编辑/etc/samba/smb.conf文件
[linux] []中的内容表示客户端能看到的名称
comment = westos dir share
path = /westos ##客户端访问的绝对路径
注意:要先建立这个/westos目录,否则会出现报错
此时测试,会出现访问被拒绝的错误
这个时候我们去查看selinux,会发现selinux=enforcing
在selinux=enforcing的情况下,修改安全上下文
semanage fcontext -a -t samba_share_t '/westos(/.*)?'
restorecon -RvvF /westos ##逐层刷新安全上下文
再次测试:登录成功!!
smbclient //172.25.254.222/linux -U westos
3.如何使客户端访问服务端的系统目录?????
注意:如果设定的目录为系统目录,不能更改安全上下文
编辑/etc/samba/smb.conf文件
[opt]
comment=opt directory
path = /mnt
开启samba_export_all_ro on
setsebool -P samba_export_all_ro on
测试:
smbclient //172.25.254.122/opt -U westos
[root@shareserver yum.repos.d]# smbclient //172.25.254.222/opt -U westos
Enter westos's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
. D 0 Fri Nov 23 23:49:55 2018
.. D 0 Fri Nov 23 23:00:54 2018
file1 N 0 Fri Nov 23 23:49:55 2018
40913 blocks of size 262144. 28459 blocks available
smb: \> quit
4.其他权限设定
[linux] []中的内容表示客户能看到的名称
comment = westos dir share
path = /westos ##客户端访问的绝对路径
writable = yes ##允许所有人写
注意:put上传时,只能上传当前路径下的
write list = westos ##允许谁写 ##+/@westos 对组可写
valid users = westos ##允许谁访问服务
browseable=yes ##是否可以看见linux,no时不能看见
admin users = student ##student上传文件,文件的用户是root
guest ok = yes ##允许匿名登陆
还要设定map to guest = bad user ##将不合法的用户定义为guest
注意:一定要更改权限,否则会出现报错
chmod 777 /westos
测试结果如下:
(一)writable = yes ##允许所有人写
322 [linux]
323 comment = westos dir share
324 path = /westos
325 writable = yes
注意:put上传时,只能上传当前路径下的
(二)write list = westos ##允许谁写 ##+/@westos 对组可写
322 [linux]
323 comment = westos dir share
324 path = /westos
325 ; writable = yes
326 write list = westos
我们在文件中设置允许以westos身份登录共享时可写
以lee身份进行登录共享时,不可写
(三)valid users = westos ##允许谁访问服务
322 [linux]
323 comment = westos dir share
324 path = /westos
325 ; writable = yes
326 write list = westos
327 valid users = westos
(四)browseable=yes ##是否可以看见linux,no时不能看见
322 [linux]
323 comment = westos dir share
324 path = /westos
325 ; writable = yes
326 write list = westos
327 valid users = westos
328 browseable = yes
[root@shareserver ~]# vim /etc/samba/smb.conf 改为no 看不见
[root@shareserver ~]# vim /etc/samba/smb.conf ###改为no
322 [linux]
323 comment = westos dir share
324 path = /westos
325 ; writable = yes
326 write list = westos
327 valid users = westos
328 browseable = no
(五)admin users = westos ##westos上传文件,文件的用户是root
322 [linux]
323 comment = westos dir share
324 path = /westos
325 ; writable = yes
326 write list = westos
327 valid users = westos
328 browseable = no
329 admin users = westos
上传文件,并查看文件的所属用户
客户端的性能控制
在客户端没有进行多用户认证之前,在root用户下,以samba用户westos的身份进行登陆,可以进行上传下载,切换到student用户时也可以进行创建文件,虽然会出现被拒绝的报错,这样很显然是不合理的,我们要在客户端也能够不通用户的权限。
[root@client yum.repos.d]# mount //172.25.254.122/linux /mnt/ -o username=westos,password=lee
[root@client yum.repos.d]# cd /mnt
[root@client mnt]# ls
anaconda-ks.cfg file1 file2
[root@client mnt]# su - student
Last login: Thu May 11 20:23:54 EDT 2017 on pts/0
[student@client ~]$ cd /mnt
[student@client mnt]$ ls
anaconda-ks.cfg file1 file2
[student@client mnt]$ touch file3
touch: cannot touch ‘file3’: Permission denied
[student@client mnt]$ ls
anaconda-ks.cfg file1 file2 file3
[student@client mnt]$ ll ##实际上看到的是服务端/westos下的文件
total 1024
-rwxr--r-- 1 root student 8619 Nov 24 01:18 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Nov 23 23:00 file1
-rw-r--r-- 1 root root 0 Nov 23 23:00 file2
-rw-r--r-- 1 1001 1001 0 Nov 24 02:05 file3
切换到student用户下,
在服务端允许客户端访问samba服务后,客户端并不想让所有的用户都可以访问共享下来的目录中的文件,这个时候就需要在客户端进行性能控制,即增加安全锁,
samba安全锁,限制没有通过认证的客户对samba服务的权限,使得通过认证的用户才能访问共享目录
注意:实验之前先把匿名登录屏蔽掉,关闭匿名可访问
第一步:安装CIFS,模拟windows场景
yum install cifs-utils -y
CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议在局域网上用于服务器文件访问和打印的协议。像SMB协议一样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
第二步:解挂载
[root@client mnt]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3216184 7257716 31% /
devtmpfs 469344 0 469344 0% /dev
tmpfs 484932 140 484792 1% /dev/shm
tmpfs 484932 12796 472136 3% /run
tmpfs 484932 0 484932 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2340 451839 1% /home
/dev/sr0 3947824 3947824 0 100% /run/media/root/RHEL-7.2 Server.x86_64
//172.25.254.122/linux 10473900 3188616 7285284 31% /mnt
[root@client mnt]# cd ..
[root@client /]# umount /mnt
[root@client /]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3215924 7257976 31% /
devtmpfs 469344 0 469344 0% /dev
tmpfs 484932 140 484792 1% /dev/shm
tmpfs 484932 12796 472136 3% /run
tmpfs 484932 0 484932 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2340 451839 1% /home
/dev/sr0 3947824 3947824 0 100% /run/media/root/RHEL-7.2 Server.x86_64
第三步:编辑认证文件/root/smbpass
[root@client /]# vim /root/smbpass
username=westos
password=lee
更改文件权限为600,只有超级用户具有读写权限
[root@client /]# chmod 600 /root/smbpass
挂载服务端samba用户westos到客户端root用户/mnt上
[root@client /]# mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //172.25.254.122/linux /mnt
credentials=/root/smbpass/ ##指定本次root用户挂载时候的认证文件
sec=ntlmssp ##其他用户做认证用到的认证策略程序
multiuser ##多用户挂载模式
注意:root挂载的samba用户westos
切换到student用户下,挂载被拒绝,因为student用户没有经过认证,不能访问共享目录
认证用户,student挂载amba用户lee
注意:
如果想更换samba用户,则解挂之后重新挂载