目录
[1. Linux 对用户和组的管理涉及三个重要的系统文件,请给出各自的名称并简述其条目结构。](#1. Linux 对用户和组的管理涉及三个重要的系统文件,请给出各自的名称并简述其条目结构。)
2.为什么要有组的概念?用户的主要组和补充组(辅助组)有什么区别?
[3. 在 shell 切换用户时,su user 和 su - user 这两个命令有什么区别?](#3. 在 shell 切换用户时,su user 和 su - user 这两个命令有什么区别?)
[4. sudo 命令有什么作用?](#4. sudo 命令有什么作用?)
[5. 普通用户要使用 sudo 命令需要满足什么条件?](#5. 普通用户要使用 sudo 命令需要满足什么条件?)
[6. 说明 su、sudo 和 sudo -i 的区别。](#6. 说明 su、sudo 和 sudo -i 的区别。)
[7. 从命令行使用 userdel 删除用户时加-r 选项和不加-r 选项有什么区别?](#7. 从命令行使用 userdel 删除用户时加-r 选项和不加-r 选项有什么区别?)
[8. 如何添加组成员?](#8. 如何添加组成员?)
[9. 能否删除主组,为什么?](#9. 能否删除主组,为什么?)
[10. 配置密码期限有几种方法,分别说明。](#10. 配置密码期限有几种方法,分别说明。)
[11.nologin shell 在什么时候会用到?](#11.nologin shell 在什么时候会用到?)
1. Linux 对用户和组的管理涉及三个重要的系统文件,请给出各自的名称并简述其条目结构。
Linux 用户和组管理的三个核心系统文件是 /etc/passwd、/etc/shadow 和 /etc/group。
/etc/passwd 存储用户基本信息,每行包含七个以冒号分隔的字段:用户名、密码占位符(通常为x,表示密码在/etc/shadow)、用户ID(UID)、主组ID(GID)、用户描述、家目录路径和默认Shell。
/etc/shadow 存储用户的安全认证信息,每行包含九个以冒号分隔的字段:用户名、加密的密码、最后修改密码日期、密码最小有效期、密码最大有效期、过期前警告天数、过期后宽限天数、账户失效日期和保留字段。
/etc/group 存储组信息,每行包含四个以冒号分隔的字段:组名、组密码占位符、组ID(GID)和组成员列表(以逗号分隔的补充组成员用户名)。这三个文件共同构成了Linux身份与权限管理的基础。
2.为什么要有组的概念?用户的主要组和补充组(辅助组)有什么区别?
在 Linux 系统中,引入"组"的概念是为了实现高效的权限管理,它允许系统管理员将相同的权限一次性分配给多个用户,避免了为每个用户单独设置的繁琐,并便于团队协作和资源共享。
每个用户必须属于一个"主要组"。这个组在用户创建时指定,并记录在 /etc/passwd 文件中。它的核心作用是:当用户创建新文件或目录时,该资源的默认所属组就是用户的主要组。
用户还可以被加入多个"补充组"。这些组关系记录在 /etc/group 文件中。补充组的作用是为用户附加其主要组之外的额外权限,使其能够访问更多受组保护的资源。
两者的核心区别在于:
唯一性与数量:主要组唯一,补充组可以有多个。
核心作用:主要组决定新文件的默认归属;补充组用于扩展用户的权限范围。
存储位置:主要组ID记录在 /etc/passwd;补充组成员关系记录在 /etc/group。
3. 在 shell 切换用户时,su user 和 su - user 这两个命令有什么区别?
在 shell 切换用户时,su user 和 su - user 这两个命令的核心区别在于环境切换的完整程度。su user 以非登录 Shell 的方式切换用户身份,它仅改变用户标识(UID/GID),但会保留当前用户的大部分环境变量(例如当前工作目录、原有的 PATH 设置以及其他已定义的环境变量),也不会执行目标用户的 Shell 初始化脚本(例如 ~/.bash_profile 或 ~/.bashrc)。这种方式通常用于临时以其他用户身份执行单条或少数命令。
而 su - user(或等价的 su -l user)则以登录 Shell 的方式切换用户,它会模拟一次完整的登录过程:先清空当前环境变量,再加载目标用户的环境配置,包括执行其 Shell 初始化脚本、将工作目录切换到目标用户的家目录,并设置该用户应有的完整环境变量(如 HOME、USER、PATH 等)。这相当于一次完整的用户会话切换,适用于需要基于目标用户环境进行长时间操作或执行依赖其完整环境的任务。
因此,简而言之,su user 仅切换用户身份,不切换环境;su - user 同时切换用户身份和其完整的 Shell 环境。在大多数需要完全切换到对应用户进行工作的场景中,推荐使用 su - user。
4. sudo 命令有什么作用?
sudo 命令的核心作用是允许已授权的普通用户以超级用户(root)或其他指定用户的身份,临时执行需要更高权限才能运行的命令。它通过在严格受控的配置(通常位于 `/etc/sudoers` 文件)下,为特定用户或组授予精细化的命令执行权限,实现了权限的提升与委派 。这使得系统管理员无需共享 root 密码,就能安全地将部分管理任务分配给普通用户,同时所有通过 sudo 执行的操作都会被默认记录在日志中,便于审计和追溯,从而在提供必要操作灵活性的同时,有效保障了系统的安全性。
5. 普通用户要使用 sudo 命令需要满足什么条件?
首先,也是最核心的条件,是该用户必须已被系统管理员预先授权。这种授权通过编辑 /etc/sudoers 配置文件或在其包含的目录(如 /etc/sudoers.d/)下创建特定文件来实现。授权方式主要有两种:一是直接在配置文件中为该用户单独赋予权限;二是将该用户添加到一个已被授权使用 sudo 的用户组中,常见的这类系统组在基于 RHEL 的发行版中叫 wheel,在基于 Debian 的发行版中叫 sudo。
其次,在用户执行 sudo 时,系统通常会要求验证身份。默认情况下,验证的是该普通用户自己的密码,而不是 root 用户的密码。这是 sudo 设计中的一个重要安全特性,确保每个用户只对自己的行为负责,且管理员无需分享 root 密码。
最后,用户尝试执行的命令必须在其被授权的命令列表范围之内。管理员在授权时可以非常精细地限定,例如允许用户使用 sudo systemctl restart nginx,但不能使用 sudo systemctl restart * 或其他未明确许可的命令。只有完全匹配授权规则,命令才能被放行。综上所述,授权、身份验证和命令范围是普通用户使用 sudo 必须同时满足的三个关键条件。
6. 说明 su、sudo 和 sudo -i 的区别。
su 的核心是 "切换用户" 。默认切换到root,需要目标用户的密码。执行后,你完全"变成"了那个用户,但默认进入的是一个非登录Shell,环境变量和当前目录大多保持不变。其关键风险在于需要知道目标用户密码,且操作不易被精确审计。
sudo 的核心是 "授权执行" 。它允许被授权的普通用户,以自己的密码为凭证,临时以root(或其他用户)的身份执行单条命令。它严格受/etc/sudoers文件控制,实现了权限的最小化和精细化分配。所有通过sudo执行的命令都会被详细记录,便于审计。它不改变当前的Shell环境。
sudo -i 的"模拟登录"就是:在不共享root密码的前提下,通过sudo授权机制,获得一个与root直接登录完全相同的交互式工作环境,同时保持操作可追溯。
7. 从命令行使用 userdel 删除用户时加-r 选项和不加-r 选项有什么区别?
不加 -r 选项时,userdel username 仅删除用户账号本身(从 /etc/passwd、/etc/shadow、/etc/group 和 /etc/gshadow 中移除该用户的条目),但保留用户的家目录、邮件目录和其他相关文件。这些遗留文件会继续占用磁盘空间,且所有权会显示为已删除用户的 UID/GID(数字形式),需要管理员手动清理。
加上 -r 选项后,userdel -r username 除了删除用户账号外,会同步删除用户的家目录(通常是 /home/username)和邮件目录(通常是 /var/mail/username),以及该用户在 /var/spool/cron/ 或 /var/spool/at/ 中的计划任务文件。这是更彻底的清理方式,确保不会留下与该用户相关的文件残留。
重要注意事项:在生产环境中,建议先不加 -r 选项执行删除,确认无误后再手动清理目录,或者先备份重要数据后再使用 -r 选项。某些系统中,如果用户已登录或存在属于该用户的运行进程,则需先终止进程才能成功删除。
8. 如何添加组成员?
在 Linux 中,将用户添加到组通常使用 gpasswd 或 usermod 命令。执行 sudo gpasswd -a 用户名 组名 或 sudo usermod -aG 组名 用户名 即可将指定用户添加为目标组的成员。操作完成后,用户需要重新登录才能使新的组成员身份生效。之后可通过 groups 用户名 命令验证用户当前所属的所有组。需要注意的是,此操作为用户添加的是补充组(附加组)权限,用户本身已有的主组不会发生变化。
9. 能否删除主组,为什么?
文件属组归属会悬空:系统中的每个文件都有明确的属组(GID)。如果删除一个作为用户主组的组,该组对应的 GID 就变成了"无主之组"。此时,原来属于该组的文件将无法被正确地识别和归属,导致权限管理混乱。
系统依赖:许多系统进程和守护进程是以特定用户身份运行的,这些用户都有其主组。删除其主组会破坏这些进程的运行环境,可能导致系统功能异常。
数据结构完整性:在 /etc/passwd 文件中,每个用户的 GID 字段必须指向一个真实存在的组。如果该组被删除,就违反了这一数据结构的基本约束。
如何正确处理
虽然不能直接删除有用户作为主组的组,但可以通过以下步骤来安全地移除它:
第一步:使用 usermod -g 命令,将所有以此组作为主组的用户的主组,更改为另一个存在的组(例如 users)。
第二步:确认此组不再有任何用户将其作为主组。
第三步:最后,使用 groupdel 命令删除该组。
10. 配置密码期限有几种方法,分别说明。
第一种方法是使用 chage 命令(change age),它可以对指定用户的密码期限进行详细配置。常用参数包括:-M 设置密码有效的最大天数,;-m 设置密码更改的最小间隔天数,在此期间用户不能修改密码;-W 设置在密码过期前多少天开始向用户发出警告;-I 设置密码过期后账户完全锁定前的宽限天数(在此期间用户登录会被强制要求更改密码);-E 直接设置账户的绝对过期日期。例如,一条完整的命令 sudo chage -M 60 -m 5 -W 7 user1 将为用户 user1 设置密码最长使用60天、最短间隔5天才能修改、并在到期前7天发出警告。
第二种方法是修改系统全局配置文件 /etc/login.defs。这个文件中的 PASS_MAX_DAYS、PASS_MIN_DAYS 和 PASS_WARN_AGE 参数分别定义了新用户创建时默认的密码最大有效期、最小修改间隔和警告期。需要注意的是,此配置只对修改之后新创建的用户生效,不会影响已存在的用户。如果需要为已有用户批量应用新的默认策略,可以结合 chage 命令编写脚本。
两种方法的核心区别在于作用对象和时机:chage 命令用于精细调整特定用户的现有策略,立即生效;而修改 /etc/login.defs 文件则是设定系统的默认值,影响未来创建的用户。在实际系统管理中,通常需要结合使用两者以建立全面的密码生命周期策略。
11.nologin shell 在什么时候会用到?
nologin shell 用于需要账户存在但禁止交互式登录的场景,通过将用户的默认 Shell 设置为 /usr/sbin/nologin(或 /sbin/nologin)实现。它允许进程、服务或任务以该用户身份运行,同时阻止任何人工登录,符合安全最小权限原则。
其主要应用场景有四类:一是运行系统服务或守护进程,如MySQL、Nginx账户;二是创建仅文件传输的FTP/SFTP账户;三是作为临时禁用账户的清晰手段;四是用于仅执行定时任务(如cron)的自动化账户。