在Ubuntu 22.04上使用NFS和CIFS
如果服务器只支持NTLM,并且你的Linux发行版不再支持NTLM,你可能需要更新服务器配置以使用更新的认证方法。虽然NTLM曾经是一个常见的SMB认证协议,但随着时间的推移,它被认为是不够安全的,并且在现代Linux发行版中,默认可能不再支持或推荐使用。如果你确实需要访问一个只支持SMB 1.0的服务器,并且没有其他选择,你可以继续使用这个版本,但你应该非常清楚你正在承担的安全风险。命令来挂载共
在Ubuntu 22.04上使用NFS(Network File System)进行挂载,你可以按照以下步骤操作:
服务器端配置
-
安装NFS服务器:
首先,你需要在Ubuntu服务器上安装NFS服务器。打开终端并输入以下命令:bash复制代码
sudo apt update sudo apt install nfs-kernel-server
如果系统提示需要更新,请先执行
sudo apt update
。 -
创建共享目录:
创建一个你想要共享的目录。例如,在/home/username/nfsdir
下创建一个目录:sudo mkdir -p /home/username/nfsdir
请将
username
替换为你的用户名。 -
配置NFS:
打开NFS的配置文件/etc/exports
。你可以使用任何文本编辑器,如vim
或gedit
。这里以vim
为例:sudo vim /etc/exports
在文件末尾添加一行来定义你的共享目录和访问权限。例如:
/home/username/nfsdir *(rw,sync,no_root_squash)
这表示
/home/username/nfsdir
目录对所有客户端都是可读写的(rw
),数据是同步写入的(sync
),并且NFS客户端上的root用户具有与服务器上的root用户相同的权限(no_root_squash
)。注意:如果你只想允许特定的IP地址或网络段访问,你可以替换
*
为相应的IP地址或CIDR表示法。 -
重启NFS服务:
保存并关闭/etc/exports
文件后,重启NFS服务以使更改生效:sudo systemctl restart nfs-kernel-server
客户端配置
-
安装NFS客户端(如果尚未安装):
在Ubuntu客户端上,你可能需要安装NFS客户端工具。不过,这些工具通常作为NFS服务器包的一部分一起安装。如果没有,你可以使用以下命令安装:sudo apt install nfs-common
-
挂载NFS共享:
现在你可以在Ubuntu客户端上挂载NFS共享了。使用mount
命令并指定服务器地址、共享目录和本地挂载点。例如:sudo mount -t nfs server_ip:/home/username/nfsdir /mnt/nfs
请将
server_ip
替换为你的NFS服务器IP地址,/mnt/nfs
替换为你想要挂载到的本地目录(如果目录不存在,需要先创建它)。 -
验证挂载:
使用df -h
命令来查看已挂载的文件系统,确认NFS共享已成功挂载:df -h
你应该能在输出中看到类似于
server_ip:/home/username/nfsdir
的条目。
现在,你的Ubuntu客户端应该能够像访问本地文件系统一样访问NFS共享了。
如果出现报错mount.nfs: access denied by server while mounting
当您遇到 mount.nfs: access denied by server while mounting
错误时,这通常意味着NFS服务器拒绝了客户端的挂载请求。以下是几个可能的解决方案:
- 检查NFS导出配置:
- 确保NFS服务器的
/etc/exports
文件中包含了对应的导出目录和允许访问的客户端IP或子网。例如:/yww_nfs_ssd 172.26.111.0/24(rw,sync,no_root_squash)
- 如果您使用的是NFSv4,请确保您使用的是正确的访问控制机制(如
sec=sys
、sec=krb5
等)。 - 导出目录的权限也需要是适当的,以便NFS服务可以访问它们。
- 确保NFS服务器的
- 重新加载NFS导出:
- 在NFS服务器上,每次更改
/etc/exports
文件后,您都需要重新加载NFS配置。可以使用以下命令:sudo exportfs -ra
- 在NFS服务器上,每次更改
- 检查NFS服务状态:
- 确保NFS服务正在运行。在大多数Linux发行版中,可以使用以下命令检查:
sudo systemctl status nfs-server
- 如果NFS服务没有运行,请使用以下命令启动它:
sudo systemctl start nfs-server
- 确保NFS服务正在运行。在大多数Linux发行版中,可以使用以下命令检查:
- 检查防火墙设置:
- 确保NFS服务器和客户端的防火墙都允许NFS相关的端口。NFS通常使用111端口(rpcbind/portmapper)和一系列动态分配的端口。
- 如果您使用的是云服务提供商的安全组或VPC设置,请确保这些设置允许NFS通信。
- 检查NFS版本和挂载选项:
- 如果您的NFS服务器和客户端使用的NFS版本不同,可能会出现兼容性问题。请确保它们使用相同的NFS版本(通常是NFSv3或NFSv4)。
- 使用正确的挂载选项。例如,如果您使用的是NFSv4,您可能需要指定
sec=sys
或其他安全选项。
- 检查NFS客户端ID映射:
- 如果您使用的是NFSv4并且遇到了ID映射问题,请确保NFS服务器和客户端都正确配置了ID映射。
- 查看日志:
- 在NFS服务器和客户端上查看系统日志,以获取更多关于为什么访问被拒绝的信息。在大多数Linux系统上,您可以使用
dmesg
、journalctl
或直接查看/var/log/
目录下的日志文件。
- 在NFS服务器和客户端上查看系统日志,以获取更多关于为什么访问被拒绝的信息。在大多数Linux系统上,您可以使用
- 测试NFS连接:
- 在客户端上,使用
showmount -e 172.26.111.1
命令来查看NFS服务器上的导出列表。这可以帮助您验证NFS服务器是否可访问以及是否列出了您尝试挂载的目录。
- 在客户端上,使用
在Ubuntu 22.04中使用CIFS挂载共享文件夹,你可以按照以下步骤操作:
-
安装cifs-utils软件包:
首先,你需要安装cifs-utils软件包,该软件包包含CIFS挂载工具。在终端中执行以下命令进行安装:sudo apt update sudo apt install cifs-utils
-
创建本地挂载点:
你需要在Ubuntu上创建一个本地目录,用于挂载共享文件夹。你可以在任何位置创建这个目录,但通常建议选择一个容易访问的位置。例如,在/mnt
目录下创建一个名为share
的目录:sudo mkdir /mnt/share
-
挂载共享文件夹:
使用mount
命令来挂载共享文件夹。你需要提供共享服务器的IP地址、共享名称、本地挂载点以及你的用户名和密码。以下是一个示例命令的基本结构:sudo mount -t cifs //共享服务器IP地址/共享名称 /本地挂载点 -o 用户名=你的用户名,密码=你的密码,iocharset=utf8,sec=ntlm
将命令中的
共享服务器IP地址
、共享名称
、本地挂载点
、你的用户名
和你的密码
替换为实际的值。例如:sudo mount -t cifs //192.168.1.100/myshare /mnt/share -o username=myuser,password=mypassword,iocharset=utf8,sec=ntlm
输入你的用户密码以确认挂载操作。如果成功,你将能够在
/mnt/share
目录下访问共享文件夹的内容。 -
(可选)自动挂载:
如果你希望在系统启动时自动挂载共享文件夹,可以编辑/etc/fstab
文件并添加相应的条目。但是,请注意,将密码明文存储在/etc/fstab
中可能存在安全风险。因此,建议仅在了解风险并接受其后果的情况下使用此方法。如果你选择使用
/etc/fstab
进行自动挂载,并希望避免在文件中明文存储密码,你可以考虑使用其他方法(如密钥环或凭证助手)来安全地存储和管理凭据。
完成上述步骤后,你就应该能够在Ubuntu 22.04上成功使用CIFS挂载共享文件夹了。
如果出现如下错误
mount error(22): Invalid argument
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
使用命令
tail -f /var/log/kern.log
这个错误消息是在警告你,使用SMB/CIFS协议的不太安全的版本(vers=1.0
)通常是不被推荐的,除非你需要访问非常旧的服务器。SMB 1.0(也被称为CIFS 1.0)由于存在一些已知的安全漏洞,因此在许多现代环境中已经被禁用或不再推荐使用。
如果你确实需要访问一个只支持SMB 1.0的服务器,并且没有其他选择,你可以继续使用这个版本,但你应该非常清楚你正在承担的安全风险。
然而,如果可能的话,你应该尝试以下步骤来解决问题:
-
更新服务器:如果可能的话,尝试更新SMB服务器到支持更安全的SMB版本(如SMB 2.0、SMB 2.1、SMB 3.0等)。
-
使用更安全的SMB版本:在挂载命令中指定一个更安全的SMB版本。例如,使用
vers=2.0
或vers=3.0
(取决于服务器支持的版本)。sudo mount -t cifs //server-ip/share-name /mnt/cifs-share -o username=your-username,password=your-password,vers=3.0
注意:在上面的命令中,我移除了
sec=ntlm
或类似的参数,因为当你指定一个较新的SMB版本时,通常不需要明确指定安全选项,除非服务器有特殊需求。
当你看到错误消息 "CIFS: VFS: bad security option: ntlm" 时,这通常意味着你尝试在挂载CIFS共享时使用了不被支持的安全选项ntlm
。虽然NTLM曾经是一个常见的SMB认证协议,但随着时间的推移,它被认为是不够安全的,并且在现代Linux发行版中,默认可能不再支持或推荐使用。
要解决这个问题,你可以尝试以下几种方法:
-
使用
ntlmv2
或ntlmssp
:
尝试使用NTLMv2或NTLM Session Security Package(ntlmssp)代替NTLM。这些是NTLM的更新和更安全的版本。例如:
sudo mount -t cifs //server-ip/share-name /mnt/cifs-share -o username=your-username,password=your-password,vers=3.0,sec=ntlmv2
或者
sudo mount -t cifs //server-ip/share-name /mnt/cifs-share -o username=your-username,password=your-password,vers=3.0,sec=ntlmssp
-
检查服务器配置:
确保SMB服务器支持你想要使用的安全选项。如果服务器只支持NTLM,并且你的Linux发行版不再支持NTLM,你可能需要更新服务器配置以使用更新的认证方法。 -
查看
mount.cifs
文档:
使用man mount.cifs
命令查看mount.cifs
的文档,了解可用的安全选项和其他挂载选项。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)