Chemmy's Blog

chengming0916@outlook.com

一、引言

在互联网时代,信息安全事件频发,其中撞库扫号事件尤为常见。这些事件的根本原因在于企业信息泄露,且泄露数据未加密或加密方式较弱,导致黑客能够还原出原始用户密码。

据统计,已曝光的信息泄露事件超过百起,涉及多家一线互联网公司,泄露数据总量超过10亿条。完全防止信息泄露极为困难,但通过采用合适的密码加密算法,即使数据泄露,黑客也难以还原原始密码。本文将系统介绍常见的用户密码加密方式及其破解方法。

二、用户密码加密方式

2.1 明文保存

方式描述:直接将用户设置的原始密码存储在数据库中。

示例:用户密码”123456”,数据库中直接存储”123456”。

安全性分析

  • 安全性最低
  • 一旦数据库泄露,所有密码立即暴露
  • 实际中仍有部分公司采用此方式

2.2 对称加密

常用算法:3DES、AES等

工作原理

1
2
明文密码 → 对称加密算法 → 密文
密文 → 对称解密算法 → 明文密码

安全性分析

  • 可通过密钥解密还原原始密码
  • 密钥管理复杂,容易泄露
  • 密钥与数据分离存储可提高安全性,但管理成本高

2.3 单向HASH算法

常用算法:MD5、SHA1、SHA256等

工作原理

1
明文密码 → HASH函数 → 固定长度HASH值

特点

  • 不可逆,无法从HASH值还原原始密码
  • 实现简单,曾被广泛使用
  • 易受彩虹表攻击

2.4 增强型HASH算法

改进方式

  1. 加盐(Salt):在密码前后添加随机字符串
  2. 多次HASH:对密码进行多次HASH运算

示例

1
2
3
4
5
# 加盐HASH
hash = md5(salt + password + salt)

# 多次HASH
hash = md5(md5(md5(password)))

安全性分析

  • 固定盐值:盐值泄露后仍可建立彩虹表
  • 多次HASH:增加破解时间,但本质未变

2.5 PBKDF2算法

算法原理

  • 基于HASH算法增加随机盐
  • 进行多次HASH迭代

推荐参数

  • HASH算法:SHA1或SHA256
  • 盐长度:≥8字节
  • 迭代次数:≥1000次

安全性分析

  • 随机盐大幅增加彩虹表建表难度
  • 多次迭代显著增加计算成本
  • 美国国家标准与技术研究院推荐算法

2.6 bcrypt/scrypt算法

bcrypt特点

  • 基于Blowfish加密算法
  • 内置盐值
  • 可调节计算成本

scrypt特点

  • 设计用于抵抗硬件攻击
  • 需要大量内存
  • 计算成本可调

安全性分析

  • 有效抵御彩虹表攻击
  • 参数可调,适应不同安全需求

三、算法对比

加密方式 安全性 性能 实现复杂度 抗彩虹表 推荐程度
明文保存 极低 极高 极低 不推荐
对称加密 中等 中等 不推荐
单向HASH 不推荐
增强HASH 中等 中等 一般
PBKDF2 推荐
bcrypt 推荐
scrypt 推荐

四、密码破解方法

4.1 对称加密破解

前提条件:获取加密密钥

破解方式

  1. 获取加密密钥
  2. 使用密钥解密数据
  3. 还原原始密码

防护措施

  • 加强密钥管理
  • 密钥与数据分离存储
  • 定期更换密钥

4.2 HASH算法破解

4.2.1 彩虹表原理

彩虹表是一种预先计算的HASH值表,用于快速查找HASH对应的原始密码。

建表示例(6位数字密码)

原始密码 MD5值
000000 670B1E
000001 1A99CD
999999 819287

问题:密码复杂度增加时,表规模急剧增大。

4.2.2 预计算哈希链

建表过程

1
原始密码 → HASH → R运算 → HASH → R运算 → ... → 链尾

特点

  • 大幅减少存储空间
  • 增加查表计算量
  • 存在数据重复问题

4.2.3 彩虹表优化

改进:每条链使用不同的R算法

优势

  • 减少链间重复
  • 提高查表效率
  • 命名来源:不同R算法如彩虹分层

