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
不会改变这一点。
我运行在我的机器上安装了一个虚拟机,并使用 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
不会改变这一点。