一、cifs网络文件系统
CIFS是一种通用网络文件系统,主要用于网络设备之间的文件共享。CIFS可以在linux系统和windows系统之间共享文件,因此这种文件系统主要用于客户端是windows系统。 提供CIFS的服务是SAMBA
下面将介绍samba服务的一些配置以及用法。
配置
1、首先,准备好两台虚拟机(desktop、server)
- 重置两台虚拟机,作为实验的两台主机;
rht-vmctl reset desktop
rht-vmctl reset server - 配置两台主机(ip、yum源、主机名)
hostnamectl set-hostname client.example.com //作为客户端
hostnamectl set-hostname server.example.com //作为服务端
2、服务端初始化
//服务端:
[root@server ~]# yum search samba
[root@server ~]# yum install samba-client.x86_64 samba-common.x86_64 samba.x86_64 -y //安装软件,其中,
//samba-client.x86_64 : Samba client programs
//samba-common.x86_64 : Files used by both Samba servers and clients
//samba.x86_64 : Server and Client software to interoperate with Windows machines
[root@server ~]# systemctl start smb //开启服务
[root@server ~]# systemctl enable smb.service //开机自启动服务
ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.target.wants/smb.service'
[root@server ~]# systemctl stop firewalld //关闭火墙
[root@server ~]# systemctl disable firewalld //开机不启动火墙
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
[root@server ~]# netstat -antlupe | grep smb //查看端口,455和139是其常用端口
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 0 72861 3300/smbd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 0 72862 3300/smbd
tcp6 0 0 :::445 :::* LISTEN 0 72859 3300/smbd
tcp6 0 0 :::139 :::* LISTEN 0 72860 3300/smbd
3、客户端匿名用户登录
[root@client ~]# yum install samba-client -y //安装客户端服务软件
[root@client ~]# smbclient -L //172.25.254.247 //匿名用户登陆
客户端本地用户登录
//服务端
[root@server ~]# id student //查看服务端有没有student这个用户存在,student用户存在
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)
[root@server ~]# id westos //westos用户不存在
id: westos: no such user
[root@server ~]# smbpasswd -a student //设置student用户登陆samba服务的密码;
New SMB password:
Retype new SMB password:
Added user student. //samba服务共享用户添加成功
[root@server ~]# smbpasswd -a westos
New SMB password:
Retype new SMB password:
Failed to add entry for user westos. //这里的samba用户必须是真实存在的,因为westos用户不存在,设置密码后还是不能登陆(fail)
[root@server ~]# useradd westos //要解决上面的问题,新建用户,再进行账号和密码设置westos即可
[root@server ~]# smbpasswd -a westos
New SMB password:
Retype new SMB password:
Added user westos.
[root@server ~]# pdbedit -L //列出可以登陆samba服务的用户; pdbedit -x westos 在登陆samba用户登陆列表清除westos用户
student:1000:Student User
westos:1001:
//客户端本地用户登录
[root@client ~]# smbclient //172.25.254.247/student -U student //本地用户登陆samba
Enter student's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \* //本地登录成功,但是文件系统拒绝 access deny ———> 能够访问家目录的功能是关闭的
注意:smbpasswd如果没有Samba 密码服务器 , 则必须在本地计算机上创建身份验证数据。使用 smbpasswd 创建 Samba 账户和密码;其中smb 用户必须是本地存在的用户
开启访问家目录权限
//服务端:
[root@server ~]# getsebool -a | grep samba //查看布尔值
samba_enable_home_dirs --> off //查看访问家目录的
[root@server ~]# setsebool -P samba_enable_home_dirs on //开启访问家目录的功能
//客户端:
[root@client ~]# smbclient //172.25.254.247/student -U student //登陆查看家目录的内容
客户端上传文件(上传文件时,必须要进入上传文件的目录,put 文件名,否则会出现报错NT_STATUS_OBJECT_PATH_NOT_FOUND opening remote file /etc/passwd )
//客户端:
[root@client ~]# cd /etc/ //进入/etc/目录下,
[root@client etc]# smbclient //172.25.254.247/student -U student //登陆本地用户
Enter student's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: \> !ls //查看本地/etc的所有文件
smb: \> put passwd //上传/etc/passwd文件
putting file passwd as \passwd (150.6 kb/s) (average 150.6 kb/s) //上传文件passwd成功
//服务端进行查看:
[root@server ~]# ls /home/student //可以在家目录下看到刚刚在客户端上传的文件
passwd
因为客户端只能完成上传文件,不能完成新建、删除文件等操作,这里可以把家目录挂载在/mnt,再进行一系列操作
永久挂载操作
A:第一种方式
[root@client ~]# vim /etc/fstab
//172.25.254.247/student /mnt cifs defaults,username=student,password=student 0 0 //添加这一行,实现永久挂载
[root@client ~]# mount -a //刷新
[root@client ~]# df //查看挂载情况
B:第二种方式
注释掉/etc/fstab文件的开机实现自动挂载命令,以免影响本次实验效果;
[root@client ~]# vim /etc/rc.d/rc.local //编辑文件
mount //172.25.254.247/student /mnt -o username=student,password=student //添加这一行
[root@client ~]# reboot //重启
开机后:
[root@client ~]# df //查看是否成功挂载
文件/etc/rc.d/rc.local末尾添加:
如果,第二种方式没有挂载成功,可能是因为虚拟机desktop的问题,这个时候可以换个自己新建的虚拟机;
注:(区别) /etc/fstab 如果服务端没开启,主机reboot起不来;
/etc/rc.d/rc.local 开机启动是在所有服务启动之后才会读取文件;
更改组名、黑名单和白名单的建立
//服务端:
[root@server student]# rpm -qc samba-common //查找samba的配置文件
/etc/logrotate.d/samba
/etc/samba/lmhosts
/etc/samba/smb.conf ——> 配置文件
/etc/sysconfig/samba
[root@server student]# vim /etc/samba/smb.conf //编辑配置文件,修改组名(80行),设置黑名单和白名单;
89 workgroup = WESTOS
98 hosts deny = 172.25.254.74 //添加这一行,禁止ip是172.25.245.74这台主机进行访问;这个时候可以用两台主机(客户端)去测试;
hosts allow = 172.25.254.74 //添加这一行,只允许ip为172.25.254.74这台主机机进行访问登陆,其他客户拒绝登陆;
[root@server student]# systemctl restart smb.service //重启服务
这里以黑名单为例:
//客户端(ip=172.25.254.174):
[root@client ~]# smbclient -L //172.25.254.247 //
Enter student's password:
Domain=[WESTOS] OS=[Unix] Server=[Samba 4.1.1]
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba Server Version 4.1.1)
student Disk Home Directories
Domain=[WESTOS] OS=[Unix] Server=[Samba 4.1.1]
Server Comment
--------- -------
Workgroup Master
--------- -------
//客户端(ip=172.25.254.74):
[root@foundation74 Desktop]$ smbclient -L //172.25.254.274 //设置黑名单时访问
Enter student's password:
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE //拒绝
samba共享目录
A:共享自己建立的目录
方式:修改安全上下文
//服务端:
[root@server ~]# mkdir /westos //新建一个文件 /westos
[root@server ~]# semanage fcontext -a -t samba_share_t '/westos(/.*)?' //修改/westo的安全上下文
[root@server ~]# semanage fcontext -l | grep /westos //过滤看是否/westos的安全上下文是否修改成功
/westos(/.*)? all files system_u:object_r:samba_share_t:s0
[root@server ~]# restorecon -FvvR /westos/ //刷新
[root@server ~]# ls -Zd /westos
drwxr-xr-x. root root system_u:object_r:samba_share_t:s0 /westos
[root@server ~]# vim /etc/samba/smb.conf //编辑配置文件
[DIR] //客户端共享能看到的名称
comment=westos dir //说明
path = /westos //共享地址
[root@server ~]# systemctl restart smb.service //重启服务
//客户端:
[root@client ~]# smbclient -L //172.25.254.247/DIR -U student //这里只能登陆本地用户;
B:共享系统目录
方式:修改布尔值
//服务端:
[root@server ~]# cd /mnt
[root@server mnt]# touch file{1..3}
[root@server mnt]# ls
file1 file2 file3
[root@server ~]# vim /etc/samba/smb.conf //编辑配置文件,
[mnt]
comment = /mnt dir
path = /mnt
[root@server ~]# systemctl restart smb.service //重启服务
[root@server mnt]# setsebool -P samba_export_all_ro on //永久性开启布尔值,打开这个开关,除了系统目录的共享之外,还可以进行自己目录的共享,它比直接修改安全上下文的权力大,不受selinux控制,但是安全性差;如果共享系统目录,只是编辑配置文件若是没有修改布尔值,则看不到此目录新建的文件;
//客户端:
[root@client ~]# smbclient //172.25.254.247/mnt -U student //可以看到新建的文件
设置权限管理
//服务端:
[root@server mnt]# vim /etc/samba/smb.conf
[DIR]
comment=westos dir
path = /westos
browseable = yes //是否允许浏览:browseable=no(不允许)不用重启,即改生效;
writeable = yes //是否可写: 需要重启;
write list = +student //组用户可写 ;+ 或者 @ 都可以
[root@server mnt]# systemctl restart smb.service //重启服务
[root@server mnt]# chmod 777 /westos //改变权限
[root@server mnt]# usermod -G student westos //让westos为student用户的组
//客户端测试:
[root@client ~]# mount //172.25.254.247/DIR /mnt -o username=westos,password=westos //westos用户挂载,测试
[root@client ~]# cd /mnt
[root@client mnt]# touch file4 //成功建立file4文件
[root@client mnt]# ll
-rw-r--r-- 1 1001 1001 0 Jun 2 02:43 file4 //建立成功,这里1001是westos用户的id,因为客户端主机没有westos用户;
测试 1:
测试 2 :
测试 3 :
//服务端:
[root@server mnt]# chmod 755 /westos //将/westos目录的权限缩小,只有root用户才可以有写的权限;
[root@server mnt]# ls -ld /westos
drwxr-xr-x. 2 root root 6 Jun 2 02:43 /westos
[root@server mnt]# vim /etc/samba/smb.conf //编辑配置文件
[DIR]
comment=westos dir
path = /westos
browseable = yes //是否允许浏览:browseable=no(不允许)不用重启,即改生效;
writable = yes //可写
admin users = westos // 指定共享目录的超级用户为westos;前提是服务允许可写的情况下,才能生效,设定目录的超级用户,提升权力;
[root@server mnt]# systemctl restart smb.service //重启服务
//客户端测试:
[root@client ~]#mount //172.25.254.247/DIR /mnt -o username=westos,password=westos //以westos用户身份挂载
[root@client ~]# cd /mnt
[root@client mnt]# touch file3 //可以建立文件
[root@client mnt]# ll
total 0
-rw-r--r-- 1 root 1001 0 Jun 6 07:15 file3 //可以看到建立的文件file2的所属用户还是root,1001为所属组;
服务端配置文件编辑:
客户端效果:
多用户挂载
//客户端:
[root@client ~]# yum install cifs-utils.x86_64 -y
[root@client ~]# vim /root/smbpass //编辑文件,文件,参数指定:指定用户名和密码
username=student
password=student
[root@client ~]# mount -o credentials=/root/smbpass,sec=ntlmssp,multiuser //172.25.254.247/DIR /mnt
//挂载,其中,credentials=/root/smbpass文件指定的用户名、密码,sec=ntlmssp 认证方式(因为下载的samba是4.1的,所有认证方式是ntlmssp;查询方式rpm -ql | grep samba), multiuser为多用户挂载
[root@client ~]# useradd test //添加一个不存在的用户
[root@client ~]# su - test //切换到此用户环境下
[test@client ~]$ cd /mnt
[test@client mnt]$ ls
ls: reading directory .: Permission denied //切换到test用户,访问拒绝,保证了安全性
[test@client ~]$ cifscreds add -u westos 172.25.254.247 //命令通过samba用户认证,看到目录下的内容
You already have stashed credentials for 172.25.254.247 (172.25.254.247)
If you want to update them use:
cifscreds update
[test@client ~]$ cifscreds add -u westos 172.25.254.247
Password:
[test@client ~]$ ls /mnt
file file1 file3
samba的匿名访问目录
//客户端:
[root@client ~]# smbclient //172.25.254.247/DIR //匿名用户登陆,看不到目录的内容
解决步骤如下:
//服务端:
[root@server mnt]# vim /etc/samba/smb.conf
125 map to guest =bad user // 没有用户身份的用户(匿名用户)映射成guest用户
[DIR]
guest ok =yes //允许匿名用户登陆
[root@server mnt]# systemctl restart smb.service //重启服务
//客户端:
[root@client ~]# mount //172.25.254.247/DIR /mnt -o username=guest,password=""
[root@client ~]# smbclient //172.25.254.247/DIR //匿名访问,可以看到目录的内容
配置文件的修改:
客户端测试:
二、nfs网络文件系统
一台NFS服务器和若干台客户机,客户机可以通过TCP/IP网络远程访问存放在NFS服务器上的数据,就像访问本地数据一样。它最大的功能就是可以通过网络 ,让不同的系统主机可以彼此分享目录 (share files)。nfs服务器可以让你的 PC 来将网络这端的的 NFS 服务器分享的目录,挂载到本地主机上。
nfs服务端的设定、客户端测试
[root@server mnt]# yum install nfs-utils -y
[root@server mnt]# systemctl start nfs
[root@server mnt]# systemctl status nfs
[root@server mnt]# vim /etc/exports
/mnt *(sync,ro) //只读,客户端测试在/mnt下建立文件时,会出现Read-only file system
/mnt *(sync,rw) //读写,客户端测试在/mnt下建立文件时,会出现Permission denied,需要在服务端对/mnt的权限进行修改777
/mnt *(sync,rw,no_root_squash) //不用转换用户身份,依然使用的是超级用户的身份
/mnt *(sync,rw,anonuid=1000,anongid=1000,no_root_squash)//指定用户身份
/westos 172.25.254.0/24(sync) 172.25.254.14(sync,rw) //网段共享/westos:
[root@server ~]# exportfs -rv //刷新
注:/mnt 是要共享的目录;rw是可写权限;sync是资料同步写入内存和硬盘;no_root_squash 是nsf客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于改目录而言,该客户端具有root权限;
//客户端:
[root@client ~]# yum install cifs-utils.x86_64 -y
[root@client ~]# showmount -e 172.25.254.247 //客户端查看目录共享
Export list for 172.25.254.247:
/mnt *
[root@client ~]# mount 172.25.254.247:/mnt /mnt
[root@client mnt]# touch file
touch: cannot touch ‘file’: Read-only file system //ro
[root@client ~]# touch /mnt/file5
touch: cannot touch ‘/mnt/file5’: Permission denied //rw修
[root@client ~]# touch /mnt/file5 //改权限后可以建立文件,但是看到的用户和组为nfsnobody
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun 2 04:43 file5
[root@client ~]# touch /mnt/file4 //设置no_root_squash,文件的用户和组使用的是超级用户身份;
[root@client ~]# ll /mnt
-rw-r--r-- 1 root root 0 Jun 2 04:45 file4
当客户端是,不用转换用户身份,依然使用的是超级用户的身份
[root@client ~]# touch /mnt/file8 //指定了文件的用户和组为stduent;
-rw-r--r-- 1 student student 0 Jun 2 04:49 file8
autofs在客户端的使用
//服务端:
[root@server ~]# systemctl start nfs
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# vim /etc/exports
/westos 172.25.254.0/24(sync,rw) 172.25.254.74(sync,rw)
[root@server ~]# exportfs -rv //刷新
exporting 172.25.254.74:/westos
exporting 172.25.254.0/24:/westos
//客户端:
[root@client ~]# yum install autofs -y //软件的作用:使用时,自动挂载;闲置时,自动卸载;不浪费资源
[root@client ~]# systemctl start autofs.service //开启服务
[root@client ~]# cd /net //在没有开启autofs.service服务之前,/net时不存在的;
[root@client net]# cd 172.25.254.247
[root@client 172.25.254.247]# cd westos
[root@client westos]# ls
123 file file2 file3 westos
[root@client westos]# df //使用时,实现了自动挂载
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3219172 7254728 31% /
devtmpfs 469344 0 469344 0% /dev
tmpfs 484932 84 484848 1% /dev/shm
tmpfs 484932 12776 472156 3% /run
tmpfs 484932 0 484932 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2355 451824 1% /home
172.25.254.247:/westos 10473984 3156480 7317504 31% /net/172.25.254.247/westos
[root@client westos]# vim /etc/sysconfig/autofs
TIMEOUT=5 //将时间修改为5s,(卸载时间)
[root@client westos]# systemctl restart autofs.service //重启服务
[root@client westos]# cd //执行此操作后,等待5s,再去查看挂载设备;否则,等待时间将会随着df一直刷新,而导致实验效果出不来;
[root@client ~]# df //闲置时,自动卸载
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3219208 7254692 31% /
devtmpfs 469344 0 469344 0% /dev
tmpfs 484932 84 484848 1% /dev/shm
tmpfs 484932 12776 472156 3% /run
tmpfs 484932 0 484932 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2355 451824 1% /home
等待5s后,再执行df命令,挂载自动取消:
指定挂载点(组策略)
//客户端:
[root@client ~]# vim /etc/auto.master //指定最终挂载点的上层目录(所有) /etc /suto.master
/nfs /etc/auto.westos
[root@client ~]# vim /etc/auto.westos //自定义编辑写入:最终挂载点名称 挂载参数 挂载的真实的网络文件系统
westos -rw,vers=3 172.25.254.247:/westos
[root@client ~]# systemctl restart autofs //重启服务
[root@client ~]# cd /nfs
[root@client nfs]# cd westos
[root@client westos]# ls
123 file file2 file3 westos
[root@client westos]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3219004 7254896 31% /
devtmpfs 469344 0 469344 0% /dev
tmpfs 484932 84 484848 1% /dev/shm
tmpfs 484932 12776 472156 3% /run
tmpfs 484932 0 484932 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2355 451824 1% /home
172.25.254.247:/westos 10473984 3156608 7317376 31% /nfs/westos
[root@client westos]# mount //查看挂载情况
172.25.254.247:/westos on /nfs/westos type nfs (rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.25.254.247,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=172.25.254.247)
注:如果没有退出目录,重启不会起效;
文件/etc/auto.master编辑:
文件/etc/auto.westos编辑:
mount命令查看挂载情况: