阅读视图

发现新文章,点击刷新页面。

什么是 OWASP 安全项目

作者 Teacher Du

开放 Web 应用程序安全项目是致力于 Web 应用程序安全的国际非营利组织。OWASP 核心原则之一是,他们的所有资料都免费提供并可以在其网站上轻松访问,这使得任何人都能够改善自己的 Web 应用程序安全性。

注入

当不被信任的数据通过表单输入或其它一些提交到 Web 应用程序数据发送到代码解释器时,就会发生注入攻击。

如攻击者可能向本应填写纯文本用户名的表单输入 SQL 数据库代码。

如果该表单输入未得到正确保护,则将导致执行该 SQL 代码。这称为 SQL 注入攻击。

可通过验证或清除用户提交的数据来防止注入攻击。

验证表示拒绝看似可疑数据,而清理指清除数据中可疑的部分。

此外,数据库管理员可以设置控件以最大程度地减少注入攻击可能接触的信息量。

身份验证失效

攻击者可通过身份验证系统中的漏洞访问用户帐户,甚至可以使用管理员帐户来破坏整个系统。

例如,攻击者可以获取一个包含在数据泄露中获得的数千个已知用户名与密码组合的列表。

并使用脚本尝试在登录系统尝试所有这些组合,以查看是否有任何有效组合。

一些防护身份验证漏洞的策略要求双要素身份验证以及使用限制或延迟重复的登录尝试。

敏感数据暴露

如果 Web 应用程序不保护财务数据和密码等敏感数据,则攻击者可访问这些数据并将其用于恶意目的。

窃取敏感信息的一种热门方法是使用在途攻击。

通过加密所有敏感数据并禁用任何敏感信息的缓存,可最大程度地降低数据暴露风险。

此外,Web 应用程序开发人员应注意确保避免不必要地存储任何敏感数据。

缓存是一种临时存储数据以供重用的做法。

例如,网络浏览器通常会缓存网页,这样一来,如用户在特定时间段内重新访问这些页面,浏览器就不必从 Web 获取页面。

外部实体

这是对解析 XML 输入 Web 应用程序的攻击。

此输入可引用外部实体,以尝试利用解析器中的漏洞。在此,外部实体是指存储单元,如硬盘驱动器。

攻击可欺骗 XML 解析器将数据发送到未经授权的外部实体,然后后者可将敏感数据直接传递给攻击者。

防止 XEE 攻击的最佳方法是让 Web 应用程序接受不太复杂的数据类型,如 JSON,或者至少给 XML 解析器打补丁并禁止在 XML 应用程序中使用外部实体。

XML 全称可扩展标记语言,是种旨在同时实现人类可读和机器可读的标记语言。

由于其复杂性和安全性漏洞,许多 Web 应用程序现在已经逐步淘汰了这种语言。

JavaScript 对象表示法是一种简单的、人类可读的表示法,通常用于通过网络传输数据。

尽管 JSON 最初是为 JavaScript 创建,但它不受语言限制,并且可以由许多不同的编程语言解释。

访问控制中断

访问控制是指控制对信息或功能的访问权限的系统。

损坏的访问控制使攻击者可以绕过授权并执行任务,像他们是管理员等特权用户一样。

例如,Web 应用程序可能允许用户仅通过更改 URL 的一部分即可更改他们登录的帐户,无需任何其它验证。

通过确保 Web 应用程序使用授权令牌并对其设置严格控制,可确保访问控制的安全。

许多服务在用户登录时都会发布授权令牌。用户发出每个特权请求都需出示授权令牌。

这是确保用户身份与声称相符的安全方法,而无需他们不断的输入登录凭据。

安全配置错误

安全配置错误是列表上最常见的漏洞,通常是使用默认配置或显示过多详细错误结果。例如,一个应用程序可能在向用户显示错误时描述得过于详尽,以致于揭示出应用程序中的漏洞。

这种情况可通过删除代码中任何未使用的功能并确保错误消息更加笼统来防护。

XSS 跨站点脚本

跨站点脚本漏洞在 Web 应用程序允许用户将自定义代码添加到 URL 路径或其他用户可看到的网站上时发生。

利用漏洞,可在受害者的浏览器上运行恶意的 JavaScript 代码。

例如,攻击者可向受害者发送似乎来自受信任银行的电子邮件,并随附指向该银行网站链接。

链接可能在 URL 的末尾标记一些恶意 JavaScript 代码。

