每个用户自动安装网络共享

每个用户自动安装网络共享

我有一台服务器,它有许多 CIFS 共享,需要按用户进行访问。例如,我有一个音乐共享,我有完全访问权限,但我的妻子只有只读权限。

当我或我的妻子登录我们的 Ubuntu 11.04 笔记本电脑时,我希望这些共享能够自动按用户挂载。现在我明白了,如果我以-t cifs未指定用户的身份挂载,那么它将使用USER环境变量。但是,我还需要指定密码,那么当每个用户都有不同的密码时,我该怎么做呢?

我想我的问题是:

  1. 有没有办法让我拥有每个用户的/etc/fstab
  2. 如果没有,有没有办法指定某个挂载仅适用于某个特定用户?
  3. 此外,共享密码始终与本地密码相同。有没有办法指定此密码应从客户端传递到服务器,而不必在某个凭证文件中指定它?

或者我可能遗漏了某些内容,而有完全不同的解决方案。有人能帮忙吗?

答案1

可能有几种解决方案;下面是我的做法。 (免责声明:未经测试!)

安装.cifsUSER命令可以从和 环境变量 中读取用户名和密码PASSWD,但它也可以从您在命令行上使用选项指定的“凭据”文件中读取它们-o cred=/path/to/credentials/file

我认为凭证文件方法更容易实现。

  1. 创建一个文本文件$HOME/.Music.cred来存储凭证;该文件应具有以下格式:

    user=your-username-on-cifs-server
    password=the-password
    domain=leave-this-blank-unless-really-using-windows-domains
    
  2. 保护$HOME/.Music.cred文件;在终端中运行此命令:

    chmod go-rw $HOME/.Music.cred
    
  3. 现在您应该能够使用以下命令//server/music在目录中挂载 CIFS 共享:MyMusicFolder

    sudo mount -t cifs -o cred=$HOME/.Music.cred //server/music $HOME/MyMusicFolder
    

    您可以让每个用户都通过无密码方式运行此操作须藤添加一行/etc/sudoers:(每个用户一行)

    # replace every occurence of `user` with the actual account name
    user ALL= NOPASSWD: /bin/mount -t cifs -o cred=/home/user/.Music.cred //server/music /home/user/MyMusicFolder
    
  4. 如果步骤 3 中的命令正常工作,您可以通过多种方式使其自动化:

    • 将其保存到您的主目录中的 shell 脚本中,并使该脚本成为自动启动的应用程序(您必须为每个需要挂载 CIFS 共享的用户执行此操作);
    • 将其保存到 shell 脚本中/etc/X11/Xsession.d/30mount-cifs-shares ,以便任何用户都可以使用。

或者,你可以使用以下方法替换上面的步骤 3 和 4: pam 安装

  1. 安装包 libpam 安装

  2. 配置/etc/security/pam_mount.conf.xml为:

    <debug enable="1" />
    <volume server="server" path="music" mountpoint="~/MyMusicFolder" options="cred=/home/%(USER)/.Music.cred" />
    

参考:

答案2

为了提醒自己和其他人来说,libpam-mount 失败的原因是:

CIFS VFS: Error connecting to socket. Aborting operation
CIFS VFS: cifs_mount failed w/return code = -101

这是因为当 libpam 尝试挂载时我的无线网络尚未启动。为了纠正这个问题,我必须在无线连接设置中将无线连接设置为“可供所有用户使用”。这允许在用户登录之前激活连接。

一旦我设置了该属性,libpam-mount 就可以正常工作。

相关内容