用户管理
关键词:
groupadd,groupdel,groupmod,useradd,userdel,usermod,passwd,su,sudo
1. Linux 用户管理要点
- 创建用户组 - 使用 groupadd
- 删除用户组 - 使用 groupdel
- 修改用户组信息 - 使用 groupmod
- 创建用户 - 使用 useradd
- 删除用户 - 使用 userdel
- 修改用户信息 - 使用 usermod
- 设置用户认证信息 - 使用 passwd
- 切换用户 - 使用 su
- 当前用户想执行没有权限执行的命令时,使用其他用户身份去执行 - 使用 sudo
2. 命令常见用法
2.1. groupadd
groupadd 命令用于创建一个新的用户组,新用户组的信息将被添加到系统文件中。
常用选项:
-g GID:指定组 ID(默认自动分配)。-r:创建系统组(ID 范围通常为 0-999)。-f:强制创建(组已存在时忽略错误)。
示例:
1 | |
2.2. groupdel
groupdel 命令用于删除指定的用户组,本命令要修改的系统文件包括
/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
示例:
1 | |
2.3. groupmod
用途:修改组属性(如组名或 GID)。
语法:
1 | |
常用选项:
-g GID:修改组 ID。-n 新组名:重命名组。
示例:
1 | |
2.4. useradd
useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在
/etc/passwd文本文件中。
语法:
1 | |
常用选项:
-u UID:指定用户 ID。-g 组名:指定主组(需已存在)。-G 附加组:指定附加组(逗号分隔)。-d 目录:设置家目录(默认/home/用户名)。-s shell:指定登录 Shell(如/bin/bash)。-m:自动创建家目录(-k可指定模板目录)。-r:创建系统用户(无家目录)。
示例:
1 | |
2.5. userdel
userdel 命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。
语法:
1 | |
常用选项:
-r:同时删除家目录和邮件池。
示例:
userdel 命令很简单,比如我们现在有个用户 linuxde,其 home 目录位于/var目录中,现在我们来删除这个用户:
1 | |
2.6. usermod
usermod 命令用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变 user id,必须确认这名 user 没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在 server 上更动相关的 NIS 设定。
语法:
1 | |
常用选项:
-l 新用户名:修改用户名。-g 组名:修改主组。-G 附加组:覆盖原有附加组(用-aG追加附加组)。-L:锁定用户(禁用登录)。-U:解锁用户。
示例:
1 | |
2.7. passwd
passwd 命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
语法:
1 | |
常用选项:
-l:锁定用户密码。-u:解锁用户密码。-e:强制用户下次登录修改密码。-d:删除密码(危险!允许无密码登录)。
示例:
1 | |
2.8. su
su 命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
语法:
1 | |
常用选项:
-或-l:模拟登录(加载目标用户的环境变量)。-c 命令:以目标用户执行单条命令后退出。
示例:
1 | |
2.9. sudo
sudo 命令用来以其他身份来执行命令,预设的身份为 root。在
/etc/sudoers中设置了可执行 sudo 指令的用户。若其未经授权的用户企图使用 sudo,则会发出警告的邮件给管理员。用户使用 sudo 时,必须先输入密码,之后有 5 分钟的有效期限,超过期限则必须重新输入密码。
语法:
1 | |
常用选项:
-u 用户名:以指定用户身份执行(默认为 root)。-i:模拟目标用户的登录环境。-l:列出当前用户的 sudo 权限。
示例:
1 | |
2.9.1. 给普通用户授权 sudo
假设要给普通用户 mary 配置 sudo 权限:
/etc/sudoers文件存放了 sudo 的相关用户,但是默认是没有写权限的,所以需要设为可写:chmod u+w /etc/sudoers- 在该文件中添加
mary ALL=(ALL) ALL,保存并退出,让 mary 具有 sudo 的所有权限 - 再将
/etc/sudoers的权限恢复到默认状态:chmod u-w /etc/sudoers
2.9.2. 免密码授权 sudo
与给普通用户授权 sudo 类似,区别仅在于第 2 步:mary ALL=(ALL) NOPASSWD: ALL。
关键配置文件
- 用户信息:
/etc/passwd - 密码哈希:
/etc/shadow - 组信息:
/etc/group - sudo 权限:
/etc/sudoers(使用visudo编辑)
以下为韩顺平老师讲解
创建删除设置用户
Linux 系统是一个多用户多任务的操作系统,任何一个想要使用系统资源的用户,都必须首先向系统管理员 root 申请一个账号,然后再以这个账号的身份进入系统。
添加用户默认该用户的家目录在
/home/username,username 是用户的名称,也可以指定目录,但没必要1
2
3
4useradd milan #添加milan这个用户
passwd milan #更改milan这个用户的密码
userdel milan #删除用户milan,但是保留home家目录
userdel -r milan #删除用户milan的所有信息,包括家目录关于保留家目录的讨论
- 建议保留
- 除非不再需要该用户的任何贡献代码、记录
pwd:该命令显示当前所在目录全程
查询切换用户
查询基本语法——
id 用户名;当不存在改用户时,返回无此用户。1
2
3
4
5
6
7[root@iZbp1978lespq45h0qv20aZ home]# id jack
id: jack: no such user
[root@iZbp1978lespq45h0qv20aZ home]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@iZbp1978lespq45h0qv20aZ home]# id milan
uid=1000(milan) gid=1000(milan) groups=1000(milan)
[root@iZbp1978lespq45h0qv20aZ home]#切换基本语法——
su 用户名;exit返回原用户;从权限高的用户切换到权限低的用户,不需要密码;反之需要。查看当前登录用户语法——
whoami或者who am i。值得注意的是whoami返回当前使用的用户,who am i返回第一次登录服务器的信息。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[root@iZbp1978lespq45h0qv20aZ home]# ls
milan
[root@iZbp1978lespq45h0qv20aZ home]# su milan
[milan@iZbp1978lespq45h0qv20aZ home]$ whoami
milan
[milan@iZbp1978lespq45h0qv20aZ home]$ exit
exit
[root@iZbp1978lespq45h0qv20aZ home]# whoami
root
[root@iZbp1978lespq45h0qv20aZ home]# who am i
root pts/0 2022-02-20 16:45 (43.227.139.42)
[root@iZbp1978lespq45h0qv20aZ home]# su milan
[milan@iZbp1978lespq45h0qv20aZ home]$ who am i
root pts/0 2022-02-20 16:45 (43.227.139.42)
[milan@iZbp1978lespq45h0qv20aZ home]$ whoami
milan
[milan@iZbp1978lespq45h0qv20aZ home]$ exit
exit
[root@iZbp1978lespq45h0qv20aZ home]#
用户组
增加/删除组、创建特定组的用户
移动用户到另外的组
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[root@iZbp1978lespq45h0qv20aZ home]# groupadd wudang
[root@iZbp1978lespq45h0qv20aZ home]# groupdel wudang
[root@iZbp1978lespq45h0qv20aZ home]# ls
milan
[root@iZbp1978lespq45h0qv20aZ home]# groupadd wudang
[root@iZbp1978lespq45h0qv20aZ home]# useradd -g wudang zwj
[root@iZbp1978lespq45h0qv20aZ home]# ls
milan zwj
[root@iZbp1978lespq45h0qv20aZ home]# id zwj
uid=1001(zwj) gid=1001(wudang) groups=1001(wudang)
[root@iZbp1978lespq45h0qv20aZ home]# groupadd mojiao
[root@iZbp1978lespq45h0qv20aZ home]# usermod -g mojiao zwj
[root@iZbp1978lespq45h0qv20aZ home]# id zwj
uid=1001(zwj) gid=1002(mojiao) groups=1002(mojiao)
[root@iZbp1978lespq45h0qv20aZ home]#
用户和组的相关文件
cat /etc/group:查看所有的组,一般大于 1000 是自定义;cat /etc/passwd:查看所有的用户及其相关信息。
登录 shell 的含义
shell 是你(用户)和 Linux(或者更准确的说,是你和 Linux 内核)之间的接口程序。你在提示符下输入的每个命令都由 shell 先解释然后传给 Linux 内核。也称 shell 为外壳。
shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell 也能被系统中其他有效的 Linux 实用程序和应用程序(utilities and application programs)所调用。
bash 是 shell 的一种,是大多数 Linux 发行版默认的 shell,除 bash shell 外还有 c shell 等其它类型的 shell。







