slacr_

Just to record my life and thoughts.
笔记/编程/杂乱/极简

[Linux]使用Samba或NFS实现文件共享

Oct 18, 2023Linux2350 words in 16 min

SAMBA 文件共享服务

1987年,微软公司和英特尔公司共同制定了SMB(Server Messages Block)服务器消息块协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了1991年,当时还在读大学的Tridgwell为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB协议开发出了SMBServer服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。

1
2
# 安装samba 服务程序和客户端
dnf install samba samba-client

在最早期的Linux系统中,samba服务使用的是pam模块调用本地账号和密码信息,后来在5、6版本时替。换成了用smbpasswd命令设置独立的samba服务账号和密码口令。到了RHEL 7/8版本时则又进行了一次改革,将传统的验证方式换成了tdbsam数据库,这是一个专门用于保存samba服务账号口令的数据库,用户需要用pdbedit命令进行独立的添加操作.

配置共享资源

包括全局配置参数和区域配置参数

1
vim /etc/samba/smb.conf

创建用于访问共享资源的账户信息。在RHEL8系统中,Samba服务程序默认使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,而且验证过程也十分简单。不过,只有建立账户信息数据库之后,才能使用用户口令认证模式。另外,Samba服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。

pdbedit命令用于管理samba服务程序的账户信息数据库,格式为“pdbedit [选项]账户”。在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。

1
2
3
4
5
6
pdbedit -a -u slacr
...
mkdir /home/database
chown -Rf slacr:slacr /home/database
semanage fcontext -a -t samba_share_t /home/database # 修改安全上下文标签
restorecon -Rv /home/database

设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录

1
2
3
getsebool -a | grep samba
setsebool -P samba_enable_home_dirs on
systemctl enable --now smb
1
2
3
4
5
6
# 消除防火墙限制
iptables -F
iptables-save
firewall-cmd --perm --add-service=samba
firewall-cmd --reload
systemctl status smb
1
subclient -U slacr -L 192.168.128.5 

REHL9 中会出错 Reconnecting with SMB1 for workgroup listing. 到配置文件中可以看到客户端需要支持 SMB2 或 SMB3. 参考解决方法

1
2
3
4
vim /etc/samba/smb.conf
# 在[global] 中加入
client min protocol = CORE
client min protocol = CORE

Windows 挂载共享

要在Windows系统中访问共享资源,只需要点击开始按钮后输入两个反斜杠,然后再加服务器的IP地址即可.

Linux 挂载共享

我用另一台 debian 12, 在客户端安装支持文件共享服务的软件包(cifs-utils)。

1
2
3
4
5
6
7
sudo apt-get install cifs-utils

mkdir /share
mount -t cifs -o username=slacr,password=xxx //192.168.128.5//database /share
alias ll='ls -l'
ll /share
df -h

可以按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中,然后让/etc/fstab文件和系统自动的加载它。为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅root管理员才能够读写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vi auth.smb
...
username=slacr
password=xxx
domain=MYGROUP

chmod 600 auth.smb

vi /etc/fstab
...
192.168.128.5/database /share cifs credential=/root/auth.smb 0 0

mount -a
echo "I cum in " > /share/fromdebian.txt

NFS 网络共享文件

NFS网络文件系统服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。
这个协议之支持Linux之间, 测试了下WSL也用不了.

1
2
3
4
5
6
7
8
9
10
11
12
dnf install nfs-utils
# 配置防火墙
iptables -F
iptables-save
firewall-cmd --perm --add-service=nfs
firewall-cmd --perm --add-service=rpc-bind
firewall-cmd --perm --add-service=mountd
firewall-cmd --reload

mkdir /nfsfile
chmod -R 777 /nfsfile
echo "welcome to server" > /nfsfile/readme

NFS服务程序的配置文件为/etc/exports, 默认情况下里面没有任何内容。可以按照“共享目录的路径 允许访问的NFS客户端 (共享权限参数) ”的格式,定义要共享的目录与相应的权限。

