在了解了Linux基础命令格式后,今天我要介绍的是Linux的用户管理
目录
root用户
root用户是Linux系统中的超级用户账户。它拥有对系统无限制的权限,能够执行任何操作,没有任何文件或命令对root用户是禁止访问的。root用户的权限等同于操作系统本身,可以执行如下关键任务:
- 管理系统文件和配置:root用户可以读取、修改或删除任何系统文件,包括重要的配置文件和其他用户的数据。
- 用户和权限管理:可以创建、删除用户账户和用户组,修改用户权限和所有权。
- 安装和管理软件:无需额外权限即可安装、更新或卸载系统软件和库。
- 硬件管理:可以启用或禁用系统硬件,进行硬件相关的配置。
- 系统服务管理:可以启动、停止或重启系统服务和守护进程。
- 系统维护和修复:在系统出现问题时,root权限对于故障诊断和修复至关重要。
尽管root用户权限极大,便于系统管理,但同时也极其危险。错误的操作或被恶意利用都可能导致系统崩溃或数据丢失。因此,日常操作通常建议使用普通用户权限,并仅在必要时通过sudo
或其他机制临时提升权限执行特定任务。为了保护root账户的安全,应设置强密码,并限制不必要的root登录,以减少潜在风险。
在终端输入指令前面为$表示普通用户,#表示当前身份为root,低权限切换至高权限需要输密码,高权限切换至低权限不需要。
普通用户无法直接操作根目录(用户管理属于根目录下的内容)下的东西,在学习用户管理时可以使用root用户
首先激活root用户,Ubuntu发行版本默认情况下root账户是被禁用的,你需要先激活root账户并设置密码。可以通过 sudo passwd root
命令来设置root用户的密码。
然后从当前用户切换至root用户的命令为:
shell
su root
如果你的命令行输入处显示用户名为roor且$变成#,说明成功切换到了root用户:
用户管理操作
用户ID
用户ID(User ID,简称UID)在Linux及类UNIX系统中是一个非常重要的概念,它是每个用户账户的唯一数字标识符。下是关于用户ID的一些关键点:
- 唯一性:每个用户的UID都是独一无二的,确保系统能够准确区分不同的用户。
- 权限关联:UID与用户权限紧密相关。例如,UID为0的用户是root用户,拥有系统中的最高权限。普通用户的UID通常大于500,以区分系统预设的用户和管理员或服务账户。
- 文件权限:文件和目录的所有权以及访问权限通过UID和组ID(GID)来确定。每个文件或目录都有一个所有者(与UID关联)和所属组(与GID关联),这决定了用户能否读、写或执行这些文件。
- 存储位置 :用户的用户名与对应的UID(以及其他用户信息)存储在
/etc/passwd
文件中。而实际的密码散列值(如果使用shadow密码,则存储在/etc/shadow
)则不直接与UID在同一个地方展示,以增加安全性。 - 查看UID :可以通过命令行工具
id
或结合用户名使用id username
来查看用户的UID。也可以直接使用whoami
命令查看当前登录用户的UID。 - 创建用户时的UID分配 :使用命令如
useradd
创建新用户时,如果不特别指定,系统会自动分配一个大于500的UID,以符合常规的用户与系统用户的区分标准。 - 系统保留UID:范围在0到499的UID通常被系统保留给预定义的系统用户和服务账户,如root(UID 0)、bin、sys等,这些用户通常用于运行系统关键服务和进程。
理解用户ID及其在Linux系统中的作用对于管理和维护系统安全、权限分配至关重要。
切换用户
切换用户的基本语法如下:
shell
su 用户名
查看用户
shell
compgen -u
此命令列出了所有可登录的用户账户名称,是一个快速查看用户名列表的方法。
添加用户
添加新用户的基本语法和参数选项解释如下:
shell
useradd [-options] 用户名
[-options]可选:
-c comment # 指定一段注释性描述。
-d 目录 # 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 # 指定用户所属的用户组。
-G 用户组 # 指定用户所属的附加组。
-s Shell文件 # 指定用户的登录Shell。
-u 用户号 # 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
【示例】
shell
useradd --d /home/sam -m sam #创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam
useradd -s /bin/sh -g group --G adm,root gem # 新建了一个用户gem,该用户的登录Shell是 `/bin/sh`,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
指定密码
用户账号刚创建时没有口令,被系统锁定,无法使用,必须为其指定密码后才可以使用,即使是指定空密码。其基本语法和参数选项如下:
shell
passwd [-options] 用户名
[-options]可选:
-l # 锁定口令,即禁用账号。
-u # 口令解锁。
-d # 使账号无口令。
-f # 强迫用户下次登录时修改口令。
【示例】
shell
passwd sam # 为其设置密码并激活sam用户
修改用户信息
修改用户的基本语法如下:
shell
usermod [-options] 用户名
usermod命令的选项和添加用户一样,可以对已经存在的用户信息进行修改
删除用户
删除用户的基本语法和参数选项解释如下:
shell
userdel [-options] 用户名
[-options]可选:
-r # 把用户的主目录一起删除。
退出登录
退出登录的基本语法如下:
exit
多个用户的登录顺序和栈一样,先退出的是后登录的
查看登陆系统的用户
查看当前系统用户的基本语法如下:
shell
who
用户组的管理
在Linux系统中,用户组是一种将多个用户账号聚集在一起的方式,以便简化权限管理和资源访问控制。每个用户至少属于一个基本组(primary group),并且还可以属于零个或多个附加组(supplementary groups)。每个用户组都有一个唯一的组标识符,称为组ID(Group ID, GID)。
增加新用户组
添加用户组的基本语法和参数选项如下:
shell
groupadd [-options] 用户组
[-options]可选:
-g # GID 指定新用户组的组标识号(GID)。省略的话默认在当前已有的最大组标识号的基础上加1。
-o # 与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
查看用户组
使用 cat
命令查看 /etc/group
文件:
cat /etc/group
这个命令会列出系统中所有用户组的信息,包括用户组名、组密码占位符、GID(组ID)以及附加到该组的用户列表。
查看指定用户的用户组
shell
groups 用户名
删除用户组
删除用户组的基本语法如下:
shell
groupdel 用户组
修改用户组
可以修改用户组的组名和组id号,修改用户组的基本语法和参数选项如下:
shell
groupmod [-options] 用户组
[-options]可选:
-g GID # 为用户组指定新的组标识号。
-o # 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n 新用户组 # 将用户组的名字改为新名字
切换用户组
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。其基本语法如下:
shell
newgrp root
# 这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。
与用户有关的系统文件
/etc/passwd文件中记录了所有的用户信息,对所有人都是只读的,每一条记录表示一个用户,按照以下规则划分信息:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
系统中有一类用户称为伪用户(pseudo users)。这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
常见的伪用户如下所示:
bin 拥有可执行的用户命令文件
sys 拥有系统文件
adm 拥有帐户文件
uucp UUCP使用
lp lp或lpd子系统使用
nobody NFS使用
由于/etc/passwd文件是所有用户都可读的,如果用户的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的Linux系统都把加密后的口令字分离出来,单独存放在一个文件中,这个文件是/etc/shadow文件。 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。/etc/shadow文件中存放的记录按照以下规则划分。
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
用户组的所有信息都存放在/etc/group中,/etc/group文件中存放的记录按照以下规则划分。
组名:口令:组标识号:组内用户列表