如银行的站点没有得到适当的跨站点脚本保护,则当受害者单击链接时,该恶意代码将在受害者的 Web 浏览器中运行。

跨站点脚本的缓解策略包括对不受信任的 HTTP 请求转义以及验证和、或清除用户生成的内容。

不安全的反序列化

这种威胁目标是各种经常对数据进行序列化和反序列化的 Web 应用程序。

序列化意味着从应用程序代码中获取对象,并将其转换为可用于其它目的的格式,例如将数据存储到磁盘或对其进行流传输。

反序列化正好相反:将序列化的数据转回应用程序可以使用的对象。序列化就像在搬家前将家具打包到箱子里,而反序列化就像在搬家后拆开箱子并组装家具。

不安全的反序列化攻击就像搬家公司在拆箱前篡改箱子中的物品。

不安全的反序列化漏洞利用是不可信来源的数据反序列化的结果,并可能导致严重的后果,例如 DDoS 攻击和远程代码执行攻击。

尽管可采取措施尝试检出攻击者,如监视反序列化和实施类型检查,但防止不安全的反序列化攻击的唯一肯定有效方法是禁止来自不受信任来源的数据反序列化。

使用具有已知漏洞组件

许多现代 Web 开发人员在其 Web 应用程序中使用库和框架之类的组件。

这些组件是可帮助开发人员避免多余工作并提供所需功能的软件。

一些攻击者会在这些组件中寻找漏洞,然后利用这些漏洞组织攻击。

一些较为热门组件在数十万个网站上使用。攻击者如在其中一个组件中发现安全漏洞,就可能使数十万个站点易受攻击。

组件开发人员通常会提供安全补丁和更新程序修补已知漏洞,但 Web 应用程序开发人员并不总是在其应用程序上运行组件修补版本或最新版本。

为最大程度地降低运行具有已知漏洞的组件的风险,开发人员应从项目中删除未使用组件,并确保他们从受信任的来源接收组件并确保它们是最新版本。

记录监控不足

许多 Web 应用程序没有采取足够措施来检测数据泄露。

漏洞发生后平均发现的时间约为 200 天。

这使攻击者有大量时间在开发人员没任何响应之前造成破坏。

OWASP 建议 Web 开发人员实施日志记录和监视及事件响应计划,以确保他们了解应用程序遭到的攻击。

TestDisk 免费开源 Linux 数据恢复工具

作者 Teacher Du

近期整理公司资料时出现了误删除数据的情况,就想着做数据恢复。奈何 Linux 平台下数据恢复类的软件较少,相对较常用的是 TestDisk。故整理一篇相关的教程,供有需要的小伙伴参考。

介绍

TestDisk 是一款功能强大免费开源数据恢复软件,主要用于恢复丢失分区和修复无法启动的磁盘。支持多种文件系统,包括 NTFS 和 ext4 等。

TestDisk 可以帮助修复分区表、恢复已删除的分区、重建启动扇区、修复文件分配表以及从不同文件系统中恢复已删除文件。

特点

TestDisk 可以修复分区表,恢复因为软件故障、病毒或者人为错误而丢失的分区。

它能够从备份中恢复 FAT32 启动扇区,并重建 FAT12/FAT16/FAT32 以及 NTFS 的启动扇区。

TestDisk 可以从 NTFS 和 ext4 文件系统中恢复已删除的文件。

TestDisk 可以在 Windows 和 Linux 上运行。

除上述文件系统外,TestDisk 还支持 Linux RAID 和 XFS 等。

TestDisk 提供了适合新手和专家的功能。对于不熟悉数据恢复的用户,TestDisk 可以收集非启动驱动器的详细信息,然后发送给专业技术人员进行进一步分析。

TestDisk 提供了一步步的指南,帮助用户恢复丢失分区和修复损坏的启动扇区。

TestDisk 提供在线文档和指南,及一个活跃的社区论坛,用户可以在其中寻求帮助和分享经验。

安装

TestDisk 安装步骤因操作系统而异,以下是针对 Linux 安装步骤。对于不同 Linux 发行版,安装命令有所不同。Ubuntu 及 Debian 的安装命令如下:

1
2
sudo apt update
sudo apt -y install testdisk

Red Hat 和 CentOS 的安装命令如下:

1
2
yum -y install epel-release
yum -y install testdisk

Fedora 的安装命令如下:

1
sudo dnf -y install testdisk

