linux-用户与用户组管理


1. /etc/passwd 文件

在这里插入图片描述

作用
/etc/passwd 文件存储了系统中所有用户的基本信息,包括用户名、用户 ID(UID)、用户组 ID(GID)、用户主目录、登录 Shell 等。

格式
每行代表一个用户,字段之间用冒号(:)分隔,格式如下:

用户名:密码占位符:UID:GID:用户描述:主目录:登录Shell

示例

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

面试问题及答案
问题 1:/etc/passwd 文件中的 x 表示什么?

  • 答案x 是一个占位符,表示密码信息已经移动到 /etc/shadow 文件中,以增强安全性。

问题 2:如何查看 /etc/passwd 文件中所有用户的主目录?

  • 答案:可以使用 awk 命令提取第 6 列:
    awk -F: '{print $6}' /etc/passwd
    

2. /etc/shadow 文件

在这里插入图片描述
在这里插入图片描述

作用
/etc/shadow 文件存储了用户密码的加密信息以及其他与用户登录相关的信息,如密码过期时间等。

格式
每行对应一个用户,字段之间用冒号(:)分隔,格式如下:

用户名:加密密码:最后一次修改时间:最小修改间隔:最大修改间隔:警告天数:不活动天数:失效日期:保留字段

示例

root:$6$...:18482:0:99999:7:::
daemon:*:18482:0:99999:7:::

面试问题及答案
问题 1:如何查看 /etc/shadow 文件中某个用户的密码是否过期?

  • 答案:可以查看 max 字段(第 5 列),如果为 99999 表示密码永不过期。可以通过以下命令查看:
    awk -F: '$1 == "username" {print $5}' /etc/shadow
    

问题 2:如何强制用户在下次登录时更改密码?

  • 答案:可以将用户的 last_change 字段(第 3 列)设置为 0,例如:
    chage -d 0 username
    

3. /etc/group 文件

在这里插入图片描述

作用
/etc/group 文件存储了系统中所有用户组的基本信息,包括组名、组密码(通常为空)、组 ID(GID)和组成员列表。

格式
每行代表一个用户组,字段之间用冒号(:)分隔,格式如下:

组名:组密码:GID:组成员列表

示例

root::0:root
daemon::1:daemon
bin::2:bin

面试问题及答案
问题 1:如何查看 /etc/group 文件中某个组的所有成员?

  • 答案:可以使用 awk 命令提取第 4 列:
    awk -F: '$1 == "groupname" {print $4}' /etc/group
    

问题 2:如何将用户添加到某个组?

  • 答案:可以使用 usermod 命令:
    usermod -aG groupname username
    

4. /etc/gshadow 文件

在这里插入图片描述
作用
/etc/gshadow 文件存储了用户组的密码信息和其他与组管理相关的信息,类似于 /etc/shadow 文件,但针对用户组。

格式
每行对应一个用户组,字段之间用冒号(:)分隔,格式如下:

组名:组密码:管理员列表:成员列表

组密码默认值
用户组的密码信息。如果设置为 *,表示该组没有密码。! 表示该组的密码功能已被禁用。

示例

root:::root
daemon:::
bin:::

面试问题及答案
问题 1:如何查看 /etc/gshadow 文件中某个组的管理员列表?

  • 答案:可以使用 awk 命令提取第 3 列:
    awk -F: '$1 == "groupname" {print $3}' /etc/gshadow
    

问题 2:如何设置某个组的密码?

  • 答案:可以使用 gpasswd 命令:
    gpasswd groupname
    

5. useradd 命令

作用
useradd 命令用于创建新用户。

常用参数

  • -u UID:指定用户的 UID。
  • -g GID:指定用户的初始登录组。
  • -G GID1,GID2,...:指定用户的附加组。
  • -d HOME:指定用户的主目录。
  • -m:自动创建用户的主目录,默认路径为 /home/username
  • -s SHELL:指定用户的登录 Shell。
  • -c COMMENT:指定用户的注释信息。

示例

useradd -u 1001 -g users -G wheel -d /home/newuser -s /bin/bash -c "New User" newuser

面试问题及答案
问题 1:如何创建一个没有登录 Shell 的用户?

  • 答案:可以将登录 Shell 设置为 /sbin/nologin
    useradd -s /sbin/nologin username
    

问题 2:如何为新用户设置初始密码?

  • 答案:可以使用 passwd 命令:
    passwd username
    

6. usermod 命令

作用
usermod 命令用于修改现有用户的属性。

常用参数

  • -u UID:修改用户的 UID。
  • -g GID:修改用户的初始登录组。
  • -G GID1,GID2,...:修改用户的附加组。
  • -d HOME:修改用户的主目录。
  • -s SHELL:修改用户的登录 Shell。
  • -c COMMENT:修改用户的注释信息。
  • -l NEW_LOGIN:修改用户的登录名。
  • -L: 大写 L 锁定用户账户 usermod -L username
  • -U :解锁用户账号
    示例
usermod -u 1002 -g users -G wheel -d /home/newuser -s /bin/bash -c "Updated User" newuser

