用户、组与权限

一、操作系统用户分类

1.1 用户分类

  • 管理员用户: root,拥有整个系统下最高权限

  • 普通用户:拥有个人用户的最高权限

  • 傀儡用户: 只为了运行程序而存在,不能登录

2.2 系统中用户分类表示

用户
UID(default)

root

0

傀儡用户

1-999

普通用户

1000+

二、用户相关的配置文件

2.1 用户信息 passwd

root:x:0:0:root:/root:/bin/bash
  • 第1列:用户名

  • 第2列:密码占位符(shadow文件)

  • 第3列:UID

  • 第4列:GID

  • 第5列:用户别名

  • 第6列:家目录

  • 第7列:命令解释器

2.2 用户组信息 group

  • 第1列:组名

  • 第2列:组密码

  • 第3列:GID

  • 第4列:组成员列表,不含组主用户

三、用户相关的目录

3.1 用户家模板 skel

创建用户的流程:

  1. useradd sliman 命令创建用户

  2. /etc/skel/ 目录下的所有隐藏文件拷贝到 sliman 的家目录

  3. 修改文件属主和属组

::: tip 面试题:如果命令行左侧变成bash版本号怎么办?{#interviewQuestion01}

  1. 注释掉 /etc/profile 中的PS1 赋值行(如有)

  2. 删除/备份家目录下的 .bash_profile.bashrc

  3. 命令 cp /etc/skel/.* . 拷贝 skel 目录下的所有文件到家目录

  4. 重新进入会话 :::

四、用户相关命令

4.1 创建用户 - useradd

语法格式:

参数:

  • -s :指定命令解释器

  • -u :指定UID

  • -g :指定GID

  • -M : 不创建家目录

  • -G:附加组

案例:

4.2 删除用户 - userdel

4.3 创建组 - groupadd

4.4 删除组 - groupdel

4.5 查看用户ID - id

4.6 设置密码 - passwd

方法一:交互式设置密码

方法二:免交互式设置密码

PS:Linux 不允许未设置密码的用户登录

4.7 修改文件属主属组 - chown

语法格式:

  • -R :递归修改目录及其子目录下的所有文件属主 属组

案例:

4.8 修改文件权限 - chmod

语法格式:

  • -R:递归对当前目录下所有子文件和目录进行权限变更

五、sudo 提权

普通用户下可以通过sudo命令来获取部分root的权限。

  • -i:模拟初始登录,加载目标用户的环境

  • -l:列出当前用户可执行的sudo命令

  • -k:撤销sudo凭据缓存

修改sudo配置:

方法一:visudo 命令(推荐)visudo命令支持语法检查

方法二:手动编辑 /etc/sudoers 文件

跳转至100行,使用如下格式添加所有权限

例:

六、权限位说明

6.1 最佳实践

企业中对于普通文件的最高权限为:644,即:rw-r--r--

6.2 权限对目录的作用

  • r:什么也干不了

  • w:什么也干不了

  • x:只能进目录

  • r-x:可以正常对目录进行查看,和对目录下的文件进行写入操作

  • rwx:可以对目录进行所有操作,创建、移动、删除等

6.3 默认权限控制 UMASK

mask 控制着 Linux 中文件和目录的默认权限

  • 文件默认权限 = 666 - mask

  • 系统默认权限 = 777 - mask

[!NOTE] 如果UMASK值中含有奇数,则文件的最终权限要在相减后在奇数位 +1

::: tip 笔试题:如果默认创建000属性的文件请问UMASK值是多少?{#interviewQuestion02} 答:是 666。 :::

6.4 隐藏权限

查看隐藏权限

设置隐藏权限

  • i :不可变,谁也无法对文件进行任何改动

  • a :也不可变,但是可以追加内容

6.5 特殊权限位

特殊权限位是 12 个权限位中的前 3 位,可以通过 stat 命令查看,设置方法与普通权限相同。

  • suid :4,给文件添加 s 权限后,所有使用这个命令的用户都拥有该命令主人的权限。针对二进制命令或程序,不能作用在脚本上。

  • sgid :2,基本和suid相同,所有使用这个命令的用户都拥有命令主人所属组的权限。

  • sticky :1,粘滞位,每个用户只能管理自己的文件(默认情况下能否删除一个文件看的是上级目录的权限,不看文件权限),例如 /tmp 目录。

最后更新于