1
2
3
4
5
6
7
vi /etc/exports
...
/nfsfile 192.168.128.*(rw,sync,root_squash)

exportfs -r

systemctl enable --now rpcbind nfs-server

使用showmount命令查询NFS服务器的远程共享信息

1
2
3
4
5
6
7
8
9
10
11
12
# apt-get install nfs-common
showmount -e 192.168.128.5
mkdir /nfsfile
mount -t nfs 192.168.128.5:/nfsfile /nfsfile
df -h
cat /etc/readme

# 写入fstab使NFS 共享永久有效
vi /etc/fstab
...
192.168.128.5:/nfsfile /nfsfile nfs defaults 0 0

AutoFs 自动挂载服务

无论是Samba服务还是NFS服务,都要把挂载信息写入到/etc/fstab中,这样远程共享资源就会自动随服务器开机而进行挂载。虽然这很方便,但是如果挂载的远程资源太多,则会给网络带宽和服务器的硬件资源带来很大负载。如果在资源挂载后长期不使用,也会造成服务器硬件资源的浪费。

autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。autofs服务程序在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。

1
2
3
4
5
6
7
8
9
10
11
12
dnf install autofs 

vi /etc/auto.master
...
/media /etc/iso.misc


vi /etc/iso.misc
...
iso -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom

systemctl enable autofs --now
1
2
3
4
5
6
df -h
# 无 /media/iso 挂载点
cd /media/iso
df -h
# 自动挂载
ls
  • 自动挂载nfs
1
2
3
4
5
6
7
8
9
10
11
umount /nfsfile
vi /etc/auto.master
# 默认有一行/misc /etc/auto.misc, 是自动挂载的参考文件, 默认就存在

vi /etc/auto.msic
...
nfsfile 192.168.128.5:/nfsfile

systemctl daemon-reload
cd /misc/nfsfile
df -h

其他

忘记或者没设置 root 密码怎么办

1
2
sudo passwd root
...

cifs

CIFS是“Common Internet File System”的缩写,它是一种用于在计算机之间共享文件和打印机的网络协议。CIFS最初是由微软开发的,后来成为了一种开放标准,并被许多操作系统和设备所支持。

CIFS协议基于客户端-服务器架构,客户端可以通过CIFS协议与远程服务器通信,访问和操作共享的文件和打印机。

CIFS协议提供了以下功能:

文件访问和共享:允许客户端从服务器读取、写入、修改和删除文件。
访问控制:支持对文件和目录的权限控制,可以限制用户对文件的访问权限。
文件锁定:允许客户端对共享文件进行锁定,以防止其他客户端同时修改同一文件。
名字解析:提供了一种方式来将计算机名解析为IP地址,以便客户端可以连接到远程服务器。
打印机共享:允许多台计算机共享打印机资源,从而可以在网络上打印文件。

CIFS协议通常在局域网(LAN)或广域网(WAN)上使用,它可以在不同的操作系统之间进行文件共享和协作,例如在Windows、Linux、macOS等操作系统之间共享文件和打印机。

在Linux系统中,使用CIFS协议可以通过挂载网络共享来访问远程文件系统,这可以通过mount命令来实现。

alias 永久有效

编辑~/.bashrc~/.bash_aliases

1
2
vi ~/.bashrc
source ~/.bashrc

参考

  1. Linux就该这么学
  2. linux命令
  3. 开源许可证总览
  4. LSB标准
  5. 硬盘结构
  6. RHCSA学习
  7. RHEL订阅
  8. 如何在 RHEL 9 上创建本地 Yum/DNF 仓库
  9. VDO github地址
  10. RHEL9 VDO文档
  11. Fedora官方下载
  12. FedoraProject镜像
  13. 使用 RHEL 9 时的注意事项
  14. Linux运维工程师的TFTP服务器配置自定义目录解决方案
  15. Linux系统工程师3.5网络文件系统
  • Author:

    slacr_

  • Copyright:

  • Published:

    October 18, 2023

  • Updated:

    October 18, 2023

Buy me a cup of coffee ☕.

1000000