安全配置与隐私保护实践
想象YaCy不是软件,而是建立在你笔记本电脑硅上的主权微国。它的宪法?隐私设计。它的边境控制?TLS握手和访问令牌。它的外交政策?严格不干涉相邻节点,除非明确邀请。在本章中,我们不是配置安全——我们宣布独立,每次密码学握手,每次权限位掩码,每次擦除的日志条目一个。
🔒 HTTPS:从明文荒原到加密主权
当YaCy首次启动时,它在端口8090上讲HTTP——就像在拥挤的广场上大喊。启用HTTPS不仅仅是翻转开关;它是指令一个主权铸币厂为每个请求发行加密护照。YaCy利用Java的 keytool 生成存储在 DATA/SSL/keystore.jks 的自签名X.509证书,然后将Jetty的SSL连接器绑定到端口8443。这不是可选的剧场——这是元数据泄漏停止的地方。关键是,YaCy不开箱即用支持Let's Encrypt自动化(没有ACME客户端),因此生产部署需要手动证书轮换或像Nginx这样作为TLS终止器的反向代理——然而即使那样,YaCy坚持内部 https://localhost:8443 用于管理API调用,强制端到端完整性。握手本身遵循TLS 1.3当Java 11+存在时,将传统的四方舞蹈坍缩为单次往返:$ \text{ClientHello} + \text{ServerHello} + \text{EncryptedExtensions} $。那个速度不是便利——它是对时序侧信道攻击的抵抗。
🧭 访问控制(ACL):大使馆安全许可系统
YaCy的Web界面不是公共广场——它是一个带有分层许可级别的大使馆建筑群:admin、user 和 guest。每个角色映射到存储在 DATA/htaccess.db 中的位掩码,一个Berkeley DB实例——不是一个平面文件——其中像 SEARCH、CRAWL 或 CONFIGURE 这样的权限像潜艇控制室中的物理开关一样切换。> "DATA/htaccess.db" is not a text file—it's a Berkeley DB instance storing hashed credentials and permission bitmasks, serialized per-user. 你不手工编辑这个;你导航到 /ConfigAccess_p.html,输入凭证,YaCy在持久化之前用盐计算SHA-256哈希。优雅在于粒度:user 可以启动爬虫但不能修改网络拓扑;guest 看到搜索结果但在 /CrawlStart.html 命中403。这不是RBAC——它是RBAE:基于角色的访问强制,每个HTTP请求触发用户掩码和资源所需标志之间的按位与。检查失败?Jetty在任何YaCy业务逻辑执行之前返回 HTTP 403。
🌫️ 匿名化设置:拒绝知道的艺术
大多数隐私工具在收集数据之后匿名化——就像模糊监控录像中的面孔。YaCy通过省略匿名化。默认情况下,它记录没有客户端IP,存储没有会话cookie,传输没有遥测——甚至不是选择加入。它的P2P邻居公告(/yacy/peers.html)可以通过 peering.enabled=false 完全禁用,将你的节点转变为全球蜂群中的静默观察者。对于最大不透明度,YaCy支持通过Tor的SOCKS5代理:设置 proxy.socks.host=127.0.0.1 和 proxy.socks.port=9050,所有出站爬虫请求通过洋葱网络路由——你的节点成为机器中的幽灵,仅作为瞬态电路端点可见。关键是,YaCy的匿名化不是概率性混淆;它是身份表面的确定性擦除。当你禁用 log.access.enabled=true 时,YaCy不编辑日志——它停止写入它们,就像一个拒绝拿起笔的抄写员。
🔐 数据加密选项:金库结束和索引开始的地方
这里是YaCy的安静悖论:虽然传输加密是严格的,静态加密从核心堆栈中有意缺席。DATA/INDEX/ 目录——容纳Solr的Lucene段——未加密存储。为什么?因为YaCy的P2P架构要求索引文件在节点间字节相同以进行基于哈希的验证;添加加密会破坏可寻址内容共享。相反,YaCy将磁盘级保护委托给主机操作系统:全磁盘加密(Linux上的LUKS,Windows上的BitLocker),或通过ZFS/Btrfs的文件系统级AES-256。> "YaCy treats the DATA/ directory as sacred ground—not because it's encrypted, but because its integrity is verified via SHA-256 checksums on every segment load." 对于像 DATA/htaccess.db 这样的敏感元数据,YaCy依赖OS文件权限(chmod 600)和进程隔离——你的Java进程作为无特权用户运行,因此即使root没有打破遏制也无法读取密钥库。教训?加密不是切换——它是应用、操作系统和硬件之间的分层契约。
🕷️ 防爬策略:自调节蜂巢
YaCy戴两顶帽子:它是一个爬虫——并且它尊重爬虫。它的反滥用姿态镜像蜂巢的生态智能:没有墙,没有守卫,只是调节行为的费洛蒙样信号。它用严格的RFC 9309合规性解析 robots.txt,将 Crawl-delay: 10 视为福音。crawler.delay 参数(默认:1000ms)不是节流器——它是你的节点和目标服务器之间的时间契约。更微妙的是,YaCy在摄取时实现 noindex/nofollow 过滤:如果爬虫的页面包含 <meta name="robots" content="noindex">,YaCy在Solr看到文档之前将其从索引中丢弃。没有"阻止"——只有非参与。甚至速率限制使用自适应算法:如果连续HTTP 429响应到达,YaCy指数级增加延迟直到 crawler.delay.max,然后在成功时重置。这不是防御——它是编码在毫秒中的外交。
⚖️ GDPR合规性配置:宪法默认
在YaCy中GDPR合规性不是配置——它是编译在。没有用户数据库,没有跟踪像素,没有行为配置文件,没有第三方分析SDK。你的节点本地处理查询,本地索引文档,并仅在明确选择加入P2P时共享结果。为了履行第17条(删除权),你不运行SQL DELETE——你 rm -rf DATA/INDEX/ 和 DATA/PEERS/。即时、不可逆、密码学可验证的删除。对于第32条(处理安全),YaCy通过架构选择而非复选框满足"适当的技术措施":内存安全Java(没有缓冲区溢出),沙盒插件执行(所有插件在隔离类加载器中运行),不可变索引段(防止篡改)。> "GDPR Article 25 (Data Protection by Design) is YaCy's origin story—the project was founded in 2003, years before GDPR, precisely to reject the surveillance capitalism model." 管理员确实承担文档职责:在 DATA/LOG/privacy_policy.md 中维护处理活动记录(ROPA),指定节点是否充当控制器(个人使用)或联合控制器(企业部署),并发布保留计划——例如,log.access.retention.days=30。
这不是一个安全章节。它是一个宣言:在集中式监控的世界中,YaCy不仅提供替代技术——而且提供替代伦理。你调整的每个配置都是数字自决的投票。所有配置中最强大的设置仍然未被任何配置文件改变:YaCy的默认状态是私有。你必须主动选择暴露。