思维导图




一、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安全模型的基石,通过精确控制“谁能对什么文件做什么事”,确保了系统的安全性、稳定性和多用户环境的有序协作。
练习题
题目:
- 创建一个名为
finance的新用户组。 - 创建一个名为
sara的新用户,为其添加注释 "Finance Analyst",并自动创建其家目录。 - 为用户
sara设置一个密码。 - 创建一个名为
hr的新用户组。 - 将用户
sara追加到hr组,使其同时属于默认组和hr组。 - 创建一个名为
monthly_report.xlsx的空文件。 - 修改
monthly_report.xlsx的权限,使其所有者拥有读写权限,所属组拥有读权限,其他人没有任何权限。请分别使用符号模式和数字模式实现。 - 将
monthly_report.xlsx的所有者更改为sara。 - 将
monthly_report.xlsx的所属组更改为finance。 - 创建一个名为
/apps/shared_data的目录 (可能需要sudo mkdir -p)。 - 将
/apps/shared_data目录的所有权同时设置为用户sara和组finance。 - 为
/apps/shared_data目录设置权限,使得sara和finance组的成员可以在其中创建和删除文件,而其他人只能进入并读取文件。 - 为
/apps/shared_data目录设置SGID权限,以确保在该目录中创建的任何新文件或目录都自动属于finance组。 - 锁定用户
sara的账户,使其暂时无法登录。 - 彻底删除名为
sara的用户,包括她的家目录和邮件池。
创建
finance组:groupadd finance解析:
groupadd是创建新用户组的标准命令。创建用户
sara:useradd -m -c "Finance Analyst" sara解析:
-m创建家目录,-c添加注释。未指定主组,将自动创建一个同名的sara组作为其主组。为
sara设置密码:passwd sara解析:
passwd命令后跟用户名,允许root用户为指定用户设置密码,执行后会提示输入新密码。创建
hr组:groupadd hr解析: 同第1题,创建新组。
将
sara追加到hr组:usermod -aG hr sara解析:
usermod用于修改用户属性。-aG将用户追加到指定的附加组,而不会影响其已有的组关系。创建空文件:
touch monthly_report.xlsx解析:
touch命令可以创建空文件。修改
monthly_report.xlsx权限:- 符号模式:
chmod u=rw,g=r,o= monthly_report.xlsx - 数字模式:
解析: 符号模式chmod 640 monthly_report.xlsxu=rw,g=r,o=精确设置了三类用户的权限。数字模式640是rw-(4+2=6),r--(4),---(0) 的八进制表示。
- 符号模式:
更改文件所有者:
chown sara monthly_report.xlsx解析:
chown命令用于改变文件的所有者。更改文件所属组:
chgrp finance monthly_report.xlsx解析:
chgrp命令用于改变文件的所属组。创建目录:
sudo mkdir -p /apps/shared_data解析:
mkdir -p可以创建多级目录。在根目录下创建目录通常需要sudo权限。同时更改所有者和所属组:
sudo chown sara:finance /apps/shared_data解析:
chown命令使用用户:组的格式可以一次性修改所有者和所属组。设置目录权限:
sudo chmod 775 /apps/shared_data解析:
775对应rwxrwxr-x。这意味着所有者(sara)和所属组(finance)成员拥有读、写(可以在目录中增删文件)、执行(可以进入目录)的全部权限。其他人只有读和执行权限。设置 SGID:
sudo chmod g+s /apps/shared_data # 或者,结合上一步的权限 sudo chmod 2775 /apps/shared_data解析:
g+s在现有权限基础上添加SGID位。数字模式2775中的2代表SGID,775是基本权限。设置后,该目录权限会显示为drwxrwsr-x。锁定用户账户:
passwd -l sara解析:
passwd的-l选项用于锁定用户的密码,使其无法登录。彻底删除用户
sara:userdel -r sara解析:
userdel的-r选项会一并删除用户的家目录 (/home/sara) 和邮件池,实现彻底清理。