Linux 用户与权限

王 茂南 2021年10月17日07:47:37
评论
3922字阅读13分4秒

简介

Linux 是一个多用户登陆的操作系统,不同用户可以同时登录一台主机。比如「小A」和「小B」都可以同时登陆同一台主机,他们共享一些主机的资源,且分别拥有自己的用户空间,用于存放各自的文件。实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,由于 Linux 的用户管理权限机制,不同的用户不可以轻易地查看、修改彼此的文件。接下来就一起学习 Linux 系统中用户管理的相关知识。

本文的大部分内容根据实验楼课程,「楼+ 之运维进阶实战」进行改编。

 

Linux 中的用户概念

用户与用户组

首先我们会介绍一下「用户」与「用户组」的概念:

「用户」,因为 Linux 是个多用户多任务的分时操作系统,想要调用系统资源必须先向系统管理员申请一个账号,通过用户身份进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也能帮助用户组织文件,为用户提供安全性保护。每个账号都拥有一个唯一的用户名和用户密码。用户在登录时键入正确的用户名和密码后,才能进入系统和自己的主目录。

「用户组」用户组是具有相同特征的用户的逻辑集合。有时需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是逐一对多个用户进行文件访问授权;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有该组用户就具有了和组一样的权限。这就是用户组,将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了管理工作。

上面的用户与用户组的关系,可以用下面的一张图片来进行说明(有许多用户,两个用户组,同一个用户可以在不同的用户组里面):

Linux 用户与权限

用户与用户组之间存在以下的联系:

  • 一对一:一个用户可以存在于一个用户组中,也可以是组中的唯一成员。
  • 一对多:一个用户可以存在于多个用户组中,那么此用户具有多个组的共同权限。
  • 多对一:多个用户可以存在于一个用户组中,这些用户具有和组相同的权限。
  • 多对多:多个用户可以存在于多个用户组中,其实就是上面三个对应关系的扩展。

 

相关配置文件

  • 用户信息,被保存在 /etc/passwd 文件中,下面是一行的例子:
    • wmn7: x: 1000: 1000: ,,,: /home/wmn7: /bin/zsh
    • 每一行使用冒号「:」进行分割,共有七个字段,具体含义为,
    • 用户名:密码占位符(x 表示用户需要密码登录):用户标识号(UID):组标识号(GID):注释性描述:主目录:登录的 shell
  • 密码信息,被单独保存在 /etc/shadow 文件中,文件每一行有 9 个字段:
    • 用户名:加密口令:最后一次修改时间:密码最短有效天数:密码最长有效天数:密码过期前的警告时间:不活动时间:用户失效时间:暂时保留未使用
  • 用户组文件,Linux 系统对用户组的所有信息被保留在 /etc/group 文件中,文件一行有 4 个字段:
    • 组名:口令:组标识号(GID):组内用户列表(多用户可用逗号分隔开)

 

Linux 中的用户管理

创建用户

添加新的用户账号是通过 useradd 命令。下面是 useradd 的语法:

useradd [选项] [用户名]

其中选项可以有以下的选择:

  • -c,comment,指定一段注释性描述;
  • -d,目录,指定用户主目录或者说家目录;如果此目录不存在,则同时使用 -m 选项来创建主目录;
  • -g,用户组,指定用户所属的用户组,这个是「主用户组」。一个用户只能属于一个主组,但可以有很多附加组。主组就是用户登录系统后的默认组,当用户创建一个文件的时候文件的组是当前用户的主组。用户可以在系统中使用 newgrp 命令切换到附加组。;
  • -G,用户组,指定用户所属的附加组;
  • -s,Shell 文件,指定用户的登录 shell。这里需要指定 shell 的完整路径,例如 /bin/bash 或者 /bin/zsh;
  • -u,用户号,指定用户的用户号,若有 -o 选项,则可以重复使用其它用户的标识号;

下面看一个具体的例子,如何创建用户,设置密码和切换用户。我们创建一个 tmp_wmn 的用户同时设置 shell与设置「用户主目录」,并查看 /etc/passwd 文件:

# 添加用户,指定 `shell` 
sudo useradd -md /home/tmp_wmn -s /bin/bash tmp_wmn

# 查看添加的用户信息 
tail -1 /etc/passwd 
# >> tmp_wmn:x:1001:1001::/home/tmp_wmn:/bin/bash

接着我们为 tmp_wmn 用户设置密码,使用 passwd 来更新密码(passwd 还可以用于修改用户密码,设置密码过期等操作,具体可以通过 passwd -h 来查看说明):

# 设置密码
sudo passwd tmp_wmn

更新密码的界面如下所示:

Linux 用户与权限

最后我们可以使用 su 命令从当前 wmn7 用户切换到 tmp_wmn 用户(注意,这里切换之前一定要在上面重置过密码,否则可能会出现 su: Authentication failure 的报错信息):

