免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。 #陇羽sec#
目录
OpenSSL简介
OpenSSL是一个功能丰富的安全开源工具箱。
一、主要功能
SSL协议实现:包含SSLv2、SSLv3和TLSv1的实现,用于加密通信,保障数据传输安全,防止被恶意攻击者窃听或篡改。
软算法:涵盖大量软算法,包括对称、非对称、摘要算法等。
大数运算与密钥生成:能够进行大数运算,还可进行非对称算法密钥生成。
编解码功能:具备ASN.1编解码库、证书请求(PKCS10)编解码等功能。
二、版本相关
版本3.0的重大改变
许可证变更:从OpenSSL3.0开始,过渡到了Apache License 2.0,旧版本(1.1.1及更早版本)仍适用旧的OpenSSL和SSLeay许可证。
引入Providers概念:Providers聚集在一起提供可用的算法实现,可以编程或通过配置文件指定应用程序使用的Providers,OpenSSL 3.0标配5个不同的Providers,如FIPSProviders(默认禁用,需配置时使用enable - fips选项显式启用),并且通过Providers提供的算法实现只能通过"高级"API访问,"低级"API已废弃,未来版本可能删除,建议开发者使用高级API。
版本管理格式改变:新格式为MAJOR.MINOR.PATCH,旧版本(1.1.1及以下)用版本号后面字母表示补丁级别的方法不再使用,现在用版本号最后数字表示补丁级别,MINOR变化表示可能添加新功能且API和ABI兼容。
三、用法
对称加密:标准命令为enc,常用选项如 - salt(自动插入随机数作为文件内容加密,为默认选项)、- d(解密,解密算法需与加密算法一致,若不指定则使用默认算法)等。例如加密:
#openssl enc - e - des3 - a - salt - in fstab - out jiami
,解密:#openssl enc - d - des3 - a - salt - in fstab - out jiami
。单向加密:标准命令为dgst,使用时需指定相关选项和文件等。
生成密码:使用passwd命令,有多种选项,如 - crypt、- 1、- apr1等。
生成随机数:使用rand命令,可指定输出文件、随机数来源文件、编码格式(如 - base64、- hex)等选项。
密钥证书管理相关操作
私钥与公钥操作:先使用genrsa命令生成私钥,再用rsa命令从私钥中提取公钥,并且要注意控制私钥文件权限,可使用umask命令设置。
CA证书和申请证书:创建CA证书和申请证书时,需先查看配置文件(如/etc/pki/tls/openssl.cnf 文件),然后按照步骤进行操作,包括创建相关目录及文件、指明证书开始编号、生成私钥和自签证书(要注意私钥和证书的存放位置与配置文件匹配,生成证书时需填写信息,可指定证书有效期限,默认365天)等。在需要使用证书的主机上,也有一系列生成证书请求的步骤(如生成私钥、生成证书签署请求、发送请求给CA主机、CA颁发证书等),以及吊销证书的相关操作步骤(获取吊销证书的serial和subject信息、对比信息、执行吊销操作、生成吊销编号、更新证书吊销列表等)。
四、与证书相关的注意事项
- 不建议使用OpenSSL申请自签名证书:从OpenSSL申请的自签名证书不安全,对网站保护作用不大。建议使用专业CA机构签发的证书,CA机构作为受信任的第三方,会验证证书请求者身份,确保只有合法实体获得SSL证书,从而增强信任和安全性、保证加密通信、具有浏览器兼容性、符合行业标准等。目前有很多厂商提供免费证书,如JoySSL提供永久免费(90天免费使用且支持连续签发)的SSL证书,部署于国内的验签服务器3 - 5分钟极速签发,只需简单域名解析验证即可开启https安全协议。
示例
bash
┌──(root㉿kali)-[~/Desktop]
└─# openssl passwd -1 123
$1$MV8ACZKS$.2W.PK7cMcsBeejMQ8X/61
概述
openssl passwd -1 是一个用于生成加密密码的命令,通常用于生成符合 crypt 格式的密码哈希。-1 选项表示使用 MD5 算法进行加密。
命令解释
openssl passwd -1 123 这个命令的作用是生成一个基于 MD5 算法的加密密码,密码为 123。
示例输出
执行这个命令后,你会得到一个类似于以下的输出:
$1$randomsalt$encryptedpassword
这个输出是一个加密后的密码哈希,可以用于配置文件(如 /etc/shadow)中存储用户密码。
┌──(root㉿kali)-[~/Desktop]
└─# openssl passwd -5 123
$5$tICp8jLwD9IeyaYU$Q03Yt9zpX2PepKT2UVV7SlZYfVUZgz3IMf7ILR/GQt8
概述
openssl passwd -5 命令用于生成一个基于 SHA-256 算法的密码哈希。这个命令通常用于生成安全的密码哈希,以便在配置文件或数据库中存储。
命令解析
openssl: 这是一个用于处理 SSL/TLS 协议的工具,也可以用于生成密码哈希。
passwd: 这是 openssl 的一个子命令,用于生成密码哈希。
-5: 这个选项指定使用 SHA-256 算法来生成密码哈希。
123: 这是你要生成哈希的密码。
软连接和硬连接
在 Linux 文件系统中,软连接(符号链接)和硬连接是两种用于引用文件的方式,但它们之间有一些重要的区别。
软连接(符号链接)
定义:软连接类似于 Windows 中的快捷方式,它是一个指向另一个文件或目录的文件。
特点:
软连接有自己的 inode 号和用户数据块。
可以对不存在的文件或目录创建软连接。
软连接可以跨越文件系统。
软连接可以指向文件或目录。
删除原始文件会使软连接失效。
硬连接
定义:硬连接是多个文件名指向同一个文件数据块的入口。
特点:
硬连接数相同的 inode 号。
硬连接不支持对目录创建。
硬连接不支持跨分区。
删除原始文件不会影响硬连接的使用,因为硬连接实际上是指向文件数据块的入口。
硬连接可以通过多个文件名访问同一个文件。
创建方式
软连接:
ln -s <源文件> <目标文件>
硬连接:
ln <源文件> <目标文件>
。应用场景
软连接:适用于需要跨文件系统或对目录创建链接的场景。
硬连接:适用于需要在同一文件系统中创建多个文件名指向同一数据块的场景。
总结
硬连接是同一个文件的多个名字,而软连接是不同的文件。
硬连接不支持跨分区和对目录创建,而软连接支持。
硬连接删除原始文件不影响其他硬连接,而软连接依赖于原始文件,删除原始文件会使软连接失效。
示例
bash
┌──(root㉿kali)-[~/Desktop]
└─# ln -s original.txt symlink.txt
创建符号链接
ln -s original.txt symlink.txt 是一个在Unix/Linux系统中创建符号链接(也称为软链接)的命令。符号链接是一个特殊的文件,它指向另一个文件或目录。
命令解释
ln: 这是创建链接的命令。
-s: 这个选项表示创建的是符号链接(软链接),而不是硬链接。
original.txt: 这是你要创建链接的原始文件。
symlink.txt: 这是你创建的符号链接的名称。
┌──(root㉿kali)-[~/Desktop]
└─# ln ~/offsec123.txt hardlink.txt
ln:用于创建链接的命令。
~/offsec123.txt :源文件的路径。
hardlink.txt :目标链接的名称。
用户账号数据库
在Linux系统中,用户账号信息主要存储在两个文件中:
/etc/passwd
和/etc/shadow
。
/etc/passwd
用途:存储用户账号的基本信息,包括用户名、用户ID(UID)、组ID(GID)、家目录和登录Shell等。
格式:每一行代表一个用户,字段之间用冒号(:)分隔。具体字段如下:
- 用户名
- 密码(通常为
x
,表示密码存储在/etc/shadow
中)- 用户ID(UID)
- 组ID(GID)
- 用户信息说明栏(通常包含用户的真实姓名等信息)
- 家目录
- 登录Shell
bashroot:x:0:0:root:/root:/bin/bash
/etc/shadow
- 用途:存储用户账号的加密密码和其他与密码相关的安全信息。
- 格式:每一行代表一个用户,字段之间用冒号(:)分隔。具体字段如下:
- 用户名
- 加密密码
- 最近修改密码的日期
- 密码不可被修改的天数
- 密码需要重新修改的天数
- 密码需要修改期限前的警告天数
- 密码过期后的账号宽限时间
- 账号失效日期
- 保留字段
bashroot:$6$...:18493:0:99999:7:::
组账号
组账号信息存储在
/etc/group
文件中。
/etc/group
用途:存储组账号的信息,包括组名、组ID(GID)和组成员。
格式:每一行代表一个组,字段之间用冒号(:)分隔。具体字段如下:
组名
组密码(通常为空)
组 ID(GID)
组成员(用逗号分隔)
禁用账号
bash
在Linux系统中,有多种方法可以禁用用户账号。以下是几种常见的方法:
使用 passwd 命令锁定账号
sudo passwd -l username
这个命令会锁定指定用户的密码,使其无法登录系统。-l 选项表示锁定密码。
使用 chage 命令设置过期日期
sudo chage -E 1990-01-01 username
这个命令会将指定用户的账号设置为过期。-E 选项后面跟随的日期表示账号的过期日期。设置为 1990-01-01 这样的日期,通常意味着账号已经过期,用户将无法登录。
使用 passwd 命令查看账号状态
sudo passwd -S username
这个命令会显示指定用户账号的状态信息,包括账号是否被锁定、密码是否过期等。-S 选项表示显示状态。