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

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

一、账户识别

在Linux系统中,识别用户账户有多种方式。
1. 使用GUI工具
- 不同的Linux发行版有不同的账户管理GUI工具。以Fedora系统为例,可通过点击主窗口的“Activities”,然后在搜索框中输入“users”,快速找到“Settings”控制面板中的“Users account tool”。
- 该工具仅显示用户账户,不显示系统账户。它能让用户更改一些功能,如用户密码,但作为账户管理工具的实用性有限。普通用户能较轻松地使用它来更改自己的密码,管理员则可通过它快速验证哪些账户处于活动状态。
2. 查看 /etc/passwd 文件
- 使用 cat less 命令查看 /etc/passwd 文件的内容,可显示计算机的所有账户,包括系统账户和用户账户。例如:

cat /etc/passwd
- 若要查找特定账户的信息,可使用`grep`命令。如查找用户名包含“rich”的账户信息:
grep rich /etc/passwd
  1. 使用 getent passwd 命令
    • 该命令从某些管理数据库(包括 /etc/passwd 文件)中检索条目。多数情况下,其结果与 cat /etc/passwd 相同,但有时会有差异。因为 /etc/passwd 文件仅定义本地用户账户,而Linux可配置为使用网络账户数据库来定义部分或全部账户。若使用此类配置, getent passwd 会返回本地账户和网络服务器上定义的账户。
    • 也可通过在 getent passwd 命令后添加用户名来提取单个记录,如:
getent passwd rich
二、网络账户数据库

许多网络使用网络账户数据库,常见的系统有:
- Network Information System (NIS)
- NIS+(NIS的更新版本)
- Lightweight Directory Access Protocol (LDAP)
- Kerberos realms
- Active Directory (AD) domains

这些系统将账户数据库管理集中到一台中央计算机(通常配有一个或多个备份系统)。其优势在于用户和管理员无需在多台计算机上独立维护账户,单个账户数据库可处理数十(甚至成百上千)台不同计算机的账户,大大简化了日常管理任务,也方便了用户。

不过,使用这类系统意味着大多数用户账户不会出现在 /etc/passwd /etc/shadow 文件中,组信息可能也不会出现在 /etc/group 文件中,但这些文件仍会保存本地系统账户和组的信息。

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

三、理解组

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

users:x:100:games,sally

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

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

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

newgrp project1

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

四、使用账户工具

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

whoami
- **`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
2. 了解谁在线
- 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#”表示文本会话,可能是GUI中启动的终端、文本模式控制台登录或通过SSH等协议的远程登录。
    - **登录日期和时间**:显示每个登录的日期和时间。
    - **远程主机**:输出的最后一列(若存在)显示登录源。控制台登录(包括文本模式和基于GUI的登录)不包含源。如“#”或“#.#”表示在GUI中打开的终端,主机名或IP地址表示从指定计算机的远程访问。
通过传递选项给`who`命令,可获取更多信息。其中较有用的是`count`(或`-q`)选项,它会生成更紧凑的数据摘要:
who -q
输出示例:
christine kevin rich christine 
# users=4
还可通过`who am i`命令显示当前用户ID的信息。 
- **`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
除了显示与`who`类似的信息外,`w`命令还显示以下信息:
    - **会话空闲时间**:指示用户与该会话最后一次交互以来的时间,有助于识别用户可能已放弃的会话。
    - **JCPU列**:标识与会话关联的总CPU时间,在计算机因失控进程而变慢时,可作为有用的调试信息。
    - **PCPU列**:标识会话中当前运行的进程关联的总CPU时间,有助于追踪失控进程。
    - **WHAT列**:显示会话正在运行的程序。
部分配置还会显示“FROM”列,显示远程主机名,可使用`-f`选项切换该选项的开关。其他一些选项可消除或修改`w`的输出,具体可查看该程序的`man`页面。

下面通过mermaid流程图展示账户识别的流程:

graph TD;
    A[识别用户账户] --> B[使用GUI工具];
    A --> C[查看/etc/passwd文件];
    A --> D[使用getent passwd命令];
    B --> B1[Fedora系统:点击Activities-输入users];
    C --> C1[使用cat或less命令];
    C --> C2[使用grep命令查找特定账户];
    D --> D1[获取本地和网络账户信息];
    D --> D2[添加用户名提取单个记录];