su tmp_wmn

当切换成功之后,可以查看当前的用户:

Linux 用户与权限

 

修改用户信息

通常情况下,可以通过 usermod 来修改已经存在用户信息。usermod 的语法如下所示:

usermod [选项] [用户名]

usermod 的选项参数大部分与 useradd 命令是一致的,可以参考上面「创建用户」部分的内容。在下面的例子中,我们修改用户 tmp_wmn 的备注消息:

sudo usermod -c "temp account" tmp_wmn

运行的结果如下所示,可以看到在/etc/passwd 中多了用户的备注信息:

Linux 用户与权限

 

删除用户

从系统中删除一个不再使用的用户,可以通过 userdel 命令实现。如果一个用户的账号不再使用,删除用户账号就要把 /etc/passwd 等系统文件中的该用户记录都删除,必要时还要删除用户的主目录

userdel的简单例子如下所示,其中选项 -r 表示将用户的主目录一起删除:

sudo userdel -r tmp_wmn

 

查看用户

通过 /etc/passwd 文件查看,一个最直观查看用户信息的方式就是通过 /etc/passwd 文件;

  • 查看当前用户,使用 w 来查看当前用户;
  • 查看主机上的用户,who
  • 查看当前登录的用户,whoami
  • 查看登录的记录,lastlog
  • 查看用户 id 和组的信息,id

下面是使用 id 来查看用户 id 与组信息的结果:

Linux 用户与权限

 

Linux 中管理用户组

Linux 中「用户组的管理」和「用户的管理」非常类似,主要包括:用户组的添加、删除和修改以及用户组间切换的权限。其中用户组的增删改实际上就是对 /etc/group 文件的处理。

添加新用户组

增加一个新的用户组调用 groupadd 命令。他的语法如下所示:

groupadd [选项] [用户组]

其中选项有以下的几个常用的参数:

  • -g,指定新用户组的组标识号(GID),该参数指定的值必须唯一;
  • -o,与 -g 同时使用,允许用户组的新 GID 和系统已有用户组的相同;

在下面的例子中,我们创建一个用户组 test,其标识号为 1024;

# 添加用户组
sudo groupadd -g 1024 test

# 在 /etc/group 中查看
tail -1 /etc/group
# >> test:x:1024:

 

修改用户组信息

我们通常使用 groupmod 来修改用户组的属性。下面是 groupmod 的基本语法:

groupmod [选项] [用户组]

其中选项有以下的几个常用参数:

  • -g,为用户组指定一个新的组标识号;
  • -o,与 -g 同时使用时,允许将组 GID 更改为非唯一值;
  • -n,将用户组的名字修改为新的名字,直接给定新的用户组名称;

例如在下面的例子中,我们首先将用户组的名称从 test 修改为 test1

sudo groupmod -n test1 test

接着我们修改用户组 test1 的 GID(组标识号),从 1024 修改为 1027:

sudo groupmod -g 1023 test1

tail -1 /etc/group
# >> test1:x:1027:

 

删除用户组

我们使用 groupdel 命令把一个用户组从系统中删除。例如删除上面的 test1 这个用户组:

sudo groupdel test1

 

查看用户所属的所有组

查看一个用户属于哪些组,可以使用 groups 命令,不指定用户时,查看的是当前用户属于哪些组。例如我们查看当前用户 wmn7 所属的组(这个和使用 id 查看到的信息是一样的):

Linux 用户与权限

 

用户的禁用和恢复登录

如果一个用户在操作过程中存在违法行为,我们可以对其进行锁定,下面是「锁定」和「恢复」的语法:

禁用,其中 Llock 的缩写:

# usermod -L username
# passwd -l username

恢复,其中 U 表示 unlock 的缩写:

# usermod -U username
# passwd -u username

例如我们现在将 tmp_wmn 禁用,并恢复:

sudo passwd -l tmp_wmn # 禁用
sudo passwd -u tmp_wmn # 恢复
Linux 用户与权限

我们看一下禁用账号和恢复账号的原理。首先查看在禁用前的密码:

# 禁用前查看密码
sudo tail -1 /etc/shadow

# 禁用
sudo passwd -l tmp_wmn

# 再次查看密码
sudo tail -1 /etc/shadow

# 恢复
sudo passwd -u tmp_wmn

# 再次查看密码
sudo tail -1 /etc/shadow

上面的运行结果如下图所示:

Linux 用户与权限

可以看到,禁用密码之后,在文件 /etc/shadow 中密码仍旧存在,只是在前面多了感叹号 ! ,这样该用户就无法登录了,因为验证端改变了密码。当然,在解锁之后,密码前面的叹号会被去掉。

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2021年10月17日07:47:37
  • 转载请务必保留本文链接:https://mathpretty.com/14020.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: