27、Linux 账户管理与 root 用户使用全解析

Linux 账户管理与 root 用户使用全解析

1. 识别账户

在 Linux 系统中,识别用户账户有多种方式。
- 使用 GUI 工具 :不同的 Linux 发行版有不同的账户管理 GUI 工具。以 Fedora 系统为例,可通过以下步骤找到用户账户工具:
1. 点击主窗口中的“Activities”。
2. 在搜索框中输入“users”。

该工具仅显示用户账户,不显示系统账户。它能让普通用户轻松更改自己的密码,管理员也可快速验证哪些账户处于活动状态,但作为账户管理工具,其功能有限。

  • 查看 /etc/passwd 文件 :可以使用 cat less 命令查看 /etc/passwd 文件的内容,这样能显示所有账户,包括系统账户和用户账户。例如:
cat /etc/passwd

若要查找特定账户的信息,可使用 grep 命令。例如,查找用户名为 rich 的账户信息:

grep rich /etc/passwd
  • 使用 getent passwd 命令 :该命令可从某些管理数据库(包括 /etc/passwd 文件)中检索条目。大多数情况下, getent passwd 的结果与 cat /etc/passwd 相同,但有时会有差异。因为 /etc/passwd 文件仅定义本地用户账户,若 Linux 配置为使用网络账户数据库, getent passwd 将同时返回本地账户和网络服务器上定义的账户。也可以通过在 getent passwd 后添加用户名来提取单个记录,如:
getent passwd rich
2. 网络账户数据库

许多网络使用网络账户数据库,常见的系统有网络信息系统(NIS)、NIS+、轻量级目录访问协议(LDAP)、Kerberos 领域和 Active Directory(AD)域。这些系统将账户数据库管理集中到一台计算机(通常有一个或多个备份系统)。

使用网络账户数据库的优势在于,用户和管理员无需在多台计算机上独立维护账户,一个账户数据库可处理数十甚至成百上千台不同计算机的账户,大大简化日常管理任务和用户操作。不过,使用此类系统后,大多数用户账户不会出现在 /etc/passwd /etc/shadow 文件中,组信息也可能不会出现在 /etc/group 文件中,但这些文件仍会保存本地系统账户和组的信息。

Linux 可以参与这些系统,部分发行版在操作系统安装时提供启用支持的选项。通常,需要知道托管网络账户数据库的服务器名称或 IP 地址、系统使用的协议,可能还需要密码或其他特定协议信息,并且服务器需要配置为接受所配置的 Linux 系统的访问。

3. 理解组

组是在 /etc/group 文件中定义的账户集合。该文件与 /etc/passwd 类似,包含以冒号分隔的行(记录),每行定义一个组。例如:

users:x:100:games,sally

/etc/group 文件的字段如下:
| 字段 | 说明 |
| ---- | ---- |
| 组名 | 如上述示例中的 users ,用于大多数访问或操作组数据的命令。 |
| 密码 | 组可以像用户一样有密码,值为 x 表示密码在其他地方定义(可能已禁用),空密码字段表示组没有密码。 |
| GID | Linux 内部使用 GID 值,类似于 UID 值,为方便用户和管理员操作,会进行组名与 GID 的转换。 |
| 用户列表 | 在 /etc/group 记录末尾以逗号分隔的列表中指定属于该组的用户。 |

用户可以通过以下两种方式被识别为组的成员:
- /etc/passwd 条目中指定组的 GID :由于 /etc/passwd 中只能容纳一个 GID 值,因此只能以此方式定义一个组,这是用户的主(或默认)组。
- /etc/group 文件的用户列表中指定用户名 :单个用户可以在 /etc/group 中多次出现,单个组也可以通过这种方式关联多个用户。如果用户通过这种方式与组关联,但不是通过 /etc/passwd 条目关联,则该组关联为次要关联。

当创建新文件时,这些文件将与当前组关联。登录时,当前组设置为主组。若要创建与所属的另一个组关联的文件,可以使用 newgrp 命令,例如:

newgrp project1

此命令将 project1 设置为当前组,后续创建的文件将与该组关联。文件的组所有权在文件安全中很重要。

4. 使用账户工具

有几个命令可帮助了解计算机上的用户和组信息。
- 发现自己的身份
- whoami 命令 :当维护多个账户且忘记当前登录的账户时, whoami 命令可显示当前用户 ID。例如:

whoami

输出结果可能为 christine ,表明当前账户是 christine
- id 命令 :若需要更多信息,可使用 id 命令。例如:

id

输出示例:

uid=1002(christine) gid=100(users) groups=100(users)[...] 

该命令显示用户和组的信息,包括用户 ID 和用户名、当前组以及所有组成员身份。还可以通过指定不同选项来限制 id 命令的输出,具体如下表:
| 长选项 | 短选项 | 效果 |
| ---- | ---- | ---- |
| --group | -g | 仅显示有效组 ID |
| --groups | -G | 显示所属的所有组 |
| --user | -u | 仅显示用户数据 |
| --name | -n | 与 -g -G -u 结合使用,仅显示名称,不显示 UID 或 GID |
| --real | -r | 与 -g -G -u 结合使用,仅显示 UID 或 GID,不显示名称 |

此外,还可以指定用户名来获取该用户的信息,如 id sally

  • 了解谁在线
    • who 命令 :Linux 允许多个用户同时访问计算机,可使用 who 命令了解谁正在使用计算机。例如:
who

输出示例:

christine:0           2016–05–04 17:33 (:0)
kevin     tty2        2016–05–04 17:36 
rich      pts/0       2016–05–04 17:33 (192.168.56.101) 
christine pts/1       2016–05–04 17:34 (:0)

默认输出包含以下信息:
- 用户名 who 输出的第一列显示用户名。
- 终端标识符 :第二列显示与终端关联的代码, :0 表示本地 GUI 登录, pts/# tty# 表示文本会话。
- 登录日期和时间 :显示每个用户的登录时间。
- 远程主机 :最后一列(如果存在)显示登录源,控制台登录不包含源,主机名或 IP 地址表示远程访问。

可以通过传递选项给 who 命令来获取更多信息,例如 who -q 可生成更紧凑的数据摘要:

who -q

输出示例:

christine kevin rich christine 
# users=4 

还可以使用 who am i 仅显示当前用户 ID 的数据。

- **`w` 命令**:`w` 命令与 `who` 类似,但输出更详细。例如:
w

输出示例:

117:52:40 up 24 min,  4 users,  load average: 0.02, 0.108, 0.20 
USER     TTY     LOGIN@   IDLE   JCPU   PCPU   WHAT
christin:0       17:33    ?xdm?  1:16   0.16s  gdm-sess[...]
kevin    tty2    17:36    16:24  0.10s  0.10s  -bash
rich     pts/0   17:33    19:36  0.11s  0.11s  -bash
christin pts/1   17:34     0:00s 0.22s  0.01s  w

w 命令除了显示与 who 类似的信息(终端标识符和登录时间)外,还显示会话的空闲时间、会话关联的总 CPU 时间、当前进程关联的 CPU 时间以及会话正在运行的程序。部分配置还会显示 FROM 列,使用 -f 选项可切换该选项的显示状态。

5. 以 root 用户身份工作

Linux 基于 Unix 设计,是多用户操作系统。原则上,一台 Unix 或 Linux 计算机可以有数千个账户,但需要一个拥有特殊权限的用户来管理计算机的整体功能,即 root 用户,也称为超级用户或管理员。

  • 理解用户类型

    • 普通用户 :大多数人使用计算机进行日常任务,如浏览网页、写信、管理音乐收藏等,这些任务不需要特殊权限。Linux 计算机可以有多个用户账户,用户可以使用这些非特权账户执行用户任务。
    • root 用户 root 用户用于执行管理任务,如安装新软件、准备新磁盘、管理普通用户账户等。这些任务需要访问普通用户无需修改甚至无需读取的系统文件。 root 用户可以读写计算机上的每个文件,能够更改操作系统操作的任何细节。但由于 root 账户的强大权限,使用时可能会导致意外损坏,例如误删系统文件可能使计算机无法启动,因此使用时需谨慎。
  • 获取 root 权限

    • 直接以 root 用户身份登录 :可以在文本模式 shell 或使用远程登录工具(如 SSH)直接以 root 用户身份登录。部分 Linux 发行版默认不允许 root 用户直接登录,因为这样存在风险。
    • 使用 su 命令 su 命令可在 shell 中更改身份。输入 su username 可将身份更改为指定的用户名,若省略用户名,则默认为 root 。例如:
su

使用该命令需要知道目标账户的密码。获取 root 权限后,可以随意执行 root 命令,完成后输入 exit 可放弃超级用户身份。也可以使用 -c 选项运行单个 root 命令,如:

su -c "command"

若命令中使用 - ,如 su- su-luke ,程序将打开一个登录会话,运行目标用户的登录脚本,这对于设置环境变量很重要。
- 使用 sudo 命令 sudo 命令与 su 类似,但一次只能执行一个命令。例如,使用 sudo 查看 /etc/shadow 文件内容:

sudo cat /etc/shadow

