我们如何通过 Go 将文件挂载为 Linux 中的只读文件?

How can we mount a file as read-only in Linux through Go?

我想知道如何通过 Golang 在 Linux CentOS 7 服务器中将文件挂载为只读。我已经尝试过 syscall 但这不起作用,syscall 挂载文件但作为读写我试图在数据中提供 ro 参数但它仍然以读写方式挂载。 这是我的代码:

syscall.Mount(src, dst, "auto", syscall.MS_BIND, "ro")

你可以看到我在数据中给出了ro参数,我也尝试只给出r and readonly and also read-only but none of them works, when i compile the go file and execute它然后当我检查 /etc/mtab 然后我得到这个输出:

cat /etc/mtab | grep "firewall"
/dev/vda1 /root/firewall.txt ext4 rw,relatime,data=ordered,jqfmt=vfsv1,usrjquota=quota.user 0 0

这里可以看到firewall.txt挂载为rw表示read-write

我想将其挂载为只读,谁能帮我在 Golang 中如何做到这一点?

Read-only 模式由系统调用标志 MS_RDONLY, which is also defined in the syscall package 定义。所以调用应该是:

syscall.Mount(src, dst, "auto", syscall.MS_BIND | syscall.MS_RDONLY, "")

我遇到过类似的问题,已通过将 fstype 设置为 bind 并将标记设置为 MS_REMOUNT [=13 来解决=]MS_RDONLY 和 MS_BIND 。您可以使用这些代码:

syscall.Mount(source, destination, "bind", syscall.MS_REMOUNT|syscall.MS_RDONLY|syscall.MS_BIND, "")