Arch Linux 的安装命令如下:

1
sudo pacman -S testdisk

使用

注意使用 TestDisk 时,用户应避免在数据恢复过程中进一步使用存储已删除数据的介质,并且最好将恢复的文件复制到另一个分区或磁盘上,以防止数据被覆盖。打开终端界面,输入以下命令:

1
testdisk

首次启动,需要创建一个恢复日志,这里选择创建:

选择要恢复文件所在的磁盘,按回车键继续:

TestDisk 会显示检测的分区表类型,通常会自动识别正确的类型,按回车键继续:

选择 Analyse 即分析选项来检查当前的分区结构并搜索丢失的分区,按回车键开始分析。

TestDisk 会执行快速搜索以查找丢失的分区:

如仍有分区未找到,选择 Deeper Search 即深度搜索来进一步搜索:

深度搜索会扫描每一个柱面,寻找 FAT32 的备份启动扇区、NTFS 的备份启动超级块以及 ext2/ext3 的备份超级块。在深度搜索后,检查结果并确认找到的分区。

推荐 10 个 Linux 下的防病毒软件

作者 Teacher Du

在 Linux 系统,虽然由于设计上的安全性使得病毒和恶意软件的感染率相对较低,但在某些特定场景,如服务器环境或需要处理敏感数据的系统,安装防病毒软件仍然是一个明智选择。

ClamAV

特点:ClamAV 是一款免费开源的防病毒程序,专为类 Unix 系统设计。它提供强大的病毒检测引擎,能够识别清除各种病毒、间谍软件、蠕虫和其它的恶意软件。

优势:它支持多线程扫描,提高了扫描速度和效率;免费开源,拥有活跃社区支持;病毒库更新较频繁,保持对新威胁快速响应。

Sophos Protection for Linux

特点:Sophos Protection for Linux 是一款功能强大安全软件,集成了防病毒、防火墙和入侵检测多种功能,能够有效地保护 Linux 服务器和端点免受各种网络威胁侵害。

优势:提供实时保护、扫描文件目录、定期扫描功能;与 Sophos 中央管理平台集成,实现集中管理监控;支持多种 Linux 发行版,如 Ubuntu、Red Hat 等。

Avast Antivirus for Linux

特点:Avast Antivirus for Linux 是一款功能强大跨平台防病毒软件,专门为 Linux 系统设计。它提供了实时保护、手动扫描、定时扫描多种安全功能。

优势:拥有强大的病毒库和出色的保护能力;界面设计简洁直观,操作简便;与多种 Linux 发行版本兼容,如 Ubuntu、Fedora 等。

Kaspersky for Linux

特点:Kaspersky 为 Linux 系统提供一款防御性安全程序,旨在抵御可能渗透到 Linux 系统病毒、木马、间谍软件、广告软件。

优势:功能全面、兼容性强、易用性高;通过实时威胁检测、恶意软件扫描清除、防火墙保护等多种手段提供全面安全保护;支持多种 Linux 发行版,如 Ubuntu、Fedora 等。

ESET NOD32 Antivirus for Linux

特点:ESET NOD32 Antivirus for Linux 是 ESET 公司开发一款专为 Linux 系统设计的防病毒软件。它提供了高效的恶意软件检测和防护功能。

优势:拥有独特的 ThreatSense 技术,能够通过行为分析和模式识别快速准确地识别新的威胁;提供实时保护功能,监控系统运行中的进程、文件、网络连接;提供免费限时试用版供用户评估。

Comodo Antivirus for Linux

特点:Comodo Antivirus for Linux 是一款功能强大、兼容性好、用户友好的防病毒软件。它提供了实时保护功能,能够主动监控系统运行中的进程、文件、网络连接。

优势:集成了防火墙功能;独特的沙箱技术允许在虚拟环境中运行未知或可疑文件;提供电子邮件过滤功能和反垃圾邮件系统;跨平台支持多 Linux 发行版。

F-Prot Antivirus for Linux

特点:F-Prot Antivirus for Linux 是一款由 Cyren 开发跨平台防病毒软件。它提供了高效的病毒和恶意软件检测功能。

优势:支持 32/64 位体系结构;能够保护用户免受超过 2100 万种威胁及其变种的侵害;免费且可移植;允许扫描内部驱动器和驱动程序以及木马、宏病毒等。

chkrootkit

特点:chkrootkit 是一款轻量级的便携式防病毒程序,专注于检测 rootkit。

