golang学习-使用go-chattr库锁定Linux文件权限

409次阅读
没有评论

在 Linux 操作系统中,chattr 是用于修改文件或目录的扩展属性的命令。扩展属性是与文件或目录相关联的元数据,包括访问权限、拥有者、修改时间等。

chattr 命令可以用来设置或取消扩展属性,包括以下几种类型:

  • i(immutable):将文件或目录设置为不可修改,不可删除,不可重命名,只有 root 用户才能使用 chattr - i 取消此属性。
  • a(append only):只允许在文件末尾追加内容,不允许覆盖或删除已有内容。
  • d(no dump):指定文件或目录不会被 dump 命令备份。
  • s(secure deletion):在删除文件时,使用 0 填充文件内容,以确保文件内容不可恢复。
  • c(compress):启用文件压缩。

chattr 命令的使用格式为:chattr [选项] [文件名],常用的选项包括:

  • -i:设置或取消 immutable 属性。
  • -a:设置或取消 append-only 属性。
  • -d:设置或取消 no-dump 属性。
  • -s:设置或取消 secure-deletion 属性。
  • -c:设置或取消 compress 属性。
  • -R:递归处理子目录。

例如,要将文件 file.txt 设置为只读不可修改,可以使用以下命令:chattr +i file.txt。要取消该属性,可以使用命令:chattr -i file.txt

golang 中可以使用 go-chattr 库来实现对文件附加不可修改权限

package main

import (
	"fmt"
	"os"

	"github.com/g0rbe/go-chattr"
)

func main() {file, err := os.OpenFile("/etc/resolv.conf", os.O_RDONLY, 0666)
	if err != nil {fmt.Println(err)
	}
	// 打印当前是否拥有不可修改权限
	fmt.Println(chattr.IsAttr(file, chattr.FS_IMMUTABLE_FL))
	// 设置不可修改权限
	chattr.SetAttr(file, chattr.FS_IMMUTABLE_FL)
	// 打印当前是否拥有不可修改权限
	fmt.Println(chattr.IsAttr(file, chattr.FS_IMMUTABLE_FL))
}

打印输出

go run main.go
false <nil>
true  <nil>

可以看到刚开始是没有权限的,使用 SetAttr 设置后就拥有了权限

正文完
 
ddn
版权声明:本站原创文章,由 ddn 2023-03-08发表,共计991字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。