Linux之cifs文件系统

1.smb的介绍

       Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,提供cifs协议,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

        CIFS (Common Internet File System)是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议在局域网上用于服务器文件访问和打印的协议。像SMB协议一样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文本传输协议和超文本传输协议的一个实现。

2.samba的安装与启用

服务端IP:172.25.254.104;客户端IP:172.25.254.204

(1)服务端

yum install   samba   samba-common   samba-client   -y    ##安装samba服务软件
systemctl   start  smb                                                      ##开启samba服务
systemctl   stop  firewalld.service                                     ##关闭防火墙

(2)samba的基本信息

ss -anltuple | grep smb                        ##查看smb占用的端口

端口:139/tcp  139/udp  445/udp 445/tcp

Linux之cifs文件系统

主配置文件: /etc/samba/smb.conf

(3)基本的配置信息

workgroup =  westos                 ##工作组的设定
server string= xiaofeng              ##全局共享信息

Linux之cifs文件系统

host deny  |  allow 172.25.254.204   ##客户端 黑|白 名单

Linux之cifs文件系统

设置172.25.254.204为黑名单之后,客户端就不能查看共享信息

Linux之cifs文件系统

(4)客户端测试

yum install samba-client -y          ###客户端安装samba-client服务

smbclient -L //172.25.254.104     ###连接172.25.254.104 共享的目录
Linux之cifs文件系统

3.本地用户的建立及访问
(1)本地用户建立
服务端:

samba用户必须是本地用户
useradd westos
useradd harry
smbpasswd -a westos         ###把westos用户添加到smb服务中

Linux之cifs文件系统

pdbedit -L              ##列出samba用户

Linux之cifs文件系统

pdbedit -x 用户名   ##删除samba用户

Linux之cifs文件系统

(2)客户端测试

smbclient  -L  //172.25.254.104  -U harry            ###查看harry用户共享信息

可以看到harry用户的共享名称,类型以及说明(默认共享为家目录)

Linux之cifs文件系统

在服务端设置的默认共享家目录的配置文件

Linux之cifs文件系统

smbclient //172.25.254.104/harry  -U harry      ##进入samba服务的harry用户

Linux之cifs文件系统

setsebool -P samba_enable_home_dirs on    ##在服务端开启访问权限

成功访问harry的家目录

Linux之cifs文件系统

在服务端查看harry家目录与客户端看到的一致

Linux之cifs文件系统

挂载之后可以方便samba用户使用系统命令,因为samba命令和系统命令不太一样;在服务端samba用户家目录下建立文件,samba用户在客户端也可以查看
(3)mount //172.25.254.104/harry /mnt/ -o username=harry,password=123   ##临时挂载
(4)vim /etc/fstab            ##永久挂载
:
//172.25.254.104/harry /mnt cifs defaults,username=harry,password=123   0  0

Linux之cifs文件系统

mount -a     ##**

Linux之cifs文件系统

在服务端harry用户家目录建立文件

Linux之cifs文件系统

在客户端查看samba用户harry的共享信息

Linux之cifs文件系统

4.共享目录设定(服务端)
(1)当共享的目录是用户自己建立时
mkdir  /sambadir1
semanage fcontext -a -t samba_share_t '/sambadir1(/.*)?'    ##永久更改安全上下文
restorecon -RvvF /sambadir1                     ##刷新
vim /etc/samba/smb.conf   (不用注释原本的系统家目录,因为是以DATA进入,不冲突)
:
[DATA]
comment = xiaofen
path = /sambadir1
Linux之cifs文件系统

测试(客户端):
smbclient -L //172.25.254.104/ -U harry

Linux之cifs文件系统

smbclient //172.25.254.104/DATA -U harry

Linux之cifs文件系统

一开始不能访问用户自己建立的目录,因为不符合samba服务的安全上下文,修改安全上下文之后成功访问

Linux之cifs文件系统

其实在服务端的配置文件中,已经给出了用户自己建立目录时不能访问的解决办法

