linux s权限位

98 阅读1分钟
// 给指定路径文件,设置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也可以实现相同效果。