目录
- 一、管理用户账号和组账号
- 1、用户账号和组账号概述
- 2、用户账号管理
- 二、权限管理
- 1、管理目录和文件的属性
- 总结
在 linux 操作系统的管理领域中,账号和权限管理是保障系统安全、稳定运行的核心要素。通过合理配置用户账号和组账号,以及精确设置目录与文件的权限和归属,能够有效控制系统资源的访问,避免非法操作和数据泄露风险,为系统构建起坚实的安全防线。
本文将全面深入地探讨 Linux 系统中账号和权限管理的各个关键方面。从剖析用户账号和组账号的基本概念、详细介绍相关配置文件的结构与功能,到讲解用户账号和组账号的创建、修改、删除等操作方法,再到阐述目录和文件权限及归属的查看、设置技巧,涵盖了从理论基础到实际操作的全方位知识体系,助力读者熟练掌握这一重要的系统管理技能,确保Linux系统在安全的轨道上高效运行。
一、管理用户账号和组账号
与 Windows 操作系统相比,Linux 操作系统中的用户账号和组账号的作用在本质上是一样的,同样都是基于用户身份来控制对资源的访问,只不过在表现形式及个别细节方面存在一些差异。
本小节将介绍 Linux 操作系统中用户账号和组账号、以及管理它们的相关概念。
1、用户账号和组账号概述
与 windows 操作系统一样,Linux 操作系统的每一个用户账号也都有唯一的用户名与密码。用户在登录时输入正确的用户名和密码,就能够进入操作系统和自己的主目录。
(1)用户账号类型
用户类型 | 权限级别 | 使用场景 | 登录权限 |
超级用户 | 最高权限(root) | 系统管理、维护任务 | 允许登录但不推荐 |
普通用户 | 受限权限 | 日常事务处理 | 允许登录 |
程序用户 | 低权限(仅必要权限) | 维持系统或应用程序运行 | 禁止登录系统 |
(2)组账号
基于某种特定联系(如都要访问 FTP服务)将多个用户集合在一起,即构成一个用户组,表示该组内所有用户的账号称为组账号。
组账号分为以下两种:
基本组(私有组) | 用户创建时默认归属的组,每个用户必须且只能有一个基本组。 | - 用户的基本组通常与用户名同名。 - 用户拥有的文件默认继承基本组权限。 |
附加组(公共组) | 用户除基本组外可加入的其他组,用于扩展权限(如访问共享资源)。 | - 用户可加入多个附加组。 - 附加组权限与基本组权限叠加生效。 |
(3)UID 和 GID 号
类别 | 类型 | 范围 | 说明 |
UID | root用户 | 0 | 系统超级用户的唯一标识号,操作系统核心通过UID区分用户身份。 |
程序用户 | 1~999 | 系统服务或应用程序专用的非登录账号,通常不关联真实用户。 | |
普通用户 | 1000~65534 | 普通用户账号的默认UID范围,需确保唯一性。 | |
GID | root组 | 0 | 系统超级用户组的唯一标识号,通常与root用户绑定。 |
程序组 | 1~999 | 与程序用户关联的组账号,用于统一管理服务或应用的资源权限。 | |
普通组 | 1000~65534 | 普通组账号的默认GID范围,组内用户共享该组的权限。 |
注意:
UID/GID 唯一性:每个用户/组的UID/GID原则上唯一,冲突可能导致权限混乱。系统通过UID识别用户身份,而非用户名(如root的UID固定为0)。
权限关联:用户的基本组GID默认与其UID相同(如用户zhangsan的GID可能为1001)。文件权限中显示的UID/GID对应所有者及所属组。
2、用户账号管理
Linux 操作系统中的用户账号、密码等信息均保存在相应的配置文件中,直接修改这些文件或者使用用户管理命令都可以对用户账号进行管理。
(1)用户账号文件
与用户账号相关的配置文件主要有两个,分别是/etc/passwd 和/etc/shadow。前者用于保存用户名称、宿主目录、登录 she11 等基本信息,后者用于保存用户的密码、账号有效期等信息。在这两个配置文件中,每一行对应一个用户账号,不同的配置项之间使用“:”(冒号)进行分隔。
1. /etc/passwd 文件
操作系统中所有用户的账号基本信息都保存在/etc/passwd 文件中,该文件是文本文件,任何用户都可以读取文件中的内容。
在 passwd 文件开头的部分,包括超级用户 root 及各程序用户的账号信息,系统中新增加的用户账号信息将保存到 passwd 文件的末尾。
passwd 文件的每一行内容中包含了七个用“:”(冒号)分隔的配置字段,从左到右各配置字段的含义分别如下所述。
字段位置 | 字段名称 | 描述 | 示例/注意事项 |
第1字段 | 用户账号名称 | 用户登录系统时使用的唯一标识名称。 | root,ftp,pythonalice |
第2字段 | 密码占位符 | 固定为x,实际密码已迁移到 /etc/shadow。 | x(历史遗留:早期系统密码直接存储在此字段) |
第3字段 | UID | 用户唯一标识号,系统通过UID识别用户身份。 | 0(root用户),1000(普通用户) |
第4字段 | 基本组GID | 用户所属基本组的组标识号。 | 0(root组),1000(用户私有组) |
第5字段 | 用户全名/描述信息 | 用户备注信息,可包含姓名、联系方式等。 | Alice Smith, Room 101 |
第6字段 | 宿主目录 | 用户登录后的默认工作目录。 | /root(root用户),/home/alice(普通用户) |
第7字段 | 登录Shell | 用户登录后使用的Shell程序路径。 | /bin/bash(默认),/sbin/nologin(禁止登录的系统用户) |
文件属性
- 权限:仅root可读写,普通用户无访问权限。
- 安全机制:防止密码哈希被暴力 破解,增强系统安全性。
(2)添加、修改、删除用户账号
1、添加用户账号——useradd
- 格式: useradd [选项] 用户名
shadow 文件的每一行内容中包含了九个用“:”(冒号)分隔的配置字段,从左到右各配置字段的含义分别如下所述。
字段位置 | 字段名称 | 描述 | 示例/注意事项 |
第1字段 | 用户账号名称 | 与/etc/passwd中的用户名一致。 | root,alice |
第2字段 | 加密密码 | 使用SHA-512等算法加密的密码字符串。 | $6$...(加密后的哈希值),*或!!(禁止登录), 空值(无需密码登录) |
第3字段 | 上次修改密码时间 | 从1970年1月1日起到最近一次修改密码的天数。 | 19103(表示2022年5月1日左右) |
第4字段 | 密码最短有效天数 | 修改密码后必须经过该天数才能再次修改。 | 0(无限制),7(7天内不可修改) |
第5字段 | 密码最长有效天数 | 密码有效期限,超过后必须修改。 | 99999(默认无限制),90(90天后过期) |
第6字段 | 密码过期前警告天数 | 密码过期前提前警告用户的天数。 | 7(默认提前7天提醒) |
第7字段 | 密码过期后宽限天数 | 密码过期后允许用户登录的宽限期,超时后账号被禁用。 | 5(过期后5天内仍可登录) |
第8字段 | 账号失效时间 | 从1970年1月1日起计算,指定账号永久禁用的日期。 | 19456(表示2023年4月15日失效,空值表示永久有效) |
第9字段 | 保留字段 | 未使用,保留为未来扩展。 | 通常为空 |
文件属性权限:仅root可读写,普通用户无访问权限。安全机制:防止密码哈希被暴力破解,增强系统安全性。
(2)添加、修改、删除用户账号
1、添加用户账号——useradd
格式: useradd [选项] 用户名
选项 | 描述 | 注意事项 | 示例 |
-u | 指定用户的UID号,需确保该UID未被其他用户使用。 | 若未指定,系统自动分配下一个可用UID。 避免使用系统保留范围(如0、1-999)。 | useradd -u 1001 alice |
-d | 指定用户的宿主目录路径(需绝对路径)。 | 若与-m(自动创建目录)联用,-d可能失效(需检查系统兼容性)。 | useradd -d /data/alice_home alice |
-e | 设置账户失效时间,格式为YYYY-MM-DD。 | 到期后用户将无法登录。 空值表示永久有效(默认)。 | useradd -e 2024-12-31 alice |
-g | 指定用户的基本组(组名或GID)。 | 若未指定,默认创建与用户名同名的新组作为基本组。 | useradd -g developers alice或useradd -g 1001 alice |
-G | 指定用户的附加组(多个组用逗号分隔,支持组名或GID)。 | 用户将继承附加组的权限。 需确保附加http://www.devze.com组已存在。 | useradd -G ftp,webadmin alice或useradd -G 2001,2002 alice |
-M | 禁止创建宿主目录(即使/etc/login.defs中配置为自动创建)。 | 适用于系统服务账号(无需登录场景)。 需手动创建目录并设置权限。 | useradd -M nginx |
-s | 指定用户的登录Shell路径。 | 设置为/sbin/nologin或/bin/false可禁止用户登录。 | useradd -s /sbin/nologin ftp_user或useradd -s /bin/zsh alice |
2、为用户账号设置密码——passwd
通过useradd命令新增用户账号以后,还需要为其设置一个密码才能正常使用。
使用passwd命令可以设置或修改密码,root用户有权管理其他账号的密码(指定账号名称座位参数即可)。
选项 | 描述 | 注意事项 | 示例 |
-d | 清空指定用户的密码,允许仅通过用户名无密码登录系统。 | 需确保系统安全策略(如PAM配置)允许空密码登录。 高风险操作,建议仅在测试环境使用。 | passwd -d alice(清空用户alice的密码) |
-l | 锁定用户账户,禁止该用户登录系统。 | 锁定后,用户密码字段前添加 ! 符号标记。 用户无法通过密码或SSH登录。 | passwd -l alice或usermod -L alice |
-S | 查看用户账户状态(显示密码是否锁定、过期时间等)。 | 实际命令可能因系统不同有所差异(如passwd -S 或usermod -S)。 输出包含密码策略详情。 | passwd -S alice(显示 alice的账户状态) |
-u | 解锁用户账户,恢复登录权限。 | 移除密码字段前的 ! 标记。 需确保账户未因其他原因(如过期)被禁用。 | passwd -u alice或usermod -U alice |
用户账号具有可用的登录密码以后,虽然 root 用户可以指定用户名为参数,对指定账号的密码进行管理,但是普通用户却只能执行单独的“passwd”命令修改自己的密码。
3、修改用户账号属性——usermod
选项 | 描述 | 注意事项 | 示例 |
-u | 修改用户的UID号,需确保新UID未被其他用户占用。 | 修改后需手动更新用户文件的所属UID(如chown -R)。 避免使用系统保留UID(0、1-999)。 | usermod -u 1001 alice |
-d | 修改用户的宿主目录路径(需绝对路径)。 | 若需迁移原目录内容,需配合-m选项:usermod -d /new/home -m alice。 | usermod -d /data/alice_home alice |
-e | 设置账户失效时间,格式为YYYY-MM-DD。 | 空值表示永久有效。 时间从1970年1月1日起计算的天数存储在/etc/shadow。 | usermod -e 2024-12-31 alice |
-g | 修改用户的基本组(组名或GID)。 | 目标组必须存在。 修改后用户新建文件的属组将更新为新基本组。 | usermod -g developers alice或usermod -g 1001 alice |
-G | 修改用户的附加组(多个组用逗号分隔,支持组名或GID)。 | 会覆盖原有附加组,需结合-a选项追加(如usermod -aG group alice)。 | usermod -G ftp,webadmin alice或usermod -G 2001,2002 alice |
-s | 修改用户的登录Shell路径。 | 路径需在/etc/shells中注册,否则可能禁止登录。 设置为/sbin/nologin可禁用登录。 | usermod -s /bin/zsh alice或usermod -s /sbin/nologin ftp_user |
-l | 更改用户的登录名称(用户名)。 | 不会自动更新用户宿主目录名,需手动修改。 需确保新用户名唯一。 | usermod -l alice_new alice(将alice重命名为 alice_new) |
-L | 锁定用户账户,禁止登录。 | 在/etc/shadow密码字段前添加 ! 标记。 用户无法通过密码或SSH登录。 | usermod -L alice |
-U | 解锁用户账户,恢复登录权限。 | 移除/etc/shadow密码字段前的 ! 标记。 需确保账户未因其他原因被禁用。 | usermod -U alice |
4、删除用户账号——userdel
当操作系统中的某个用户账号不在使用时,可以使用userdel命令将该用户账户删除。
- userdel -r 账户名
- “-r”可以删除用户目录。
(3)用户账号的初始配置文件、
添加一个新的用户账号后,useradd命令会在该用户的宿主目录中建立一些初始配置文件。
这些文件来自于账号模板目录/etc/skel/,基本上都是隐藏文件,较常用的初始配置文件包括“.bash_logout”、
“.bash_profile”、“.bashrc”。
可用ls -a查看。
.bash_profile | 在该用户每次登录时被执行。 |
.bashrc | 在每次加载“/bin/Bash”程序(包括登录系统)时执行。 |
.bash_logout | 在用户每次退出登录时执行。 |
(4)组账号管理
对于用户账号来说,对应的组账号可分为基本组和附加组两种类型。每一个用户账号可以是多个组账号的成员,但是其基本组账号只有一个。在/etc/asswd 文件中第 4 字段记录的即为该用户的基本组 GID号。而对于该用户还属于哪些附加组,则需要在对应组账号的文件中体现。
1、组账号文件
与组账号相关的配置文件分别是/etc/group和/etc/gshadow。前者用于保存组账号名称、GID 号、组成员等基本信息,后者用于保存组账号的加密密码字串等信息(但是很少使用到)。某一个组账号包含哪些用户成员,编程将会在 group 文件内最后一个字段中体现出来(基本组对应的用户账号默android认可能不会列出),多个组成员之间使用“,”(逗号)分隔。
2、添加、管理、删除组账号
groupadd | 添加组账号 | groupadd 组账号名 |
gpasswd | 添加、设置、删除组成员 | gpasswd -a 组账号 用户 ##添加组成员 gpasswd -d 组账号 用户 ##删除组成员 gpasswd -M 用户1 用户2 ... 组账号名 ##用户1 用户2 ...加入组账号里 |
groupdel | 删除组账号 | groupdel 组账号 |
(5)查询账号信息
groups | 查询用户账号所属的组 | 查看指定用户账号属于那些组。 | groups或groups zhangsan |
id | 查询用户账号的身份标识 | 可快速查看指定用户账号的UID、GID等标识信息。 | id root |
w | 查询当前主机的用户登录情况 | 列初登录账号名称、所在终端、登录时间、来源地点等信息。 | w |
二、权限管理
1、管理目录和文件的属性
在 Linux 文件系统的安全模型中,系统中的文件(或目录)具有两个属性:访问权限和文件所有者,简称权限和归属。其中,访问权限包括读取、写入、可执行三种基本类型,归属包括属主(拥有该文件的用户账号)、属组(拥有该文件的组账号)。Linux 操作系统根据文件或目录的访问权限、归属来对用户访问数据的过程进行控制。
(1)查看目录和文件的属性
以上,第 3、4 字段的数据分别表示该文件(或目录)的属主、属组。
/etc/passwd 文件都属于 root 用户、root 组;
- 第1字段的数据表示该文件(或目录)的访问权限,如“&rwxr-xx-x”和“-rw-r一r一”。权限字段由四部分组成,各自的含义如下所述。
- 第 1个字符:表示该文件的类型,可以是d(目录)、b(块设备文件)、c(字符设备文件)、“_”(普通文件)、字母“1”(链接文件)等。
- 第 2~4 个字符:表示该文件的属主用户(user)对该文件的访问权限。
- 第 5~7个字符:表示该文件的属组内各成员用户(Group)对该文件的访问权限。
- 第 8~10 个字符:表示其他任何用户(other)对该文件的访问权限。
- 第 11个字符:这里的“.”与 SELinux 有关,目前不必关注。
权限 | 文件 | 目录 |
r | 查看文件内容 | 查看目录内容(显示子目录、文件列表) |
w | 修改文件内容 | 修改目录内容(在目录中新建、移动、删除文件或子目录) |
x | 执行该文件(程序或脚本) | 执行cd命令进入或退出目录 |
若用户在对要访问的文件或目录中不具备相应的权限,则操作将被拒绝。
(2)设置目录和文件的权限
需要设置文件或者目录的权限时,主要通过 chmod 命令进行。在设置针对每一类用户的访问权限时可以采用两种形式的权限表示方法:字符形式和数字形式。
r、w、x权限字符可分别表示为八进制数字 4、2、1,表示一个权限组合时需要将数字进行累加。
chmod [ugoa...] [+-=] [rwx] 文件或目录
或
- chmod nnn 文件或目录
- “nnn”为需要设置的具体权限值,如“755”“644”等;
- “ugoa”表示该权限设置所针对的用户类别。“u”代表文件属主,“”代表文件属组内的用户,“o”代表其他任何用户,“a”代表所有用户(u、g、o的总和)。
- “+-=”表示设置权限的操作动作。“+”代表增加相应权限,“-”代表减少相应权限,“=”代表仅设置对应的权限。
- “rwx”是权限的字符组合形式,也可以拆分使用,如“r”“rx”等。
(3)设置目录和文件的归属
需要设置文件或者目录的归属时,主要android通过 chowm 命令进行。可以只设置属主或属组,也可以同时设置属主、属组。使用 chow 命令的基本格式如下:
- chown 属主:属组 文件或目录...
- 同时设置属主、属组时,用户名和组名之间用“:”进行分隔。若只设置属组,则需使用“:组名”的形式。
(4)设置目录和文件的默认权限
umask 就是默认指定目前用户在新建文件或目录时的权限默认值。
直接执行“uwask”命令就是查看当前系统的默认权限。
例如:执行“umask 022”即可以设置当前用户的默认权限。
要注意的是,uwask 的分数指的是“该默认值需要减掉的权限”。因此r、w、x分别是 4、2、1,如果执行“umask 022”代表 group和 other 被拿掉了权限“2”,也就是被拿掉了“写”权限。
如果执行命令“umask 000”,代表文件的默认权限是“777”。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论