三、Linux用户与权限管理详解

发布于:2025-07-30 ⋅ 阅读:(18) ⋅ 点赞:(0)

作者:IvanCodes
日期:2025年7月29日
专栏:Linux教程

思维导图

在这里插入图片描述

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

一、Linux 用户与组管理

1.1 用户管理命令

Linux是一个多用户操作系统,精确地管理用户系统安全和资源分配核心

创建用户 (useradd)
语法结构: useradd [选项] 用户名
常用选项:
-u <UID>: 指定用户ID (UID)。系统会自动分配一个,但可以手动指定。
-g <组名或GID>: 指定初始组 (Primary Group)。用户登录后所属的默认组。
-G <组名列表>: 指定附加组 (Supplementary Groups)。用户可以同时属于多个附加组。
-d <家目录>: 指定用户的家目录。如果省略,默认为 /home/用户名
-s <Shell路径>: 指定用户的登录Shell/sbin/nologin/bin/false 用于创建不能登录系统的服务账户。
-c <注释>: 为用户添加注释或描述信息 (Comment),例如全名或部门。
-m: 创建家目录 (如果不存在)。这是非常常用的选项。
-M: 不创建家目录
代码示例:

# 创建一个名为 newuser 的普通用户,自动创建家目录并使用默认设置
useradd -m newuser

# 创建一个名为 ftpuser 的系统服务用户,不创建家目录,禁止其登录
useradd -M -s /sbin/nologin ftpuser

# 创建一个名为 devuser 的用户,添加注释,指定UID、主组和附加组
groupadd developers
groupadd testers
useradd -u 1001 -g developers -G testers -c "Senior Developer" -m -s /bin/bash devuser

设置密码 (passwd)
语法结构: passwd [选项] [用户名]
常用选项:
-l: 锁定用户账户 (Lock)。
-u: 解锁用户账户 (Unlock)。
-d: 删除用户密码,使其无需密码即可登录 (不安全,慎用)。
-S: 显示账户状态 (Status)。
代码示例:

# 为用户 newuser 设置密码 (由root执行)
passwd newuser

# 锁定用户 devuser 的账户,使其无法登录
passwd -l devuser

# 查看用户 devuser 的密码状态
passwd -S devuser

# 解锁用户 devuser
passwd -u devuser

修改用户 (usermod)
语法结构: usermod [选项] 用户名
常用选项: (大部分与 useradd 相同,用于修改现有属性)
-l <新用户名>: 修改用户名 (Login name)。
-u <新UID>: 修改用户ID
-g <新主组>: 修改用户的主组
-G <新附加组列表>: 覆盖用户现有的附加组列表。
-aG <组名>: 追加一个或多个附加组,-a (append) 必须和 -G 一起使用,这是最常用的添加组的方式。
-d <新家目录>: 修改用户的家目录。配合 -m (move) 可以移动现有家目录内容。
-s <新Shell>: 修改用户的登录Shell
-c <新注释>: 修改用户的注释
代码示例:

# 将用户 devuser 的用户名修改为 senior_dev
usermod -l senior_dev devuser

# 将用户 newuser 追加到 sudoers 和 docker 两个附加组中
usermod -aG sudoers,docker newuser

# 复杂的组合修改:为用户 user10 修改UID, 注释, 家目录, Shell, 主组, 并覆盖其附加组为 group21
# 假设组 group20 和 group21 已存在
usermod -u 1020 -c "Test User 100" -d /home/wx -s /bin/bash -g group20 -G group21 user10

删除用户 (userdel)
语法结构: userdel [选项] 用户名
常用选项:
-r: 同时删除用户的家目录及其内容。这是非常常用的选项,以避免留下孤立文件。
代码示例:

# 只删除用户 newuser,保留其家目录和邮件池
userdel newuser

# 彻底删除用户 ftpuser,包括其家目录和邮件池
userdel -r ftpuser

1.2 组管理命令

用户组是管理具有相同权限用户的一种方式

创建组 (groupadd)
语法结构: groupadd [选项] 组名
常用选项:
-g <GID>: 指定组ID (GID)
代码示例:

# 创建一个名为 developers 的组
groupadd developers

修改组 (groupmod)
语法结构: groupmod [选项] 组名
常用选项:
-n <新组名>: 修改组名
-g <新GID>: 修改组ID
代码示例:

# 将 developers 组改名为 webdevs
groupmod -n webdevs developers

删除组 (groupdel)
语法结构: groupdel 组名
代码示例:

# 删除 webdevs 组
groupdel webdevs

1.3 相关配置文件与命令

  • /etc/passwd: 存储用户信息
  • /etc/shadow: 存储加密密码和策略。
  • /etc/group: 存储组信息
  • id [用户名]: 查看用户的UID, GID和所属组信息。
  • groups [用户名]: 查看用户所属的所有组。

代码示例:

# 查看用户 newuser 的详细ID信息
id newuser

# 查看当前用户所属的所有组
groups

二、文件权限管理

2.1 理解文件权限

使用 ls -l 命令可以查看文件详细信息,其中第一列就是权限描述

示例: -rwxr-xr-- 1 user group 4096 Jan 1 10:00 filename

权限字段解析 (共10个字符):

  • 第1位: 文件类型- (普通文件), d (目录), l (符号链>接)。
  • 第2-4位: 所有者 (Owner/User) 的权限。
  • 第5-7位: 所属组 (Group) 的权限。
  • 第8-10位: 其他人 (Others) 的权限。

权限类型:

  • r (Read): 读权限。对文件,可查看内容;对目录,可列出目录内容 (ls)。
  • w (Write): 写权限。对文件,可修改内容;对目录,可在目录中创建、删除、重命名文件。
  • x (Execute): 执行权限。对文件,可作为程序执行;对目录,可进入该目录 (cd)。

2.2 修改权限

chmod (Change Mode) 命令用于修改文件或目录访问权限

语法结构1: 符号模式
chmod [ugoa...][+-=][rwx...] 文件或目录...

u, g, o, a: 分别代表 用户, , 其他, 所有
+, -, =: 分别代表 添加, 移除, 设置 权限。
r, w, x: 权限类型。

代码示例:

# 为文件 my_script.sh 的所有者添加执行权限
chmod u+x my_script.sh

# 移除其他人对 my_secret.txt 的所有权限
chmod o-rwx my_secret.txt

# 为组和其他人添加对 public_dir 目录的读和执行权限
chmod go+rx public_dir

# 设置 my_file.txt 的权限为:所有者读写,所属组读,其他人无权限
chmod u=rw,g=r,o= my_file.txt

语法结构2: 数字模式
使用八进制数字表示权限。
r = 4, w = 2, x = 1

rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4

代码示例:

# 设置 my_app.py 权限为 rwxr-xr-x (所有者读写执行,组和其他人读执行)
chmod 755 my_app.py

# 设置 a_private_file.dat 权限为 rw------- (只有所有者可读写)
chmod 600 a_private_file.dat

# 设置 a_shared_dir 目录权限为 rwxrwxr-x (所有者和组可读写执行,其他人可读执行)
chmod 775 a_shared_dir

递归修改:
-R: 递归地修改目录及其下所有文件和子目录的权限。

# 递归地为 project_dir 目录及其所有内容添加组的写权限
chmod -R g+w project_dir

2.3 修改所有权

chown (Change Owner) 和 chgrp (Change Group) 用于修改文件或目录所有者和所属组

chown
语法结构: chown [选项] [用户][:组] 文件或目录...
代码示例:

# 将 file.txt 的所有者修改为 newuser
chown newuser file.txt

# 将 dir/ 的所有者修改为 newuser,所属组修改为 developers
chown newuser:developers dir/

# 递归地修改 /var/www/html 目录及其所有内容的所有权给 apache 用户和组
chown -R apache:apache /var/www/html

chgrp
语法结构: chgrp [选项] 组 文件或目录...
代码示例:

# 将 my_report.docx 的所属组修改为 editors
chgrp editors my_report.docx

# 递归地将 project/ 目录及其所有内容的所属组修改为 devteam
chgrp -R devteam project/

2.4 特殊权限

  • SUID (Set User ID): s (在所有者 x 位)。当执行一个带有SUID权限的文件时,进程会以文件所有者 (通常是root) 的身份运行,而不是执行者的身份。数字表示为 4000
  • SGID (Set Group ID): s (在所属组 x 位)。对文件,效果类似SUID (以所属组身份运行);对目录,在该目录中创建的新文件或目录会继承该目录的所属组。数字表示为 2000
  • Sticky Bit (粘滞位): t (在其他人 x 位)。应用于目录时,只有目录所有者、文件所有者或root用户才能删除或重命名该目录下的文件,即使其他人对该目录有写权限。常用于 /tmp 目录。数字表示为 1000

代码示例:

# 为 /usr/bin/passwd 添加 SUID 权限 (它本身就有)
chmod u+s /usr/bin/passwd
# 或者使用数字模式
chmod 4755 /usr/bin/passwd

# 为 /shared/project 目录添加 SGID 权限
chmod g+s /shared/project
# 或者使用数字模式
chmod 2775 /shared/project

