1.1 SMB/CIFS协议
SMB(Server Message Block)又称CIFS(Common Internet File System),一种应用层网络传输协议(微软(Microsoft)和英特尔(Intel)在1987年制定的协议),由微软开发,主要功能是使网络上的机器能够共享计算机文件、打印机、串行端口和通讯等资源。它也提供认证的进程间通讯技能。它主要用在Windows的机器上。
CIFS是由microsoft在SMB的基础上发展,扩展到Internet上的协议。他和具体的OS无关,在unix上安装samba后可使用CIFS.它使程序可以访问远程Internet计算机上的文件并要求此计算机的服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。
CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议现在是局域网上用于服务器文件访问和打印的协议。像SMB协议一样,CIFS在高层运行,而不象TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
1.2 Samba软件
Samba是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。简而言之,此软件在Windows与UNIX系列OS之间搭起一座桥梁,让两者的资源可互通有无。
samba是许多服务以及协议的实现,其包括TCP/IP上的NetBIOS、SMB、CIFS等等协议。
2.1 samba服务的组成部分
Samba-common – 用来提供一些配置文件
Samba-client – 客户端应用程序
Samba – 服务端应用程序
samba在linux系统上的服务名称:smb
服务端口:通常使用TCP/445进行所有连接。还使用UDP137、UDP138和TCP/139进行向后兼容
主配置文件:/etc/samba/smb.conf
2.2 服务端(server虚拟机)的配置
使用该软件可以使windows和linux的资源共享,
接下来我们仅示例linux系统中共享文件后使用samba的操作,和windows共享文件之后在linux系统的操作一致
在服务端:
yum install samba-client.x86_64 samba-common.x86_64 samba.x86_64 -y
smbpasswd -a westos #创建smb登陆用户,必须为服务端主机存在的用户
pdbedit -L #查看系统中smb用户
当selinux=enforcing时,
mkdir /west #建立共享目录
semanage fcontext -a -t samba_share_t '/west(/.*)?'
restorecon -RvvF /west
vim /etc/samba/smb.conf
[LEE] #共享名称(等于作为磁盘名字)
path=/west #共享目录的绝对路径
systemctl restart smb
systemctl enable smb.service
systemctl stop firewalld
yum install samba-client
smbclient -L //172.25.254.133 发现共享出来的目录与文件
smbclient //172.25.254.133/LEE 不能登陆,需要用户
smbclient //172.25.254.133/LEE -U westos
挂载共享出来的目录:
mount //172.25.254.133/LEE /mnt -o username=westos,password=westos
cd /mnt
3.1 修改目录说明(comment)
vim /etc/samba/smb.conf
comment=west dir
systemctl restart smb
smbclient -L //172.25.254.133 #发现共享出来的目录与文件,会看到目录的comment改变
3.2 设置共享文件隐藏,但并不是代表没有共享,照样可以使用
vim /etc/samba/smb.conf
browseable=no (默认是yes)
systemctl restart smb
smbclient -L //172.25.254.133 发现不了共享目录
smbclient //172.25.254.133/LEE -U westos 但是可以登陆使用
服务端:
vim /etc/samba/smb.conf
valid users=westos 只允许用户westos登陆
systemctl restart smb
添加用户smb用户lee,student
useradd lee ;smbpasswd -a lee
pdbedit -L 查看该服务用户
pdbedit -x student 删除student用户
客户端:
smbclient //172.25.254.133/LEE -U lee 不可以登陆使用
smbclient //172.25.254.133/LEE -U westos 可以登陆使用
vim /etc/samba/smb.conf
valid users=+westos 允许用户组westos登陆,用户属于westos组都可以登陆(@符也可以)
systemctl restart smb
useradd -G westos lee
smbclient //172.25.254.133/LEE -U lee 可以登陆使用
服务端:
vim /etc/samba/smb.conf
writable=yes
systemctl restart smb
smbclient //172.25.254.133/LEE -U lee
put和rm不行,文件系统权限没有
setfacl -m u:lee:rwx /west
setfacl -m u:westos:rwx /west
客户端:
smbclient //172.25.254.133/LEE -U lee
smbclient //172.25.254.133/LEE -U westos 都可以进行写操作
vim /etc/samba/smb.conf
write list=lee
systemctl restart smb
smbclient //172.25.254.133/LEE -U lee 可以写
smbclient //172.25.254.133/LEE -U westos 不可以写
vim /etc/samba/smb.conf
write list=@lee
systemctl restart smb
smbclient //172.25.254.133/LEE -U lee 可以执行写操作
smbclient //172.25.254.133/LEE -U westos 不可以执行写操作
usermod -G lee westos
smbclient //172.25.254.133/LEE -U westos 可以执行写操作了
smbclient //172.25.254.133/LEE 本身匿名用户不能登陆
vim /etc/samba/smb.conf
guest ok=yes
systemctl restart smb
smbclient //172.25.254.133/LEE 可以登陆了
但是,该身份仅在smb交互界面可以使用,不能用来挂载,需要添加参数:
vim /etc/samba/smb.conf
map to guest=bad user
systemctl restart smb
mount //172.25.254.133/LEE /mnt -o username=guest
当我添加了smb用户student后,把writable=yes可写参数打开
但是使用student用户登陆,不可写
smbclient //172.25.254.133/LEE -U student 仍然不能可写
因为getfacl列表中只对超户、lee、westos可写
我们把student设置为超户实现studnet用户可写
vim /etc/samba/smb.conf
admin users=student
smbclient //172.25.254.133/LEE -U student 可写了
put anaconda-ks.cfg
在服务端查看时,cd /west
ll 上传的anaconda-ks.cfg文件所有人为root
3.9 改变文件所在区组
vim /etc/samba/smb.conf
89行 workgroup=WESTOS
systemctl restart smb
smbclient //172.25.254.133/LEE -U westos 可以看到domain的名字改变了
当我使用用户lee挂载到/mnt后,//172.25.254.133/LEE 的usernmae=lee
但是当我切换成linux用户时,同样可以查看/mnt下的文件
在客户端:yum install cifs-utils -y
umount /mnt
vim /root/smbauth
username=lee
password=lee
chmod 600 /root/smbauth
mount //172.25.254.133/LEE /mnt -o credentials=/root/smbauth
umount /mnt
mount //172.25.254.133/LEE /mnt -o credentials=/root/smbauth,sec=ntlmssp,multiuser
这时,要想查看/mnt需要进行用户的验证
su - linux
cd /mnt
cifscreds add -u westos 172.25.254.133 #进行westos用户的认证
cifscreds add -u westos 172.25.254.133 #当认证了之后再次添加认证,会提示你已经认证过
cifscreds clear -u westos 172.252.54.133 #清空认证
cifscreds add -u westos 172.25.254.133
touch file #建立文件 使用的用户是westos,但是客户端显示为linux用户,因为linux和westos的id=1001
exit
再次建立文件,使用的是lee,为挂载时使用的用户
注:credentials=/root/smbfile指定挂载时所用到的用户文件
multiuser 支持多用户认证
sec=ntlmssp 认证方式为标准smb认证方式
vim /etc/fstab
//172.25.254.133/LEE /mnt cifs defaults,credentials=/root/smbauth,sec=ntlmssp,multiuser
mount -a