2

有没有办法使用 fstab 中定义了挂载选项的条目来使用 Go 挂载 ssh 设备。我一直在尝试 syscall.Mount 没有成功。

func main() {

    src := "jeanluc@<remote IP>:/home/jeanluc"
    target := "/home/jeanluc/my-mnt/ursule_jeanluc"
    fs := "fuse.sshfs"

    err := syscall.Mount(src, target, fs, 0, "rw")

    if err != nil {
        log.Fatal(err)
    }
}

2018/01/20 11:31:07 operation not permitted exit status 1

使用 fstab 条目的用户挂载工作正常。

sshfs#jeanluc@<remote IP>:/home/jeanluc /home/jeanluc/my-mnt/ursule_jeanluc fuse user,noauto,uid=1000,gid=1000,follow_symlinks,defaults 0 0

编辑:

以下 Marc 的建议对我有用:

cmd := exec.Command("mount /home/jeanluc/my-mnt/ursule_jeanluc")

// capture STDOUT
var out bytes.Buffer
cmd.Stdout = &out

// run cmd
err := cmd.Run()
if err != nil {
    log.Fatal(err)
}

// print STDOUT
fmt.Printf("%s", out.String())
4

1 回答 1

1

您需要以 setuid 位的身份运行二进制文件,root或者由setuid位拥有。root

这是因为/etc/fstabis 由mount (8)(命令)使用,而不是mount (2),因此userfstab 条目中的属性什么都不做(条目的其余部分也不做)。

事实上,mount (2)手册页明确指出:

安装文件系统需要适当的权限(Linux:CAP_SYS_ADMIN 能力)。

如果您无法以特权用户身份运行或想要使用该/etc/fstab条目,您始终可以执行实际的挂载命令。

于 2018-01-20T12:10:06.813 回答