Linux运维——用户管理

一、Linux用户管理要点

  • 创建用户组 - 使用 groupadd
  • 删除用户组 - 使用 groupdel
  • 修改用户组信息 - 使用 groupmod
  • 创建用户 - 使用 useradd
  • 删除用户 - 使用 userdel
  • 修改用户信息 - 使用 usermod
  • 设置用户认证信息 - 使用 passwd
  • 切换用户 - 使用 su
  • 当前用户想执行没有权限执行的命令时,使用其他用户身份去执行 - 使用 sudo

二、常用命令

2.1、groupadd

groupadd 命令用于创建一个新的用户组,新用户组的信息将被添加到系统文件中。

groupadd [选项] 组名

​- -g, --gid GID​: 指定新用户组的组 ID(GID)。

  • -m,创建家目录,如果不指定,shell无法登录到图形界面
    ​- -K, --key KEY=VALUE​: 设置密钥值对,用于指定组的属性。
    ​- -o, --non-unique​: 允许创建非唯一的组 ID。
    ​- -p, --password PASSWORD​: 设置用户组的密码,通常不建议使用密码。
    ​- -r, --system​: 创建一个系统用户组。
    ​- -R, --root CHROOT_DIR​: 在指定的 chroot 目录中执行操作。

使用案例:
创建一个名为 ​testgroup​​的新用户组:

groupadd testgroup

创建一个名为 ​sysgroup​​的系统用户组:

groupadd -r sysgroup

创建一个名为 ​staff​​的用户组并指定组 ID 为 500:

groupadd -g 500 staff

注意事项:

  • 使用 groupadd ​命令需要具有适当的权限,通常需要 root 权限或 sudo 权限。
  • 可以通过指定选项来设置新用户组的组 ID、属性等。
  • 创建系统用户组时,通常会使用 -r ​选项。
  • 确保新创建的用户组名称不与现有用户组重复,避免混淆。
  • 建议在创建用户组时,为其指定一个明确的目的或描述性的名称,以便于管理和理解。

2.2、groupdel

‌groupdel命令用于在Linux系统中删除一个用户组‌。该命令不会操作与用户组关联的文件和目录,但删除用户组后,与该组相关的文件和目录中的组信息可能需要手动更改,以避免权限问题‌。

本命令要修改的系统文件包括 /ect/group 和 /ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。

groupdel [选项] 组名
  • -h--help:显示groupdel命令的帮助信息。
  • -f--force:强制删除用户组,即使它是某个用户的主组‌。

使用示例:

删除名为testgroup的用户组‌:

groupdel testgroup

删除cc用户组‌:

groupdel cc

‌强制删除apps用户组‌:

groupdel -f apps

强制删除名为staff的用户组‌:

groupdel -f staff

显示groupdel命令的帮助信息‌:

groupdel -h

注意事项和常见错误处理:

  • ‌确保该组不再被任何用户所使用‌:如果该组仍被某些用户使用,删除操作将失败。除非使用-f选项强制删除,否则必须先删除这些用户‌
  • ‌修改用户的主组‌:如果某个用户的主组是目标组,命令会报错。此时需要先将用户的主组改为另一个组,然后再进行删除操作‌
  • ‌组不存在‌:如果要删除的组不存在,groupdel会提示错误‌

2.3、groupmod

‌groupmod命令‌是Linux系统中用于修改现有用户组的工具。其主要用途包括修改组的GID(组标识符)和组名。

常用选项:

  • -g--gid GID:用于更改组的GID。
  • -n--new-name NEW_GROUP:用于更改组的名称。
  • -o--non-unique:允许使用重复的GID,即允许多个组使用同一个GID。
  • -h--help:显示帮助信息。
  • -p--password PASSWORD:设置组的密码。
  • -R--root CHROOT_DIR:指定在CHROOT_DIR下更改生效。
  • -V--version:显示版本信息。

使用示例:
‌修改组名‌:

groupmod -n newgroup oldgroup
# 这条命令将用户组oldgroup的名称修改为newgroup。

‌修改组的GID‌:

groupmod -g 101 groupname
# 这条命令将用户组groupname的GID修改为101。

‌允许使用其他用户组的GID‌:

