项目四 管理Linux 系统用户、组和权限
4.1 项目知识初储备
4.1.1Linux用户和组
1. Linux用户和组
在Linux系统中,用户和组是权限管理
的基础。用户(User)代表系统中的一个账户,可以是个人或服务。组(Group)是具有相似权限需求的用户的集合
。通过用户和组,Linux系统实现了对资源的访问控制
。
用户的特点:
- 每个用户都有一个唯一的用户名。
- 用户可以有自己的密码,用于系统认证。
- 用户可以登录系统并执行操作。
- 用户可以属于一个或多个组。
组的特点:
组
是用户账户
的集合
,通常用于权限管理
。- 每个组都有一个
唯一
的组名。 - 组内的成员可以共享对文件和目录的访问权限。
2. 用户组
用户组是Linux系统中用于组织用户的一种方式。组可以有以下类型:
- 普通组:由普通用户组成,通常用于共享文件和资源。
- 系统组:由系统服务和程序组成,用于运行系统服务和维护系统操作。
3. 用户和用户组的关系
用户和用户组之间的关系是多对多的,即一个用户可以属于多个组,一个组也可以包含多个用户。这种关系通过以下方式定义和管理:
- 主组:每个用户都有一个主组,通常是以用户名命名的组。用户创建文件时,默认归属于这个组。
- 附加组:用户还可以属于其他附加组,以扩展其权限。
用户可以通过/etc/group
文件中的条目来分配到组,例如:
wheel:x:10:alice,bob
这里wheel
是组名,x
表示加密的组密码(通常不使用),10
是组ID(GID),alice
和bob
是该组的成员。
4. UID和GID
UID(User Identifier)和GID(Group Identifier)是Linux系统中用于标识用户和组的唯一数字。
- UID:每个用户都被分配一个唯一的UID。UID为-1表示没有用户,0是root用户的特殊UID。
- GID:每个组都有一个唯一的GID。系统组的GID通常小于1000,普通用户的GID从1000开始。
UID和GID在以下文件中定义:
-
/etc/passwd
:包含用户账户信息,每行以用户的UID和GID结束。username:x:UID:GID:Gecos:/home/username:/bin/bash
-
/etc/group
:包含组信息,每行以组的GID结束。groupname:x:GID:userlist
权限管理
Linux系统中的文件和目录权限由以下三个类别组成:
- 用户(u):文件所有者的权限。
- 组(g):文件所有者所在组的权限。
- 其他(o):既不是文件所有者也不是组内成员的用户的权限。
使用chmod
命令可以设置这些权限,例如:
chmod u+rwx file
:给文件所有者读、写和执行权限。chmod g+r file
:给文件所有者所在组读权限。
总结
用户和组的管理是Linux系统安全和权限控制的关键。通过合理分配UID和GID,以及管理用户和组的成员关系,可以确保系统资源的合理访问和保护。
4.1.2 用户配置文件
在Linux系统中,用户配置文件包含了用户账户的重要信息,这些文件由系统管理员管理,用于控制用户账户的行为和权限。以下是详细介绍的三个主要用户配置文件:
1. /etc/passwd
文件
/etc/passwd
是Linux系统中存储用户账户信息的主要文件。这个文件中的每条记录都包含了关于用户的基本信息,格式如下:
username:x:UID:GID:Gecos:home_dir:login_shell
- username:用户的登录名。
- x:加密密码的占位符,密码实际存储在
/etc/shadow
文件中。 - UID:用户的唯一标识符(User Identifier)。
- GID:用户主组的组标识符(Group Identifier)。
- Gecos:通常用于存储用户的真实姓名或描述,源自早期的系统(如UNIX)。
- home_dir:用户的主目录路径。
- login_shell:用户登录时使用的默认Shell。
示例:
john:x:1001:1001:John Doe,,,:/home/john:/bin/bash
2. /etc/shadow
文件
/etc/shadow
文件存储了用户的密码信息,包括密码的加密哈希和相关密码政策。这个文件比/etc/passwd
文件更安全,因为它减少了密码信息被未授权访问的风险。每条记录的格式如下:
username:hashed_password:last_change:minimum:maximum:warning:inactive:expire:flag
- username:用户的登录名。
- hashed_password:密码的加密哈希值。如果字段中是
!
或*
,则表示密码被锁定或不可用。 - last_change:密码最后一次更改的日期,表示为自1970年1月1日以来的天数。
- minimum:用户必须等待的天数,才能再次更改密码。
- maximum:密码过期前的有效天数。
- warning:在密码过期前用户将收到警告的天数。
- inactive:密码过期后,账户将被禁用的天数。
- expire:账户或密码的过期日期,表示为自1970年1月1日以来的天数。
- flag:保留字段,通常未使用。
3. /etc/login.defs
文件
/etc/login.defs
文件包含了用户和组的默认配置,这些配置将被useradd
、groupadd
、passwd
和gpasswd
等命令使用。这个文件定义了用户账户的默认设置,如密码策略、UID和GID的范围等。以下是一些常见的配置选项:
- PASS_MAX_DAYS:密码的最大有效天数。
- PASS_MIN_DAYS:密码的最小更改间隔。
- PASS_WARN_AGE:密码过期前用户将收到警告的天数。
- ENCRYPT_METHOD:密码加密的方法(如MD5、SHA256等)。
- UID_MIN 和 UID_MAX:系统用户和普通用户UID的范围。
- GID_MIN 和 GID_MAX:系统组和普通组GID的范围。
示例配置:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 7
ENCRYPT_METHOD SHA512
UID_MIN 1000
UID_MAX 60000
GID_MIN 1000
GID_MAX 60000
总结
这些配置文件是Linux系统中用户和组管理的核心。/etc/passwd
提供了用户账户的基本框架,/etc/shadow
增加了安全性,而/etc/login.defs
定义了系统级的默认设置。系统管理员需要理解这些文件的结构和用途,以确保用户账户的安全和有效管理。
4.1.3 用户组配置文件
在Linux系统中,用户组的配置文件用于定义系统中的组账户以及它们的属性。以下是两个主要的用户组配置文件的详细介绍:
1. /etc/group
文件
/etc/group
文件存储了系统中所有组账户的信息。这个文件的每条记录包含了组的基本信息,格式如下:
groupname:password:GID:member1,member2,...
- groupname:组的名称。
- password:组加密密码的占位符或实际密码(通常不使用组密码)。如果密码字段是
x
,则表示组密码存储在/etc/gshadow
文件中。 - GID:组的唯一标识符(Group Identifier)。
- member1, member2, …:属于该组的用户列表,可以包括一个或多个用户名,用逗号分隔。
示例:
wheel:x:10:alice,bob
2. /etc/gshadow
文件
/etc/gshadow
文件存储了组密码和相关属性,类似于用户的/etc/shadow
文件。这个文件提供了额外的安全性,因为它允许组密码与组的基本配置分开存储。/etc/gshadow
文件的格式如下:
groupname:hashed_password:administrators:members
- groupname:组的名称。
- hashed_password:组密码的加密哈希值。如果组没有密码,则该字段通常包含一个
!
或*
。 - administrators:可以修改组成员资格的管理员列表。这通常是一个用户名列表,用逗号分隔。如果字段是
x
,则表示管理员与组成员相同。 - members:实际属于该组的成员列表。这通常是一个用户名列表,用逗号分隔。
示例:
wheel:*:alice:bob
配置文件的用途
-
/etc/group
和/etc/gshadow
文件共同定义了Linux系统中的组账户和它们的属性。这些文件对于权限管理至关重要,因为它们决定了哪些用户可以访问哪些资源。 -
组密码(如果使用)可以用于系统级的工具和服务,这些服务可能需要以某个组的身份运行。
-
/etc/gshadow
提供了一种机制,允许特定的用户(管理员)管理组的成员资格,而不必知道组密码。
总结
/etc/group
和 /etc/gshadow
文件是Linux系统中管理用户组的核心配置文件。它们提供了一种机制来组织用户、分配权限,并在必要时对组进行密码保护。系统管理员需要熟悉这些文件的结构和用途,以确保系统的安全性和有效管理。
4.2 项目实施
4.2.1 任务一 :管理用户
好的,让我们更深入地了解每个步骤中使用到的命令及其参数的含义,以便更全面地理解用户管理任务。
步骤1:添加新用户
-
useradd
命令用于创建一个新的用户账户。参数说明:newuser
:指定新用户的用户名。
sudo useradd newuser
-
passwd
命令用于为用户设置密码。当指定用户时,系统会提示输入密码。newuser
:指定需要设置密码的用户。
sudo passwd newuser
步骤2:设置用户属性
-
id
命令显示指定用户的UID、GID以及所属的组。newuser
:指定要查询信息的用户。
id newuser
-
usermod
命令用于修改现有用户的属性。参数说明:-s
:指定用户的登录Shell。/bin/bash
:指定新的登录Shell路径。
sudo usermod -s /bin/bash newuser
-d
:指定用户的主目录。/new/home/dir
:新的主目录路径。
sudo usermod -d /new/home/dir newuser
-g
:更改用户的主组。newgroup
:新的主组名称。
sudo usermod -g newgroup newuser
-aG
:将用户添加到附加的组,而不删除其原有组成员资格。additionalgroup
:要添加到的附加组的名称。
sudo usermod -aG additionalgroup newuser
步骤3:删除用户
-
userdel
命令用于删除用户账户。参数说明:newuser
:指定要删除的用户。-r
:删除用户的同时,删除用户的主目录和邮件目录。
sudo userdel -r newuser
步骤4:查看用户信息
-
cat
命令用于查看文件内容。这里用来查看/etc/passwd
文件,其中包含了所有用户的基本信息。cat /etc/passwd
-
getent
命令用于获取/etc/passwd
或/etc/shadow
等文件中的条目。passwd
:指定查看的文件类型(这里是passwd
)。newuser
:指定要查询的用户。
getent passwd newuser
步骤5:管理用户权限
-
chown
命令用于更改文件或目录的所有者。参数说明:newuser
:新的所有者用户名。/path/to/file
:指定要更改所有者的文件或目录路径。
sudo chown newuser /path/to/file
-
chgrp
命令用于更改文件或目录的用户组。参数说明:newgroup
:新的用户组名称。/path/to/file
:指定要更改组的文件或目录路径。
sudo chgrp newgroup /path/to/file
-
chmod
命令用于更改文件或目录的权限。参数说明:755
:设置权限,其中7表示所有者有读、写、执行权限,5表示组和其他用户有读和执行权限。
sudo chmod 755 /path/to/file
步骤6:用户登录和注销
-
who
命令显示当前登录系统的用户列表。who
步骤7:监控用户活动
-
last
命令显示用户的登录历史记录。last
-
lastlog
命令显示系统中所有用户的最后登录时间。lastlog
注意事项
- 执行用户管理操作时,通常需要root权限或使用
sudo
提升权限。 - 删除用户前,确保备份重要数据,使用
-r
选项会删除用户的主目录。 - 使用
-aG
选项添加用户到附加组时,不会影响用户已有的组成员资格。 - 合理设置用户权限,遵循最小权限原则,只授予用户完成任务所需的最小权限。
通过这些详细的步骤和参数解释,你应该能够更全面地理解如何在Linux系统中管理用户账户。
4.2.2 任务二 管理组
管理组(Group Management)在Linux系统中是权限和资源访问控制的一个重要方面。以下是详细步骤和解释,包括如何添加、修改、删除组,以及如何管理组内用户的权限。
步骤1:添加新组
-
groupadd
命令用于创建一个新的组。例如,创建一个名为newgroup
的组:sudo groupadd newgroup
-
如果需要,可以同时指定GID:
sudo groupadd -g 1001 newgroup
-g 1001
:指定新组的GID为1001。
-
步骤2:修改组属性
-
groupmod
命令用于修改现有组的属性。例如,更改组的GID:sudo groupmod -g 1002 newgroup
-g 1002
:设置组的新GID。
-
更改组名:
sudo groupmod -n newgroupname newgroup
-n newgroupname
:将组名从newgroup
更改为newgroupname
。
步骤3:删除组
-
groupdel
命令用于删除一个已有的组。例如,删除名为newgroup
的组:sudo groupdel newgroup
步骤4:查看组信息
-
cat
或getent
命令用于查看/etc/group
文件的内容,显示所有组的列表和它们的GID:cat /etc/group # 或者 getent group
-
要查看特定组的详细信息,可以使用:
getent group newgroup
步骤5:管理组内用户
-
将用户添加到组中,可以使用
usermod
命令:sudo usermod -aG newgroup username
-aG newgroup
:将username
用户添加到newgroup
组,-a
选项表示附加,不从用户原有的组中移除。
-
从组中删除用户,仍然使用
usermod
命令:sudo usermod -G newgroup username
-G newgroup
:将username
用户的主组更改为newgroup
,如果用户之前属于其他组,这些组将不再包含此用户。
-
使用
gpasswd
命令管理组密码(如果使用):-
设置组密码:
sudo gpasswd -A newgroup
-A
:为组设置密码,组成员可以使用这个密码访问组资源。
-
删除组密码:
sudo gpasswd -R newgroup
-R
:删除组密码。
-
步骤6:监控组的使用
-
使用
groups
命令查看用户所属的所有组:groups username
-
使用
newgrp
命令更改当前会话的组:newgrp newgroup
- 这将更改当前会话的组,允许访问该组的文件和资源。
注意事项
- 在执行组管理操作时,通常需要root权限或使用
sudo
提升权限。 - 管理组和用户时要谨慎,错误的配置可能会影响系统的安全性和用户的正常使用。
- 确保在删除组之前,该组内没有用户,或者已经将用户转移到其他组。
- 使用
-aG
选项将用户添加到附加组时,用户将保留其原始组成员资格。
通过这些步骤和参数解释,你应该能够更全面地理解如何在Linux系统中管理组账户,包括添加新组、修改组属性、删除组、查看组信息、管理组内用户以及监控组的使用。
4.2.3 任务三 : 管理账户常用命令
在Linux系统中,管理用户账户和组账户涉及一系列命令,每个命令都有其特定的选项和参数。以下是一些常用命令的详细介绍:
用户账户管理命令
-
useradd
- 添加新用户-c comment
:提供用户的描述或注释。-d home_dir
:指定用户的主目录。-g initial_group
:指定用户的第一个有效组。-s shell
:指定用户的登录Shell。
sudo useradd -c "John Doe" -g 1001 -s /bin/bash newuser
-
usermod
- 修改现有用户-u UID
:更改用户的UID。-g GID
:更改用户的主要GID。-d home_dir
:更改用户的主目录。-l new_name
:更改用户的账户名。
sudo usermod -g 1002 -d /new/home/newuser newuser
-
userdel
- 删除用户-r
:删除用户及其主目录和邮件目录。
sudo userdel -r username
-
passwd
- 更改用户密码- 无参数时,更改当前用户的密码。
sudo passwd username
-
chage
- 更改用户账户的密码属性-d 0
:将密码的最后更改日期设置为当前日期。-m days
:设置密码的最小存活期。-M days
:设置密码的最大存活期。
sudo chage -d 0 -m 5 -M 90 username
-
id
- 显示用户的UID、GID和所属组-u
:仅显示UID。-g
:仅显示GID。-G
:显示用户所属的所有组。
id -u username
-
su
- 切换用户-l
:模拟完整的登录,包括环境变量的加载。
su - username
组账户管理命令
-
groupadd
- 添加新组-g GID
:指定新组的GID。
sudo groupadd -g 1001 newgroup
-
groupmod
- 修改现有组-g GID
:更改组的GID。-n new_name
:更改组名。
sudo groupmod -g 1002 -n newgroupname newgroup
-
groupdel
- 删除组sudo groupdel groupname
-
gpasswd
- 更改组密码或设置组管理员-a user
:将用户添加到组管理员列表。-d user
:从组中删除用户。
sudo gpasswd -a username newgroup
-
newgrp
- 改变当前会话的组newgrp groupname
-
groups
- 显示用户所属的所有组groups username
其他辅助命令
-
whoami
- 显示当前用户的用户名whoami
-
who
- 显示当前登录系统的所有用户who
-
last
- 显示用户登录记录last username
-
lastlog
- 显示系统中所有用户的最后登录时间lastlog
-
logins
- 显示/etc/passwd
文件中所有用户的摘要信息logins
注意事项
- 使用上述命令时,大多数需要root权限或使用
sudo
来执行。 - 在更改用户密码时,确保遵循安全策略,如使用强密码。
- 使用
usermod
和groupmod
命令更改用户或组的属性时,要确保新的属性不会引起系统的权限问题。 - 在删除用户或组之前,确保这些账户没有正在运行的进程或重要的数据。
- 使用
chage
命令管理密码策略时,要确保遵循组织的密码政策。
通过这些命令,你可以执行用户和组的创建、修改、删除和权限管理等操作,确保系统安全性和符合组织策略。
4.2.4 任务四 : Linux文件权限管理
Linux文件权限管理是操作系统中控制对文件和目录访问的重要组成部分。文件权限决定了谁可以读、写或执行文件。以下是详细介绍Linux文件权限管理的各个方面:
文件权限的类型
- 读权限(r):允许用户查看文件内容或目录列表。
- 写权限(w):允许用户修改文件内容或在目录中创建、删除文件。
- 执行权限(x):允许用户执行文件作为程序或访问目录。
文件权限的主体
- 所有者(Owner):文件的所有者,通常是创建文件的用户。
- 组(Group):文件所属的用户组。
- 其他(Others):既不是所有者也不是组内成员的任何用户。
文件权限的表示方法
- 数字表示法:使用数字代码表示权限,其中
4
代表读(r
),2
代表写(w
),1
代表执行(x
)。例如,7(可读可写可执行)
=4+2+1
。 - 符号表示法:使用字母简写表示权限,如
rwx
。
命令和工具
-
ls -l
:列出目录内容及其权限。ls -l /path/to/directory
-
chmod
:更改文件或目录的权限。- 使用数字代码:
chmod 755 filename
(所有者可读可写可执行,组和其他用户可读可执行)。 - 使用符号代码:
chmod u+x filename
(给所有者添加执行权限)。
- 使用数字代码:
-
chown
:更改文件或目录的所有者。sudo chown newowner filename
-
chgrp
:更改文件或目录的组。sudo chgrp newgroup filename
-
setfacl
:设置文件或目录的访问控制列表(ACL),允许更精细的权限控制。setfacl -m u:newuser:rwx filename
-
getfacl
:获取文件或目录的ACL。getfacl filename
特殊权限
- SetUID(S):当设置在可执行文件上时,允许用户以文件所有者的权限执行该文件。
- SetGID(S):当设置在目录上时,新创建的文件和目录将继承该目录的组。
- Sticky Bit(T):通常用于
/tmp
等临时文件夹,防止用户删除不属于他们的文件。
文件权限的继承
当文件系统中添加新文件或目录时,它们的权限将基于父目录的模式设置。使用umask
命令可以设置系统默认的文件和目录权限。
访问控制列表(ACL)
ACL提供了比传统Unix权限更细粒度的权限控制。可以使用setfacl
和getfacl
命令来管理ACL。
使用umask
设置默认权限
umask
(用户文件创建掩码)定义了新创建文件和目录的默认权限。例如,umask 022
将导致新文件默认权限为644(rw-r--r--
),新目录默认权限为755(rwxr-xr-x
)。
注意事项
- 改变文件权限可能会影响系统的安全性和稳定性,应谨慎操作。
- 使用
chmod
、chown
和chgrp
时,确保你了解权限更改的影响。 - 特殊权限如SetUID和Sticky Bit应谨慎使用,因为它们可能会带来安全风险。
- 定期检查和审核文件权限,确保它们符合组织的安全策略。
通过这些工具和命令,你可以有效地管理Linux系统中的文件权限,确保适当的访问控制和数据保护。