4.3 不同算法的破解难度

算法 密钥/盐长度 彩虹表攻击 暴力破解 实际可行性
DES 56位 可行 中等 可行
AES-128 128位 不可行 极难 不可行
MD5 - 容易 中等 可行
SHA256 - 中等 困难 部分可行
PBKDF2 ≥8字节盐 极难 极难 不可行

五、实际案例分析

5.1 信息泄露事件影响

典型场景

  1. 企业数据库泄露
  2. 黑客获取加密密码
  3. 使用彩虹表破解
  4. 撞库攻击其他网站

防护策略

  • 使用强加密算法(PBKDF2/bcrypt/scrypt)
  • 定期强制密码修改
  • 实施多因素认证

5.2 密码策略建议

企业级建议

  1. 加密算法:采用PBKDF2、bcrypt或scrypt
  2. 参数设置
    • 盐值长度≥16字节
    • 迭代次数≥10000次
    • 定期更新加密参数
  3. 密码策略
    • 最小长度12字符
    • 包含大小写字母、数字、特殊字符
    • 禁止使用常见密码
    • 定期更换密码

用户建议

  1. 使用密码管理器
  2. 不同网站使用不同密码
  3. 启用双因素认证
  4. 定期检查密码是否泄露

六、技术实现示例

6.1 PBKDF2实现(Python)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import hashlib
import os
import binascii

def hash_password(password):
"""使用PBKDF2_HMAC_SHA256加密密码"""
salt = os.urandom(16) # 16字节随机盐
iterations = 100000 # 10万次迭代

# 生成密钥
key = hashlib.pbkdf2_hmac(
'sha256',
password.encode('utf-8'),
salt,
iterations,
dklen=32
)

# 存储格式:迭代次数:盐:密钥
return f"{iterations}:{binascii.hexlify(salt).decode()}:{binascii.hexlify(key).decode()}"

def verify_password(stored_password, provided_password):
"""验证密码"""
iterations, salt, key = stored_password.split(':')
salt = binascii.unhexlify(salt)
key = binascii.unhexlify(key)

new_key = hashlib.pbkdf2_hmac(
'sha256',
provided_password.encode('utf-8'),
salt,
int(iterations),
dklen=32
)

return new_key == key

6.2 bcrypt实现(Python)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import bcrypt

def hash_password_bcrypt(password):
"""使用bcrypt加密密码"""
# 生成盐并哈希密码
salt = bcrypt.gensalt(rounds=12) # 12轮,约0.3秒
hashed = bcrypt.hashpw(password.encode('utf-8'), salt)
return hashed.decode()

def verify_password_bcrypt(hashed_password, provided_password):
"""验证bcrypt密码"""
return bcrypt.checkpw(
provided_password.encode('utf-8'),
hashed_password.encode('utf-8')
)

七、总结与建议

7.1 核心要点

  1. 避免使用:明文存储、弱HASH算法(MD5/SHA1)
  2. 推荐使用:PBKDF2、bcrypt、scrypt等现代算法
  3. 关键参数:足够长的随机盐、足够的迭代次数
  4. 防护重点:抵御彩虹表攻击,增加破解成本

7.2 企业实践

  1. 新系统:直接采用bcrypt或scrypt
  2. 旧系统迁移:逐步升级到PBKDF2
  3. 监控预警:建立密码泄露监控机制
  4. 用户教育:提高用户密码安全意识

7.3 未来趋势

  1. 无密码认证:生物识别、硬件密钥
  2. 量子安全:抗量子计算加密算法
  3. 自适应安全:根据威胁动态调整安全策略

通过采用合适的密码加密算法,即使发生数据泄露,也能有效保护用户密码安全,从根本上减少撞库扫号事件的发生。

一、核心概念

7-Zip是一款开源的文件压缩工具,提供强大的命令行功能。7z.exe是7-Zip的命令行版本,依赖其他模块;7za.exe是独立版本,仅支持7z、zip、gzip、bzip2和tar格式,不调用其他模块。

二、基本语法

2.1 命令格式

1
7z [命令] [[选项]...] [基本档案名称] [[参数变量]...]

