Linux 实操篇 - 组管理和权限管理

Linux 实操篇 - 组管理和权限管理

这一章的重点就是 chownchgrpchmod 三个命令。

chown 确定文件的所有者,然后文件所有者控制文件的组和文件的权限

Linux 组基本介绍

在 linux 中的每个用户必须属于一个组,不能独立于组外。在 Linux 中每个文件有所有者、所在组、其它组的概念。

具体命令回看《Linux 实操篇 - 用户管理》的 用户组 小节

文件/目录所有者

查看文件的所有者

ll 命令即可查看。

ll 中展示的文件所有者,和文件所属的组,是两个独立的东西,文件的所有者所在的组和文件所属的组,不一定相同。只有在文件刚创建的时候,文件所有者就是创建文件的用户,文件所在组就是文件创建者所在的组

因此,ll 中展示的权限中的第二部分同组者的权限,指的是文件所在组的同组者,而不是文件所有者所在组的同组者

其实这样挺好,文件的权限可以独立地用组进行控制,和文件创建者绑定在一起,反而不灵活。

修改文件所有者

root 创建的文件,放到用户 lk 的家目录,lk 登录之后查看文件的时候,会发现

此文件是只读的,lk 用户属于 root 用户的其他组用户,对应 r-- 这一段权限,所以 lk 是只读的。

重新登录 root 用户,然后使用 chown 命令把文件的所有者改成 lk(只有 root 用户才可以使用 chown 修改文件所有者),再登录 lk 查看,文件权限没有变,但是此时,lk 成为了文件的所有者,对应 rw- 这一段权限,用 vim 编辑确实也证实文件可修改

把文件拥有者修改为 lk:chown lk /home/lk/rootcreate.txt

组的创建

回看《Linux 实操篇 - 用户管理》的 用户组 小节

文件/目录所在组

当某个用户创建了一个文件后,这个文件的所有这就是当前用户,而且这个文件的所在组就是该用户所在的组。

查看文件/目录所在组

通过 ll 命令即可查看,《ls 指令 list files》

修改文件/目录所在的组

使用 chgrp 命令

其它组

除文件的所有者和文件所在组的用户外,系统的其它用户都是文件的其它组。

改变用户所在组

回看《Linux 实操篇 - 用户管理》的 用户组 小节

权限的基本介绍

回看 ll 命令的解析,回看《ls 指令 list files》

rwx 权限详解,难点

回看 ll 命令的解析,回看《ls 指令 list files》

文件及目录权限实际案例

回看 ll 命令的解析,回看《ls 指令 list files》

修改文件所有者 - chown

Linux chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。

Linux/Unix 是多人多工操作系统,所有的文件皆有拥有者利用 chown 将指定文件的拥有者和组改为指定的用户和组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。(这就很棒了)

chown 需要超级用户 root 的权限才能执行此命令(这也很好理解,一般用户没有权限来改变别人的文件的拥有者,也没有权限可以将自己的文件的拥有者改设为别人)

chown [-cfhvR] [--help] [--version] user[:group] file...

简单实践:

chown userid file...:修改文件所有者

chown userid folder...:修改目录所有者

chown :groupid file...:修改文件所在组

chown userid: groupid file...:同时修改文件所有者和组

chown -R userid: groupid folder/:如果想一次性处理目录同时目录下有子目录,带上 -R 参数

修改文件/目录所在组 - chgrp

Linux chgrp(英文全拼:change group)命令用于变更文件或目录的所属群组。与 chown 命令不同,chgrp 允许普通用户改变文件所属的组,只要该用户是文件所有者同时是目标组的一员(The owner of a file may change the group of the file to any group of which that owner is a member),或者是 root,就可以运行 chgrp。在 UNIX 系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用 chgrp 指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。

chgrp [-cfhRv][--help][--version][所属群组][文件或目录...]
chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]

简单实践:

chgrp groupid /opt/rootcreate.txt:修改单个文件的权限

chgrp groupid /opt/testfolder:修改单个目录的权限

chgrp -R groupid folerPer/:修改递归目录的权限

chgrp --reference aaa.txt permTxt.sh:使用参考文件修改文件所在组,前提是操作者必须是文件所有者同时也是参考文件所在组即目标组的成员

修改权限 - chmod

Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令,权限的基础知识查看《ls 指令 list files》

只有文件的所有者和 root 用户才可以修改文件的权限,其他人都不行。这是很正确的,如果任何人都可以对一个文件设置权限,那这个权限不就毫无意义了吗?

chmod [-cfvR] [--help] [--version] <mode> file...

常用配置项:除了 -R,其他用的都不多

其中 mode 为权限设定字串,可以理解为权限的表达式,这是 chmod 命令的重点

[ugoa...][[+-=][-rwxstX]...][,...]

使用符号模式可以设置多个项目,一个部分由 who(用户类型:ugoa),operator(操作符:+-=)和 permission(权限:-rwxstX)组成,每个部分的设置可以用逗号隔开。命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,这个位置为空表示 a(所有用户),一个 chomod 命令的多个部分中的 who 可以重叠,也就是说一个 chomod 命令可以对一个用户类型进行多次设置,permission 也可以同时指定多个权限。这个位置为空表示 -,没有权限

刚创建的一个 txt 文件的时候,默认的权限是 -rw-r--r--。数字是 644

简单实践:

chmod =rw filename.txt:设置文件的所有角色权限为 rw

chmod =rw testfolder:设置文件夹的所有角色权限为 rw

chmod o= filename.txt:设置文件的 o 权限为空

chmod = filename.txt:设置文件的所有角色权限为空

chmod o=--- filename.txt:设置文件的 other 的权限为空

chmod u+x,g-x,o-w filename.txt:所有者添加执行权限,同组者删除执行权限,其他人删除编辑权限

多个项目之间的 who 可以重叠

比如 chmod a+x,g-x filename.txt甚至直接重复chmod a+x,a-x filename.txtchmod u+w,u-w filename.txt

chmod a+r file1.txt:所有人添加读取权限

chmod ug+wx filename.txt:所有者和同组者添加编辑和执行的权限

chmod -R u=rwx testfolder/:为 testfolder 目录下所有的文件的所有者准确设置为对此文件可查看可编辑可执行

find path/ -type d -exec chmod a+x {} \;:允许所有用户执行目录 path/ 下的文件

用八进制语法表示权限

八进制语法(一个三位二进制数就是一个八进制数)

其中当你想快速精确设置权限的时候,可以使用数字参数。用数字表示为:r=4w=2x=1,因此 rwx=4+2+1=7,数字可以进行组合,这样从 1 到 7 的这几个数字就代表了这三个字母组成的权限也就是某一个角色的权限,其实可以把 rwx 也就是每一个角色的权限理解为一个三位二进制数,这样更好记忆

完整的权限就是三个这样的三位二进制数的组合

例子:

chmod 000 filename.txt:所有角色都没有权限

chmod 777 filename.txt:所有角色都有 rwx 权限

chmod 754 filename.txt:等价于 u=rwx,g=r-x,o=r--

缺点就是每个角色的权限都得设置一遍,不然通过符号设置权限更加灵活和可读,