我在 TrueNAS-Scale 服务器上托管了多个 Samba 共享,并使用 Arch Linux 计算机上的“多用户”选项挂载它们。作为我的用户后cifscreds add
,我可以访问共享,但一段时间后我不再具有访问权限,显然我的会话密钥环已被撤销。为什么?
在 Arch 机器上,我为每个共享启用了 systemd 安装单元,如下所示:
$ cat /etc/systemd/system/mnt-share.mount
[Unit]
Description=Mount share
After=nss-lookup.target
[Mount]
What=//truenas-scale.localdomain/share
Where=/mnt/share
Type=cifs
Options=multiuser,sec=ntlmssp,credentials=/etc/samba/credentials/smbnobody.creds,iocharset=utf8,rw
[Install]
WantedBy=multi-user.target
(/etc/samba/credentials/smbnobody.creds
包含 user 的用户名/密码smbnobody
,我在 TrueNAS 服务器上专门创建了该用户名,以具有对共享的最小权限,即对顶级目录的读取权限,仅此而已。)
重新启动后,我通过 SSH 连接到 Arch 机器,运行cifscreds add truenas-scale.localdomain
并输入密码,然后我就可以/mnt/share
按预期进行读/写访问。然后我开始tmux
,启动一个长时间运行的任务,然后断开连接。
一段时间后,当我通过 SSH 返回到 Arch 机器时,我经常发现自己不再具有读/写访问权限/mnt/share
:
$ ls /mnt/share
ls: cannot access '/mnt/share': Permission denied
$ ls -l /mnt
ls: cannot access '/mnt/share': Permission denied
total 0
d????????? ? ? ? ? ? share
尝试添加/更新凭据也失败:
$ cifscreds add truenas-scale.localdomain
Error: unable to query session keyring: Key has been revoked
$ keyctl show
Session Keyring
Unable to dump key: Key has been revoked
我必须重新启动机器才能再次获得访问权限。
如果我的长时间运行的任务不访问共享,就会出现此问题。例如,如果我运行wget
将一个大文件下载到内部共享tmux
,在下载完成之前断开连接并重新连接,则对该共享的读/写访问权限仍然有效。但是,如果我仅在下载完成后重新连接,则会看到“权限被拒绝”。
为什么会发生这种情况,我应该如何预防?
答案1
我自己也遇到过类似的问题,就我而言,我可以通过创建一个新会话并keyctl session
对其进行身份验证来解决此问题。
我知道,这是一个令人不满意的答案,但希望它比您迄今为止得到的其他答案(即没有)最好,并且可能会给您一些可以借鉴的线索。