groupmod -o groupname
# 这条命令将用户组groupname的属性设置为允许使用其他用户组的GID。

‌设置组密码‌:

groupmod -p password groupname
# 这条命令将用户组groupname的密码设置为password。

注意事项:

  • 在执行groupmod命令时,确保您具有足够的权限,通常需要以root用户身份执行。
  • 修改组名称或GID可能会影响系统上相关用户的权限和文件,因此在进行修改前请做好备

2.4、groups

‌groups命令用于显示用户所属的用户组信息。

  • 默认情况下‌,groups命令会显示当前用户所属的所有用户组。例如,输入groups即可查看当前用户所属的所有附加组。
  • ‌指定用户‌,可以在命令后跟上用户名来显示指定用户所属的用户组。例如,输入groups username可以查看指定用户username所属的所有用户组。

常用选项:

  • -a:在输出中包括用户的主组(primary group)。默认情况下,主组不会被单独列出,而是作为用户名的一部分显示在输出中。
  • -g:只显示用户的主组ID(GID),而不显示组名。
  • -n:以数字形式显示组ID(GID)和用户名(UID),而不是名称。
  • -r:只显示实际存在的组,即那些在系统上实际存在的组。默认情况下,groups命令还会显示一些特殊的、不存在的组(如“wheel”组在某些系统中可能不存在)。

注意事项:

  • ‌权限问题‌:在执行groups命令时,需要确保当前用户具有足够的权限来查看其他用户的组信息。如果当前用户没有足够的权限,可能会收到权限拒绝的错误信息。
  • 输出定制‌:根据需要,可以使用不同的参数来定制groups命令的输出。例如,如果需要以数字形式显示组ID,可以使用-n参数;如果需要只显示主组ID,可以使用-g参数。

2.5、useradd

useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

‌使用useradd命令时,系统会自动更新相关文件,包括/etc/passwd和/etc/shadow。‌ /etc/passwd文件包含用户的基本信息,如用户名、用户ID(UID)、组ID(GID)等;而/etc/shadow文件则包含加密的用户密码和账户有效期等信息。通过useradd命令创建的用户,管理员可以通过passwd命令为其设置密码。需要注意的是,useradd命令本身不会为用户创建密码信息,而是使用星号(*)初始化密码字段,随后需要通过passwd或pwdadm命令设置密码。‌

useradd [选项] 用户名

常用选项:

  • -m:创建用户主目录(通常位于 /home/用户名)。
  • -d:指定用户主目录路径。
  • -s:指定用户的默认 shell。
  • -g:指定用户的主组(组名或 GID)。
  • -G:指定用户的附加组(组名或 GID)。
  • -u:指定用户的 UID。
  • -c:添加用户备注信息(如全名)。
  • -e:设置账户过期日期(格式:YYYY-MM-DD)。
  • -p:设置用户密码(通常不推荐直接使用,建议用 passwd 命令)。

使用示例:
创建用户并生成主目录

