vlambda博客
学习文章列表

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

所以看到一个100644也就不奇怪了 里文件权限有9个bit, 644 依然对应User/Group/Others的读/写/执行权限

对于文件的类型呢,有以下这几种类型:


Stick bit(粘贴位)

粘贴位其实是一种访问权限的flag,可以赋给文件或者目录,这里直接从参考文件中摘一段话过来吧,

“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/