优势:易于使用;可以从命令行轻松运行;提供一次管理和解决多个错误的功能。

Rootkit Hunter

特点:Rootkit Hunter 是一款通过命令行使用防病毒工具,专注检测和消除病毒和木马软件。

优势:提供高效的 rootkit 检测功能;支持 SHA-1 比较和检测恶意软件;提供详细的调查结果报告和日志。

Firetools

特点:Firetools 是一个开源的沙箱 GUI 工具,允许用户在隔离环境中运行脚本和软件以验证其安全性。

优势:与其它防病毒扫描程序结合使用可以提高系统的整体安全性;特别适用于处理恶意 Web 脚本。

随机图片及视频的代码分享

作者 Teacher Du

有小伙伴看到杜老师侧边栏随机图片,想问如何实现?杜老师整理了一下代码分享出来,供需要的小伙伴们参考。杜老师的主机资源有限,就不再部署 API 端了,需要的小伙伴可以自行搭建!

随机白丝图片

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
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://v2.api-m.com/api/baisi",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$response = curl_exec($curl);
if(curl_errno($curl)){
echo 'Request Error:' . curl_error($curl);
}
curl_close($curl);
$json = $response;
$data = json_decode($json, true);
if ($data && isset($data['data']) && filter_var($data['data'], FILTER_VALIDATE_URL)) {
$imageUrl = $data['data'];
header("HTTP/1.1 303 See Other");
header("Location: $imageUrl");
} else {
echo "无法解析数据或数据字段不存在。";
}
?>

注意:将上方的代码保存为 PHP 文件,如 baisi.php,放入 PHP 环境目录中,不限 PHP 的运行版本。前端直接调用即可,调用时会自动跳转至被解析图片地址。

随机黑丝图片

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
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://v2.api-m.com/api/heisi",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$response = curl_exec($curl);
if(curl_errno($curl)){
echo 'Request Error:' . curl_error($curl);
}
curl_close($curl);
$json = $response;
$data = json_decode($json, true);
if ($data && isset($data['data']) && filter_var($data['data'], FILTER_VALIDATE_URL)) {
$imageUrl = $data['data'];
header("HTTP/1.1 303 See Other");
header("Location: $imageUrl");
} else {
echo "无法解析数据或数据字段不存在。";
}
?>

注意:将上方的代码保存为 PHP 文件,如 heisi.php,放入 PHP 环境目录中,不限 PHP 的运行版本。前端直接调用即可,调用时会自动跳转至被解析图片地址。

随机美女图片

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
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://v2.api-m.com/api/meinvpic",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$response = curl_exec($curl);
if(curl_errno($curl)){
echo 'Request Error:' . curl_error($curl);
}
curl_close($curl);
$json = $response;
$data = json_decode($json, true);
if ($data && isset($data['data']) && filter_var($data['data'], FILTER_VALIDATE_URL)) {
$imageUrl = $data['data'];
header("HTTP/1.1 303 See Other");
header("Location: $imageUrl");
} else {
echo "无法解析数据或数据字段不存在。";
}
?>

注意:将上方的代码保存为 PHP 文件,如 meinvpic.php,放入 PHP 环境目录中,不限 PHP 的运行版本。前端直接调用即可,调用时会自动跳转至被解析图片地址。

随机美女视频

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
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://v2.api-m.com/api/meinv",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$response = curl_exec($curl);
if(curl_errno($curl)){
echo 'Request Error:' . curl_error($curl);
}
curl_close($curl);
$json = $response;
$data = json_decode($json, true);
if ($data && isset($data['data']) && filter_var($data['data'], FILTER_VALIDATE_URL)) {
$imageUrl = $data['data'];
header("HTTP/1.1 303 See Other");
header("Location: $imageUrl");
} else {
echo "无法解析数据或数据字段不存在。";
}
?>

注意:将上方的代码保存为 PHP 文件,如 meinv.php,放入 PHP 环境目录中,不限 PHP 的运行版本。前端直接调用即可,调用时会自动跳转至被解析视频地址。

新版本 Memos 说说页面部署代码分享

作者 Teacher Du

在柚子兄的帮助下,杜老师终于完成了 Memos 的版本升级。Memos 是真的糟糕,动不动 BREAKING CHANGE,前后对 API/S3 做了大量改动,严重影响了日常的使用,强烈建议在不影响使用的情况下升级版本。

