用户管理

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

每个用户账号都拥有一个惟一的用户名和各自的口令,用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

实现用户账号的管理,要完成的工作主要有如下几个方面:

  1. 用户账号的添加、删除与修改

  2. 用户口令的管理

  3. 用户组的管理

用户管理常用命令

当前使用的Linux系统中已经有了两个用户,一个是root用户,一个是自己创建的用户,root用户是超级管理员,我们自己创建的用户是普通用户。LInux多用户其实就是将用户分成了两类用户,一类是root用户,一类是普通用户

root用户的权限比较大,它可以访问自己的家目录,访问系统的配置文件,例如之前我们修改的vim的配置文件,还有就是root用户还可以访问普通用户的家目录,但是普通用户的权限就受到了下去限制,它只能访问自己的家目录,以及root用户开放给它的一些没有危害到系统安全的目录文件

普通用户和普通用户之间是没有权限互相访问他们对方的家目录的,Linux就是通过这两种用户的区别,来做了最基本的权限隔离

用户添加命令

用户添加命令实际使用的是 useradd命令,使用方法:useradd [选项] 用户名称

在添加用户完成后,我们可以使用 id 命令来验证是否添加成功,通过 id 命令,我们可以查看系统中有哪些已经存在的用户

1
2
3
4
5
6
7
root@CHJ-20190520VPS:/# useradd wangjias
root@CHJ-20190520VPS:/# id root
uid=0(root) gid=0(root) groups=0(root)
root@CHJ-20190520VPS:/# id wangjias
uid=1001(wangjias) gid=1001(wangjias) groups=1001(wangjias)
root@CHJ-20190520VPS:/# id abc
id: ‘abc’: no such user

下面分析我们添加用户的时候Linux都做了哪些操作:

首先第一是为新添加的用户创建了它的家目录,创建完成我们访问的时候发现家目录是空的,但其实用户的家目录是存放了很多与用户相关的隐藏配置文件

第二步就是将我们创建的用户记录在 /etc/passwd 文件中,只要包含了如下所示内容,就说明我们系统中存在这样的一个用户

1
2
3
root@CHJ-20190520VPS:/# cat /etc/passwd
...
wangjias:x:1001:1001::/home/wangjias:/bin/sh

第三步还会在 etc/shadow 文件中添加我们创建的用户信息,这个文件是用户密码相关的文件

还有就是我们每创建一个用户,都会创建一个独立的用户id,叫uid,如上述我们通过id命令查询出来的内容。注意root用户的id是0,如果我们把普通用户的id也修改为0,那么系统就会把此用户也当成root用户

第四就是还会为用户创建用户所属的组,如果我们没有明确指定所属的组,系统就会创建一个与用户同名的组作为新创建用户所属的组。如果我们希望有一组用户他们使用同样的资源的时候,就可以建立一个这样的用户组,然后把他们都加入到这个组里面,如果我们对这个组进行修改,就相当于对一组的用户全都进行修改

注意创建用户只有root用户有这样的权限,普通用户没有创建用户的权限

上面的创建我们没有指定选项,下面介绍一些选项:

  1. -c comment 指定一段注释性描述

  2. -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录

  3. -g 用户组 指定用户所属的用户组

  4. -G 用户组,用户组 指定用户所属的附加组

  5. -s Shell文件 指定用户的登录Shell

  6. -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号

为用户设置密码

用户登录是需要登录密码的,为用户设置密码的命令使用的是 passwd命令,使用方法:passwd [用户名]

注意用户名选项是可选的,如果不指定要修改密码的用户名,那就是修改当前用户的密码

1
2
3
4
root@CHJ-20190520VPS:/# passwd wangjias
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

删除用户

删除用户使用的是userdel命令,使用方法: userdel [选项] 用户名

注意我们一般删除用户的时候会添加上 “-r” 选项,如果我们直接使用用户删除命令删除用户,则此用户的家目录会被保留下来,当我们确认用户的家目录中的数据都可以被直接删除的时候,就可以添加 -r 这个选项,直接删除彻底。

如果执行的是彻底删除的命令,那么 /etc/passed 和 /etc/shadow 中的用户信息也会被删除

修改账号

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

修改已有用户的信息使用usermod命令,使用方法:usermod 选项 用户名

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值

经常使用的选项是 -d 选项,既指定用户新的家目录,使用方法:usermod -d 新的家目录 用户名

如果我们修改了用户的家目录,那么我们重新登录此用户的时候,它的默认目录就会成为我们修改的目录,并且关于此用户的配置文件也会放在新的家目录中

用户组管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新

用户组管理命令

新建用户组

新建用户组使用groupadd命令,使用方法:groupadd [选项] 用户组

选项一般使用 -g 选项,此选项用于指定用户组的组标识号

新建好组之后,有两种方式将用户添加至先建好的组,第一种是使用 usermod 命令:

