文件共享协议
nfs:
- nfs 是一个由 sun microsystems 开发的协议,主要用于 unix/linux 系统之间的文件共享。
- nfs 提供了一个透明的、无状态的客户端/服务器模型,使得客户端可以像访问本地文件一样访问网络上的文件。
- nfs 通常在性能上优于 samba,尤其是在处理大文件或大量文件时。
- nfs 原生并不支持用户身份验证和访问控制,因此在安全性方面可能比 samba 差一些。可以通过其他手段(如 kerberos)来增强 nfs 的安全性。
samba:
- samba 是一个开源的软件,它实现了 smb/cifs 协议,主要用于 unix/linux 系统和 windows 系统之间的文件和打印服务共享。
- samba 提供了丰富的用户身份验证和访问控制功能,因此在安全性方面通常优于 nfs。
- samba 兼容性好,可以在各种不同的操作系统(包括 windows、mac os x、linux 等)之间共享文件和打印服务。
linux环境作为服务端(nfs)
在服务器端安装 nfs
在 ubuntu/debian 系统中,可以使用以下命令安装 nfs:
sudo apt-get update sudo apt-get install nfs-kernel-server
在 centos/rhel 系统中,可以使用以下命令安装 nfs:
sudo yum install nfs-utils
创建要共享的目录
创建一个名为 /shared 的目录:
sudo mkdir /shared
修改 nfs 配置文件
编辑 /etc/exports 文件,添加你想要共享的目录和允许访问的客户端 ip 地址。例如:
sudo vi /etc/exports
在文件中添加以下行(替换为你的客户端 ip 地址):
/shared 192.168.1.0/24(rw,sync,no_subtree_check)
意为192.168.1.0/24 网段的所有 ip 地址都可以读写 /shared 目录。
exportfs -r
配置即时生效
exports参数
- ro 只读访问
- rw 读写访问
- sync 所有数据在请求时写入共享
- async nfs在写入数据前可以响应请求
- secure nfs通过 1024 以下的安全 tcp/ip 端口发送
- insecure nfs通过 1024 以上的端口发送
- wdelay 如果多个用户要写入 nfs 目录,则归组写入(默认)
- no_wdelay 如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置
- hide 在 nfs 共享目录中不共享其子目录
- no_hide 共享 nfs 目录的子目录
- subtree_check 如果共享 /usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认)
- no_subtree_check 不检查父目录权限
- all_squash 共享文件的 uid 和 gid 映射匿名用户 anonymous,适合公用目录
- no_all_squash 保留共享文件的 uid 和 gid(默认)
- root_squash root 用户的所有请求映射成如 anonymous 用户一样的权限(默认)
- no_root_squash root 用户具有共享根目录的完全管理访问权限
- anonuid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 uid
- anongid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 gid
注意:
- 当非root用户无法写入时、 可以使用 anonuid 与 anongid 参数、 设置为客户端非root用户的组id,或在客户端新建组将客户端用户加入组
- 例如(/shared 172.17.38.44(rw,sync,anonuid=502,anongid=501) ),同时注意共享目录权限。
启动 nfs 服务
在 ubuntu/debian 系统中,你可以使用以下命令启动 nfs 服务:
sudo service nfs-kernel-server restart
在 centos/rhel 系统中,你可以使用以下命令启动 nfs 服务:
sudo systemctl start nfs-server sudo systemctl enable nfs-server
在客户端安装 nfs
在 ubuntu/debian 系统中,可以使用以下命令安装 nfs:
sudo apt-get update sudo apt-get install nfs-common
在 centos/rhel 系统中,可以使用以下命令安装 nfs:
sudo yum install nfs-utils
在客户端挂载共享目录
创建一个挂载点/mnt/shared:
sudo mkdir /mnt/shared
可以使用以下命令将服务器的共享目录挂载到这个挂载点:
sudo mount -t nfs server_ip:/shared /mnt/shared
替换 server_ip
为你的服务器 ip 地址。
创建完成,可以在客户端的 /mnt/shared 目录中查看和操作服务器的 /shared 目录。
windows环境作为服务端(cifs)
在 windows 上创建共享目录
选择要共享的文件夹:
找到你想要共享的文件夹。这个文件夹可以位于你的系统盘或其他任何地方。
打开共享设置:
右键点击你想要共享的文件夹,然后选择“属性”。在弹出的窗口中,点击“共享”标签页。
设置共享:
在“共享”标签页中,点击“高级共享…”按钮。在弹出的窗口中,勾选“共享此文件夹”,然后在“共享名”文本框中输入你想要的共享名字。
设置权限:
点击“权限”按钮,将会弹出一个窗口,你可以在这里设置访问共享文件夹的用户的权限。可以选择“everyone”然后在下面的权限设置中勾选“完全控制”,“更改”,和“读取”。
应用设置:
点击“确定”按钮关闭权限窗口,然后再次点击“确定”关闭高级共享窗口。最后,点击属性窗口下方的“关闭”按钮。
此时该文件夹已经被共享,可以在网络上的其他计算机上通过 \\电脑名或者ip地址\共享名
来访问这个文件夹。访问可能需要输入 windows 用户名和密码。
在客户端安装 cifs-utils
在 ubuntu/debian 系统中,可以使用以下命令安装 cifs-utils:
sudo apt-get update sudo apt-get install cifs-utils
在 centos/rhel 系统中,可以使用以下命令安装 cifs-utils:
sudo yum install cifs-utils
创建挂载点
在 linux 系统中创建一个名为/mnt/win_share 的目录作为挂载点:
sudo mkdir /mnt/win_share
挂载 windows 共享目录
将 windows 共享目录挂载到这个挂载点:
sudo mount -t cifs //windows_pc/shared_folder /mnt/win_share -o username=win_user,password=win_password
在上述命令中,将 windows_pc
替换为 windows 电脑的 ip 地址或主机名,shared_folder
替换为共享文件夹的名称,win_user
和 win_password
替换为 windows 用户名和密码。
创建完成,可以在 linux 系统的 /mnt/win_share 目录中看到 windows 共享目录的内容。
注意:
- 如果你的 windows 用户没有密码,可能需要在挂载命令中添加
guest
选项。 - 如果你想在系统启动时自动挂载 windows 共享目录,可以将挂载命令添加到 /etc/fstab 文件中。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论