【Linux 系统篇(四)】权限详解(一) 大家好欢迎来到 huangjin007_ 的博客⭐个人主页huangjin007_文章收录专栏Linux 内功修炼手册(系统篇)总会有一些坚持能从冰封的土地里培育出十万朵怒放的蔷薇Linux 系统篇(四) —— 权限详解(一)文章目录Linux 系统篇(四) —— 权限详解(一)一、Linux 的用户体系1. 超级用户 vs 普通用户2. su 命令3. 临时借用管理员权限sudo3.1 谁可以用 sudo二、权限的本质角色 目标属性1. 三种角色访问者分类2. 权限字符串ls -l3. 基本权限r、w、x 的含义三、修改权限和归属1. chmod修改文件的访问权限1字符法2数字法2. chown修改文件的拥有者3. chgrp修改文件的所属组四、目录权限的三个灵魂问题问题 1目录的 r、w、x 到底管什么问题 2能不能只给人“进入目录”的能力问题 3为什么普通用户能删掉别人的文件结语一、Linux 的用户体系我们常说“权限管理”首先要清楚的是系统里到底有哪些人Linux 的权限本质上就是不同身份的人对不同文件或目录能做不同的事情。1. 超级用户 vs 普通用户Linux 下的用户分为两种超级用户root它对系统拥有绝对控制权可以读取、修改、删除任何文件甚至可以关机、重启、卸载软件等一切操作几乎不受限制。普通用户由 root 创建普通用户只能在自己有权限的范围内活动无法随意修改系统关键目录比如/etc、/usr/bin否则终端会报错Permission denied权限不足。怎么看当前是谁看提示符。如果命令行前面的符号是#说明当前是root 用户。如果命令行前面的符号是$说明当前是普通用户。2. su 命令很多时候我们会需要在普通用户和 root 之间来回切换就用suswitch user。命令格式su[用户名]从 root 切换到普通用户因为 root 是最高权限降级到普通用户时不需要输入密码。从普通用户切换到 root这时系统会提示输入 root 的密码。输入正确才能切换成功。一个小坑su和su -有什么区别su root只切换用户身份但环境变量还是原来普通用户的可能会因为找不到命令而带来麻烦。su -或者su - root不但切换用户还会加载 root 的环境变量。同理从 root 切换到普通用户时也可以使用su - 用户名来完整加载该用户的环境。3. 临时借用管理员权限sudo每次要用 root 权限都切到 root 用户不但麻烦而且长时间保持 root 状态操作系统也危险。所以 Linux 提供了一个更灵活的工具sudo。sudo的全称是 Super User DO意思是“以超级用户身份做某事”。你不必完全变成 root但可以让某一条命令临时拥有 root 的权限。比如普通用户安装软件sudoaptinstallvim输入当前用户的密码注意不是 root 密码系统确认该用户有 sudo 权限后就会以 root 身份执行这条命令。3.1 谁可以用 sudo不是每个普通用户都能直接用 sudo必须由管理员事先授权。授权配置文件在/etc/sudoers。一个典型的授权行如下意思是用户whb可以在任何主机上以任何身份执行任何命令即拥有完全 sudo 权限。如果未授权的用户尝试用 sudo会收到报错whb is not in the sudoers file. This incident will be reported.二、权限的本质角色 目标属性Linux 权限设计可以用一句话概括谁Who对什么What能做什么How这就是权限的“人—事物—能力”模型。1. 三种角色访问者分类对于任何一个文件或目录Linux 会把可能接触它的人分成三类拥有者Owner用u表示通常是创建文件的那个人。拥有者对该文件有最高的话语权除了 root 可以无视一切。所属组Group用g表示把文件归属到一个用户组组里所有成员共享对该文件的同一套权限。比如一个项目组的同事都需要读写某个共享文件就会把他们放入同一个用户组。其他人Others用o表示既不是拥有者也不在所属组里的其他用户。系统和外界“访客”通常就落在这类。重要特性三类角色是互斥的。系统在判断权限时会按拥有者 - 所属组 - 其他人的顺序检查只要匹配到其中一个身份就直接使用对应的权限不再往后看。2. 权限字符串ls -l当我们执行ls -l查看文件时最左侧会看到一串类似-rw-rw-r--的符号一共 10 个字符。我们拆解-rw-rw-r--这个字符串位序含义值第 1 位文件类型-表示普通文件第 2~4 位拥有者u的权限rw-读、写、不可执行第 5~7 位所属组g的权限rw-读、写、不可执行第 8~10 位其他人o的权限r--只读第 1 位的常见符号-普通文件文本、图片、可执行程序等d目录文件夹l软链接类似 Windows 快捷方式b块设备文件如硬盘、U 盘c字符设备文件如键盘、鼠标、终端p管道文件用于进程间通信3. 基本权限r、w、x 的含义每个角色都能获得三种基本权限的组合r读Read对文件可以查看文件内容用cat、more等。对目录可以列出目录下有哪些文件用ls。w写Write对文件可以修改文件内容用vim、echo 等。对目录可以在目录下创建、删除、重命名文件touch、rm、mv等。x执行eXecute对文件可以把文件当作程序运行。对目录可以“进入”该目录用cd。如果某个位置是-就表示没有该项权限。八进制数值表示法每一组权限u/g/o的 rwx 如果存在看成 1是-就看成 0。rwx- 111 7rw-- 110 6r-x- 101 5r--- 100 4所以整个文件权限可以简洁地用三个数字表示如 755、644 等。例如-rwxr-xr--的数值表示就是 754拥有者rwx 7所属组r-x 5其他人r-- 4三、修改权限和归属1. chmod修改文件的访问权限chmodchange mode就是用来设置文件或目录权限的命令。格式chmod[选项]权限 文件名谁可以改文件拥有者和root可以改权限其他人不行。权限的表达方式有两种字符法和数字法。1字符法格式为[用户符号][操作符][权限字符]用户符号u拥有者g所属组o其他人a所有人all相当于 ugo 一起操作符增加某个权限-去掉某个权限强制设置为某个权限会覆盖之前的2数字法用三个八进制数字分别代表 u、g、o 的权限。2. chown修改文件的拥有者chownchange owner用来更换文件的主人。格式chown[选项]新用户名 文件名注意这个操作是管理员的专属权力。普通用户不能把文件的所有权交给别人这是系统安全设计。如果普通用户执行chown会提示Operation not permitted。若确实需要必须配合sudo提权sudochownuser1 f13. chgrp修改文件的所属组chgrpchange group用来修改文件属于哪个用户组。格式chgrp[选项]组名 文件名同样修改组也可能需要相应权限通常文件拥有者可以把自己的文件改到一个他所属的组但跨组改动往往也需要sudo。四、目录权限的三个灵魂问题很多容易把“目录的权限”和“文件的权限”混为一谈。下面三个问题帮你彻底拔掉这个钉子。问题 1目录的 r、w、x 到底管什么权限对目录的意义对应的能力r可以读取目录的内容列表能执行ls查看目录下有哪些文件名w可以修改目录的内容能在目录下创建、删除、重命名文件touch、rm、mvx可以进入目录能cd进入该目录作为当前工作目录很明显对于目录来说x 权限是基础。如果一个目录你没有 x 权限就算它有 r 权限你也无法进入完全拿它没办法。问题 2能不能只给人“进入目录”的能力假设我们有一个目录test_dir现在只给其他人 x 权限chmodox test_dir此时其他用户o的权限是--x。会发生什么该用户可以cd test_dir成功进入目录。进入后执行ls会报错因为没有 r 权限看不到文件列表。但是如果该用户事先知道目录里某个具体文件的完整路径比如test_dir/readme.txt并且他对那个文件拥有读权限那么他就可以直接cat test_dir/readme.txt读取文件内容。理解你朋友家门牌号被遮住了没有 r但你记住了路有 x依然可以走到门前。只要门本身是开着的文件有 r 权限你就能看到里面的内容。这里还要注意一点任何用户无法进入其他用户的家目录问题 3为什么普通用户能删掉别人的文件假设有两个普通用户alice和bob他们在同一个目录/shared下工作目录权限是rwxrwxrwx777。alice创建了一个文件alice.txt权限是rwx------只有 alice 自己能读写执行。现在 bob 去删这个文件rm/shared/alice.txt结果竟然删掉了明明 bob 对alice.txt没有任何写权限啊原因在于 Linux 的一个核心逻辑删除一个文件本质上并不是修改这个文件的内容而是在修改它“所在目录”的内容。你把目录想象成一个花名册删除文件只是从名册上划掉一个名字。至于文件本身的属性并不直接决定能否被删除。所以删除文件需要的能力是对所在目录拥有w写权限能修改名册对所在目录拥有x执行权限能进入该目录到达名册前文件本身的权限删除时不关心。结语今天的内容到这里就结束了希望你能有所收获~干货整理到手抖觉得有用的话赏个三连回回血__(:ᗤ」ㄥ)_ _