8 Linux实操篇-用户管理

8 Linux实操篇-用户管理

  1. 《鸟哥的Linux私房菜 基础学习篇 第四版》1
  2. 《鸟哥的Linux私房菜 服务器架设篇 第三版》2
  3. 《韩顺平_2021图解Linux全面升级》3

  本章介绍Linux中有关“用户管理”的操作,比如针对单个用户进行创建、删除、修改密码、查询信息,以及针对用户组进行创建、删除、更改用户所在组等。注意本章的操作都需要管理员权限! 也就是要使用root账户来完成对于用户的操作。

8.1 添加用户

  Linux系统天然就是一个 多用户多任务 的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员(root账户)申请一个账号才能进入系统,这个账号默认存储在家目录/home下。下面是添加用户的基本语法以及相应的示例图:

# 基本语法-添加用户
useradd 用户名                  # 自动的创建和用户同名的家目录
useradd -d 指定目录 新的用户名   # 给新创建的用户指定家目录,注意这个目录的名称可以和用户名不一致。
Linux系统
usradd tom
usradd -d /home/test milan
/home/tom
root
tom
milan
/home/test
图8-1 在root账户创建新的用户

如上图所示,直接使用useradd tom创建账户tom后,其目录就默认存储在家里目录下/home/tom;而指定目录创建账户milan后,其就存储在设定好的目录/home/test下。注意,如果没有特殊情况,所有的账户都应该存储在家目录/home下以方便管理

8.2 指定/修改密码

创建好了账户后自然也想为该账户创建密码:

# 基本语法-创建密码
passwd 用户名   # 为指定账户创建密码
passwd          # 为当前账户创建密码!
# 下面是一个易混淆的指令
pwd             # 显示当前用户在哪个目录下,后面会经常用到

注意点:

  1. 在设置的过程中,即使提示“无效的密码,密码少于8个字符”等提示也不要紧,再输入一遍密码即可设置通过。
  2. 如果想重新设置密码,只需要按照上述流程再走一遍即可,新密码会覆盖旧密码。

8.3 删除用户

# 基本语法-删除用户
userdel 用户名      # 删掉账户有关内容,但是保留家目录
userdel -r 用户名   # 将用户及其家目录一起删掉,包括其在家目录中存储的所有资料,谨慎!!

注意点:

  1. 第一条指令只是删除该用户登录系统的权限,但是其保存过的资料还都存储在家目录中。但第二条指令会将该用户家目录中的全部文件都删掉,所以实际生产环境中一定要谨慎。
  2. 删除用户的时候尽量保证此用户不处于登录状态,尤其是通过su - 用户名跳转过的状态非常危险。所以建议对用户进行添加/删除等操作时,断开连接并重新登录root账户

8.4 切换用户

前面说到,由于root权限很高,所以实际生产环境中基本上都只是登录到普通账户及进行开发等工作,只有特殊情况下才会切换到root账户,那执行这个切换过程的语句就是:

# 基本语法-切换用户
su - 用户名 # 切换到高权限用户

注意点:

  1. 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
  2. 当需要返回到原来用户时,使用exit/logout指令。更具体的介绍见7.2节。

8.5 查询用户信息/查看用户

  • id可以查询有效用户的uid(user id)、gid(group id)、所在的“组”。当用户不存在时,返回无此用户。
  • whoami可以查询当前有效用户的名字。
  • who可以查询当前登录在系统上的登录用户的信息,也就是最开始的登录账户的信息。
  • who am i等同于 who -m,只打印执行该命令的登录用户的信息及时间,也就是最开始的登录账户的信息。
# 下面是从root用户登录,切换到jerry普通用户后,上述指令运行结果
[jerry@CentOS76 ~]$ id
uid=1006(jerry) gid=1008(jerry)=1008(jerry) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[jerry@CentOS76 ~]$ whoami
jerry
[jerry@CentOS76 ~]$ who
root     pts/0        2023-07-16 16:32 (192.168.8.1)
[jerry@CentOS76 ~]$ who am i
root     pts/0        2023-07-16 16:32 (192.168.8.1)