参数说明:

  • 命令:执行的操作(如a添加、x解压等)
  • 选项:控制命令行为的参数
  • 基本档案名称:压缩档案的文件名
  • 参数变量:要处理的文件或通配符

2.2 常用示例

1
2
3
4
5
# 压缩文件,设置密码为111
7z a -tzip -p111 archive.7z txt.txt

# 解压文件,使用密码111
7z x -tzip -p111 archive.7z

三、核心命令详解

3.1 添加文件 (a)

添加文件到压缩档案。

1
2
3
4
5
6
7
8
# 基本用法
7z a archive.zip file1.txt file2.txt

# 添加目录下所有文件
7z a -tzip archive.zip subdir\*

# 递归添加Program files目录
7z a -tzip Files.zip "Program files\*" -r

相关选项: -i, -m, -p, -r, -t, -u, -w, -x

3.2 解压文件 (e/x)

从压缩档案中释放文件。

1
2
3
4
5
6
7
8
9
# 释放到当前目录(不保留路径)
7z e archive.zip

# 释放到指定目录
7z e archive.zip -oc:\soft *.cpp

# 完整路径释放
7z x archive.zip
7z x archive.zip -oc:\soft *.cpp

区别:

  • e命令:将所有文件释放到同一目录
  • x命令:保持原始目录结构

相关选项: -ao, -i, -o, -p, -r, -x, -y

3.3 列表查看 (l)

列出压缩档案内容。

1
7z l archive.zip

相关选项: -i, -r, -x

3.4 测试完整性 (t)

测试压缩档案文件的完整性。

1
7z t archive.zip *.doc

相关选项: -i, -r, -p, -x

3.5 删除文件 (d)

从压缩档案删除文件。

1
7z d archive.zip *.bak

相关选项: -i, -m, -p, -r, -u, -w, -x

3.6 更新文件 (u)

在压缩档案中更新较新的文件。

1
7z u archive.zip *.doc

相关选项: -i, -m, -p, -r, -t, -u, -w, -x

四、重要选项详解

4.1 密码设置 (-p)

设置压缩档案密码。

1
2
3
4
5
# 设置密码
7z a archive.zip -pMyPassword file.txt

# 解压带密码的文件
7z x archive.zip -pMyPassword

4.2 递归操作 (-r)

控制目录递归处理。

1
2
3
4
5
6
7
8
# 开启递归(默认)
7z a archive.zip -r *.txt

# 关闭递归
7z a archive.zip -r- *.txt

# 仅对通配符递归
7z a archive.zip -r0 *.txt

4.3 压缩类型 (-t)

指定压缩档案格式。

1
2
3
4
5
6
7
8
# 创建ZIP格式
7z a -tzip archive.zip *.txt

# 创建7Z格式(默认)
7z a -t7z archive.7z *.txt

# 创建GZIP格式
7z a -tgzip archive.gz *.txt

4.4 输出目录 (-o)

设置解压输出目录。

1
7z x archive.zip -oc:\output

4.5 覆盖模式 (-ao)

控制文件覆盖行为。

1
2
3
4
5
6
7
8
9
10
11
# 直接覆盖(无提示)
7z x archive.zip -aoa

# 跳过现有文件
7z x archive.zip -aos

# 自动重命名新文件
7z x archive.zip -aou

# 自动重命名旧文件
7z x archive.zip -aot

4.6 包含/排除文件 (-i/-x)

1
2
3
4
5
6
7
8
# 包含特定文件
7z a archive.zip -i!*.txt -i!*.doc

# 排除特定文件
7z a archive.zip -x!temp.* -x!*.bak

# 使用文件列表
7z a archive.zip @filelist.txt

五、高级功能

5.1 自解压档案 (-sfx)

创建自解压可执行文件。

1
2
3
4
5
6
7
8
# 创建Windows自解压文件
7z a -sfx7zC.sfx archive.exe *.txt

# 创建命令行自解压文件
7z a -sfx7zCon.sfx archive.exe *.txt

# 创建安装程序
copy /b 7zS.sfx + config.txt + archive.7z installer.exe

自解压模块:

  • 7zC.sfx:Windows图形界面版本
  • 7zCon.sfx:命令行版本
  • 7zS.sfx:Windows安装版本
  • 7zSD.sfx:Windows安装版本(需MSVCRT.dll)

