// 给指定路径文件,设置s权限位
func setSuidBit(file string) error {
fi, err := os.Stat(file)
if err != nil {
return fmt.Errorf("failed to stat file: %s", err)
}
err = os.Chmod(file, fi.Mode()|os.FileMode(uint32(8388608)))
if err != nil {
return fmt.Errorf("failed to chmod file: %s", err)
}
return nil
}
当使用setSuidBit设置文件权限时,文件的权限位会有一个额外的s符号。
-rwsr-sr-x. 1 root root 1897359 Dec 20 14:37 hello
这个s权限位是什么意思?
设置使文件在执行阶段具有文件所有者的权限,相当于临时拥有文件所有者的身份. 典型的文件是passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权限, 从而可以更改用户的密码.
另外,bash chmod a+s filename也可以实现相同效果。