这是用于查找完整文件权限的golang函数

问题描述 投票:0回答:1

我需要使用golang来获取给定文件(特别是SUID位)的文件权限。这是示例文件的权限。

$ touch example_file.test
$ chmod 7777 example_file.test
$ ls -ltra example_file.test
    -rwsrwsrwt 1 luke users 0 Feb 25 21:53 example_file.test

$ stat -c "%a %n" example_file.test
     7777 example_file.test

这里是一个小程序,说明了这个问题。

func main() {
    info, _ := os.Stat("example_file.test")
        fmt.Println(info.Mode().String())                        // ugtrwxrwxrwx
        fmt.Println(info.Mode().Perm().String())                 // -rwxrwxrwx
        fmt.Printf("permissions: %#o\n", info.Mode().Perm())     // permissions: 0777
}

Golang结果不一致,因为ugtrwxrwxrwx != 0777

文档中的以下引号表示这可能是跨平台兼容性问题。

FileMode代表文件的模式和权限位。这些位有所有系统上的定义相同,因此有关文件的信息可以从一个系统移动到另一个系统。并非所有位都适用所有系统。唯一需要的位是目录的ModeDir。

type FileMode uint32类型,定义的文件模式位是最FileMode的有效位。九个最低有效位是标准的Unix rwxrwxrwx权限。这些位的值应该被视为公共API的一部分,并且可以在有线中使用协议或磁盘表示形式:尽管它们不能更改可能会添加新的位。

这是限制吗?

go unix file-permissions
1个回答
0
投票

我需要使用golang来获取给定文件的文件许可权(特别是SUID位)

确定,添加此:fmt.Printf("File has SUID bit set: %t\n", info.Mode()&os.ModeSetuid != 0)

golang结果不一致,因为ugtrwxrwxrwx!= 0777

info.Mode()info.Mode().Perm()是不同的,尽管相关。

info.Mode().Perm()包含info.Mode()的子集。 info.Mode().Perm()只是一个简单的便利功能,可以使用恒定掩码0777按位进行。

这是限制吗?

© www.soinside.com 2019 - 2024. All rights reserved.