5.2 分卷压缩 (-v)

创建分卷压缩档案。

1
2
3
4
5
# 创建10MB分卷
7z a archive.7z *.iso -v10m

# 创建不同大小的分卷
7z a archive.7z *.txt -v10k -v15k -v2m

5.3 压缩算法设置 (-m)

自定义压缩参数。

1
2
3
4
5
6
7
8
9
10
11
# 设置压缩等级(0-9)
7z a archive.7z *.txt -mx=9

# 使用PPMd算法(适合文本)
7z a archive.7z *.txt -m0=PPMd

# 使用LZMA算法(默认)
7z a archive.7z *.exe -m0=BCJ -m1=LZMA:d=21

# 不压缩(仅存储)
7z a archive.zip *.jpg -m0=Copy

5.4 标准输入输出 (-si/-so)

1
2
3
4
5
# 从标准输入压缩
7z a archive.gz -tgzip -si < input.txt

# 解压到标准输出
7z x archive.gz -so > output.txt

六、实用技巧

6.1 通配符使用

1
2
3
4
5
6
7
8
9
10
11
# 所有.txt文件
7z a archive.zip *.txt

# 第二个字母为a的文件
7z a archive.zip ?a*

# 包含数字1的文件
7z a archive.zip *1*

# 双扩展名文件
7z a archive.zip *.*.*

6.2 文件列表管理

创建filelist.txt

1
2
"My programs\*.cpp"
Src\*.cpp

使用文件列表:

1
7z a -tzip archive.zip @filelist.txt

6.3 批量操作

1
2
3
4
5
# 批量压缩当前目录所有文件夹
for /d %i in (*) do 7z a "%~ni.7z" "%i\"

# 批量解压所有ZIP文件
for %i in (*.zip) do 7z x "%i"

七、常见问题解决

7.1 中文路径问题

1
2
3
4
5
# 使用引号包裹含空格的路径
7z a "archive.zip" "My Documents\*.doc"

# 或使用短路径
7z a archive.zip MyDocu~1\*.doc

7.2 权限问题

1
2
# 以管理员身份运行
runas /user:Administrator "7z a archive.zip C:\Windows\*.log"

7.3 大文件处理

1
2
3
4
5
# 使用64位版本处理大文件
7z-x64 a archive.7z largefile.iso

# 分卷压缩大文件
7z a archive.7z largefile.iso -v1g

八、性能优化

8.1 多线程压缩

1
2
# 启用多线程(仅LZMA算法)
7z a archive.7z *.iso -mmt=on

8.2 内存优化

1
2
3
# 调整字典大小
7z a archive.7z *.txt -m0=LZMA:d=24 # 16MB字典
7z a archive.7z *.txt -m0=LZMA:d=26 # 64MB字典

8.3 压缩比优化

1
2
3
4
5
# 极限压缩
7z a archive.7z *.txt -mx=9 -m0=LZMA:d=32

# 固实压缩(提高压缩比)
7z a archive.7z *.txt -ms=on

九、实际应用示例

9.1 备份目录

1
2
# 备份Documents目录,排除临时文件
7z a "Backup-%DATE%.7z" "C:\Users\%USERNAME%\Documents\*" -x!*.tmp -x!*.temp -mx=5

9.2 日志文件归档

1
2
# 压缩30天前的日志文件
forfiles /p "C:\Logs" /m *.log /d -30 /c "cmd /c 7z a Logs-Archive.7z @path"

9.3 网站文件打包

1
2
# 打包网站文件,排除缓存和临时文件
7z a website-backup.7z "C:\Websites\*" -r -x!*.cache -x!*.tmp -x!Thumbs.db -mx=7

十、总结

7-Zip命令行工具功能强大且灵活,掌握其使用方法可以大大提高文件处理效率。关键要点:

  1. 基本命令:a(添加)、x(解压)、l(列表)、t(测试)
  2. 重要选项:-p(密码)、-r(递归)、-t(格式)、-o(输出)
  3. 高级功能:-sfx(自解压)、-v(分卷)、-m(算法)
  4. 性能优化:合理使用多线程和内存设置

通过组合不同的命令和选项,可以满足各种复杂的文件压缩和解压需求。