五、以root身份工作
  1. 理解用户类型
    • 普通用户 :大多数人使用计算机进行日常任务,如浏览网页、写信、管理音乐收藏等,这些任务不需要特殊权限。Linux计算机可以有多个用户账户,用户可通过这些账户(也称为非特权账户、非特权用户或标准用户)执行此类用户任务。
    • root用户 :root用户(也称为超级用户、管理员)拥有管理计算机整体功能的非凡权力。其存在是为了执行管理任务,如安装新软件、准备新磁盘供计算机使用以及管理普通用户账户等。这些任务需要访问普通用户无需修改甚至无需读取的系统文件。root可以读写计算机上的每个文件,这实际上赋予了root更改操作系统操作任何细节的权力。但root账户的强大权力可能导致意外损坏,例如误操作 rm 命令,普通用户可能只会删除自己的文件,而root用户可能会删除系统文件,导致计算机无法启动。因此,使用root账户时应谨慎。
    • 系统用户 :系统用户是非登录账户,用于守护进程、服务或应用程序。系统用户账户通常具有较低的UID编号,没有密码(账户被锁定),默认shell为 /usr/sbin/nologin /sbin/nologin /bin/false
  2. 获取root权限
    当需要执行需要root权限的命令行任务时,可通过以下三种方式获取root权限:
    • 直接以root身份登录 :可在文本模式shell中直接以root身份登录,或使用SSH等远程登录工具。部分Linux发行版甚至允许root以GUI模式登录,但有些发行版默认不允许root直接登录,因为这很危险。
    • 使用 su 命令 su 命令可在shell中更改身份。输入 su username 可将身份更改为指定的用户名,若省略用户名,则默认为root。例如:
su
执行此命令后,需要输入目标账户的密码。获取root权限后,可随意输入root命令,完成后输入`exit`放弃超级用户身份。还可使用`-c`选项以root身份运行单个命令,如:
su -c "command"
若在命令中使用破折号(`-`),如`su -`或`su -luke`,程序将打开一个登录会话,运行目标用户的登录脚本,这对设置重要的环境变量(如`$PATH`)很重要。
- **使用`sudo`命令**:`sudo`命令与`su`类似,但每次只能执行一个命令。例如,查看`/etc/shadow`文件的内容:
sudo cat /etc/shadow
使用此程序时,需根据`sudo`配置输入自己的密码或root密码(使用`su -c`时,必须始终输入root密码)。下一个命令将以普通账户权限执行。部分发行版(如Ubuntu)严重依赖`sudo`,默认不允许root直接登录。
  1. 获取root权限的合法性
    在工作场所使用Linux系统时,确定公司关于获取root权限的政策很重要。直接以root身份登录或使用 su 命令获取root权限会创建所谓的“可否认环境”,在这种环境中,用户可以否认自己以root身份登录,这可能导致root账户用户进行非法或捣乱活动后合法地否认责任,是一种潜在的危险情况。

许多公司(或应该)坚持使用 sudo 命令来获取root权限,因为 sudo 命令会跟踪和记录用户的活动,创建所谓的“不可否认环境”,在这种环境中,用户的行为无法合法否认。

当以root身份登录或使用 su 命令获取root权限时,shell提示符会发生变化。例如:

[luke@wembleth ~]$ su
Password: 
[root@wembleth luke] #