面试问题及答案
问题 1:如何将用户从一个组移动到另一个组?

  • 答案:可以使用 usermod 命令修改用户的初始组:
    usermod -g newgroup username
    

问题 2:如何锁定一个用户账户?

  • 答案:可以使用 usermod 命令锁定用户:
    usermod -L username
    

7. userdel 命令

作用
userdel 命令用于删除用户。

常用参数

  • -r:删除用户的同时删除其主目录。

示例

userdel -r username

面试问题及答案
问题 1:如何删除用户但保留其主目录?

  • 答案:不使用 -r 参数:
    userdel username
    

问题 2:如何确保删除用户时不会出现错误?

  • 答案:确保用户没有正在运行的进程,并且用户没有登录。

8. groupadd 命令

作用
groupadd 命令用于创建新用户组。

常用参数

  • -g GID:指定组的 GID。

示例

groupadd -g 1001 newgroup

面试问题及答案
问题 1:如何创建一个具有特定 GID 的用户组?

  • 答案:可以使用 -g 参数指定 GID:
    groupadd -g 1001 newgroup
    

问题 2:如何查看系统中所有用户组的 GID?

  • 答案:可以使用 awk 命令提取 /etc/group 文件的第 3 列:
    awk -F: '{print $1, $3}' /etc/group
    

9. groupmod 命令

作用
groupmod 命令用于修改现有用户组的属性。

常用参数

  • -g GID:修改组的 GID。
  • -n NEW_GROUP:修改组名。

示例

groupmod -g 1002 -n newgroupname oldgroupname

面试问题及答案
问题 1:如何修改用户组的 GID?

  • 答案:可以使用 groupmod 命令:
    groupmod -g 1002 groupname
    

问题 2:如何修改用户组的名称?

  • 答案:可以使用 -n 参数:
    groupmod -n newgroupname oldgroupname
    

10. groupdel 命令

作用
groupdel 命令用于删除用户组。

示例

groupdel groupname

面试问题及答案
问题 1:如何删除一个用户组?

  • 答案:可以使用 groupdel 命令:
    groupdel groupname
    

问题 2:删除用户组时需要注意什么?

  • 答案:确保没有用户属于该组,否则删除会失败。

11. whoami

作用:显示当前有效用户的用户名。

参数作用
默认输出当前用户名

示例

$ whoami
alice

12. who

作用:显示当前所有已登录系统的用户会话。

