windows 网络驱动器 linux 挂载后需要 sudo

windows 网络驱动器 linux 挂载后需要 sudo

我能够使用 sudo 将驱动器安装到 Linux 机器上。

sudo mount \
    -t cifs \
    -o 'vers=3.0,username=myuser,domain=mydomain' \
    '//windows-ip/share-folder' ~/testmount/

这很有效,问题是,当我进入 ~/testmount 并执行以下操作时mkdir

mkdir: cannot create directory ‘bkup’: Permission denied

如果我使用,它就会工作sudo我们将在 cronjob 中使用自动脚本将文件写入这些挂载点,因此,我们需要能够在没有的情况下写入挂载点sudo

因此,安装后,除非我使用,否则我无法将文件添加到该文件夹​​,sudo这就是问题所在。

看来我的问题与这个问题非常相似,但是那个解决方案对我来说不起作用:

https://unix.stackexchange.com/questions/231230/mount-successful-directory-accessible-but-cannot-do-operations-cp-mkdir-etc

有人认为问题在于我使用 sudo 来挂载它,因此必须使用 sudo 来更改其中的任何内容(即使我不需要使用 sudo 来读取其中的内容)。

因此,我找到了如下答案:

https://unix.stackexchange.com/questions/365308/use-mount-o-with-a-non-root-user https://wiki.ubuntu.com/MountWindowsSharesPermanently

我甚至尝试实施建议的解决方案,但仍然无法使这些解决方案发挥作用。

我的 etc/fstab 有这一行:

//windows-ip/share-folder \
/home/mysuer/testmount \
cifs \ 
uid=myuser,credentials=/home/myuser/.smbcredentials,iocharset=utf8,domain=my-domain 0 0

使用上述设置时,当我尝试在没有 sudo 的情况下运行 mount 时出现错误:

$ mount ~/testmount
mount: only root can mount //10.1..../shared on /home/.../testmount

我需要能够在没有 sudo 的情况下写入这些已挂载文​​件夹的原因是我们将有一个自动保存文件的系统,并且我认为它不应该使用 sudo,而且我甚至不知道如果我们愿意的话它是否可以这样做。

我在 centos 7 上。也许你不能在 fstab 中放置“域”选项,我不知道。有人可以帮我吗?

答案1

安装和访问是两件不同的事情。

要允许用户挂载,您的第四个字段fstab必须包含user,例如user,uid=myuser,…。请参阅man 5 fstab。不过,您可能不需要它,请继续阅读。

您给出uid=myuser选择。来自man 8 mount.cifs

uid=arg
当服务器不提供所有权信息时,设置将拥有已挂载文件系统上所有文件或目录的 uid。它可以指定为用户名或数字 uid。如果未指定,则默认为 uid 0mount.cifs帮助程序必须是 1.10 或更高版本,才能支持以非数字形式指定 uid。

另一个片段:

mount.cifs -V命令显示 cifs mount helper 的版本。

如果uid=正确指定,则使用 进行安装sudo不应覆盖它;因此您甚至可能不需要user中的选项fstab。也许您在使用 时几乎已经完成了,uid=但您执意不使用sudo。不过还有一件事。另一个片段:

核心 CIFS 协议不提供文件和目录的 unix 所有权信息或模式。因此,文件和目录通常看起来归uid=gid=选项设置的任何值所有,并且权限设置为默认值file_mode和挂载权限。尝试通过/dir_mode更改这些值将返回成功,但不会有任何效果。chmodchown

当客户端和服务器协商 unix 扩展时,文件和目录将被分配服务器提供的 uid、gid 和模式。由于 CIFS 挂载通常是单用户的,并且无论哪个用户访问挂载都使用相同的凭据,因此新创建的文件和目录通常会被赋予与挂载共享时使用的凭据相对应的所有权。

如果客户端和服务器上使用的 uid 和 gid 不匹配,则forceuidforcegid选项可能会有所帮助。

如果我理解正确,客户端和服务器(正确设置后)可以忽略uid=并使用存储在服务器上的所有权。在这种情况下,这是相关的:

forceuid
指示客户端忽略服务器为文件和目录提供的任何 uid,并始终将所有者指定为选项的值uid=

看起来这一行fstab可能更适合你:

//windows-ip/share-folder \
/home/mysuer/testmount \
cifs \ 
forceuid,uid=NUMBER,credentials=/home/myuser/.smbcredentials,iocharset=utf8,domain=my-domain 0 0

然后使用sudo(或添加选项,user如果你真的需要的话)。如果没有noauto选项,操作系统将在启动时尝试自动安装共享。网络可能当时还不可用,我不知道你的操作系统是否会解决这个问题。您systemd可以使用x-systemd.automount,第四个字段将以以下内容开头:

x-systemd.automount,x-systemd.idle-timeout=1min,forceuid,uid=NUMBER,…

另一种选择是autofs

相关内容