在这个例子中,用户名从“luke”变为“root”,目录从“~”变为“luke”(因为对于root,“~”指的是 /root ,而不是 /home/luke ),提示符的最后一个字符从美元符号( $ )变为井号( # )。本书中的大多数示例通过提示符隐式指定命令是否需要root权限,如:

# cat /etc/shadow

使用井号提示符表示必须以root权限输入此命令。

若在GUI模式下管理Linux系统,可从已使用 su 的shell中启动GUI管理工具,但对于更习惯GUI的用户来说,这种方法不太优雅。大多数发行版提供了另一种选择:可从计算机的桌面菜单中启动管理工具,当需要超级用户权限时,GUI工具会提示输入root(管理员)密码,输入正确密码后,程序将继续运行,效果类似于从shell中使用 sudo 启动程序,即程序以root身份运行,但不会使其他程序也以root身份运行。

若忘记了root密码,可使用喜欢的网络搜索引擎,输入“reset Linux root password”(最好输入发行版的名称代替“Linux”)来查找重置密码的方法。

下面通过表格总结获取root权限的三种方式:
| 获取方式 | 说明 | 示例 |
| ---- | ---- | ---- |
| 直接以root身份登录 | 在文本模式shell或使用远程登录工具登录,部分发行版默认不允许 | SSH登录root账户 |
| 使用su命令 | 更改身份为root或指定用户,需输入目标账户密码 | su su username |
| 使用sudo命令 | 每次执行一个需要root权限的命令,根据配置输入密码 | sudo cat /etc/shadow |

通过以上内容,我们全面了解了Linux系统中的账户管理、组的概念、账户工具的使用以及以root身份工作的相关知识,希望这些信息能帮助你更好地管理和使用Linux系统。

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

六、账户管理与安全建议

在Linux系统中,账户管理和安全至关重要。以下是一些实用的建议和操作步骤,帮助你更好地管理账户并保障系统安全。
1. 账户密码管理
- 设置强密码 :为所有账户设置强密码,强密码应包含大写字母、小写字母、数字和特殊字符,且长度不少于8位。例如,“P@ssw0rd!23”就是一个相对安全的密码。
- 定期更换密码 :建议定期(如每3 - 6个月)更换账户密码,以降低密码泄露的风险。可使用 passwd 命令更改密码:

passwd
执行该命令后,系统会提示输入当前密码(若有),然后输入新密码并确认。
  1. 账户锁定与解锁
    • 锁定账户 :若某个账户暂时不需要使用或怀疑存在安全风险,可锁定该账户。使用 usermod 命令锁定账户,例如锁定用户“sally”的账户:
usermod -L sally
- **解锁账户**:当需要重新启用锁定的账户时,使用`usermod`命令解锁:
usermod -U sally
  1. 删除不必要的账户
    定期检查系统中的账户,删除不再使用的账户,以减少潜在的安全风险。使用 userdel 命令删除账户,例如删除用户“games”的账户:
userdel games

若要同时删除该用户的主目录,可使用 -r 选项:

userdel -r games
七、组管理的高级应用

除了基本的组概念和操作,组管理还有一些高级应用场景。
1. 创建新组
使用 groupadd 命令创建新组,例如创建名为“developers”的组:

groupadd developers
  1. 修改组信息
    使用 groupmod 命令修改组的信息,如修改组名或GID。例如,将组“users”的GID修改为200:
groupmod -g 200 users
  1. 删除组
    使用 groupdel 命令删除不再需要的组,例如删除组“developers”:
groupdel developers
八、root权限的安全使用策略

root权限的强大功能意味着使用时必须格外谨慎,以下是一些安全使用root权限的策略。
1. 最小权限原则
只在必要时使用root权限,避免长时间以root身份登录。例如,若只是查看系统日志,可使用普通用户账户登录,仅在需要修改日志文件权限或内容时,再临时获取root权限。
2. 使用sudo的配置管理
sudo 命令的配置文件 /etc/sudoers 可对用户或用户组的sudo权限进行精细管理。使用 visudo 命令编辑该文件,例如允许用户“christine”以root身份执行 ls cat 命令:

christine ALL=(ALL) /bin/ls, /bin/cat

编辑完成后保存退出。注意,使用 visudo 命令可避免因编辑错误导致 sudo 无法正常使用。
3. 监控root活动
定期查看系统日志(如 /var/log/auth.log ),监控root账户的登录和操作记录,及时发现异常活动。例如,使用 grep 命令查找root登录记录:

grep "root" /var/log/auth.log
九、账户管理与安全的流程总结

下面通过mermaid流程图总结账户管理和安全的主要流程:

graph LR;
    A[账户管理与安全] --> B[账户设置];
    A --> C[组管理];
    A --> D[root权限使用];
    B --> B1[设置强密码];
    B --> B2[定期更换密码];
    B --> B3[锁定/解锁账户];
    B --> B4[删除不必要账户];
    C --> C1[创建新组];
    C --> C2[修改组信息];
    C --> C3[删除组];
    D --> D1[遵循最小权限原则];
    D --> D2[配置sudo权限];
    D --> D3[监控root活动];
十、常见问题解答

在Linux账户管理和root权限使用过程中,可能会遇到一些常见问题,以下是解答。
1. 忘记root密码怎么办?
若忘记root密码,可使用前面提到的方法,通过网络搜索引擎输入相关关键词(如“reset Ubuntu root password”)查找具体的重置方法。一般步骤可能包括进入单用户模式或使用安装介质重置密码。
2. 使用sudo时提示“not in the sudoers file”怎么办?
这表示当前用户不在sudoers文件中,没有使用sudo的权限。需要以root身份编辑 /etc/sudoers 文件,添加该用户的sudo权限。例如,添加用户“kevin”到sudoers文件:

kevin ALL=(ALL) ALL
  1. 如何查看某个用户所属的所有组?
    可使用 id 命令查看用户所属的所有组,例如查看用户“rich”所属的组:
id rich
十一、总结

通过本文的介绍,我们深入了解了Linux系统中账户管理的各个方面,包括账户识别、网络账户数据库、组的概念、账户工具的使用以及root权限的获取和安全使用。以下是关键要点总结:
1. 账户识别 :可通过GUI工具、查看 /etc/passwd 文件和使用 getent passwd 命令识别账户。
2. 网络账户数据库 :Linux可参与多种网络账户数据库系统,简化账户管理,但使用时需注意相关配置。
3. 组管理 :组在 /etc/group 文件中定义,用户可通过不同方式成为组的成员,文件的组所有权对安全很重要。
4. 账户工具 whoami id who w 等命令可帮助了解用户和组信息。
5. root权限 :root用户拥有强大权力,获取root权限有多种方式,但使用时需谨慎,遵循安全策略。

在实际使用Linux系统时,应根据具体需求和安全要求,合理运用这些知识和工具,确保系统的稳定和安全。希望本文能为你在Linux账户管理和安全方面提供有价值的参考。

类别 关键操作 命令示例
账户识别 使用GUI工具(Fedora) 点击Activities - 输入users
账户识别 查看 /etc/passwd 文件 cat /etc/passwd
账户识别 使用 getent passwd 命令 getent passwd rich
组管理 创建新组 groupadd developers
组管理 修改组信息 groupmod -g 200 users
组管理 删除组 groupdel developers
root权限获取 直接以root身份登录 SSH登录root账户
root权限获取 使用 su 命令 su su username
root权限获取 使用 sudo 命令 sudo cat /etc/shadow

通过以上总结和操作指南,你可以更好地掌握Linux账户管理和root权限使用的技巧,提升系统管理能力和安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值