1
2
3
4
5
root@CHJ-20190520VPS:/# groupadd -g 1001 group1
root@CHJ-20190520VPS:/# useradd user1
root@CHJ-20190520VPS:/# usermod -g group1 user1
root@CHJ-20190520VPS:/# id user1
uid=1001(user1) gid=1001(group1) groups=1001(group1)

可以看到我们已经将user1用户添加到了group1组中

第二种就是在新建用户的时候直接将用户添加至指定用户组中:

1
2
3
root@CHJ-20190520VPS:/# useradd -g group1 user2
root@CHJ-20190520VPS:/# id user2
uid=1002(user2) gid=1001(group1) groups=1001(group1

修改用户组

修改用户组的属性使用groupmod命令,使用方法:groupmod [选项] 用户组

常用选项如下:

-g GID 为用户组指定新的组标识号

-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同

-n 新用户组 将用户组的名字改为新名字

使用示例:

1
2
3
root@CHJ-20190520VPS:/# groupmod -n group2 group1
root@CHJ-20190520VPS:/# id user2
uid=1002(user2) gid=1001(group2) groups=1001(group2)

删除用户组

如果要删除一个已有的用户组,使用groupdel命令,使用方法:groupdel 用户组

1
root@CHJ-20190520VPS:/# groupdel group2

用户和用户组配置文件

用户和用户组相关的配置文件主要有三个,/etc/passwd、/ect/shadow、/etc/group

passwd

文件内容如下:

1
2
3
4
5
6
7
1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
3 bin:x:2:2:bin:/bin:/usr/sbin/nologin
4 sys:x:3:3:sys:/dev:/usr/sbin/nologin
...
30 wangjia3:x:1000:1000:,,,:/home/wangjia3:/bin/bash
31 user01:x:1001:1001::/home/user01:/bin/sh

我们发现此文件被分成了七个字段,下面分别解释每个字段的含义:

  1. 用户名称字段,表示用户的名称,可以看到此文件最后的两行是我们之前新创建的用户

  2. 第二个字段表示此用户登录需要不需要密码验证,如果把这个 “x” 删除之后,我们发现登录用户将不需要验证

1
2
3
4
wangjia3@CHJ-20190520VPS:~$ su -l wangjia3
Password:
wangjia3@CHJ-20190520VPS:~$ su -l user01
user01@CHJ-20190520VPS:/$
  1. 第三个字段是用户的uid字段,Linux并不是通过用户的名称来识别用户的,它是通过用户的id来识别用户,如果id重复了就会用最小id的用户使用

  2. 第四个字段是gid,是当前用户属于哪一个组的标识字段

  3. 第五个字段是注释

  4. 第六个字段表示用户的家目录的位置

  5. 用户登录后使用的命令解释器,现在所通用的命令解释器都是bash命令解释器。我们发现有很多第七个字段显示的是 /usr/sbin/nologin, 这里表示的是此用户是不能登录终端的,例如我们将user01用户的此字段修改为nologin:

1
2
3
4
5
6
 30 wangjia3:x:1000:1000:,,,:/home/wangjia3:/bin/bash
31 user01:x:1001:1001::/home/user01:/usr/sbin/nologin

root@CHJ-20190520VPS:~# su -l user01
This account is currently not available.
root@CHJ-20190520VPS:~#

切换用户失败,提示此账户不能登录

我们可以直接在这里添加一行数据,来添加用户

shadow

shadow文件是保存用户和用户密码相关信息的,我们需要了解它的前两个字段

1
2
3
4
5
28 sshd:*:18037:0:99999:7:::
29 pollinate:*:18037:0:99999:7:::
30 wangjia3:$6$486gKZ88$cobO1oh/kuz4HwAmnpnb.OQtszzD78m0e.KvbbxcEbNfIA9/4cSKvU78iTMOgFL8FstKrk0hIQ/S16P/R5o6t.:18080:0:
99999:7:::
31 user01:$6$Pe7lIEqi$28CGKQAIa3E4JvTvAZKeymjFgVY5HvGZXVg0RuUWetl2YTlgU5sLcMzRs6FZmJbnIvad3IeJO4bPXs082KqL10:18104:0:99 999:7:::
  1. 第一个字段是用户名称字段,用来和passwd字段来进行对应

  2. 是用户加密过的密码,加密的密码是以$开头,然后一串字符,这样主要是为了保护用户的密码,及时用户的密码是相同的,但是在此文件中的显示也是不同的,防止被破解

group

和用户组相关的配置文件,里面包含四个字段:

  1. 第一个字段是组的名称

  2. 第二个字段这个组是否需要密码验证

  3. 第三个字段表示这个组的gid

  4. 第四个字段,表示其他组字段,表示哪些用户属于其他组,这个其他组里面又包含了用户名称

最后更新: 2019年07月27日 14:08

原始链接: https://jjw-story.github.io/2019/07/25/用户和用户组管理/

× 请我吃糖~
打赏二维码