文章目录(Table of Contents)
简介
Linux 是一个多用户登陆的操作系统,不同用户可以同时登录一台主机。比如「小A」和「小B」都可以同时登陆同一台主机,他们共享一些主机的资源,且分别拥有自己的用户空间,用于存放各自的文件。实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,由于 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
更新密码的界面如下所示:
最后我们可以使用 su 命令从当前 wmn7
用户切换到 tmp_wmn
用户(注意,这里切换之前一定要在上面重置过密码,否则可能会出现 su: Authentication failure
的报错信息):
su tmp_wmn
当切换成功之后,可以查看当前的用户:
修改用户信息
通常情况下,可以通过 usermod
来修改已经存在用户信息。usermod
的语法如下所示:
usermod [选项] [用户名]
usermod
的选项参数大部分与 useradd
命令是一致的,可以参考上面「创建用户」部分的内容。在下面的例子中,我们修改用户 tmp_wmn
的备注消息:
sudo usermod -c "temp account" tmp_wmn
运行的结果如下所示,可以看到在/etc/passwd
中多了用户的备注信息:
特别说明一下,我们可以使用 usermod
的命令来给用户添加 sudo 的权限,如下所示:
- usermod -aG sudo username
上面命令中的 a
表示 append
,G
表示 group
,就是将用户添加到 sudo
的 group
中即可。
删除用户
从系统中删除一个不再使用的用户,可以通过 userdel
命令实现。如果一个用户的账号不再使用,删除用户账号就要把 /etc/passwd
等系统文件中的该用户记录都删除,必要时还要删除用户的主目录。
userdel
的简单例子如下所示,其中选项 -r
表示将用户的主目录一起删除:
sudo userdel -r tmp_wmn
查看用户
通过 /etc/passwd
文件查看,一个最直观查看用户信息的方式就是通过 /etc/passwd
文件;
- 查看当前用户,使用
w
来查看当前用户; - 查看主机上的用户,
who
; - 查看当前登录的用户,
whoami
; - 查看登录的记录,
lastlog
; - 查看用户 id 和组的信息,
id
;
下面是使用 id
来查看用户 id 与组信息的结果:
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 查看到的信息是一样的):
用户的禁用和恢复登录
如果一个用户在操作过程中存在违法行为,我们可以对其进行锁定,下面是「锁定」和「恢复」的语法:
禁用,其中 L
是 lock
的缩写:
# 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 # 恢复
我们看一下禁用账号和恢复账号的原理。首先查看在禁用前的密码:
# 禁用前查看密码 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
上面的运行结果如下图所示:
可以看到,禁用密码之后,在文件 /etc/shadow
中密码仍旧存在,只是在前面多了感叹号 !
,这样该用户就无法登录了,因为验证端改变了密码。当然,在解锁之后,密码前面的叹号会被去掉。
用户与文件
改变归属关系-chown
使用 chown 用来修改文件的所属者。下面的例子中,我们将所属者从「wmn7」修改为「root」:
sudo chown root install.sh
下面是更一般的写法:
- chown -R wmn ./
其中的参数为:
- -R:递归修改目录下所有的拥有者;
- wmn:修改成为的拥有者名字;
- ./:更改的目录;
改变归属组-chgrp
上面我们修改了文件的「所属者」,我们还可以进一步修改文件的「所属组」。下面的例子中我们将文件的「所属组」从「wmn7」修改为「root」:
sudo chgrp root install.sh
下面是更一般的写法,与上面的类似,下面是修改「更改用户组」:
- chgrp -R wmn ./
其中的参数为:
- -R:递归修改目录下所有的拥有者;
- wmn:修改成为的用户组名字;
- ./:更改的目录;
下面是参考的链接:
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论