操作系统:Ubuntu MATE 20.04.1 x64_86
我需要为文件服务器(具有 NFS 和 Microsoft Active Directory 的环境)创建一个网络驱动器,并能够通过 Bash 脚本对其进行读/写。经过一番谷歌搜索,我找到了一个解决方案(以下是我的 Bash 脚本中安装驱动器的更大程序的一部分):
readonly srv_conn_str="//remote-usrs-srv/Users$"
mount.cifs "${srv_conn_str}" ~/drive_usr -o username="${user}",password="${password}",dom="AD",vers=1.0
上面的代码完成了这项工作,但当且仅当我使用 sudo(root 特权)运行 mount.cifs 时它才有效。现在的问题是,这个 Ubuntu 系统实际上是一个带有 GUI 的虚拟机,多个用户连接到该虚拟机。这些用户中的每一个都需要在他们的~/drive_usr
目录中创建挂载点(使用他/她的 Windows 帐户 ID 和密码)。因此,除非每个人都有 sudo 用户的密码,否则我看不到任何其他方式来运行此命令,显然这不是一个选项。因此,我有两个问题:
问题 1:是否有任何系统级配置允许以普通用户身份运行 mount.cifs 而不仅仅是系统管理员?
问题2:在每个用户关闭当前会话之前,应该~/drive_usr
通过umount命令卸载吗?现在我问这个问题的原因显然是我真的是这个领域的初学者,所以我不知道在不卸载已经安装的网络驱动器的情况下关闭会话是否mount.cifs
会对遥控器上的原始数据造成任何损害服务器,就好像我们在没有先卸载它的情况下移除了 U 盘,这是不推荐的,可能会导致数据丢失。
编辑n°1:(基于建议的解决方案钒)
我将以下行附加到 /etc/fstab:
//remote-usrs-srv/Users$ /home/mylinux_username/drive_usr cifs user,noauto,rw,suid,exec,dev,iocharset=utf8,username=my_windows_username,domain=AD,vers=2.0 0 0
这几乎解决了这个问题。现在,不使用 sudo我需要做的就是在我的 Bash 脚本中运行以下命令:
readonly srv_conn_str="//remote-usrs-srv/Users$"
mount.cifs "${srv_conn_str}" ~/drive_usr
一旦用户的 Windows 密码在我的脚本中作为命令行参数提供,它就会安装驱动器。但是,仍然存在两个问题:
我可以在不使用 sudo 的情况下挂载,但显然umount 命令仍然需要 sudo。我需要的是能够在没有 sudo 权限的情况下在 ~/drive_usr 上运行 mount 和 umount 。
最初,我在 /etc/fstab 中提供的选项中添加了异步选项。然而,这产生了以下错误:
安装错误(22):参数无效
当我运行 dmesg 以查看问题时,这是我发现的错误消息:
CIFS: Unknown mount option "async"
那我理解正确吗?CIFS 与异步不兼容?我想添加 async 选项的原因是,当我在谷歌上搜索更多关于 /etc/fstab 的信息时,我看到很多人建议添加这个选项以提高性能,我真的是这个领域的初学者,我不知道这是否正确。我很感激对此的一些澄清。
我按照 wanadium 在评论中的建议(非常感谢!)解决了普通用户无法挂载/卸载的问题。这是必须添加到 /etc/fstab 的行