Linux之cifs文件系统

(2)当共享的目录是系统目录时(系统目录也就是系统本身拥有的目录)

vim /etc/samba/smb.conf 
:

[SYSTEMDATA]
comment = /mnt
path = /mnt

Linux之cifs文件系统

测试:
smbclient   //172.25.254.104/SYSTEMDATA -U harry

Linux之cifs文件系统

可以看到没有访问到系统目录,内容不符

Linux之cifs文件系统

setsebool -P samba_export_all_ro on   ##和samba有关的端口全都打开,不用对特定的目录修改安全上下文

Linux之cifs文件系统

smbclient   //172.25.254.104/SYSTEMDATA -U harry 成功访问

Linux之cifs文件系统

5.权限控制

(1)匿名用户登陆权限开放
vim /etc/samba/smb.conf
:
guest ok = yes            ##匿名用户可以登陆

Linux之cifs文件系统

map to guest = bad user   ##把所有的匿名用户映射到guest上,以guest名称挂载

Linux之cifs文件系统

mount //172.25.254.104/DATA  /mnt -o  username=guest

Linux之cifs文件系统  

测试:
smbclient   //172.25.254.104/DATA
Linux之cifs文件系统
(2)用户可写
chmod 777 /sambadir1        ###/sambadir1只对root可写,所以给权限777
setsebool -P samba_export_all_rw  on             ###开启selinux里samba服务写的权限

Linux之cifs文件系统

samba服务没有给权限,不可写

Linux之cifs文件系统

vim /etc/samba/smb.conf
:
writable = yes         ##开启写权力

Linux之cifs文件系统

mount //172.25.254.104/DATA  /mnt -o  username=westos   ##DATA挂载到/mnt

Linux之cifs文件系统

write list = harry      ##写的权力对harry用户开放,开放write list = harry,设置writable = no

Linux之cifs文件系统

westos用户不可写,写的权力仅对harry开放

Linux之cifs文件系统

write list = +harry    ##写的权力对harry组开放

Linux之cifs文件系统

一开始tom用户不能写

Linux之cifs文件系统

usermod -G harry tom         ##把tom添加为harry的从属组,tom可以有了写的权力
Linux之cifs文件系统

Linux之cifs文件系统
在这里设置chmod 755 /sambadir1   ###因为设置westos用户为共享的root,满权限无法区分

admin users = westos   ##设定westos用户为当前共享的root

Linux之cifs文件系统

创建file4,共享root为westos(1002)

Linux之cifs文件系统

Linux之cifs文件系统

valid users = harry        ##设定当前共享的有效用户,不是有效用户不能挂载

Linux之cifs文件系统

westos用户不是有效用户不能挂载

Linux之cifs文件系统

browseable = yes | no   ##当前共享目录是否隐藏(no为隐藏,共享目录是/DATA)

Linux之cifs文件系统

Linux之cifs文件系统

Linux之cifs文件系统

Linux之cifs文件系统

6.samba多用户挂载()
(1)客户端
yum install cifs-utils -y
vim /root/sambapasswd
:
username=harry
password=123
Linux之cifs文件系统

chmod 600 /root/sambapasswd          ###只有超级用户能看
mount -o credentials=/root/smbpasswd,sec=ntlmssp,multiuser //172.25.254.104/DATA  /mnt
credentials=/root/smbpassword    ###挂载时的用户认证
sec=ntlmassp                              ###其他用户的认证方式
multiuser                                     ###支持其他用户的认证方式

Linux之cifs文件系统

(2)测试(要把valid users = harry注释,否则别的用户都不是有效的)
ls /mnt
su - student
ls /mnt
ls: reading directory .: Permission denied
在student下
cifscreds add -u westos 172.25.254.104         ###以服务端本地用户身份去查看
ls /mnt

Linux之cifs文件系统

touch /mnt/file9
可以看见建立file9所用到的用户身份时samba用户westos

Linux之cifs文件系统