使用go在fstab中挂载条目

时间:2018-01-20 10:35:31

标签: linux go mount fstab

是否可以使用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())

1 个答案:

答案 0 :(得分:1)

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

这是因为mount (8)(命令)使用了/etc/fstab,而不是mount (2),所以fstab条目中的user属性什么都不做(其余的也没有)的条目)。

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

  

适当的权限(Linux:CAP_SYS_ADMIN功能)是   安装文件系统所必需的。

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