Linux中NFS和Samba的配置

一.Linux中NFS的配置

1、NFS的概念

(1)NFS是什么

NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送

(2)NFS的作用

<1>提供透明文件访问以及文件传输;
<2>容易扩充新的资源或软件,不需要改变现有的工作环境;
<3>高性能,可灵活配置。

2、在客户端挂载非本机目录

(1)在服务端的设置

命令 功能
yum repolist 查看yum源是否配置正常
yum install nfs-utils -y 下载nfs-utils软件
systemctl start nfs-server 开启nfs-server服务
firewall-cmd --permanent --add-service=nfs 开启防火墙的nfs功能,提供挂载的共享内容
firewall-cmd --permanent --add-service=mountd 开启防火墙的mountd功能,客户端在查看服务端挂载的内容时,mountd会提供给客户端rpc.bind的位置
firewall-cmd --permanent --add-service=rpc.bind 开启防火墙的rpc.bind功能,客户端在查看服务端挂载的内容时,rpc.bind会提供给客户端一个端口,使客户端找到nfs
firewall-cmd --reload 重启防火墙使修改立即生效
firewall-cmd --list-all 查看功能是否添加
vim /etc/exports 修改该文件,添加挂载共享的内容
/mnt *(async) 共享/mnt目录,*(async)为内存同步到硬盘
exportfs -rv 重读配置文件,使修改立即生效
touch /mnt/file{1…3} 在/mnt中建立file1-3

(2)在客户端的设置

命令 功能
yum repolist 查看yum源是否配置正常
yum install nfs-utils -y 下载nfs-utils软件
systemctl start nfs-server 开启nfs-server服务
showmount -e xxx.xxx.xxx.xxx(服务端的IP) 查看客户端共享的内容
mount xxx.xxx.xxx.xxx(服务端的IP):/mnt /mnt 将客户端共享的/mnt目录挂载到自己的/mnt上
ls /mnt 查看可否看到file1-3

Linux中NFS和Samba的配置

3、如何在闲置时自动卸载、进入使用时自动挂载客户端提供的共享目录

(1)在客户端设置,设置可自动挂载、卸载

命令 功能
yum install autofs.x86_64 -y 下载autofs软件
rpm -qc autofs 查看autofs的配置文件
systemctl stop autofs.service 关闭autofs服务
cd /net 进入到/net中,此时找不到该目录
systemctl start autofs.service 开启autofs服务
cd /net 进入到/net中,此时可进入,该目录不是真实目录,autofs服务关闭后将消失
cd xxx.xxx.xxx.xxx(服务端的IP)/mnt 进入到服务端共享的共享目录中
ls 查看是否可查看到file1-3
df 查看现在的挂载情况
vim /etc/sysconfig/autofs 修改配置文件,修改共享目录闲置时自动卸载的等待时间为2秒,修改完成后退出保存
systemctl restart autofs.service 重启autofs服务
df 查看现在的挂载情况,此时共享目录挂载
cd 退出共享目录,使共享目录闲置,等待2s以上
df 再次查看挂载情况,此时共享目录已自动卸载

(2)在客户端设置,设置挂载到指定的目录下

命令 功能
vim /etc/auto.master(autofs的主策略文件) 修改autofs的主策略文件
/mnt /etc/auto.mnt 指定想要自动挂载共享目录的目录的上级目录,并指定自动挂载的策略文件为/etc/auto.mnt,此时自动挂载的目录地址可以不存在,挂载时将自动建立
vim /etc/auto.mnt 修改自动挂载的策略文件为/etc/auto.mnt
pub -ro xxx.xxx.xxx.xxx(服务端的IP):/mnt 意为将服务端共享的/mnt目录以可读的方式挂载到/mnt下的pub目录上
systemctl restart autofs 重启autofs服务
cd /mnt/pub 进入到自动挂载共享目录的目录中
ls 查看是否能看到file1-3
df 查看是否自动挂载到该目录
cd 退出自动挂载共享目录的目录,等待2s以上
df 再次查看挂载情况,此时共享目录已自动卸载

Linux中NFS和Samba的配置

4、配置客户端可在共享目录中使用的权限

(1)配置客户端可读写共享目录权限

async权限

同步客户端内存中存在了的内容到服务端的硬盘,若客户端取消操作,则内容没有保存在客户端内存,即服务端的硬盘中也没有。