sudo useradd -m username
···
指定主目录路径
```sh
sudo useradd -m -d /custom/home/username username

指定默认 shell

sudo useradd -m -s /bin/bash username

指定主组和附加组

sudo useradd -m -g primarygroup -G supplementarygroup username

指定 UID

sudo useradd -m -u 1001 username

添加备注信息

sudo useradd -m -c "User Full Name" username

设置账户过期日期

sudo useradd -m -e 2023-12-31 username

创建用户后,使用 passwd 命令设置密码:

sudo passwd username

注意事项:

  • 需要 root 权限,通常使用 sudo。
  • 如果不使用 -m 选项,不会创建主目录。
  • 建议使用 passwd 命令设置密码,而不是 -p 选项。

2.6、userdel

以下是基本用法和常见选项:

userdel [选项] 用户名

常用选项:

  • -r:删除用户的同时,删除用户的主目录和邮件文件(通常位于 /home/用户名 和 /var/mail/用户名)。
  • -f:强制删除用户,即使用户当前已登录。
  • -Z:删除用户的 SELinux 用户映射(适用于启用了 SELinux 的系统)。

使用示例:
删除用户(保留主目录)

sudo userdel username
# 这种方式只会删除用户账户,但不会删除用户的主目录和邮件文件。

删除用户并删除主目录

sudo userdel -r username
# 这种方式会删除用户账户及其主目录和邮件文件。

强制删除用户

sudo userdel -f username
# 即使用户当前已登录,也会强制删除用户。

删除用户并清理 SELinux 映射

sudo userdel -rZ username
# 适用于启用了 SELinux 的系统。

注意事项:

  • 权限要求:需要 root 权限,通常使用 sudo。
  • 用户进程:如果用户有正在运行的进程,删除用户时可能会失败。可以使用 -f 选项强制删除,或者先终止相关进程。
  • 主目录:如果不使用 -r 选项,用户的主目录和邮件文件将保留在系统中。
  • 依赖文件:删除用户后,系统中可能仍存在属于该用户的文件(如 /home/username 中的文件),需要手动清理。

其他相关命令:

检查用户是否存在:

id username
# 如果用户存在,会显示用户信息;如果不存在,会提示“无此用户”。

终止用户进程:如果用户有正在运行的进程,可以使用以下命令终止:

sudo pkill -u username
sudo killall -u username
# 通过 userdel 命令,可以安全地删除用户账户及其相关文件。

2.7、passwd

passwd 命令用于在 Linux 系统中管理用户密码。

passwd [选项] [用户名]
# 如果不指定用户名,默认修改当前用户的密码。
# 如果指定用户名(需要管理员权限),可以修改其他用户的密码。

常用选项:

  • -l:锁定用户账户,禁止登录。
  • -u:解锁用户账户。
  • -d:删除用户密码,允许用户无需密码登录(不安全,不推荐)。
  • -e:强制用户下次登录时修改密码。
  • -S:显示用户密码状态(是否锁定、密码加密算法等)。
  • -n:设置密码的最短使用期限(天数)。
  • -x:设置密码的最长使用期限(天数)。
  • -w:设置密码过期前的警告天数。
  • -i:设置密码过期后的宽限天数。

使用示例:
修改当前用户的密码

passwd
# 系统会提示输入当前密码,然后输入新密码并确认。

修改其他用户的密码(需要管理员权限)

sudo passwd username
# 管理员可以直接为其他用户设置新密码。

锁定用户账户

sudo passwd -l username
# 锁定后,用户将无法登录。

解锁用户账户

sudo passwd -u username

删除用户密码

sudo passwd -d username
# 删除密码后,用户无需密码即可登录(不安全,不推荐)。

强制用户下次登录时修改密码

sudo passwd -e username

显示用户密码状态

sudo passwd -S username

# 输出示例:
username P 05/10/2023 0 99999 7 -1

各字段含义:
- 用户名
- 密码状态(P 表示有密码,L 表示锁定,NP 表示无密码)
- 最后修改密码的日期
- 最小密码年龄(天数)
- 最大密码年龄(天数)
- 警告天数
- 密码过期后的宽限天数

设置密码策略:

# 设置密码最短使用期限为 7 天:
sudo passwd -n 7 username

# 设置密码最长使用期限为 90 天:
sudo passwd -x 90 username

# 设置密码过期前 7 天提醒用户:
sudo passwd -w 7 username

# 设置密码过期后 5 天内仍可登录:
sudo passwd -i 5 username

注意事项:

  • 密码强度:系统通常会检查密码强度,过于简单的密码可能被拒绝。
  • 管理员权限:修改其他用户的密码需要 root 权限,通常使用 sudo。
  • 锁定账户:锁定账户后,用户将无法登录,但用户的主目录和文件仍然存在。
  • 密码策略:合理设置密码策略可以提高系统安全性。

2.9、su

su 命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

su [选项] [用户名]
# 如果不指定用户名,默认切换到 root 用户。
# 切换用户后,会进入目标用户的 shell 环境。

常用选项:

  • --l--login:以登录 shell 的方式切换用户,同时加载目标用户的环境变量和配置文件(如 ~/.bashrc 或 ~/.profile)。
  • -c:执行一条命令后立即退出,不进入交互式 shell。
  • -s:指定要使用的 shell(如 /bin/bash 或 /bin/sh)。
  • -m-p:保留当前环境变量,不加载目标用户的环境配置。

常用示例:
切换到 root 用户

su
# 系统会提示输入 root 用户的密码。

以登录 shell 的方式切换到 root 用户

su -
#这种方式会加载 root 用户的环境变量和配置文件。

切换到其他用户

su username
# 系统会提示输入目标用户的密码。

以登录 shell 的方式切换到其他用户

su - username

切换到用户并执行一条命令

su -c "command" username

# 例如,以 root 用户身份创建一个文件:

su -c "touch /root/testfile" root

指定使用的 shell

su -s /bin/bash username

保留当前环境变量

su -m username

注意事项:

  • 密码要求:
    • 切换到 root 用户或其他用户时,需要输入目标用户的密码。
    • 如果当前用户是 root,切换到其他用户时不需要密码。
  • 环境变量:
    • 使用 su - 或 su -l 会加载目标用户的环境变量。
    • 使用 su 或 su -m 会保留当前用户的环境变量。
  • 退出切换的用户:
    • 输入 exit 或按 Ctrl+D 可以退出当前用户,返回到之前的用户。
  • 权限限制:
    • 普通用户只能切换到其他用户(需要密码),而 root 用户可以切换到任何用户(无需密码)。

与 sudo 的区别:

  • su:直接切换到目标用户的身份,需要目标用户的密码。
  • sudo:以当前用户的权限执行命令,需要当前用户的密码(或配置为无需密码)。

2.10、sudo

sudo 命令允许授权用户以超级用户(root)或其他用户的身份执行命令。

sudo [选项] 命令
# 默认情况下,sudo 以 root 用户身份执行命令。
# 执行命令时,系统会提示输入当前用户的密码(而非 root 密码)。

常用选项:

  • -u:以指定用户身份执行命令。
  • -l:列出当前用户允许执行的 sudo 命令。
  • -s:启动目标用户的 shell(默认为 root)。
  • -i:以登录 shell 的方式启动目标用户的 shell(加载环境变量)。
  • -v:刷新 sudo 的认证时间戳(延长有效期)。
  • -k:清除 sudo 的认证时间戳(立即失效)。
  • -b:在后台运行命令。
  • -E:保留当前用户的环境变量。

使用示例:
以 root 身份执行命令

sudo command

# 例如,安装软件包:
sudo apt update

以其他用户身份执行命令

sudo -u username command

# 例如,以用户 testuser 的身份创建文件:
sudo -u testuser touch /home/testuser/testfile

启动 root 用户的 shell

sudo -s

以登录 shell 的方式启动 root 用户的 shell

sudo -i

在后台运行命令

sudo -b command

保留当前用户的环境变量

sudo -E command

刷新 sudo 认证时间戳

sudo -v

清除 sudo 认证时间戳

sudo -k

配置文件:
sudo 的权限配置存储在 /etc/sudoers 文件中。可以使用 visudo 命令安全地编辑该文件。

示例配置:

允许用户执行所有命令

username ALL=(ALL:ALL) ALL

允许用户执行特定命令

username ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl

允许用户无需密码执行命令

username ALL=(ALL) NOPASSWD: /usr/bin/apt

注意事项:

  • 密码提示:
    • 执行 sudo 时,系统会提示输入当前用户的密码。
    • 默认情况下,密码在 5 分钟内有效(无需重复输入)。
  • 权限限制:
    • 只有被授权的用户才能使用 sudo。
    • 权限配置在 /etc/sudoers 文件中定义。
  • 安全性:
    • 避免直接使用 sudo 执行未知或不可信的脚本。
    • 谨慎配置 NOPASSWD 选项,以免降低安全性。
  • 日志记录:
    • sudo 的所有操作都会被记录到 /var/log/auth.log 或 /var/log/secure 中,便于审计。

与 su 的区别:

  • sudo:以当前用户的权限执行命令,需要当前用户的密码。
  • su:直接切换到目标用户的身份,需要目标用户的密码。

2.10.1、给普通用户授权 sudo

假设要给普通用户 mary 配置 sudo 权限:

  1. /etc/sudoers 文件存放了 sudo 的相关用户,但是默认是没有写权限的,所以需要设为可写:chmod u+w /etc/sudoers
  2. 在该文件中添加 mary ALL=(ALL) ALL ,保存并退出,让 mary 具有 sudo 的所有权限
  3. 再将 /etc/sudoers 的权限恢复到默认状态:chmod u-w /etc/sudoers

2.10.2、 免密码授权 sudo

与给普通用户授权 sudo 类似,区别仅在于第 2 步:mary ALL=(ALL) NOPASSWD: ALL

2.11、usermod

usermod 是 Linux 中用于修改用户账户属性的命令。通过 usermod,你可以更改用户的用户名、主目录、Shell、用户组等信息。

usermod [选项] 用户名

常用选项:

  • -c, --comment 修改用户的备注信息(通常存储在 /etc/passwd 中)。
  • -d, --home 修改用户的主目录。
  • -m, --move-home 将用户的主目录移动到新位置(与 -d 一起使用)。
  • -e, --expiredate 设置用户账户的过期日期(格式:YYYY-MM-DD)。
  • -g, --gid 修改用户的主组(GID)。
  • -G, --groups 修改用户的附加组(用逗号分隔)。
  • -l, --login 修改用户的登录名(用户名)。
  • -L, --lock 锁定用户账户(禁用登录)。
  • -U, --unlock 解锁用户账户。
  • -s, --shell 修改用户的默认 Shell。
  • -u, --uid 修改用户的 UID。

常用示例:

修改用户的备注信息:

sudo usermod -c "John Doe" john

修改用户的主目录:

sudo usermod -d /new/home/john john
# 如果要将旧主目录的内容移动到新位置,可以加上 -m 选项:
sudo usermod -d /new/home/john -m john

修改用户的默认:

# 将用户的默认 Shell 改为 /bin/bash:
sudo usermod -s /bin/bash john

修改用户的主组:

# 将用户的主组改为 developers:
sudo usermod -g developers john

修改用户的附加组:

# 将用户的附加组改为developers,admins:
sudo usermod -G developers,admins john
# 如果要保留用户现有的附加组并添加新组,可以使用 -aG 选项:
sudo usermod -aG admins john

修改用户的登录名:

# 将用户的登录名从 john 改为 john_doe:
sudo usermod -l john_doe john

修改用户的 UID:

#将用户的 UID 改为 1001:
sudo usermod -u 1001 john

锁定用户账户:

#锁定用户 john 的账户,禁止其登录:
sudo usermod -L john

解锁用户账户:

#解锁用户 john 的账户,允许其登录:
sudo usermod -U john

设置用户账户的过期日期:

#将用户 john 的账户设置为 2023-12-31 过期:
sudo usermod -e 2023-12-31 john

注意事项:

  • ​权限:usermod 需要管理员权限,因此通常需要以 root 用户或使用 sudo 执行。
  • 用户活动:修改用户属性时,确保用户没有正在运行的程序,否则可能导致数据丢失或错误。
  • ​UID 和 GID:修改 UID 或 GID 时,确保新的值唯一,避免与其他用户或组冲突。
  • ​主目录:修改用户的主目录时,确保新目录存在,并且用户有访问权限。

2.12、id

id 是 Linux 中用于显示用户和组信息的命令。它可以显示当前用户或指定用户的 ​UID(用户 ID)​、GID(主组 ID)​ 以及 ​附加组 的信息。

id [选项] [用户名]
# 如果不指定用户名,则显示当前用户的信息。

常用选项:

  • -u 仅显示用户的 UID。
  • -g 仅显示用户的主组 GID。
  • -G 显示用户的所有组 GID(包括主组和附加组)。
  • -n 与 -u、-g 或 -G 一起使用,显示名称而不是 ID。
  • -r 显示实际 ID 而不是有效 ID(通常与 -u、-g 或 -G 一起使用)。
  • --help 显示帮助信息。
  • --version 显示版本信息。

常用示例:

显示当前用户的信息:

id
# 输出示例:
uid=1000(john) gid=1000(john) groups=1000(john),4(adm),24(cdrom),27(sudo)
  • uid:用户 ID 和用户名。
  • gid:主组 ID 和组名。
  • groups:用户所属的所有组 ID 和组名。

显示指定用户的信息:

id john

仅显示当前用户的 UID:

id -u
#输出示例:
1000

仅显示当前用户的主组 GID:

id -g
#输出示例:
1000

显示当前用户的所有组 GID:

id -G
#输出示例:
1000 4 24 27

显示当前用户的所有组名称:

id -Gn
#输出示例:
john adm cdrom sudo

显示当前用户的 UID 和用户名:

id -un
#输出示例:
john

显示当前用户的主组 GID 和组名:

id -gn
#输出示例:
john

显示当前用户的实际 UID:

id -ru
#输出示例:
1000

显示当前用户的实际主组 GID:

id -rg
#输出示例:
1000

实际应用场景:

检查用户是否存在:

if id -u john >/dev/null 2>&1; then
    echo "用户 john 存在"
else
    echo "用户 john 不存在"
fi

获取当前用户的用户名:

username=$(id -un)
echo "当前用户是 $username"

检查用户是否属于某个组:

if id -nG | grep -qw "sudo"; then
    echo "当前用户属于 sudo 组"
else
    echo "当前用户不属于 sudo 组"
fi

注意事项:

  • 权限:id 命令不需要管理员权限,普通用户也可以使用。
  • ​有效 ID 和实际 ID:在涉及 sudo 或 su 的情况下,id 默认显示有效 ID。如果需要显示实际 ID,可以使用 -r 选项。
  • 用户不存在:如果指定的用户名不存在,id 会返回错误。

2.13、/etc/passwd

/etc/passwd 是 Linux 系统中存储用户账户信息的核心文件之一。它包含系统中所有用户的基本信息,每行对应一个用户,字段之间用冒号(:)分隔。

文件格式:

#每行包含 7 个字段,格式如下:
用户名:密码占位符:UID:GID:用户描述:主目录:默认Shell

字段详细:

  • 用户名(Username)
    • 用户的登录名。
    • 必须是唯一的。
    • 示例:john
  • 密码占位符(Password)
    • 早期用于存储加密后的用户密码。
    • 现代 Linux 系统中,密码通常存储在 /etc/shadow 文件中,而这里只是一个占位符(x 或 *)。
    • 示例:x
  • 用户ID(UID)​
    • 用户的唯一标识符。
    • 0 表示 root 用户。
    • 1-999 通常保留给系统用户。
    • 1000 及以上通常用于普通用户。
    • 示例:1000
  • 组ID(GID)​
    • 用户的主组 ID。
    • 组信息存储在 /etc/group 文件中。
    • 示例:1000
  • 用户描述(GECOS)​
    • 用户的附加信息,通常是全名或描述。
    • 可以包含多个逗号分隔的子字段(如全名、房间号、电话等)。
    • 示例:John Doe,
  • 主目录(Home Directory)​
    • 用户的主目录路径。
    • 用户登录后默认进入的目录。
    • 示例:/home/john
  • 默认Shell(Shell)​
    • 用户登录后默认使用的 Shell。
    • 如果设置为 /sbin/nologin 或 /bin/false,则用户无法登录。
    • 示例:/bin/bash

示例:

#以下是 /etc/passwd 文件中的一个示例行:
john:x:1000:1000:John Doe,,,:/home/john:/bin/bash
#​用户名:john#密码占位符:x#UID:1000#GID:1000#用户描述:John Doe,,,#主目录:/home/john#默认Shell:/bin/bash

特殊用户:

#/etc/passwd 文件中包含一些特殊用户,通常是系统用户,用于运行系统服务或进程。例如:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#root:超级用户,UID 为 0。
#bin、daemon:系统用户,用于管理特定服务。

相关文件:

  • /etc/shadow:存储用户密码的加密信息。
  • /etc/group:存储用户组信息。
  • /etc/gshadow:存储用户组的加密信息。

如何查看和编辑:

# 查看 /etc/passwd**
cat /etc/passwd

# 编辑 /etc/passwd**
# 使用文本编辑器(如 vim 或 nano)直接编辑:
sudo vim /etc/passwd

#使用 vipw 命令安全编辑:
sudo vipw

注意事项:

  • 权限:/etc/passwd 文件的权限通常为 -rw-r–r–,即只有 root 用户可以修改。
    ​- 备份:在编辑 /etc/passwd 文件之前,建议先备份。
    ​- 手动修改:除非必要,否则不建议手动修改 /etc/passwd 文件,可以使用 usermod、useradd 等命令管理用户。

常见问题:
如何查找用户的 UID?

grep username /etc/passwd
# 例如:
grep john /etc/passwd

如何查找所有普通用户?

#普通用户的 UID 通常从 1000 开始:
awk -F: '$3 >= 1000 {print $1}' /etc/passwd

如何查找不能登录的用户?

grep -E '/sbin/nologin|/bin/false' /etc/passwd

2.14、/etc/shadow

/etc/shadow 是 Linux 系统中存储用户密码信息的文件。它是 /etc/passwd 的补充,专门用于存储加密后的密码以及密码相关的策略信息。与 /etc/passwd 不同,/etc/shadow 文件只有 root 用户可以访问,以确保密码的安全性。

文件格式:

# 每行对应一个用户,字段之间用冒号(:)分隔,格式如下:
用户名:加密密码:上次修改密码的日期:密码最小使用天数:密码最大使用天数:密码过期警告天数:密码过期宽限天数:账户失效日期:保留字段

密码的加密方式标识符:
在 /etc/shadow 文件中,密码字段的开头会有一个标识符,表示使用的加密算法。以下是常见的标识符及其对应的加密方式:

标识符加密方式描述
$1$MD5使用 MD5 算法加密。
$2a$​Blowfish使用 Blowfish 算法加密(较旧版本)。
$2y$​Blowfish使用 Blowfish 算法加密(修复了某些安全问题的版本)。
$5$​SHA-256使用 SHA-256 算法加密。
$6$​SHA-512使用 SHA-512 算法加密。
无标识符​DES如果密码字段没有标识符,则使用传统的 DES 算法加密(已过时且不安全)。

字段详解:

  • 用户名(Username)​:
    • 用户的登录名,与 /etc/passwd 中的用户名对应。
    • 示例:john
  • 加密密码(Encrypted Password)​:
    • 存储加密后的用户密码。
    • 如果字段为 * 或 !,表示该用户被锁定,无法使用密码登录。
    • 示例:$6$randomsalt$encryptedpassword
  • 上次修改密码的日期(Last Password Change)​
    • 表示从 1970 年 1 月 1 日(Unix 纪元)到上次修改密码的天数。
    • 示例:19283
  • 密码最小使用天数(Minimum Password Age)​
    • 用户必须使用当前密码的最少天数。
    • 在此期间,用户不能修改密码。
    • 示例:0(表示无限制)
  • 密码最大使用天数(Maximum Password Age)​
    • 用户必须修改密码的最大天数。
    • 过期后,用户必须修改密码才能登录。
    • 示例:99999(表示无限制)
  • 密码过期警告天数(Password Warning Period)​
    • 在密码过期前,向用户发出警告的天数。
    • 示例:7
  • 密码过期宽限天数(Password Inactive Period)​
    • 密码过期后,用户仍可以登录的宽限天数。
    • 在此期间,用户登录时会强制修改密码。
    • 示例:-1(表示无限制)
  • 账户失效日期(Account Expiration Date)​
    • 表示从 1970 年 1 月 1 日到账户失效的天数。
    • 失效后,用户无法登录。
    • 示例:19283
  • 保留字段(Reserved Field)​
    • 保留字段,目前未使用。
    • 示例:空

示例:

#以下是 /etc/shadow 文件中的一个示例行:
john:$6$randomsalt$encryptedpassword:19283:0:99999:7:-1:19283:
#​用户名:john#加密密码:$6$randomsalt$encryptedpassword#上次修改密码的日期:19283#密码最小使用天数:0#密码最大使用天数:99999#密码过期警告天数:7#密码过期宽限天数:-1#账户失效日期:19283#保留字段:空

常见问题:
如何锁定用户?

#将用户的密码字段设置为 ! 或 *:
sudo usermod -L username

如何解锁用户?

#将用户的密码字段恢复为有效值:
sudo usermod -U username

如何强制用户修改密码?

#将用户的密码上次修改日期设置为 0:
sudo chage -d 0 username

如何设置密码过期策略?

#使用 chage 命令:
sudo chage -M 90 -W 7 username
# -M 90:密码最大使用天数为 90 天。
# -W 7:密码过期前 7 天发出警告。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值