特性

  1. 显示用户头像;

  2. 显示用户昵称与平台用户名;

  3. 支持大图显示;

  4. 可一键至说说广场进行评论。

效果

正常的浏览效果如下图:

夜间模式的浏览效果如下图:

代码

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
<link href="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/css/style.css" rel="stylesheet" type="text/css">
<link href="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/css/highlight.github.min.css" rel="stylesheet" type="text/css">
{% p center logo large, 点图片可放大! %}
<section id="main" class="container">
<div id="memos" class="memos">
</div>
</section>
<script type="text/javascript">
var memos = {
host: 'https://s.dusays.com/',
limit: '10',
creatorId: '1',
domId: '#memos',
username: 'penn',
name: 'Teacher Du',
}
</script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/lazyload.min.js?v=17.8.3"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/marked.min.js?v=11.1.1"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/view-image.min.js?v=2.0.2"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/moment.min.js?v=2.30.1"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/moment.twitter.js"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/highlight.min.js?v=11.9.0"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.2.0/memos/js/memo.js"></script>
<script>hljs.highlightAll();</script>

注意:如果不是 Volantis 主题需删除{% p center logo large, 点图片可放大! %}所在行。

使用

请根据需求修改对应的内容:

参数说明
host域名
limit每页显示条数
creatorId用户的 ID
domId显示位置
username广场的用户名
name昵称

Yearning 开源 SQL 审核平台

作者 Teacher Du

Yearning 是一个开源的 SQL 审核平台,专门为简化 SQL 管理流程设计,通常用于数据库的审核和自动化流程管理。Yearning 支持 MySQL 等数据库,提供 Web UI 来审核和管理 SQL 执行。

测试环境

在安装 Yearning 之前,请确保服务器环境满足以下条件。

操作系统:Ubuntu 或者 CentOS「本文默认为 Ubuntu」

数据库 MySQL 5.7 或 8.0。

运行语言:Yearning 是 Go 开发的,所以需要 Go 语言的环境。

安装 MySQL 数据库

如尚未安装 MySQL,可以使用以下命令安装:

1
2
3
4
5
6
7
# Ubuntu 安装 MySQL
sudo apt update
sudo apt -y install mysql-server

# CentOS 安装 MySQL
sudo yum update
sudo yum -y install mysql-server

启动 MySQL 服务并设置开机自启:

1
2
sudo systemctl start mysql
sudo systemctl enable mysql

测试 MySQL 数据库安装成功:

1
mysql -u root -p

在 MySQL 中创建 Yearning 所需的数据库:

1
2
3
4
CREATE DATABASE yearning;
CREATE USER 'yearning'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON yearning.* TO 'yearning'@'localhost';
FLUSH PRIVILEGES;

安装运行语言

Yearning 需要 Go 环境,因此需要先安装 Go。可以使用以下命令安装官方网站的 Go:

1
wget https://golang.org/dl/go1.23.2.linux-amd64.tar.gz

解压安装:

1
sudo tar -xzf go1.23.2.linux-amd64.tar.gz -C /usr/local

配置环境变量:

1
2
echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc

验证安装:

1
go version

下载配置

使用以下命令克隆 Yearning 项目源代码:

1
2
3
4
5
# 克隆 Yearning 源代码仓库
git clone https://github.com/cookieY/Yearning.git

# 进入目录
cd Yearning/

Yearning 提供一个配置文件来指定数据库连接等参数。在 Yearning/config 目录中找到 conf.yaml 文件,编辑并配置数据库连接信息:

1
2
3
4
5
6
db:
host: "127.0.0.1"
port: 3306
user: "yearning"
password: "your_password"
name: "yearning"

编译访问

Yearning 需要使用 Go 编译运行。执行以下命令来编译 Yearning:

1
2
3
4
5
# 编译
go build -o Yearning

# 运行
./Yearning

会启动 Web 服务,默认情况端口是 8000。使用浏览器访问 Yearning 的 Web UI:

1
http://IP:8000

初始使用

首次访问 Yearning Web UI 时,会要求设置管理员账号。

设置管理员账号后,可登录系统并开始使用 Yearning 进行 SQL 审核。

Yearning 需连接管理的数据库实例。

前往配置页面,添加要管理的 MySQL 数据库实例。

Yearning 提供了 SQL 提交和审核功能。用户可以通过 Web 界面提交 SQL,管理员审核后可执行或拒绝该 SQL。