相关资源:

一、设计核心原则

  1. Git 拆分友好:前后端、公共库物理隔离,可直接拆分为 3 个独立 Git 仓库
  2. 职责单一清晰:前后端彻底解耦,不交叉耦合业务/持久化代码
  3. 分层标准规范:遵循 DDD 领域驱动设计,兼容现有业务模块
  4. 可维护可扩展:支持多客户端、多服务端、插件化开发

二、根目录结构(总仓库)

1
2
3
4
5
项目根目录/
├── .gitignore、README.md、.editorconfig # 全局配置文件
├── Client/ # 【独立仓库】客户端(纯UI+接口调用)
├── Server/ # 【独立仓库】服务端(纯业务+数据持久化)
└── Shared/ # 【独立仓库】公共库(前后端共享代码)

三、客户端模块(Client)- 纯前端展示层

1
2
3
4
5
6
7
8
9
10
11
12
Client/
├── src/
│ ├── Presentation/ # 表现层(UI核心)
│ │ ├── Controls/ # 控件、样式库
│ │ ├── Modules/ # 业务模块(页面、本地逻辑)
│ │ └── Addons/ # 客户端插件/扩展
│ ├── Services/ # 服务封装层
│ │ ├── Api/ # 远程接口调用
│ │ └── Local/ # 本地服务(缓存、文件)
│ ├── Utils/ # 客户端专属工具
│ └── Assets/ # 静态资源
└── tests/ # 客户端测试

四、服务端模块(Server)- 纯业务数据层

1
2
3
4
5
6
7
8
Server/
├── src/
│ ├── Api/ # 接口层(对外提供服务)
│ ├── Application/ # 应用层(业务编排)
│ ├── Domain/ # 领域层(核心实体、业务规则)
│ ├── Persistence/ # 数据持久层(数据库、仓储)
│ └── Infrastructure/# 基础层(日志、缓存、通用组件)
└── tests/ # 服务端测试

五、公共库模块(Shared)- 前后端通用层

1
2
3
4
5
Shared/
├── src/
│ ├── Shared.Core/ # 核心共享(DTO、枚举、常量、接口)
│ └── Shared.Utils/ # 通用工具(加密、序列化、验证)
└── tests/ # 公共库测试

六、单体应用结构

针对无需拆分前后端独立仓库的单体式应用场景,设计如下标准化目录结构,兼顾分层规范与开发便捷性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
单体应用根目录/
├── Solution Item/ # 解决方案级配置项
│ ├── .gitignore # Git忽略规则
│ ├── README.md # 项目说明文档
│ ├── .editorconfig # 编辑器格式统一配置
│ └── Solution.sln # 解决方案文件(如.NET)
├── Presentation Layer/ # 展示层(UI交互核心)
│ ├── 1.1 Controls/ # 控件、样式库
│ │ ├── Common/ # 通用基础控件(按钮、表格、弹窗等)
│ │ ├── Business/ # 业务专属控件(定制化表单、图表等)
│ │ └── Styles/ # 样式文件(主题、布局、全局样式)
│ ├── 1.2 Modules/ # 业务模块(按功能域划分)
│ │ ├── User/ # 用户模块(登录、注册、个人中心)
│ │ ├── Order/ # 订单模块(下单、支付、物流)
│ │ └── Product/ # 商品模块(列表、详情、库存)
│ └── 1.3 Addons/ # 插件扩展(非核心功能)
│ ├── Print/ # 打印插件
│ ├── Export/ # 导出插件
│ └── Notification/ # 消息通知插件
├── 2. Service Layer/ # 服务层(业务逻辑编排)
│ ├── UserService/ # 用户相关服务
│ ├── OrderService/ # 订单相关服务
│ ├── ProductService/# 商品相关服务
│ └── ServiceBase/ # 服务基类(通用方法、异常处理)
├── 3. Persistence Layer/ # 数据层(数据存取)
│ ├── Repositories/ # 仓储实现
│ │ ├── UserRepository.cs
│ │ ├── OrderRepository.cs
│ │ └── ProductRepository.cs
│ ├── DataContext/ # 数据上下文(数据库连接、ORM配置)
│ ├── Migrations/ # 数据迁移脚本(如EF Core迁移)
│ └── SqlScripts/ # 原生SQL脚本(复杂查询、批量操作)
├── 4. Domain Layer/ # 领域层(核心业务规则)
│ ├── Entities/ # 领域实体(User、Order、Product)
│ ├── ValueObjects/ # 值对象(Address、Money、DateTimeRange)
│ ├── Aggregates/ # 聚合根(OrderAggregate、UserAggregate)
│ ├── DomainEvents/ # 领域事件(OrderCreatedEvent、UserUpdatedEvent)
│ └── DomainServices/# 领域服务(跨实体业务规则)
├── 5. Infrastructure Layer/ # 基础设施层(通用能力支撑)
│ ├── Logging/ # 日志组件(日志记录、存储、查询)
│ ├── Caching/ # 缓存组件(Redis、MemoryCache)
│ ├── Authentication/# 认证授权(Token、权限验证)
│ ├── HttpClient/ # 第三方接口调用
│ └── Configuration/ # 配置管理(配置读取、动态更新)
├── 6. Tools/ # 工具层(通用工具类)
│ ├── Encryption/ # 加密解密(MD5、RSA、AES)
│ ├── Serialization/ # 序列化(JSON、XML、Protobuf)
│ ├── Validation/ # 数据验证(参数校验、规则验证)
│ └── Extensions/ # 扩展方法(字符串、集合、日期扩展)
├── 7. Examples/ # 示例代码(参考用例)
│ ├── ApiExamples/ # 接口调用示例
│ ├── BusinessExamples/ # 业务场景示例
│ ├── IntegrationExamples/ # 第三方集成示例
│ └── UnitTestExamples/ # 单元测试示例
└── Tests/ # 测试目录
├── UnitTests/ # 单元测试
├── IntegrationTests/ # 集成测试
└── UiTests/ # UI测试

