Unix/linux的文件权限管理
“ 对于Unix/linux的文件权限管理,小伙伴应该都熟悉所谓的权限三元组(three permission traid):Owner,Group,Others,已经它们各自的Readable/Writable/Executable权限三元组。不过除了rwx,Unix/Linux对文件的权限管理,还有两个不常用的字符s以及t,还有关于文件的模式有时候看到的不止是10位”
最近公司一个小伙伴问了我个问题:“git提交一个新文件的时候看到这样一行“new mode.100644,644应该对应的是owner/group/others的rwx权限,100代表是什么呢”?隐约记得100表示个regular file,但是是不是还有其他mode有点不清楚,所以事后再次学习总结了下。
Unix/Linux的文模式和权限
首先回答下小伙伴的问题,为什么git中会有100644这种模式,git使用的是16-bit的文件模式,使用的是POSIX中的文件类型和模式的layout。而我们通常使用ls等命令列出的则会直接显示它的类型。
文件类型(4-bit) | 保留(3-bit) |
文件权限(9-bit) |
文件类型,比如 1000是正常文件, 1010对应符号链接 1110是gitlink |
暂时没用使用 |
只对regular 文件有效 符号链接以及gitlinks都是0 |
对于文件的类型呢,有以下这几种类型:
Stick bit(粘贴位)
“When a directory's sticky bit is set, the filesystem treats the files in such directories in a special way so only the file's owner, the directory's owner, or root user can rename or delete the file. Without the sticky bit set, any user with write and execute permissions for the directory can rename or delete contained files, regardless of the file's owner. Typically this is set on the /tmp directory to prevent ordinary users from deleting or moving other users' files.”
翻译过来就是:当一个目录的粘贴位被设置了,文件系统会特殊对待这个目录下的文件,只有文件的owner,目录owner和root用户可以对他改名或者删除。如果没用设置粘贴位,则所有有写和执行权限的用户都可以对它进行改名或删除操作,通常会把/tmp文件设置粘贴位防止用户删除或者移走其他用户的文件。
Set uid/gid
这里其实就是设置用户ID和Group ID,它是和executable有关系的,通常再计算机系统中为了实现一些特殊的task临时提升某些用户或Group权限让它可以去执行一个程序。这里不赘述,可以参考wiki所给的参考资料。
参考资料:
https://en.wikipedia.org/wiki/File_system_permissions
https://en.wikipedia.org/wiki/Sticky_bit
https://en.wikipedia.org/wiki/Setuid
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html
https://www.techrepublic.com/article/unix-permissions-made-easy/