注意点:

  1. 上述“有效用户”和“登录用户”的区别是,经过账户切换指令su - 用户名后,“有效用户”指的是当前状态的账户,“登录用户”指的是最初登录系统的账户。

具体可以查看知乎文章“Linux 命令之who、who am i、whoami 的区别”。

8.6 用户组

Linux系统
Group a
Group b
milan
king
tom
jack
图8-2 将用户分组的示例

  Linux最优秀的地方之一在于它的“多人多任务”环境。实际开发中,常有多个团队共同使用一个Linux系统,这些团队之间不希望互相“串门”,但是团队内部希望可以“互通有无”,并且还希望有一个领导者(不是root账户)可以同时管理某些团队。那这个时候就需要将用户进行分组,以方便系统对有共性(权限)的多个用户进行统一的管理。如上图中,tomjack两个账户同属于用户组amilanking两个账户同属于用户组b。下面是对用户组进行操作的一些基本语法。

# 基本语法-组操作
groupadd 组名           # 新增组
groupdel 组名           # 删除组,注意只有组里面没用户的时候才能删除组
useradd -g 用户组 用户名 # 增加用户时直接加上组
usermod -g 用户组 用户名 # 修改用户的组

注意点:

  1. 如果在定义一个用户的时候没有声明组,那么它自己就默认属于自己的同名组。
  2. 于是若先创建一个声明组的用户,那么即使将该用户移动到其他组时,该同名组也会被保留下来。
  3. 小技巧:vim /etc/group可以查看当前系统中所有的组。下一小节继续介绍。

【演示1】:增加一个用户zwj,直接将他指定到wudang。

 groupadd wudang
 useradd -g wudang zwj
 id zwj
 //输出结果
uid=1001(zwj) gid=1001(wudang)=1001(wudang)

【演示2】:按照图8-2所示,将存在的四个用户分组。

//1. 添加用户,并不声明组
useradd tom
useradd jack
useradd milan
useradd king
//2. 添加组
groupadd a
groupadd b
//3. 修改用户组
usermod -g a tom
usermod -g a jack
usermod -g b milan
usermod -g b king
//4. 删除原来的同名组
groupdel tom
groupdel jack
groupdel milan
groupdel king
//5. 查看用户信息,这段直接放命令行窗口的整个内容
[root@CentOS76 etc]# id tom
uid=1002(tom) gid=1006(a)=1006(a)
[root@CentOS76 etc]# id jack
uid=1003(jack) gid=1006(a)=1006(a)
[root@CentOS76 etc]# id milan
uid=1004(milan) gid=1007(b)=1007(b)
[root@CentOS76 etc]# id king
uid=1005(king) gid=1007(b)=1007(b)
//6. 查看当前系统中所有的组,直接看/etc/group的最后几行
wudang:x:1001:
a:x:1006:
b:x:1007:

8.7 用户和组相关文件

  那现在我们可以创建很多用户并将这些用户分组,那我们该如何得知当前Linux系统中,都有哪些用户组,这些用户组中又有哪些用户呢?于是就需要查看/etc文件夹中相应的文件。下面给出基本语法即文件的每行含义:

# 基本语法-查看用户和组相关文件
vim /etc/passwd # 用户配置文件:记录所有用户的基本信息
# 每行含义>>  用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

vim /etc/shadow # 口令配置文件:记录所有用户的密码信息
# 每行含义>>  登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

vim /etc/group  # 组配置文件:记录所有的用户组
# 每行含义>>  组名:口令:组标识号:组内用户列表

下面的代码使是在上一小节“用户组”的基础上,直接查看各文件的最后几行:

vim /etc/passwd
# /etc/passwd的最后几行
zwj:x:1001:1001::/home/zwj:/bin/bash
tom:x:1002:1006::/home/tom:/bin/bash
jack:x:1003:1006::/home/jack:/bin/bash
milan:x:1004:1007::/home/milan:/bin/bash
king:x:1005:1007::/home/king:/bin/bash

passwd zwj # 为zwj用户设置密码为zwj
vim /etc/shadow
# /etc/shadow的最后几行
zwj:$6$KiSPrSlv$v9PYZsSgse4NytT6y6Dzdw/spup6bkuslahPlIlU1rEbSqhHn6vwiPjxWIdCMdLxXgTLjyxM38XMXcgWJRJvw1:19554:0:99999:7:::
tom:!!:19554:0:99999:7:::
jack:!!:19554:0:99999:7:::
milan:!!:19554:0:99999:7:::
king:!!:19554:0:99999:7:::

vim /etc/group
# /etc/group的最后几行
wudang:x:1001:
a:x:1006:
b:x:1007:

  上面在“用户配置文件”/etc/passwd提到了“登录Shell”这个概念,“Shell”可以简单的理解为Linux指令的“解释器”,使得Linux内核可以执行相应的指令。Linux系统中不止有一种Shell,要想查看Linux的其他Shell,可以使用以下指令查看。根据输出的结果,当前系统存在bash、chsh、csh、tcsh等:

cd /bin
ls -l *sh
# 下面是输出的结果
-rwxr-xr-x. 1 root root    2668 610 2014 amuFormat.sh
-rwxr-xr-x. 1 root root  964536 41 2020 bash
-rws--x--x. 1 root root   23880 101 2020 chsh
-rwxr-xr-x. 1 root root 7565536 930 2020 crash
lrwxrwxrwx. 1 root root       4 713 17:09 csh -> tcsh
-rwxr-xr-x. 1 root root    4629 41 2020 gettext.sh
-rwxr-xr-x. 1 root root     277 101 2020 gvfs-trash
-rwxr-xr-x. 1 root root   15864 413 2018 lchsh
-rwxr-xr-x. 1 root root   11416 116 2016 ldns-nsec3-hash
-rwxr-xr-x. 1 root root    2291 731 2015 lesspipe.sh
-rwxr-xr-x. 1 root root    5470 101 2020 lprsetup.sh
-rwxr-xr-x. 1 root root   11592 116 2016 nettle-hash
-rwxr-xr-x. 1 root root   15424 413 2018 pax11publish
-rwxr-xr-x. 1 root root   34620 41 2020 rescan-scsi-bus.sh
-rwxr-xr-x. 1 root root    1539 1211 2019 setup-nsssysinit.sh
lrwxrwxrwx. 1 root root       4 713 17:07 sh -> bash
-rwxr-xr-x. 1 root root  774568 89 2019 ssh
-rwxr-xr-x. 1 root root   23736 1014 2020 stapsh
-rwxr-xr-x. 1 root root  404640 101 2020 tcsh
-rwxr-xr-x. 1 root root    4165 101 2020 unix-lpr.sh
-rwxr-xr-x. 1 root root   11424 812 2017 xrefresh

遗留问题: 貌似将用户添加进组中后,然后将同名组删了之后,root就没有权限切换到这些账户了。但仍有权限切换这些账户的组,在创建新的同名组并将其移入之后,也无法解决上述问题,如下:

[root@CentOS76 ~]# su - tom
上一次登录:日 716 16:28:50 CST 2023pts/0 上
su: 警告:无法更改到 /home/tom 目录: 权限不够
-bash: /home/tom/.bash_profile: 权限不够
-bash-4.2$ 

  1. 《鸟哥的Linux私房菜 基础学习篇 第四版》 ↩︎

  2. 《鸟哥的Linux私房菜 服务器架设篇 第三版》 ↩︎

  3. 《韩顺平_2021图解Linux全面升级》 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_46258766/article/details/131949140