单体应用分层职责说明

  1. Solution Item:统一存放解决方案级的配置文件,确保项目根目录整洁,配置文件全局复用;

  2. Presentation Layer:仅负责UI展示、用户交互,不包含业务逻辑,通过调用服务层完成功能,其中:

    1. Controls:封装可复用的UI控件和样式,降低页面开发重复度;

    2. Modules:按业务功能域划分页面模块,边界清晰;

    3. Addons:封装非核心的扩展功能,支持插件化启停;

  3. Service Layer:承接展示层的调用请求,编排领域层能力完成业务逻辑,是展示层与领域层的中间层,解耦UI与核心业务;

  4. Persistence Layer:仅负责数据的持久化和读取,不包含业务规则,通过仓储模式封装数据操作,适配不同数据源;

  5. Domain Layer:核心业务规则层,包含实体、值对象、聚合根等领域模型,是整个应用的业务核心,不依赖其他层;

  6. Infrastructure Layer:为各层提供通用技术能力,如日志、缓存、认证等,封装第三方组件,降低耦合;

  7. Tools:提供全项目通用的工具类,无业务耦合,可独立复用;

  8. Examples:提供各类场景的示例代码,降低新开发者的上手成本,包含接口调用、业务场景、测试等示例。

七、分层职责说明(通用)

  1. 客户端:只负责 UI 展示、本地交互、远程接口调用,无业务/数据库代码

  2. 服务端:只负责业务逻辑、数据存储、接口提供,无 UI 代码

  3. 公共库:只提供前后端通用代码,无业务耦合,可独立打包复用

  4. 单体应用:各分层职责与上述一致,通过一体化结构整合前后端能力,适配小型项目、快速开发场景,同时保留DDD分层思想,便于后续拆分为分布式架构。

总结

  • 结构极简:拆分模式下3大核心模块,单体模式下8大分层,均做到边界清晰、一目了然;

  • 拆分便捷:分布式结构可直接独立为Git仓库,单体结构可按需拆分为分布式架构,零成本解耦;

  • 分工明确:前后端/各分层各司其职,后期维护、扩展更高效;

  • 场景适配:同时覆盖分布式拆分、单体一体化两种场景,兼顾大型项目解耦需求和小型项目快速开发需求。