sync权限

实时同步内容到服务端的硬盘,即使客户端取消操作,服务端的硬盘中也会记录过程。

服务端配置

命令 功能
systemctl start nfs-server 开启nfs-server服务
vim /etc/exports 修改该配置文件,将读写权限(rw)加入
/mnt *(async,rw) 加入rw权限
ls -ld /mnt 查看挂载的共享目录的权限
chmod 777 /mnt 将共享目录的权限设定为777
ls -ld /mnt 再次查看共享目录的权限,确定设定成功
exportfs -rv 重读exports文件使修改立即生效

客户端配置

命令 功能
systemctl start nfs-server 开启nfs-server服务
systemctl start autofs 开启autofs服务
vim /etc/auto.mnt 修改auto.mnt配置文件,将自动挂载时的权限改为读写权限(rw)挂载
systemctl restart autofs 重启autofs服务
cd /mnt/pub 进入到/mnt/pub中,共享目录自动挂载
df 查看是否挂载,此时成功挂载
touch file111 建立测试文件,名为file111

在服务端测试

命令 功能
ls -l /mnt 查看共享目录/mnt中的内容及属性,file111文件可被查看,此时file111的所有人为nfsnobody,所有组为nfsnobody

(2)配置客户端root用户上传文件时,root用户不切换身份

服务端配置

命令 功能
vim /etc/exports 修改该文件
/mnt *(async,rw,no_root_squash) no_root_squash 为不切换root身份
exportfs -rv 重读文件

客户端配置

命令 功能
touch file222 建立测试文件file222

在服务端测试

命令 功能
ls -l /mnt 查看file222的用户身份是否为root

(3)配置客户端用户上传文件时,指定上传的用户身份

服务端配置

命令 功能
vim /etc/exports 修改该文件
/mnt *(async,rw,anonuid=1000,anongid=1000) 指定用户身份为uid=1000,gid=1000的用户(student用户)
exportfs -rv 重读文件

客户端配置

命令 功能
touch file333 建立测试文件file333

在服务端测试

命令 功能
ls -l /mnt 查看file333的用户身份是否为student

(4)配置不同客户端使用共享目录时使用不同的权限

服务端配置

命令 功能
vim /etc/exports 修改该文件
/mnt *(ro) xxx.xxx.xxx.xxx(指定客户端IP)(async,rw,anonuid=1000,anongid=1000) 配置所有人有只读权限,指定客户端有async,rw,anonuid=1000,anongid=1000权限
exportfs -rv 重读文件

在指定客户端配置

命令 功能
touch file444 建立测试文件file444

在其他客户端配置

命令 功能
touch file555 建立测试文件file555

在服务端测试

命令 功能
ls -l /mnt 查看权限是否如设定相同

Linux中NFS和Samba的配置

二.Samba的配置

1、实现Linux和Windows系统之间共享目录

(1)在服务端配置

命令 功能
yum install samba samba-common samba-client -y 下载samba的系列软件
systemctl start smb 开启samba服务
systemctl stop firewalld 关闭防火墙
hostname 查看hostname
vim /etc/hosts 修改该文件
xxx.xxx.xxx.xxx(服务端IP) hostname1(服务端) 添加
xxx.xxx.xxx.xxx(客户端IP) hostname2(客户端) 添加
id student 查看student用户信息(student存在)
id 123 查看123用户信息(此时123用户不存在)
smbpasswd -a student 添加student用户入samba用户
smbpasswd -a 123 添加123用户入samba用户
pdbedit -L 查看现有的samba用户,无123(因为123不存在)
useradd 123 建立123用户
smbpasswd -a 123 再次加入
pdbedit -L 添加samba用户成功
pdbedit -x student 删除samba用户student
pdbedit -L 查看是否删除

(2)在客户端配置

命令 功能
yum install samba-client -y 下载samba客户端
hostname 查看hostname
vim /etc/hosts 修改该文件
xxx.xxx.xxx.xxx(服务端IP) hostname1(服务端) 添加
xxx.xxx.xxx.xxx(客户端IP) hostname2(客户端) 添加

(3)在客户端测试

命令 功能
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) 测试匿名用户是否能登入samba
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) -U 123 测试123用户是否能登入samba

