SSHFS 上的 Setcap

Setcap over SSHFS

我运行在我的机器上安装了一个虚拟机,并使用 sshfs(通过 fstab 自动安装)在虚拟机中安装了一个主机文件夹。

abc@xyz:/home/machine/test on /home/vm/test type fuse.sshfs (rw,relatime,user_id=0,group_id=0,allow_other)

该文件夹有一个我想 运行 在 VM 中的可执行文件。但在 运行 安装该可执行文件之前,我还需要一些功能。所以我的脚本看起来像:

#!/bin/bash
# Some preprocessing.
sudo setcap CAP_DAC_OVERRIDE+ep /home/vm/test/my_exec
/home/vm/test/my_exec

但我遇到以下错误:

Failed to set capabilities on file `/home/vm/test/my_exec' (Operation not supported)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

但是如果我在 VM 中复制可执行文件(比如在 /tmp/ 中),那么它就可以正常工作。这是 sshfs 的已知限制还是我在这里遗漏了什么?

File capabilities are implemented on Linux with extended attributes(特别是 security.capability 属性),并非所有文件系统都实现扩展属性。

sshfs 特别是没有。

sshfs 只能执行远程用户有权执行的操作。您以 abc 身份登录到远程主机,因此您只能对 abc 可以执行的 sshfs 执行操作——不包括 setcap,因为该操作只能是由根执行。在本地计算机上使用 sudo 不会改变这一点。