基于linux下的cifs和nfs网络文件系统

一、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命令查看挂载情况:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/wangkana/article/details/80602213