一、 pwgen介绍
1.1 pwgen简介
pwgen 主要用于生成随机密码或短语密码(passphrase),以满足不同用户对安全性与便利性的需求。它不仅支持基础的密码生成功能,还提供了一系列高级选项来增强用户体验和安全性,如集成有被泄露密码数据库检查、离线模式等特性。此外,通过环境变量配置,可以让管理员根据实际情况调整默认设置,使得该工具更加灵活多变。
1.2 主要特点
友好的用户界面:提供直观易用的界面,并允许直接复制生成的密码到剪贴板。
安全检查:利用 haveibeenpwned API 检查新生成的密码是否已被泄露,确保用户不会使用已知不安全的密码。
离线模式:对于那些运行在隔离网络中或者不需要外部API访问的情况下,可以关闭在线验证功能。
环境变量配置:允许通过设置环境变量来自定义密码/短语密码的生成规则。
多语言支持:除了英文外,还支持芬兰语单词列表来生成短语密码。
自定义字典:支持从指定URL加载自定义单词列表,增加个性化选项。
渐进式Web应用(PWA):为用户提供接近原生应用体验的服务。
丰富的密码选项:包括大写字母、数字及特殊字符,同时可选择排除外观相似的字符(homoglyphs)。
灵活的短语密码生成:允许用户定制分隔符类型、决定是否包含数字或特殊符号等。
1.3 使用场景
个人用户:需要为自己常用的网站和服务创建强密码时,尤其是当这些服务要求定期更改密码。
企业环境:IT部门可以部署pwgen作为内部工具,帮助员工生成符合公司安全策略的密码。
开发人员:在开发过程中快速生成测试账号所需的密码。
教育机构:向学生展示如何正确地管理自己的账户信息,提高他们对网络安全的认识。
安全意识培训:作为演示工具,在进行网络安全相关的讲座或研讨会时使用,教导人们关于密码安全的重要性。
二、本次实践规划
2.1 本地环境规划
本次实践为个人测试环境,操作系统版本为|Ubuntu 22.04.1。
| hostname | IP地址 | 操作系统版本 | Docker版本 | 镜像名称 | 备注 |
|---|---|---|---|---|---|
| jeven01 | 192.168.3.88 | Ubuntu 22.04.1 LTS | 27.1.1 | jocxfin/pwgen:latest | —— |
2.2 本次实践介绍
1.本次实践部署环境为个人测试环境,生产环境请谨慎; 2.在Docker环境下部署pwgen简单密码生成器。
三、本地环境检查
3.1 检查Docker服务状态
检查Docker服务是否正常运行,确保Docker正常运行。
| 123456789101112 | root@jeven01:~# systemctl status docker● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2024-11-01 00:45:50 CST; 3 weeks 0 days ago Docs: https://docs.docker.com Main PID: 10450 (dockerd) Tasks: 150 (limit: 9387) Memory: 3.4G CPU: 46min 54.584s CGroup: /system.slice/docker.service ├─10450 /usr/bin/dockerd ├─10459 containerd --config /var/run/docker/containerd/containerd.toml |
3.2 检查Docker版本
检查Docker版本
| 12 | root@jeven01:~# docker -vDocker version 27.1.1, build 6312585 |
3.3 检查docker compose 版本
检查Docker compose版本,确保2.0以上版本。
| 12 | root@jeven01:~# docker compose versionDocker Compose version v2.19.1 |
四、下载pwgen镜像
执行以下命令,拉取以下pwgen镜像。
| 1234567891011121314 | root@jeven01:~# docker pull jocxfin/pwgen:latestlatest: Pulling from jocxfin/pwgend25f557d7f31: Already existsd2c04aca259c: Pull complete17b8b3e271e5: Pull completee66f59b5a57d: Pull completec552f0e9d771: Pull completed7461950037d: Pull complete093c741c7cef: Pull completeae27391479cd: Pull complete4c78c5859469: Pull completeDigest: sha256:1dab8a2a5fc174cae4d4d181505559a98dabaa1ebb56f05ee0416500206c5556Status: Downloaded newer image for jocxfin/pwgen:latestdocker.io/jocxfin/pwgen:latest |
五、部署pwgen应用
5.1 创建部署目录
创建部署目录
| 1 | mkdir -p /data/pwgen && cd /data/pwgen |
5.2 docker-cli方式部署(可选)
可使用以下docker-cli方式,快速部署pwgen应用。
| 1 | docker run -d -p 5069:5069 -e NO_API_CHECK=true jocxfin/pwgen:latest |
5.3 编辑部署文件
本次实践使用docker compose方式部署,在部署目录下,创建docker-compose.yaml文件,其中宿主机映射端口等可以自定义配置。
| 1 | vim docker-compose.yaml |
| 123456789 | version: '3' services: pwgen: image: jocxfin/pwgen:latest container_name: pwgen restart: always ports: - 6500:5069 |
相关环境变量如下所示,可自定义设置。
| 环境变量 | 作用说明 |
|---|---|
| NO_API_CHECK=false | 是否禁用对 haveibeenpwned API 的检查。设置为 false 表示启用在线安全检查。 |
| PW_LENGTH=12 | 密码的长度。这里设置为 12 个字符。 |
| PW_INCLUDE_UPPERCASE=false | 密码是否包含大写字母。设置为 false 表示不包含。 |
| PW_INCLUDE_DIGITS=false | 密码是否包含数字。设置为 false 表示不包含。 |
| PW_INCLUDE_SPECIAL=false | 密码是否包含特殊字符。设置为 false 表示不包含。 |
| PW_EXCLUDE_HOMOGLYPHS=true | 是否排除外观相似的字符。设置为 true 表示排除。 |
| PP_WORD_COUNT=4 | 短语密码中单词的数量。这里设置为 4 个单词。 |
| PP_CAPITALIZE=false | 短语密码中的单词首字母是否大写。设置为 false 表示不大写。 |
| PP_SEPARATOR_TYPE=dash | 短语密码单词之间的分隔符类型。这里使用破折号 - 作为分隔符。 |
| PP_USER_DEFINED_SEPARATOR='' | 用户自定义的分隔符。这里为空表示没有额外的用户定义分隔符。 |
| PP_MAX_WORD_LENGTH=12 | 短语密码中单个单词的最大长度。这里设置为 12 个字符。 |
| PP_INCLUDE_NUMBERS=false | 短语密码是否包含数字。设置为 false 表示不包含。 |
| PP_INCLUDE_SPECIAL_CHARS=false | 短语密码是否包含特殊字符。设置为 false 表示不包含。 |
| PP_LANGUAGE=en | 短语密码使用的语言。这里设置为英语。 |
| PP_HIDE_LANG=false | 是否隐藏语言选择下拉菜单。设置为 false 表示显示。 |
| PP_LANGUAGE_CUSTOM='' | 自定义语言列表的 URL。这里为空表示使用默认的语言列表。 |
| MULTI_GEN=true | 是否允许多次同时生成密码/短语密码。设置为 true 表示允许。 |
| GENERATE_PP=true | 是否生成短语密码。设置为 true 表示生成。 |
| ROBOTS_ALLOW=false | 是否允许搜索引擎爬虫访问该服务。设置为 false 表示不允许。 |
| GOOGLE_SITE_VERIFICATION='' | Google 站点验证代码。这里为空表示未设置。 |
| DISABLE_URL_CHECK=false | 是否禁用 URL 安全性检查。设置为 false 表示进行检查。 |
| BASE_PATH='' | 服务的基础路径。这里为空可能意味着根路径 /。 |
5.4 创建pwgen容器
执行以下命令,创建pwgen容器。
| 1234 | root@jeven01:/data/pwgen# docker compose up -d[+] Running 2/2 ✔ Network pwgen_default Created 0.1s ✔ Container pwgen Started 0.3s |
5.5 查看pwgen容器状态
检查pwgen容器状态状态,确保pwgen容器正常启动。
| 123 | root@jeven01:/data/pwgen# docker compose psNAME IMAGE COMMAND SERVICE CREATED STATUS PORTSpwgen jocxfin/pwgen:latest "gunicorn -w 2 -t 4 …" pwgen About a minute ago Up About a minute 0.0.0.0:6500->5069/tcp, :::6500->5069/tcp |
5.6 检查pwgen容器日志
检查pwgen容器日志,确保pwgen服务正常运行。
| 1234567891011121314 | root@jeven01:/data/pwgen# docker compose logspwgen | [2024-11-27 10:20:38 +0000] [1] [INFO] Starting gunicorn 23.0.0pwgen | [2024-11-27 10:20:38 +0000] [1] [INFO] Listening at: http://0.0.0.0:5069 (1)pwgen | [2024-11-27 10:20:38 +0000] [1] [INFO] Using worker: uvicorn.workers.UvicornWorkerpwgen | [2024-11-27 10:20:38 +0000] [7] [INFO] Booting worker with pid: 7pwgen | [2024-11-27 10:20:38 +0000] [8] [INFO] Booting worker with pid: 8pwgen | [2024-11-27 10:20:39 +0000] [7] [INFO] Started server process [7]pwgen | [2024-11-27 10:20:39 +0000] [7] [INFO] Waiting for application startup.pwgen | [2024-11-27 10:20:39 +0000] [7] [INFO] ASGI 'lifespan' protocol appears unsupported.pwgen | [2024-11-27 10:20:39 +0000] [7] [INFO] Application startup complete.pwgen | [2024-11-27 10:20:39 +0000] [8] [INFO] Started server process [8]pwgen | [2024-11-27 10:20:39 +0000] [8] [INFO] Waiting for application startup.pwgen | [2024-11-27 10:20:39 +0000] [8] [INFO] ASGI 'lifespan' protocol appears unsupported.pwgen | [2024-11-27 10:20:39 +0000] [8] [INFO] Application startup complete. |
六、访问pwgen服务
6.1 访问pwgen首页
访问地址:http://192.168.3.88:6500,将IP替换为自己服务器IP地址。如果无法访问到以下页面,则检查宿主机的防火墙是否关闭或者放行相关端口,云服务器则还需要设置安全组规则。
6.2 生成默认密码
生成的短语密码遵循了以下规则:每个单词首字母大写、包含数字、包含特殊字符,使用破折号 - 作为分隔符,最大单词长度为7个字符,并且由4个单词组成。基于这些设定,生成的具体短语密码示例为 Obeyed7#-Wins2;-Hamauls7:-Aptest5:。这个密码结合了易于记忆的单词与额外的安全元素(如数字和特殊字符),以增强其安全性。此外,该工具还提供了复制功能,方便用户直接将生成的密码粘贴到需要的地方。所有生成的密码和短语密码都会被交叉引用检查,确保它们未曾在已知的数据泄露事件中出现过,从而进一步保障用户账户的安全性。
生成安全密码和短语密码的要求
| 参数 | 描述 |
|---|---|
| 包含大写字母 | 密码中包含大写字母。 |
| 包含数字 | 密码中包含数字。 |
| 包含特殊字符 | 密码中包含特殊字符。 |
| 排除外观相似的字符 | 密码中不包含外观相似的字符(例如:0 和 O, 1 和 l)。 |
| 长度 | 密码长度为 12 个字符。 |
| 生成短语密码 | 同时生成一个短语密码。 |




发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。