Linux中NFS和Samba的配置

2、samba中如何在闲置时自动卸载、进入使用时自动挂载客户端提供的共享目录(autofs)

(1)在客户端配置

命令 功能
mkdir /samba 建立目录
vim /etc/auto.master 修改auto的主策略文件
/samba /etc/auto.samba 添加想要挂载共享目录的上级目录/samba,并指定子策略文件地址为/etc/auto.samba
vim /etc/auto.samba 修改子策略文件
123 -fstype=cifs,username=123,password=123 ????/172.25.254.154/123 设定资策略文件
systemctl restart autofs 设定完成后重启服务

(2)在客户端测试

命令 功能
cd /samba/123 进入该地址
ls 查看是否有内容
touch file 建立文件
ls 查看是否建立成功

(3)在服务端测试

命令 功能
ls /home/123 在服务端查看是否建立成功

Linux中NFS和Samba的配置

3、samba中客户端权限及查看的共享内容的配置

(1)配置共享内容的名称

服务端配置

命令 功能
vim /etc/samba/smb.conf 修改该配置文件
workgroup = YEAH 将共享内容的名称改为YEAH
systemctl restart smb 完成后重启服务

客户端测试

命令 功能
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) 查看共享内容的名称是否为YEAH

(2)配置客户端登陆的黑白名单

服务端配置

命令 功能
vim /etc/samba/smb.conf 修改该配置文件
hosts deny = xxx.xxx.xxx.xxx(指定IP) 客户端登录黑名单
hosts allow = xxx.xxx.xxx.xxx(指定IP) 客户端登录白名单
systemctl restart smb 重启服务

客户端测试

命令 功能
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) 尝试是否能登录

(3)配置客户端登陆后查看的共享内容

服务端配置

命令 功能
vim /etc/samba/smb.conf 修改该文件
[test] 共享目录名称
comment = test share 对该共享目录的描述
path = /test 访问该共享目录时,访问的真实路径为/test
systemctl restart smb 重启服务

客户端测试

命令 功能
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) 匿名用户是否可以登录(此时不能)
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 123(smb中添加过的用户身份) samba用户查看
put file(该file必须存在于登陆时客户端所在目录) 查看是否能上传文件(此时不能)

(4)配置客户端登陆后匿名用户也可查看共享内容

服务端配置

命令 功能
vim /etc/samba/smb.conf 修改该文件
map to guest = bad user 设定guest的意思为bad user

[test]
comment = test share |
path = /test |
guest ok = yes |符合guest的拥有登录权限
systemctl restart smb |重启服务

客户端测试

命令 功能
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) 匿名用户是否可以登录(此时可以)

Linux中NFS和Samba的配置

(5)配置客户端登陆后可写权限(所有用户)

服务端配置

命令 功能
vim /etc/samba/smb.conf 修改该文件
map to guest = bad user
[test]
comment = test share
path = /test
guest ok = yes
writable = yes 登录后是否可写
systemctl restart smb 重启服务

客户端测试

命令 功能
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) 匿名用户登录
put file(该file必须存在于登陆时客户端所在目录) 匿名用户是否可写(此时可写)
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 123(smb中添加过的用户身份) samba用户登录
put file(该file必须存在于登陆时客户端所在目录) samba用户是否可写(此时可写)

(6)配置客户端登陆后指定用户或指定组的所属用户可写权限

服务端配置

命令 功能
vim /etc/samba/smb.conf 修改该文件
map to guest = bad user
[test]
comment = test share
path = /test
guest ok = yes
write list = 123/+123 在名单内的用户可写,123为指定用户,+123为123组下的所有用户
systemctl restart smb 重启服务

客户端测试

命令 功能
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) 匿名用户登录
put file(该file必须存在于登陆时客户端所在目录) 查看是否可写(不可)
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 123(smb中添加过的用户身份) 123用户登录
put file(该file必须存在于登陆时客户端所在目录) 查看是否可写(可)
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 456(该用户所属组为123组) 属于123组的用户登录
put file(该file必须存在于登陆时客户端所在目录) 查看是否可写(若此时为“+123”时,可写,为“123”时,不可写)

(7)配置指定用户或指定组的所属用户可以挂载服务端的共享内容

服务端测试

