Linux文件权限

最近开发中与Linux系统打交道较多,对于文件权限理解缺失,整理后这里总结下

文件权限说明

当终端执行ll命令等可以看到每个文件权限说明

比如drwx------ 7 lighthouse lighthouse 4096 Jul 12 12:00 lighthouse

开头的字母即权限说明,具体如下,大白话来理解即针对一个文件,该属性值明确了我,我们,他们的权限。

https://static.1991421.cn/2022/2022-07-16-160034.jpeg

权限判断

有了该文件的明确权限属性值,放在业务逻辑里,假如我们如何想判断一个文件针对用户是否有权限该如何做呢?

  1. 获取用户所属UID,GID,比如这里我执行ID命令id,拿到当前登陆用户lighthouse的用户信息

    1
    uid=1000(lighthouse) gid=1000(lighthouse) groups=1000(lighthouse)
  2. 获取文件所属uid,gid及文件权限信息,比如lighthouse文件夹

    1
    2
    3
    4
    5
    6
    7
    # 显示uid,gid
    ll -n
    drwx------ 7 1000 1000 4096 Jul 16 15:21 lighthouse

    # 显示owner,group名称
    ll
    drwx------ 7 lighthouse lighthouse 4096 Jul 12 12:00 lighthouse
  3. 权限判断

    • 如果用户uid===0,即为超级用户,直接拥有完整权限
    • 如果用户uid===文件uid即属于owner,则根据owner具体的rwx确定是否有对应权限
    • 如果用户不是owner而是属于同group,则根据group具体的rwx确定是否有对应权限
    • 如果用户不属于同group,则根据other具体的rwx确定是否有对应权限

说明

  1. root用户是特殊的存在,且ID固定不变
  2. uid===0的超级用户可能不唯一

举个🌰

比如root用户即不是lighthouse文件夹的owner也不是同组,且文件夹本身对于others也没有任何权限开放,但实际上root完全可以进行读写执行,因此也就印证了上述权限判断logic。

写在最后

玩好Linux,加油。

相关资料