Yearning 提供 SQL 审核和执行的记录功能,可以查看每次执行的历史记录和结果。

使用 Docker 安装 Yearning

如果希望使用 Docker 来简化安装过程,Yearning 提供 Docker 支持。将下面的代码保存为 docker-compose.yml

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
version: '3'

services:
yearning:
image: yeelabs/yearning:latest
environment:
MYSQL_USER: yearning
MYSQL_PASSWORD: ukC2ZkcG_ZTeb
MYSQL_ADDR: mysql
MYSQL_DB: yearning
SECRET_KEY: dbcjqheupqjsuwsm
IS_DOCKER: is_docker
ports:
- 8000:8000
# 首次使用请先初始化
command: /bin/bash -c "./Yearning install && ./Yearning run"
depends_on:
- mysql
restart: always

mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ukC2ZkcG_ZTeb
MYSQL_DATABASE: yearning
MYSQL_USER: yearning
MYSQL_PASSWORD: ukC2ZkcG_ZTeb
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
volumes:
- ./data/mysql:/var/lib/mysql

# 默认账号:admin,默认密码:Yearning_admin

使用下面命令启动容器。docker-compose 会自动拉取 Yearning 的镜像并启动 Yearning 服务,打开浏览器访问 http://IP:8000,同样按照之前步骤完成初始化配置和使用:

1
docker-compose up -d

常见问题

无法访问 Yearning时:

  1. 检查防火墙是否阻止了端口 8000 的访问;
  2. 检查 Yearning 是否在正确的 IP 和端口上运行。

数据库连接问题:

  1. 确保配置文件中的数据库用户名、密码、主机正确;
  2. 确认 MySQL 允许 Yearning 连接,可以在 MySQL 中执行 GRANT 语句,确保正确权限。

Jellyfin 软件媒体系统介绍与部署

作者 Teacher Du

群晖越来越坑,前后下线了 Chat 和 Video Station 套件。自从 Video Station 套件下线后,一直没找到相关的套件,直到发现了 Jellyfin。本文简单介绍 Jellyfin 和其部署的方式,同时推荐给需要的小伙伴们!

什么是 Jellyfin

Jellyfin 是一个开源自由软件媒体系统,旨在帮助用户管理和流式传输他们的媒体内容。

作为 Emby 和 Plex 免费替代品,Jellyfin 允许用户通过专用服务器将媒体传输到各种终端设备。

Jellyfin 的特点

  • 免费开源:Jellyfin 是完全免费,没任何隐藏费用或高级功能。所有的功能对所有用户开放。

  • 隐私保护:Jellyfin 没有任何追踪或数据收集行为,所有数据都保存在用户自己服务器上。

  • 社区驱动:Jellyfin 由志愿者社区开发和维护,用户可自由地贡献代码、文档、翻译、支持。

  • 多客户端支持:Jellyfin 提供多种官方和第三方客户端,支持智能电视、智能手机、平板电脑和游戏主机上访问媒体内容。

Jellyfin 的部署

使用 Docker 部署 Jellyfin,首先拉取 Jellyfin 的镜像:

1
docker pull jellyfin/jellyfin

通过下面的命令运行 Jellyfin 容器:

1
docker run -d --name=jellyfin --user=1000:1000 --net=host -v /path/to/config:/config -v /path/to/cache:/cache -v /path/to/media:/media jellyfin/jellyfin

群晖部署

下面分享在群晖的部署方式。在群晖面板中,选择套件中心,点击设置,切换到套件来源项,点击新增,添加链接 https://packages.synocommunity.com 到位置:

在套件中心搜索框中输入 Jellyfin,点击安装套件:

安装好套件后,可在启动栏中看到 Jellyfin 的图标,点击可进入到初始页面。在首次启动时,系统会引导用户创建一个管理员账号:

用户可以添加电影、音乐等媒体库,选择相应的文件夹路径。根据需要配置缓存目录、硬件加速选项,以优化媒体流体验。

SamWaf 网站防火墙工具安装使用

作者 Teacher Du

SamWaf 网站防火墙是一款适用于小型公司、工作室和个人网站的免费的轻量级网站防火墙,可完全私有化部署,数据加密且仅保存本地,一键启动,支持 Linux/Windows 等 64 位操作系统。