命令 功能
vim /etc/samba/smb.conf 修改该文件
map to guest = bad user
[test]
comment = test share
path = /test
guest ok = yes
valid user = 123/+123 指定用户/组下的所有用户可登录
systemctl restart smb 重启服务

客户端测试

命令 功能
smbclient -L //xxx.xxx.xxx.xxx(服务端IP)/test(匿名用户) 匿名用户不可登录
smbclient -L //xxx.xxx.xxx.xxx(服务端IP)/test -U 123(smb中添加过的用户身份) 123用户可登录
smbclient -L //xxx.xxx.xxx.xxx(服务端IP)/test -U 456(该用户所属组为123组) 为“123”时,该用户不可登录,为“+123”时,该用户可登录

(8)配置客户端登陆时是否可查看到设置的共享内容

服务端测试

命令 功能
vim /etc/samba/smb.conf 修改该文件
[test]
comment = test share
path = /test
browseable = yes 登录时是否可以查看到设置的该共享内容(test),此时可
systemctl restart smb

客户端测试

命令 功能
smbclient -L //xxx.xxx.xxx.xxx(服务端IP) 查看是否能看到test

Linux中NFS和Samba的配置

3、selinux开启后,对samba的影响及如何解除影响

(1)安全上下文影响查看,如何消除

在服务端配置

命令 功能
vim /etc/selinux/config 修改该文件,将selinux设置为强制模式
reboot 重启系统
getenforce 查看是否为强制模式
systemctl start smb 开启samba服务
systemctl stop firewalld 关闭防火墙
ls -Zd /test 查看/test的安全上下文
semanage fcpmtext -a -t samba_share_t ‘/test(/.*)?’ 修改为samba的默认的安全上下文
restorecon -RvvF /test 刷新
ls -Zd /test 查看是否修改成功

在客户端测试

命令 功能
smbclient //xxx.xxx.xxx.xxx(服务端IP)/test -U 123 查看是否能看到test
ls 查看是否有内容

(2)若不能改变目录的安全上下文,如何消除查看影响

在服务端配置

命令 功能
getsebool -a grep samba
setsebool -P samba_export_all_ro on 开启该bool,samba有关的文件安全上下午将不受selinux限制
getsebool -a grep samba

在客户端测试

命令 功能
smbclient //xxx.xxx.xxx.xxx(服务端IP)/123 -U 123 尝试是否能看到内容
ls 查看内容

(3)若想在客户端在用户家目录操作,如何开启权限

在服务端配置

命令 功能
getsebool -a grep samba
setsebool -P samba_enable_home_dirs on 开启该bool,客户端可在家目录操作
getsebool -a grep samba

在客户端测试

命令 功能
smbclient //xxx.xxx.xxx.xxx(服务端IP)/123 -U 123 尝试是否能看到内容
put file(该file必须存在于登陆时客户端所在目录) 查看是否能操作

Linux中NFS和Samba的配置

4、如何配置非samba用户通过持有的samba帐号登陆

(1)在服务端配置

命令 功能
vim /etc/samba/smb.conf 修改该文件
[test]
comment = test share
path = /mnt 修改真实访问地址为/mnt
writable = yes
browseable = yes
systemctl restart smb 重启服务
getsebool -P samba_export_all_rw on 修改bool
getsebool -a grep samba

(2)在客户端配置

命令 功能
yum install cifs-utils -y 安装该软件
rpm -ql cifs-utils.x86_64 0:6.2-6.el7 查看
man mount.cifs man查看如何配置
vim /root/smbpassfile 修改/root/smbpassfile文件
chmod 600 /root/smbpassfile 修改文件权限,使文件更安全
ls -l /root/smbpassfile 查看是否修改成功
mount -o credentials=/root/smbpassfile,sec=ntlmssp,multiuser //xxx.xxx.xxx.xxx(服务端IP)/test /mnt 当本机的非samba用户登录时,使用/root/smbpassfile文件中的身份认证挂载
df 查看是否能挂载
useradd no 建立非samba用户no
passwd no 赋予密码
su - no 切换到no用户
cd /mnt/test 查看是否能进入
ls 查看是否能看到挂载的内容
touch test2 建立问题test2

(3)在服务端查看

命令 功能
ls -l /mnt 查看test2文件的所有人和所有组是否为/root/smbpassfile文件中设定的samba用户身份,此时应为是