pam_mount sshfs 和主文件夹作为挂载点的问题

pam_mount sshfs 和主文件夹作为挂载点的问题

我正在尝试使用 pam_mount 在用户登录时通过 sshfs 挂载每个用户的主文件夹。我遇到的问题是,当 pam_mount 调用 mount.fuse 并且 mount.fuse 使用 ssh 挂载 sshfs 文件夹时,它会创建“~/.ssh”。这意味着该用户的 ~/ 挂载点变为非空,挂载失败。此时您可能会指出,我可以打开一个名为 nonempty 的选项,这将允许挂载到非空挂载点。我已将其打开,但它不起作用。也许这只是我的 sshfs 版本的问题?也许我误解了该选项的含义?

您可能会问,我怎么知道挂载失败是因为目录不为空。我这样测试了我的理论。我将挂载点更改为“~/foobar”。因此,我们现在不是直接挂载到主目录,而是挂载到主目录中名为 foobar 的文件夹。当我以普通用户身份登录时,挂载成功,用户主目录挂载到 ~/foobar。因此我注销并卸载共享。因此,现在我在 foobar 目录中创建一个空白文件,以便 foobar 目录不为空。我再次以普通用户身份登录,挂载失败。

编辑:从 /etc/security/pam_mount.conf.xml 添加了信息(出于隐私原因删除了服务器 IP)

<fusemount>mount.fuse %(VOLUME) %(MNTPT) -o %(OPTIONS)</fusemount>
<volume fstype="fuse" path="sshfs#%(USER)@<ssh server ip>:/data/home/%(USER)" mountpoint="/home/%(USER)" options="nonempty" ssh="1"/>

编辑:( ssh/file 服务器端的 audit.log 的输出)

type=CRED_DISP msg=audit(1314290438.255:1490): user pid=5817 uid=0 auid=16777308 ses=203 subj=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=PAM:setcred acct="<ssh username>" exe="/usr/sbin/sshd" hostname=<client ip> addr=<client ip> terminal=ssh res=success'

编辑:我只是想提一下,我尝试执行与 pam_mount 配置为在空目录和非空目录上执行的命令基本相同的命令。当目录非空时,它似乎有效。所以现在我的理论是 pam_mount 没有正确传递 non_empty 选项,或者发生了其他事情……不过,我再次认为这不是身份验证问题,因为在服务器端,身份验证被报告为成功。我说的命令是:

mount.fuse sshfs#<ssh user>@<ssh/file server ip>:/data/home/<ssh user> <mount point> -o "nonempty"

答案1

好的,我明白了。如果 pam_mount.conf.xml 中没有指定如何挂载 fuse 文件系统(如 sshfs),则应该像这样配置。

<fusemount>mount.fuse %(VOLUME) %(MNTPT) -o %(OPTIONS)</fusemount>

因此,在我开始尝试更改默认值以执行诸如删除挂载点中的任何文件或欺骗 ssh 认为 home 位于其他位置之类的操作之前,我没有明确设置任何内容,因此它不会在 home 下创建 .ssh 文件夹。这两个操作都由于其他原因失败了。最后,我将一切恢复为默认值,然后用 bash 脚本替换 mount.fuse 可执行文件以记录其执行时使用的所有参数和环境变量。当我这样做时,我发现了问题所在。-o 和 nonempty 之间没有空格。因此,参数是 -ononempty,这可能导致挂载失败或者至少不应用 nonempty 选项。因此,如果您不指定任何内容,默认值必须是这样的:

<fusemount>mount.fuse %(VOLUME) %(MNTPT) -o%(OPTIONS)</fusemount>

所以我最终明确指定了默认值,见上文。而且成功了!!!这可能是 pam_mount 中的一个错误。我在 Centos6 上运行 pam_mount-2.5-1.fc12.x86_64。希望其他人觉得这些信息有用。感谢每一位评论的人。

相关内容