4

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

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

你可以看到我在数据中给出了ro参数,我也试图只给出rreadonly以及只读但它们都不起作用,当我编译 go 文件并执行它然后当我检查 /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表示读写

我想将它安装为只读,任何人都可以帮助我如何在 Golang 中做到这一点?

4

2 回答 2

4

我遇到了类似的问题,通过将 fstype 设置为bind并将标志设置为MS_REMOUNT MS_RDONLYMS_BIND来修复它。您可以使用以下代码:

syscall.Mount(source, destination, "bind", syscall.MS_REMOUNT|syscall.MS_RDONLY|syscall.MS_BIND, "")
于 2022-01-25T16:08:03.133 回答
1

只读模式由 syscall 标志定义,该标志MS_RDONLY也在syscall 包中定义。所以调用应该是:

syscall.Mount(src, dst, "auto", syscall.MS_BIND | syscall.MS_RDONLY, "")
于 2022-01-25T14:23:56.433 回答