我有一台服务器,它有许多 CIFS 共享,需要按用户进行访问。例如,我有一个音乐共享,我有完全访问权限,但我的妻子只有只读权限。
当我或我的妻子登录我们的 Ubuntu 11.04 笔记本电脑时,我希望这些共享能够自动按用户挂载。现在我明白了,如果我以-t cifs
未指定用户的身份挂载,那么它将使用USER
环境变量。但是,我还需要指定密码,那么当每个用户都有不同的密码时,我该怎么做呢?
我想我的问题是:
- 有没有办法让我拥有每个用户的/etc/fstab?
- 如果没有,有没有办法指定某个挂载仅适用于某个特定用户?
- 此外,共享密码始终与本地密码相同。有没有办法指定此密码应从客户端传递到服务器,而不必在某个凭证文件中指定它?
或者我可能遗漏了某些内容,而有完全不同的解决方案。有人能帮忙吗?
答案1
可能有几种解决方案;下面是我的做法。 (免责声明:未经测试!)
这安装.cifsUSER
命令可以从和 环境变量 中读取用户名和密码PASSWD
,但它也可以从您在命令行上使用选项指定的“凭据”文件中读取它们-o cred=/path/to/credentials/file
。
我认为凭证文件方法更容易实现。
创建一个文本文件
$HOME/.Music.cred
来存储凭证;该文件应具有以下格式:user=your-username-on-cifs-server password=the-password domain=leave-this-blank-unless-really-using-windows-domains
保护
$HOME/.Music.cred
文件;在终端中运行此命令:chmod go-rw $HOME/.Music.cred
现在您应该能够使用以下命令
//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
如果步骤 3 中的命令正常工作,您可以通过多种方式使其自动化:
- 将其保存到您的主目录中的 shell 脚本中,并使该脚本成为自动启动的应用程序(您必须为每个需要挂载 CIFS 共享的用户执行此操作);
- 将其保存到 shell 脚本中
/etc/X11/Xsession.d/30mount-cifs-shares
,以便任何用户都可以使用。
或者,你可以使用以下方法替换上面的步骤 3 和 4: pam 安装:
安装包 libpam 安装
配置
/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 就可以正常工作。