主要功能

  • 完全独立引擎,防护功能不依赖 IIS/Nginx。

  • 可自定义防护规则,支持脚本、界面编辑。

  • 可支持白名单访问。

  • 支持 IP 黑名单。

  • 支持 URL 白名单。

  • 可支持限制 URL 访问。

  • 支持指定界面数据隐私输出。

  • 可支持 CC 频率访问。

  • 支持全局一键配置。

  • 可支持分网站单独防护策略。

工具安装

使用下面的命令安装 Docker:

1
curl -sSL https://get.docker.com/ | sh

创建目录,并启动 SamWaf 容器:

1
2
3
4
mkdir -p /data/samwaf/conf
mkdir -p /data/samwaf/data
mkdir -p /data/samwaf/logs
docker run -d --name=samwaf-instance -p 26666:26666 -p 80:80 -p 443:443 -v /data/samwaf/conf:/app/conf -v /data/samwaf/data:/app/data -v /data/samwaf/logs:/app/logs samwaf/samwaf

面板访问

在容器启动后,使用下面的地址可访问面板:

1
http://IP:26666

默认用户名和密码如下:

1
2
admin
admin868

工具截图

SamWaf 网站防火墙概览:

从日志中进行快速处理:

自动创建规则脚本:

界面编辑:

配置 CC 攻击的规则。速率如 1 限制次数 100 则代表每秒访问 100 次将被限制:

防御日志记录查询所有正常、异常请求。可以根据规则名称,时间进行查询:

Linux 安全 Auditd 审计工具使用说明

作者 Teacher Du

Auditd 是 Linux 系统中的一个强大的审计框架,它能帮助系统管理员监控和记录系统中的安全相关事件。杜老师整理了一些关于 Auditd 审计工具的详细使用说明。

安装工具

在大多数 Linux 发行版中可以通过包管理器安装 Auditd。例如,在银河麒麟高级服务器操作系统/CentOS 上,可以使用以下命令安装:

1
yum -y install audit

在银河麒麟桌面操作系统上,可以使用以下命令安装:

1
sudo apt -y install auditd audispd-plugins

配置工具

Auditd 的主要配置文件是/etc/audit/auditd.conf

此外,审计规则的配置文件通常位于/etc/audit/audit.rules

相关工具

以下是 Auditd 中常用的工具:

工具名称功能描述
auditctl用于添加、删除审计规则,及查看审计规则等。
aureport用于生成审计报告。
ausearch用于搜索审计事件。
auditspd用于将事件通知转发给其它应用程序。
autrace用于跟踪进程。

审计规则

审计规则可以分为三类:控制规则、文件系统规则、系统调用规则。控制规则用于更改审计系统本身的配置和设置。例如,设置审计缓冲区的最大数量:

1
auditctl -b 8192

文件系统规则用于监控特定文件或目录的访问。例如,监控/etc/passwd 文件写入和属性修改:

1
auditctl -w /etc/passwd -p wa -k passwd_changes

系统调用规则用于记录特定程序系统调用。例如,记录使用 adjtimexsettimeofday 系统调用的行为:

1
auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change

例如,要监控/etc/passwd 文件读写访问,可以使用以下命令。这条规则表示监控/etc/passwd 文件当有读写操作时,使用关键字 passwd_monitor 记录审计事件:

1
auditctl -w /etc/passwd -p rw -k passwd_monitor

使用命令查看当前配置审计规则:

1
auditctl -l

使用 auditctl -D 可删除所有规则,或使用下面命令删除指定路径的规则:

1
auditctl -W

日志报告

审计日志默认存储在/var/log/audit/audit.log 文件。使用 ausearch 工具可以搜索和查看审计日志。例如,要搜索所有与 passwd_monitor 相关的日志条目,可以使用:

1
ausearch -k passwd_monitor

使用 aureport 命令可生成审计报告。例如,要生成一个关于用户登录失败的报告,可以使用:

1
aureport -au

保存规则

要使规则永久生效,需要将规则添加到/etc/audit/audit.rules 文件中,然后重启或重新加载 Auditd 服务:

1
sudo systemctl restart auditd

或者重新加载规则:

1
sudo auditctl -R /etc/audit/audit.rules

服务管理

Auditd 服务默认开机自启动。可使用以下命令来管理服务:

描述命令
查看服务状态systemctl status auditd
开启服务systemctl start auditd
停止服务systemctl stop auditd
重启服务systemctl restart auditd

确保 Linux 审计日志安全性和完整性

  1. 配置审计守护进程:

将日志文件路径设置在单独挂载点上,以防止其它的进程消耗空间,并确保审计守护进程能够准确的检测剩余空间。
设置 max_log_file 参数以充分利用保存审计日志文件分区上的可用空间。
max_log_file_action 设置为 keep_logs,防止审计日志文件被覆盖。
配置 space_left 以及 space_left_action 参数,以确保在磁盘空间不足时能够及时通知管理员。
设置 admin_space_left 以及 admin_space_left_action 参数,为记录管理员所执行的操作保留足够空间。
disk_full_action 设置为 haltsingle,以确保在磁盘空间耗尽时系统能够关闭或以单用户模式运行。
disk_error_action 设置为 syslogsingle 或者 halt,以便在检测到磁盘错误时采取适当的行动。

  1. 配置审计规则:

auditctl 命令添加规则,监控关键文件以及系统调用,确保只有授权的更改被记录。
将规则持久化到/etc/audit/audit.rules 文件,以确保在系统重启后规则仍有效。

  1. 保护审计日志文件:

确保审计日志文件的存储位置具有适当的权限设置,只有授权用户才能访问。
考虑使用加密存储审计日志,以防止未授权的访问或篡改。

  1. 日志轮转、归档:

配置日志轮转策略,避免日志文件无限制增长并填满磁盘空间。
定期归档旧的审计日志,确保归档过程不会破坏日志文件的完整性。

  1. 监控、响应:

定期监控审计日志,用 ausearchaureport 命令分析日志,以识别异常行为或潜在安全威胁。
根据审计结果,采取相应响应措施,并且生成审计报告。

  1. 定期审查、更新:

定期审查审计策略、规则,以适应不断变化的安全需求。
更新审计规则以覆盖新安全场景,并确保审计系统有效性。

免费、快速、稳定的公益 API 平台推荐

作者 Teacher Du

小小 API 是一个公益的 API 平台,其基于 Golang 自主开发,并采用微服务架构,致力于为开发者们提供稳定、快速的 API 服务,帮助他们更高效地构建应用。

什么是 API

API 是现代软件开发中不可或缺的工具。

无论是在移动应用,还是集成第三方服务时,API 都能极大地简化开发流程。

然而,选一个适合的 API 平台对提升开发效率、保障应用稳定性和响应速度至关重要。

那么,如何找到一个可靠的 API 服务商呢?

如何选择 API 服务商

  1. 查询平台历史。通过 Whois 查询 API 平台域名注册时间,了解其在市场上的长期表现。可靠的 API 服务商通常拥有多年的运营经验,并在技术支持方面表现优异;

  2. 核实备案。查看服务商是否拥有正规 ICP 备案;

  3. 考察运营时间。运营时间越长,平台在处理实际应用场景和技术挑战时积累经验越丰富,这也是确保高可用性服务的重要依据;

  4. 评估自主研发能力。自主研发的平台通常对其系统有更强的掌控力,能够快速响应问题。使用自研系统平台在安全性、可扩展性和服务稳定性方面表现更加出色。

可信赖的 API 服务商推荐

无论是个人开发者、初创团队,还是大型企业,小小 API 都可以提供高效、稳定的 API 服务,助力开发项目更轻松更高效。:

小小 API 始终重视服务的稳定性和响应速度。如图所示,小小 API 平台的测速数据表明高效性能:

平台特点

  1. 小小 API 完全基于 Golang 自主开发,平台对技术的完全掌控让其在处理高并发和大流量时依然能够保持卓越的响应速度和稳定性;

  2. 小小 API 提供完全免费 API 服务,帮助开发者们显著降低开发成本。虽然免费,依然在性能表现上领先市场,确保了数据的快速响应和流畅的集成体验;

  3. 小小 API 覆盖了多种应用场景,满足不同开发需求。无论项目是需要处理简单查询还是复杂的数据和多媒体服务,小小 API 都能提供优质的支持;

  4. 平台采用了微服务架构,确保每一个 API 服务独立运行,轻松应对流量高峰和复杂的服务场景。即使在高并发的情况下,小小 API 依然能够保持服务的高可用性,为开发者提供稳定支持;

  5. 小小 API 拥有正规 ICP 备案,合法合规运营。此外,平台通过自主研发技术确保数据的安全性,经过严格测试 API 服务能够满足不同应用场景的需求,帮助开发者专注于核心业务;

  6. 无论是使用 PHP、JavaScript 等语言,还是其它编程语言,小小 API 都提供完善的文档和示例代码。

❌