在日常使用Ubuntu系统时,受网络环境(如办公内网、跨境网络)限制,配置代理是高频刚需操作。本文将详细拆解命令行(适合终端用户、服务器场景)和图形界面(适合新手、桌面端)两种代理设置方式,同时同步讲解对应的取消方法,步骤清晰、可直接落地,帮助不同需求的用户快速适配各类网络场景。

一、命令行设置代理(高效便捷,适合终端用户/服务器)

1. 临时设置代理

临时代理仅对当前终端会话生效,关闭终端后自动失效,适合临时测试、短期使用场景,无需修改系统配置。

  • 基础代理设置(无账号密码):

将命令中的proxy.example.com:8080替换为您实际的代理地址和端口(如公司内网代理、第三方代理),执行后立即生效:

1
2
export http_proxy=http://proxy.example.com:8080
export https_proxy=http://proxy.example.com:8080
  • 带用户名密码的代理设置:

若代理需要身份验证(如办公内网代理),按如下格式配置,替换其中的用户名、密码、代理地址和端口即可:

1
2
export http_proxy=http://username:password@proxy.example.com:8080
export https_proxy=http://username:password@proxy.example.com:8080

2. 配置APT更新代理(可选,必看!)

Ubuntu的APT包管理器(用于更新软件、安装依赖)需单独配置代理,否则即使设置了系统代理,APT仍无法正常联网。编辑/etc/apt/apt.conf文件(需管理员权限),添加以下内容,替换为实际代理信息:

1
2
Acquire::http::proxy "http://proxy.example.com:8080/";
Acquire::https::proxy "http://proxy.example.com:8080/";

3. 永久生效代理设置

若需要每次登录系统、打开终端都自动加载代理配置(适合长期使用代理的场景),可将上述export命令写入用户环境变量文件~/.bashrc,无需每次手动输入:

1
2
3
echo 'export http_proxy=http://proxy.example.com:8080' >> ~/.bashrc
echo 'export https_proxy=http://proxy.example.com:8080' >> ~/.bashrc
source ~/.bashrc # 立即生效配置,无需重启终端

二、图形界面设置代理(可视化操作,适合新手/桌面端)

对于不熟悉命令行的用户,图形界面操作更直观,无需输入命令,点击鼠标即可完成配置,适合Ubuntu桌面版用户:

  1. 打开系统设置(点击桌面右上角齿轮图标),找到“网络”选项,点击进入“网络代理”配置页面;

  2. 在“方法”下拉菜单中选择“手动”,分别填写HTTP、HTTPS代理的地址和端口,若代理需要身份验证,点击“细节”补充用户名和密码;

  3. 点击“应用于整个系统”,等待配置生效(部分场景需重启浏览器或应用)。

三、取消代理设置

切换网络环境(如从办公内网切换到家庭网络)时,需及时取消代理,否则可能导致网络无法正常连接,以下是对应取消方法:

1. 命令行临时取消

仅清空当前终端的代理环境变量,关闭终端后无需重复操作,适合临时取消场景:

1
2
unset http_proxy
unset https_proxy

2. 清理APT代理配置(可选,必看!)

若此前配置过APT代理,取消时需同步清理,否则APT无法正常更新软件。编辑/etc/apt/apt.conf文件,删除其中所有关于代理配置的行,保存后APT即恢复无代理状态。

3. 永久取消代理

若此前将代理配置写入了~/.bashrc文件,需删除相关配置才能彻底取消永久代理:编辑~/.bashrc文件,找到添加的代理export命令并删除,保存后执行source ~/.bashrc使修改生效。

4. 生效确认

完成上述操作后,关闭当前终端并重新打开,或执行echo $http_proxy命令(无输出即表示代理已取消);同时可尝试打开浏览器、更新APT,确认网络正常连接,确保所有代理配置完全失效。

总结

Ubuntu系统代理配置可根据自身需求灵活选择方式:命令行适合服务器、批量操作或追求高效的用户,配置快速且不占用图形资源;图形界面适合桌面端新手,操作直观、无需记命令。核心注意点:一是区分“临时生效”与“永久生效”,避免误配置;二是取消代理时,务必同步清理APT配置和~/.bashrc中的相关内容,防止残留配置导致网络异常,确保系统适配不同网络场景。

0%