参数作用
-a显示所有信息(等价于 -b -d -l -p -r -t -T -u
-b显示系统最后启动时间
-H显示列标题
-u显示空闲时间(Idle)

示例

$ who -Hu
NAME     LINE         TIME             IDLE          PID COMMENT
alice    tty1         2025-07-20 09:30 01:02         1234
bob      pts/0        2025-07-20 10:15   .           5678 (192.168.1.100)

13. exit

作用:退出当前shell或登录会话。

参数作用
正常退出
数字(如0)指定退出状态码(0表示成功)

示例

$ exit
logout
Connection to 192.168.1.100 closed.

14. passwd

作用:管理用户密码。

参数作用
修改当前用户密码
用户名修改指定用户密码(需root权限)
-l锁定用户密码
-u解锁用户密码
-d删除密码(允许空密码登录)

示例

$ sudo passwd alice
New password: ******
Retype new password: ******
passwd: password updated successfully

15. su

作用:切换用户身份。

参数作用说明示例
--l登录式切换(加载目标用户的完整环境变量,等同于重新登录)。su - bob
-c "command"以目标用户身份执行单次命令后退出当前shell。su - alice -c "whoami"
-s /bin/zsh指定切换后使用的shell(覆盖目标用户的默认shell)。su -s /bin/sh root
-m-p保留当前用户的环境变量(不加载目标用户的~/.bashrc等)。su -m root
-f跳过目标用户的~/.cshrc文件(仅适用于C Shell)。su -f root
- 用户名切换至指定用户(需输入该用户密码)。su - alice
无参数默认切换至root(需输入root密码)。su

示例

$ su - alice
Password: ******
alice@host:~$ whoami
alice

登录式切换(推荐)

$ su - bob
Password: ******
bob@host:~$ pwd          # 家目录已切换为 /home/bob
/home/bob
bob@host:~$ echo $PATH   # 加载bob的环境变量
/usr/local/bin:/usr/bin:/bin

非登录式切换

$ su bob
Password: ******
bob@host:/home/alice$ pwd  # 仍停留在原目录
/home/alice
bob@host:/home/alice$ echo $PATH  # 保留原用户环境变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

单次命令执行

$ su -c "systemctl restart nginx" root
Password: ******
# 命令执行后直接返回原用户shell

16. sudo

作用:以root或其他用户身份执行命令。

参数作用
命令以root身份执行命令
-u 用户名以指定用户身份执行命令
-l列出当前用户可执行的命令权限
-i启动root登录shell

示例

$ sudo -u alice touch /tmp/file.txt
$ ls -l /tmp/file.txt
-rw-r--r-- 1 alice alice 0 Jul 20 11:00 /tmp/file.txt

综合案例

场景描述

假设你负责管理一个公司的 Linux 服务器,公司有多个部门,每个部门需要访问不同的资源。为了提高管理效率和安全性,你需要为每个部门创建独立的用户组,并为每个用户分配相应的权限。

操作步骤

1. 创建用户组

命令

sudo groupadd marketing
sudo groupadd finance
sudo groupadd it

参数解释

  • groupadd:用于创建新的用户组。
  • marketingfinanceit:分别是新创建的用户组名称。

作用
这些命令分别创建了三个用户组:marketing(营销部门)、finance(财务部门)和 it(IT 部门)。

2. 创建用户并分配到相应的组

命令

sudo useradd -m -g marketing -s /bin/bash alice
sudo useradd -m -g marketing -s /bin/bash bob

sudo useradd -m -g finance -s /bin/bash charlie
sudo useradd -m -g finance -s /bin/bash diana

sudo useradd -m -g it -s /bin/bash eve
sudo useradd -m -g it -s /bin/bash frank

参数解释

  • useradd:用于创建新的用户。
  • -m:自动创建用户的主目录,默认路径为 /home/username
  • -g:指定用户的初始登录组。
  • -s:指定用户的登录 Shell,默认为 /bin/bash
  • alicebobcharliedianaevefrank:分别是新创建的用户名。

作用
这些命令分别创建了六个用户,并将他们分配到相应的用户组:

  • alicebob 分配到 marketing 组。
  • charliediana 分配到 finance 组。
  • evefrank 分配到 it 组。

3. 设置组权限

命令

sudo mkdir /data/marketing
sudo mkdir /data/finance
sudo mkdir /data/it

sudo chown -R :marketing /data/marketing
sudo chown -R :finance /data/finance
sudo chown -R :it /data/it

sudo chmod -R 770 /data/marketing
sudo chmod -R 770 /data/finance
sudo chmod -R 770 /data/it

参数解释

  • mkdir:用于创建目录。
  • /data/marketing/data/finance/data/it:分别是为每个部门创建的文件夹路径。
  • chown:用于更改文件或目录的所有者或组。
    • -R:递归更改文件夹及其子目录和文件的所有者。
    • :marketing:finance:it:分别指定新的组所有权。
  • chmod:用于更改文件或目录的权限。
    • -R:递归更改文件夹及其子目录和文件的权限。
    • 770:设置权限为 rwxrwx---,即组内用户有读写执行权限,其他用户无权限。

作用
这些命令创建了三个文件夹,并将它们分别分配给三个部门的用户组,同时设置了适当的权限,确保只有本部门的用户可以访问相应的文件夹。

4. 为特定用户分配额外权限

命令

sudo usermod -aG marketing eve
sudo usermod -aG finance eve
sudo usermod -aG marketing frank
sudo usermod -aG finance frank

参数解释

  • usermod:用于修改现有用户的属性。
  • -aG:将用户添加到指定的附加组。
    • -a:追加模式,不会覆盖用户现有的组成员关系。
    • -G:指定附加组。

作用
这些命令将 evefrank 添加到其他部门的组中,使他们能够访问其他部门的文件夹。

5. 审计和监控

命令

sudo visudo

参数解释

  • visudo:用于编辑 /etc/sudoers 文件,该文件定义了哪些用户或组可以以超级用户权限执行命令。

文件内容
/etc/sudoers 文件中添加以下内容:

audit_user ALL=(root) ALL
audit_user ALL=(root) !/usr/bin/sensitive_command

作用

  • audit_user ALL=(root) ALL:允许 audit_userroot 用户权限执行所有命令。
  • audit_user ALL=(root) !/usr/bin/sensitive_command:禁止 audit_user 执行特定的敏感命令。

验证和测试

验证用户和组的创建

getent group marketing
getent group finance
getent group it
id alice
id bob
id charlie
id diana
id eve
id frank

参数解释

  • getent group:显示指定组的信息。
  • id:显示用户的 UID 和 GID 信息。

作用
这些命令用于验证用户和组是否正确创建,并且用户是否正确分配到相应的组。

验证文件夹权限

ls -ld /data/marketing
ls -ld /data/finance
ls -ld /data/it

参数解释

  • ls -ld:列出指定目录的详细信息,包括权限、所有者和组。

作用
这些命令用于验证文件夹的权限是否正确设置。

验证用户访问权限

sudo -u alice ls /data/marketing
sudo -u charlie ls /data/finance
sudo -u eve ls /data/marketing
sudo -u eve ls /data/finance
sudo -u eve ls /data/it

参数解释

  • sudo -u:以指定用户的身份执行命令。

作用
这些命令用于验证用户是否能够正确访问其所属组的文件夹。

注意事项

  1. 权限最小化:为每个服务创建独立用户组,避免权限过度集中。
  2. 组策略管理:通过 /etc/sudoers 配置用户组的 sudo 权限。
  3. 安全加固:禁用空密码组,限制用户修改主组权限,审计用户组变更操作。
  4. 文档管理:建立用户组与业务系统的对应关系文档。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值