SMB
- SMB(全称是Server Message Block共享信息块)是一个协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。
SMB 文件共享
- CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议在局域网上用于服务器文件访问和打印的协议。像SMB协议一样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
- 通用 Internet 文件系统 (CIFS,Common Internet File System ) 也称为服务器,是适用于Microsoft Windows 服务器和客户端的标准文件和打印机,共享系统息块 (SMB)
Samba 服务可用于将 Linux 文件系统作为 CIFS/SMB 网络文件共享进行共享,并将 Linux 打印机作为 CIFS/SMB 打印机共享进行共享。
CIFS和NFS的对比
- CIFS面向网络连接的共享协议,对网络传输的可靠性要求高,常使用TCP/IP;NFS是独立于传输的,可使用TCP或UDP;
- NFS缺点之一,是要求client必须安装专用软件;而CIFS集成在OS 内部,无需额外添加软件;
- NFS属无状态协议,而CIFS属有状态协议;NFS受故障影响小,可以自恢复交互过程,CIFS不行;从传输效率上看,CIFS优于NFS,没用太多冗余信息传送;
- 两协议都需要文件格式转换,NFS保留了unix的文件格式特性,如所有人、组等等;CIFS则完全按照win的风格来作。
Samba 服务的组成部分
- 软件包 :
Samba-common – Samba 的支持文件
Samba-client – 客户端应用程序
Samba – 服务器应用程序 - 服务名称:smb nmb
- 服务端口:通常使用 TCP/445 进行所有连接。还使用UDP137 ,UDP138 和 TCP/139 进行向后兼容
- 主配置文件:/etc/samba/smb.conf
实验准备
- 给两台虚拟机配置网络,修改主机名,搭建yum源。
- 服务端:
- 客户端:
samba服务器环境部署
服务端:
- 安装有关的服务,关闭防火墙,创建出共享目录
yum search samba
yum install samba-client.x86_64 -y ##客户端应用程序
yum install samba-common.x86_64 -y ##Samba的支持文件
yum install samba.x86_64 -y ##服务器应用程序
systemctl stop firewalld.service
[root@server ~]# getenforce ##查看此时selinux的状态
Enforcing
[root@server ~]# rpm -qc samba-common ##samba的配置文件
/etc/logrotate.d/samba
/etc/samba/lmhosts
/etc/samba/smb.conf ##主配置文件
/etc/sysconfig/samba
mkdir /westos ##创建共享目录
- 通过阅读配置文件得知,我们需要修改共享目录的安全上下文。
semanage fcontext -a -t samba_share_t '/westos(/.*)?'
restorecon -RvvF /westos/
ls -Zd /westos/
- 修改配置文件,重启服务并添加smb用户
vim /etc/samba/smb.conf ##最后写入:
321 [even] ##对外共享的名字
322 path = /westos ##共享的内容
systemctl restart smb.service
systemctl enable smb.service
useradd westos ##添加系统用户
smbpasswd -a westos ##添加smb用户
pdbedit -L ##列出smb用户
cd /westos/ ##在共享目录下新建文件
touch file{1..5}
ls
- 在客户端:
yum install samba-client -y
systemctl stop firewalld.service
smbclient -L //172.25.254.224
smbclient //172.25.254.224/even
smbclient //172.25.254.224/even -U westos
mount //172.25.254.224/even /mnt -o username=westos,password=westos
配置文件中的参数说明
每次在服务端修改完配置文件需要重启服务`systemctl restart smb.service`
1>comment = local directory westos 显示说明
- 在服务端修改配置文件
/etc/samba/smb.conf
:
- 在客户端测试:
smbclient -L //172.25.254.224
2>browseable=yes 可见,不隐藏;broweable=no 共享目录隐藏起来了,可以用,但-L看不到
-
在服务端:
-
在客户端:
smbclient -L //172.25.254.224
smbclient //172.25.254.224/even -U westos
3>valid users = westos 有效用户,也就是可以登陆的用户,中间可以用空格隔开,指定多个,除这些用户之外其他用户登陆失败。
- 在服务端,再添加几个smb用户:
useradd zhang
smbpasswd -a zhang
smbpasswd -a student ##将系统用户student添加到smb服务中
smbpasswd -x student ##取消对student的smb身份
pdbedit -L
- 客户端:
smbclient //172.25.254.224/even -U zhang
smbclient //172.25.254.224/even -U westos
4>valid users = @westos(+westos) westos组成员可以访问共享目录
- 服务端:
id zhang
usermod -G westos zhang ##把用户zhang加到westos组里
id zhang
- 客户端:
5>writeable = yes 服务允许所有人可写,就是可上传可删除 - 服务端:
- 客户端:
客户端该用户还是不能上传和删除,是因为虽然服务允许了,但是文件系统的权限限制了,需在服务端的目录给用户特殊权限才行。
- 我们在服务端给zhang对目录的特殊权限,再在客户端测试:
[root@server westos]# setfacl -m u:zhang:rwx /westos/
[root@server westos]# getfacl /westos/
getfacl: Removing leading '/' from absolute path names
# file: westos/
# owner: root
# group: root
user::rwx
user:zhang:rwx
group::r-x
mask::rwx
other::r-x
但是其他用户此时不能上传和删除文件,如果要删除或上传,需要给指定的用户特殊的权限才可以,或者在服务端把目录的权限该为777。
6>write list = zhang可写
- 在服务端:
- 客户端测试,zhang可写,student不可以,即使student对目录有特殊权限也不可以
7>write list = @zhang zhang这个用户组的成员可写 - 服务端:
将student加入zhang的组中:
- 客户端:
此时student可以上传和删除了,因为除此之外他对目录也有特殊权限:
默认情况下匿名用户可以登陆成功但看不到其中的内容:
8>guest ok = yes 允许匿名用户登陆 - 服务端:
- 客户端:
但是匿名用户此时仍然不能挂载
9>map to guest = bad user 把匿名用户映射成guest,让mount识别到匿名用户的身份,可以挂载。 - 在服务端:
- 在客户端:
mount //172.25.254.224/even /mnt -o username=guest
df
10>admin users=zhang: zhang登陆之后,就变成了这个目录的root,用的是超户的身份
- 服务端:
- 客户端:
- 服务端:
workgroup = helloeven 工作组的名字 - 服务端:
- 客户端:
smb多用户挂载
下面的这种挂载方式会露出密码,而且某个用户挂载的内容其他用户也可以看的到,这种方式很不安全:
-
在客户端:
-
我们可以在客户端安装可以实现多用户挂载的cifs服务,并通过man手册查看该服务的具体配置信息:
yum install cifs-utils.x86_64 -y
man 8 mount.cifs
- 我们新建一个文件
/root/smbauth
,里面写入服务端smb用户的用户名和密码,并修改文件的权限,默认情况下只有root用户可读写:
vim /root/smbauth
username=westos
password=westos
chmod 600 /root/smbauth
ls -l /root/smbauth
- 通过这种方式可以直接挂载,而不显示出密码:
mount //172.25.254.224/even /mnt -o credentials=/root/smbauth
df
- 但是此时其他用户还是可以看到root用户挂载目录下的内容:
- 我们按照下面的格式挂载,表示认证的方式是采用多用户挂载:
mount //172.25.254.224/even /mnt -o credentials=/root/smbauth,sec=ntlmssp,multiuser
- 用户linux要是想看目录下的内容,需要得到一个服务端smb用户的身份才可以:
cifscreds --help ##--help查看此命令的用法
cifscreds: unrecognized option '--help'
Usage:
cifscreds add [-u username] [-d] <host|domain>
cifscreds clear [-u username] [-d] <host|domain>
cifscreds clearall
cifscreds update [-u username] [-d] <host|domain>
cifscreds add -u zhang 172.25.254.224
cifscreds clear -u zhang 172.25.254.224
- 客户端:
- 服务端:
怎样实现永久挂载?
- 在客户端:
vim /etc/fstab
//172.25.254.224/even /mnt cifs defaults,credentials=/root/smbauth,sec=ntlmssp,multiuser 0 0