使用该命令时,需要根据 sudo 配置输入自己的密码或 root 密码。部分发行版(如 Ubuntu)严重依赖 sudo ,默认不允许直接以 root 用户身份登录。

  • 获取 root 权限的合法性
    在工作场所使用 Linux 系统时,确定公司关于获取 root 权限的政策很重要。直接以 root 用户身份登录或使用 su 命令获取 root 权限会创建一个可否认的环境,用户可能会否认自己以 root 用户身份登录并执行的操作,这可能导致危险情况。许多公司要求需要获取 root 权限的用户使用 sudo 命令,因为 sudo 会跟踪和记录用户活动,创建一个不可否认的环境。

  • GUI 模式下使用 root 权限
    如果需要在 GUI 模式下管理 Linux 系统,可通过以下两种方式获取 root 权限:

    • 从已使用 su 命令的 shell 中启动 GUI 管理工具,但对于更习惯 GUI 的用户来说,这种方法不太优雅。
    • 大多数发行版允许从计算机的桌面菜单启动管理工具,当需要超级用户权限时,GUI 工具会提示输入 root 密码,输入正确密码后程序将继续运行,效果类似于使用 sudo 从 shell 中启动程序。

如果忘记了 root 密码,可以使用搜索引擎搜索“reset [发行版名称] root password”来查找重置密码的方法。

Linux 账户管理与 root 用户使用全解析

6. 账户管理的安全注意事项

在 Linux 系统中,账户管理的安全性至关重要。以下是一些关键的安全注意事项:
- 密码安全
- 强密码策略 :无论是普通用户账户还是 root 账户,都应使用强密码。强密码应包含大写字母、小写字母、数字和特殊字符,且长度足够长。例如, P@ssw0rd!123 比简单的 password 更安全。
- 定期更换密码 :定期更改密码可以降低密码被破解的风险。建议每 3 - 6 个月更换一次重要账户的密码。
- 账户权限管理
- 最小权限原则 :为用户分配的权限应仅满足其完成工作所需的最小权限。避免为用户分配过高的权限,防止误操作或恶意操作。例如,普通用户仅需要读写自己的个人文件,不应赋予其对系统文件的访问权限。
- 定期审查账户权限 :定期检查用户账户的权限,确保权限分配仍然合理。对于离职员工或不再需要某些权限的用户,及时撤销相应权限。

7. 账户管理的自动化脚本示例

为了提高账户管理的效率,可以编写自动化脚本。以下是一个简单的创建用户账户的脚本示例:

#!/bin/bash

# 定义用户名和密码
username="newuser"
password="P@ssw0rd!123"

# 创建用户账户
useradd $username

# 设置用户密码
echo "$password" | passwd --stdin $username

echo "用户账户 $username 已成功创建。"

将上述脚本保存为 create_user.sh ,并赋予执行权限:

chmod +x create_user.sh

然后运行脚本:

./create_user.sh

这个脚本将创建一个名为 newuser 的用户账户,并设置密码为 P@ssw0rd!123

8. 账户管理的常见问题及解决方法

在账户管理过程中,可能会遇到一些常见问题,以下是一些解决方法:
| 问题 | 解决方法 |
| ---- | ---- |
| 用户忘记密码 | 管理员可以使用 passwd 命令重置用户密码。例如,重置用户 sally 的密码:
bash<br>passwd sally<br> |
| 无法以 root 用户身份登录 | 检查 /etc/ssh/sshd_config 文件中是否允许 root 登录。如果不允许,可将 PermitRootLogin 设置为 yes ,然后重启 SSH 服务:
bash<br>systemctl restart sshd<br> |
| 账户被锁定 | 检查 /etc/shadow 文件中账户的锁定状态。如果账户被锁定,可使用 usermod 命令解锁。例如,解锁用户 john 的账户:
bash<br>usermod -U john<br> |

9. 账户管理的流程图
graph TD
    A[开始] --> B[识别账户]
    B --> C{选择管理方式}
    C -->|GUI 工具| D[使用 GUI 工具管理账户]
    C -->|命令行| E[使用命令行管理账户]
    D --> F[查看或修改账户信息]
    E --> G[查看 /etc/passwd 文件]
    E --> H[使用 getent passwd 命令]
    G --> I[识别所有账户]
    H --> I
    I --> J{是否需要管理组}
    J -->|是| K[理解组信息]
    J -->|否| L[使用账户工具]
    K --> M[查看 /etc/group 文件]
    M --> N[管理组信息]
    N --> L
    L --> O{是否需要 root 权限}
    O -->|是| P[获取 root 权限]
    O -->|否| Q[执行普通操作]
    P --> R[以 root 身份执行操作]
    R --> S[结束]
    Q --> S
10. 总结

Linux 系统的账户管理是系统管理的重要组成部分,涉及到账户的识别、组的管理、权限的分配以及 root 用户的使用等多个方面。通过合理使用各种账户管理工具和方法,可以提高系统的安全性和管理效率。同时,要注意遵循安全原则,如使用强密码、最小权限原则等,以防止系统受到恶意攻击或误操作的影响。在遇到问题时,要能够根据具体情况采取相应的解决方法,确保系统的正常运行。希望本文介绍的内容能够帮助你更好地管理 Linux 系统的账户。

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参调度等方面的有效性,为低碳能源系统的设计运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发仿真验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值