# 为 /public/upload 目录添加粘滞位
chmod +t /public/upload
# 或者使用数字模式
chmod 1777 /public/upload

三、总结

掌握这些核心命令和概念,是每一位Linux用户和系统管理员必备技能。它们共同构成了Linux安全模型的基石,通过精确控制“谁能对什么文件做什么事”,确保了系统的安全性、稳定性和多用户环境有序协作


练习题

题目:

  1. 创建一个名为 finance 的新用户组。
  2. 创建一个名为 sara 的新用户,为其添加注释 “Finance Analyst”,并自动创建其家目录。
  3. 为用户 sara 设置一个密码。
  4. 创建一个名为 hr 的新用户组。
  5. 将用户 sara 追加hr 组,使其同时属于默认组和 hr 组。
  6. 创建一个名为 monthly_report.xlsx 的空文件。
  7. 修改 monthly_report.xlsx 的权限,使其所有者拥有读写权限,所属组拥有读权限,其他人没有任何权限。请分别使用符号模式数字模式实现。
  8. monthly_report.xlsx 的所有者更改为 sara
  9. monthly_report.xlsx 的所属组更改为 finance
  10. 创建一个名为 /apps/shared_data 的目录 (可能需要 sudo mkdir -p)。
  11. /apps/shared_data 目录的所有权同时设置为用户 sara 和组 finance
  12. /apps/shared_data 目录设置权限,使得 sarafinance 组的成员可以在其中创建和删除文件,而其他人只能进入并读取文件。
  13. /apps/shared_data 目录设置 SGID 权限,以确保在该目录中创建的任何新文件或目录都自动属于 finance 组。
  14. 锁定用户 sara 的账户,使其暂时无法登录。
  15. 彻底删除名为 sara 的用户,包括她的家目录和邮件池。

答案与解析:

  1. 创建 finance 组:
groupadd finance

解析: groupadd 是创建新用户组的标准命令。

  1. 创建用户 sara
useradd -m -c "Finance Analyst" sara

解析: -m 创建家目录,-c 添加注释。未指定主组,将自动创建一个同名的 sara 组作为其主组。

  1. sara 设置密码:
passwd sara

解析: passwd 命令后跟用户名,允许root用户为指定用户设置密码,执行后会提示输入新密码。

  1. 创建 hr 组:
groupadd hr

解析: 同第1题,创建新组。

  1. sara 追加到 hr 组:
usermod -aG hr sara

解析: usermod 用于修改用户属性。-aG 将用户追加到指定的附加组,而不会影响其已有的组关系。

  1. 创建空文件:
touch monthly_report.xlsx

解析: touch 命令可以创建空文件。

  1. 修改 monthly_report.xlsx 权限:
    • 符号模式:
    chmod u=rw,g=r,o= monthly_report.xlsx
    
    • 数字模式:
    chmod 640 monthly_report.xlsx
    

解析: 符号模式 u=rw,g=r,o= 精确设置了三类用户的权限。数字模式 640rw- (4+2=6), r-- (4), --- (0) 的八进制表示。

  1. 更改文件所有者:
chown sara monthly_report.xlsx

解析: chown 命令用于改变文件的所有者。

  1. 更改文件所属组:
chgrp finance monthly_report.xlsx

解析: chgrp 命令用于改变文件的所属组。

  1. 创建目录:
sudo mkdir -p /apps/shared_data

解析: mkdir -p 可以创建多级目录。在根目录下创建目录通常需要 sudo 权限。

  1. 同时更改所有者和所属组:
sudo chown sara:finance /apps/shared_data

解析: chown 命令使用 用户:组 的格式可以一次性修改所有者和所属组。

  1. 设置目录权限:
sudo chmod 775 /apps/shared_data

解析: 775 对应 rwxrwxr-x。这意味着所有者(sara)和所属组(finance)成员拥有读、写(可以在目录中增删文件)、执行(可以进入目录)的全部权限。其他人只有读和执行权限。

  1. 设置 SGID:
sudo chmod g+s /apps/shared_data
# 或者,结合上一步的权限
sudo chmod 2775 /apps/shared_data

解析: g+s 在现有权限基础上添加SGID位。数字模式2775中的2代表SGID,775是基本权限。设置后,该目录权限会显示为 drwxrwsr-x

  1. 锁定用户账户:
passwd -l sara

解析: passwd-l 选项用于锁定用户的密码,使其无法登录。

  1. 彻底删除用户 sara
userdel -r sara

解析: userdel-r 选项会一并删除用户的家目录 (/home/sara) 和邮件池,实现彻底清理。


网站公告

今日签到

点亮在社区的每一天
去签到