一、前言

本文主要从以下几个方面谈谈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并将其添加到用户组mysqlgroup1mysqlgroup2mysqlgroup3

#如果没有用户组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