一、前言¶
本文主要从以下几个方面谈谈Linux用户管理体系
- 用户和用户组
- 用户基本操作
- 用户组管理
- 用户权限和文件权限
- sudo和权限管理
二、用户和用户组¶
2.1 什么是用户和用户组¶
Linux用户:在Linux系统中,每个系统用户都有一个唯一的用户名(User Name)和用户ID(User ID)。用户用来登录系统,访问文件和资源。每个用户都有自己的家目录,通常位于/home/用户名,其中用户可以存储个人文件和设置。
Linux用户组:用户组是一组用户的集合,它允许将多个用户组织在一起以共享文件和资源的权限。每个用户可以属于一个或多个用户组。用户组通常用于简化权限管理,允许将相同的权限应用于多个用户。
2.2 什么是UID和GID¶
Linux中的用户是有一个标记,类似于身份号码一样的东西,叫做UID和GID,一般情况下UID和GID要唯一。
- UID:user id 用户的id号,相当于身份证号码
- GID:group id 用户组id号,相当于户口本号码
2.3 用户分类(uid)¶
| 用户分类 | 分类方法(uid) |
|---|---|
| root | uid是0 |
| 普通用户 | uid≥1000(Centos7之后,Centos5和Centos6是≥500),手动创建,无法对系统进行更改,只能在当前家目录有权限 |
| 虚拟用户 | uid <1000, 也叫傀儡用户,用于服务,进程运行使用的用户,无法直接使用 |
2.4 用户相关文件¶
Linux下面每创建1个用户,一般会影响下面几个文件:
| 用户相关文件 | 说明 |
|---|---|
| /etc/passwd | 存放用户信息 |
| /etc/shadow | 存放密码信息 |
| /etc/group | 用户组信息 |
| /etc/gshadow | 用户组密码信息,几乎不会给用户组设置密码 |
一、 根据下面/etc/passwd回显内容说说每一列的含义:
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
...
- 第一列:用户名
- 第二列:密码标记
- 第三列和第四列:UID:GID
- 第五列:用户说明信息(不指定为空)
- 第六列:用户的家目录
- 第七列(最后一列):用户使用的命令解释器shell,如果是/sbin/nologin则代表虚拟用户/傀儡用户
二、 根据下面/etc/shadow回显内容说说每一列的含义:
$ cat /etc/shadow
root:$6$6qLmduqvReJnadEf$q/Rw.yoCiUpqfE1BWxAX4A4g8MBaCMGG5fxVgxWf1pn4NgC5w4imWu2GsJkVLqdJh2irRCkPaDg7fd0fuSPhI/::0:99999:7:::
bin:*:18353:0:99999:7:::
...
...
- 第一列:用户名
- 第二列:密码哈希值,加密后的密码。如果为*则代表用户没有设置密码
- 第三列:最短时间期限,如果是0,则表示没有最短使用期限
- 第四列:最长使用期限
- 第五列:密码更改提前警告
- 第六列:密码失效日期
- 第七列:最后修改日期
- 第八列:密码更改周期
- 第九列和第十列:保留字段
三、 根据下面/etc/group回显内容说说每一列的含义:
$ cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
...
...
- 第一列:用户组名,默认是和用户名一致
- 第二列:组密码
- 第三列:组ID
- 第四列:组成员
三、用户基本操作¶
3.1 用户登录和切换用户¶
1、用户登录
用户可以使用 ssh 命令登录到系统
$ ssh hostname@server_ip
上面参数说明:
- hostname:登录的主机名
- server_ip:登录服务器地址
2、切换用户-su
一、 su命令常用用法
| su命令选项 | 命令说明 |
|---|---|
| su - 用户 | 完全切换用户(更新用户的配置与环境变量) |
二、 su命令示例
示例: 完全切换用户mysql
$ su - mysql
可按ctrl + d快捷键退出当前用户
说明:root切换普通用户不需要输入普通用户密码;反之需要输入root密码
3.2 创建用户及修改用户密码¶
1、创建用户-useradd
一、 useradd命令常用用法
| useradd命令选项 | 命令说明 |
|---|---|
| useradd -u 用户uid 用户 | 指定用户uid |
| useradd -s 命令解释器 用户 | 指定命令解释器,默认是/bin/bash |
| useradd -M 用户 | 单纯创建用户,但是不创建家目录 |
| useradd -g 用户组名 用户名 | 设置用户的初始用户组 |
| useradd -G 用户组名1, 用户组名2 用户名 | 设置用户的附加用户组,允许用户属于多个用户组 |
二、 useradd命令示例
示例: 添加用户mysql
$ useradd mysql
示例: 创建用户mysql指定uid 1314指定命令解释器/sbin/nologin不创建家目录,创建虚拟用户
$ useradd -u 1314 -s /sbin/nologin -M mysql
示例: 创建新用户mysql888并将其添加到用户组mysqlgroup
#如果没有用户组mysqlgroup,则需要提前创建
$ groupadd mysqlgroup
$ useradd -g mysqlgroup mysql888
示例: 创建新用户mysql666并将其添加到用户组mysqlgroup1、mysqlgroup2、mysqlgroup3
#如果没有用户组mysqlgroup1、mysqlgroup2、mysqlgroup3,则需要提前创建
$ echo 'mysqlgroup1 mysqlgroup2 mysqlgroup3' |xargs -n1 groupadd
$ useradd -G mysqlgroup1,mysqlgroup2,mysqlgroup3 mysql666
2、修改用户密码-passwd
一、 passwd命令常用用法
| passwd命令选项 | 命令说明 |
|---|---|
| passwd 用户 | 交互式修改用户密码 |
| echo "密码" | passwd --stdin 用户 | 非交互式修改密码,用于批量修改密码(只能root用) |
二、 passwd命令示例
示例: 交互式修改用户mysql密码
$ passwd mysql
示例: 非交互式修改用户mysql密码为12345
$ echo 12345 |passwd mysql
3.3 删除用户¶
1、删除用户-userdel
一、 userdel命令常用用法
| userdel命令选项 | 命令说明 |
|---|---|
| userdel 用户 | 仅仅删除用户,不删除家目录 |
| userdel -r 用户 | 删除用户及家目录 |
二、 userdel命令示例
示例: 仅删除用户mysql
$ userdel mysql
示例: 删除用户mysql及其家目录
$ userdel -r mysql
3.4 修改用户信息¶
1、修改用户信息-usermod
一、 usermod命令常用用法
| usermod命令选项 | 命令说明 |
|---|---|
| usermod -s 命令解释器 用户 | 修改用户登录后使用的Shell终端(用户必须存在) |
| usermod -G 组名 用户 | 修改用户所属的扩展群 |
| usermod -G ' ' 用户 | 把用户从root组踢出 |
二、 usermod命令示例
示例: 修改mysql用户命令解释器为/bin/bash
$ usermod -s /bin/bash mysql
示例: 修改mysql用户属于root组
$ usermod -G root mysql
示例: 把用户mysql从root组踢出
$ usermod -G ' ' mysql
3.5 查看用户相关信息¶
1、查询用户的uid,gid,用户组信息-id
一、 id命令常用用法
| id命令选项 | 命令说明 |
|---|---|
| id 用户 | 查询用户的uid,gid,用户组信息,检查用户是否存在 |
二、 id命令示例
示例: 查看用户mysql的uid,gid,用户组信息
$ id mysql
2、查询当前用户的名字-whoami
一、 whoami命令常用用法
| whoami命令选项 | 命令说明 |
|---|---|
| whoami | 查看当前登录用户名字 |
二、 whoami命令示例
示例: 查看当前登录用户名字
$ whoami
3、查看当前登录的用户的信息-w
一、 w命令常用用法
| w命令选项 | 命令说明 |
|---|---|
| w | 显示已登录用户的信息 |
二、 w命令示例
示例: 显示已登录用户的信息
$ w
14:21:13 up 1 day, 22:27, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 14:19 1:45 0.01s 0.01s -bash
root pts/1 192.168.1.108 Fri16 ? 0.20s 0.00s w
上面回显信息说明如下:
14:21:13:当前系统时间。up 1 day, 22:27:系统已经运行了1天22小时27分钟。2 users:当前有2个用户登录。-
load average: 0.00, 0.01, 0.05:系统的负载平均值。这个值表示系统的繁忙程度,分别对应1分钟、5分钟和15分钟的平均负载。在这个示例中,系统的负载很低。 -
USER:用户的登录名。 TTY:终端类型或伪终端号。FROM:用户的登录来源,可以是IP地址或终端类型。如果为空或-代表本地登录;如果是IP地址代表远程登录LOGIN@:用户登录的时间。IDLE:用户的登录会话空闲时间。JCPU:用户的累计CPU时间(以分钟为单位)。PCPU:用户的当前CPU占用百分比。WHAT:用户正在运行的命令或程序。
4、显示用户的登录情况-last
一、 last命令常用用法
| last命令选项 | 命令说明 |
|---|---|
| last | 显示所有用户的登录信息 |
二、 last命令示例
示例: 显示所有用户的登录信息
$ last
5、显示所有用户最近1次登录情况-lastlog
一、 lastlog命令常用用法
| lastlog命令选项 | 命令说明 |
|---|---|
| lastlog | 显示所有用户最近1次的登录信息 |
二、 lastlog命令示例
示例: 查看所有用户最近1次的登录信息
$ lastlog
四、用户组管理¶
4.1 创建用户组¶
1、创建用户组-groupadd
一、 groupadd命令常用用法
| groupadd命令选项 | 命令说明 |
|---|---|
| groupadd -g 888 mysql | 创建组并指定gid |
二、 groupadd命令示例
示例: 创建uid,gid都为888 的mysql虚拟用户
$ groupadd -g 888 mysql
$ useradd -u 888 -g mysql -s /sbin/nologin -M mysql
五、用户权限和文件权限¶
5.1 什么是Linux文件权限¶
Linux文件权限定义了谁可以访问、读取、写入或执行文件或目录。基本文件权限有三个级别:文件所有者、用户组和其他用户。每个级别都有读(read)、写(write)和执行(execute)权限。以下是文件权限的基本概念:
- 读取权限(Read - r): 如果拥有读取权限,用户可以查看文件内容或目录列表。
- 写入权限(Write - w): 如果拥有写入权限,用户可以编辑或删除文件,或在目录中创建、删除或重命名文件。
- 执行权限(Execute - x): 对于文件,拥有执行权限的用户可以运行文件,例如可执行文件或脚本。对于目录,执行权限允许用户访问该目录。
5.2 如何更改文件和目录的权限¶
使用chmod命令更改文件和目录的权限。chmod命令允许你指定哪个级别(文件所有者、用户组、其他用户)需要更改哪种权限(读、写、执行)。
5.3 什么是文件所有者、用户组和其他用户的权限¶
关于文件所有者、用户组和其他用户的权限如下:
- 文件所有者(Owner): 这是文件或目录的创建者。文件所有者拥有最高权限,可以更改文件权限、删除文件等。
- 用户组(Group): 每个文件或目录都关联一个用户组。用户组成员具有与用户组关联的权限。这允许多个用户共享文件并协作。文件的用户组通常与文件所有者的用户组相同。
- 其他用户(Others): 这是所有不是文件所有者且不在文件用户组中的其他用户。这是系统中的所有其他用户。其他用户的权限通常是最受限制的。
文件和目录的权限通常以三组权限表示,分别对应文件所有者、用户组和其他用户。例如,-rw-r--r-- 表示文件所有者具有读写权限,用户组和其他用户具有只读权限。
六、sudo和权限管理¶
6.1 什么是sudo¶
sudo(超级用户do) 是一个在Unix和Unix-like操作系统上用于授权普通用户执行特权命令的工具。sudo使系统管理员能够分配特定的权限,允许用户在不完全切换到超级用户(root)的情况下执行特权命令。
6.2 sudo的重要性¶
sudo的重要性体现在以下方面:
- 安全性: sudo允许细粒度的权限控制,系统管理员可以明确授权哪些用户执行哪些命令,而不必将完整的root权限授予用户。这有助于降低潜在的安全风险。
- 审计: sudo记录每个使用它的用户的命令,可以提供审计和跟踪功能,以便了解谁以何种方式使用了特权。
- 管理: sudo简化了权限管理,因为它允许系统管理员将权限授予不同的用户,而不必共享root密码。
6.3 权限管理操作(配置sudo)¶
1、授权普通用户执行管理员命令-sudo
一、 sudo命令常用用法
| sudo命令选项 | 命令说明 |
|---|---|
| sudo 命令 | 普通用户执行授权命令 |
| sudo -l | 查看当前用户有什么sudo权限(一般在最后2行体现) |
二、 sudo命令示例
示例: 普通用户执行授权命令vim
$ sudo vim a.txt
示例: 查看当前用户有什么sudo权限
$ sudo -l
2、编辑设置sudo-visudo
一、 visudo命令常用用法
| visudo命令选项 | 命令说明 |
|---|---|
| visudo | 使用root用户给普通用户授权 |
二、 visudo命令示例
示例: 给普通用户mysql授权cat命令
$ visudo
#第100行后面添加
mysql ALL=(ALL) /bin/cat
示例: 给运维人员创建普通用户
$ visudo
#第100行后面添加
mysql ALL=(ALL) NOPASSWD: ALL