linux-用户与用户组管理
用户与用户组管理
- 1. `/etc/passwd` 文件
- **作用**
- **格式**
- **示例**
- **面试问题及答案**
- 2. `/etc/shadow` 文件
- **作用**
- **格式**
- **示例**
- **面试问题及答案**
- 3. `/etc/group` 文件
- **作用**
- **格式**
- **示例**
- **面试问题及答案**
- 4. `/etc/gshadow` 文件
- **作用**
- **格式**
- **示例**
- **面试问题及答案**
- 5. `useradd` 命令
- **作用**
- **常用参数**
- **示例**
- **面试问题及答案**
- 6. `usermod` 命令
- **作用**
- **常用参数**
- **示例**
- **面试问题及答案**
- 7. `userdel` 命令
- **作用**
- **常用参数**
- **示例**
- **面试问题及答案**
- 8. `groupadd` 命令
- **作用**
- **常用参数**
- **示例**
- **面试问题及答案**
- 9. `groupmod` 命令
- **作用**
- **常用参数**
- **示例**
- **面试问题及答案**
- 10. `groupdel` 命令
- **作用**
- **示例**
- **面试问题及答案**
- 综合案例
- 场景描述
- 操作步骤
- 1. 创建用户组
- 命令
- 参数解释
- 作用
- 2. 创建用户并分配到相应的组
- 命令
- 参数解释
- 作用
- 3. 设置组权限
- 命令
- 参数解释
- 作用
- 4. 为特定用户分配额外权限
- 命令
- 参数解释
- 作用
- 5. 审计和监控
- 命令
- 参数解释
- 文件内容
- 作用
- 验证和测试
- 验证用户和组的创建
- 参数解释
- 作用
- 验证文件夹权限
- 参数解释
- 作用
- 验证用户访问权限
- 参数解释
- 作用
- 注意事项
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
:指定用户的主目录。-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
:修改用户的登录名。
示例
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:删除用户组时需要注意什么?
- 答案:确保没有用户属于该组,否则删除会失败。
综合案例
场景描述
假设你负责管理一个公司的 Linux 服务器,公司有多个部门,每个部门需要访问不同的资源。为了提高管理效率和安全性,你需要为每个部门创建独立的用户组,并为每个用户分配相应的权限。
操作步骤
1. 创建用户组
命令
sudo groupadd marketing
sudo groupadd finance
sudo groupadd it
参数解释
groupadd
:用于创建新的用户组。marketing
、finance
、it
:分别是新创建的用户组名称。
作用
这些命令分别创建了三个用户组:marketing
(营销部门)、finance
(财务部门)和 it
(IT 部门)。
2. 创建用户并分配到相应的组
命令
sudo useradd -m -g marketing -s /bin/bash alice
sudo useradd -m -g marketing -s /bin/bash bobsudo useradd -m -g finance -s /bin/bash charlie
sudo useradd -m -g finance -s /bin/bash dianasudo 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
。alice
、bob
、charlie
、diana
、eve
、frank
:分别是新创建的用户名。
作用
这些命令分别创建了六个用户,并将他们分配到相应的用户组:
alice
和bob
分配到marketing
组。charlie
和diana
分配到finance
组。eve
和frank
分配到it
组。
3. 设置组权限
命令
sudo mkdir /data/marketing
sudo mkdir /data/finance
sudo mkdir /data/itsudo chown -R :marketing /data/marketing
sudo chown -R :finance /data/finance
sudo chown -R :it /data/itsudo 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
:指定附加组。
作用
这些命令将 eve
和 frank
添加到其他部门的组中,使他们能够访问其他部门的文件夹。
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_user
以root
用户权限执行所有命令。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
:以指定用户的身份执行命令。
作用
这些命令用于验证用户是否能够正确访问其所属组的文件夹。
注意事项
- 权限最小化:为每个服务创建独立用户组,避免权限过度集中。
- 组策略管理:通过
/etc/sudoers
配置用户组的 sudo 权限。 - 安全加固:禁用空密码组,限制用户修改主组权限,审计用户组变更操作。
- 文档管理:建立用户组与业务系统的对应关系文档。