安全

pip-audit:Python 依赖安全扫描工具

pip-audit 是 PyPA(Python Packaging Authority)维护的依赖安全扫描工具,用于检查 Python 环境和依赖文件中是否存在已知漏洞。数据来源是 Python Packaging Advisory Database,通过 PyPI JSON API 或 OSV 查询。

和 npm audit 类似,但 pip 本身没有内置 audit 功能,pip-audit 填补了这个空缺。

安装

pip install pip-audit

需要 Python 3.10+。也支持 conda 安装:

conda install -c conda-forge pip-audit

基本用法

扫描当前环境

pip-audit

直接扫描当前虚拟环境中安装的所有包,输出有漏洞的包及 CVE 编号。

扫描 requirements 文件

pip-audit -r requirements.txt

扫描项目路径

pip-audit /path/to/project

会自动识别项目中的依赖文件(requirements.txt、pyproject.toml、setup.cfg 等)。

扫描 lock 文件

pip-audit --locked /path/to/project

crt.sh:查询证书签发记录工具

crt.sh 是 Sectigo(原 Comodo CA)提供的免费证书透明度(Certificate Transparency,CT)日志查询工具。输入域名就能查到该域名下所有签发过的 SSL/TLS 证书,包括子域名、证书机构、有效期等信息。渗透测试中常用来做子域名收集,运维中用来排查证书签发记录。

使用方法

打开 crt.sh,输入域名即可查询。比如查 example.com,会返回所有包含该域名的证书记录。

也可以直接用 URL 参数查询:

https://crt.sh/?q=example.com

返回结果包含:

  • 证书关联的域名(含通配符子域名)
  • 签发 CA
  • 证书起止时间
  • 证书序列号

类似工具

Censys

Censys 是一个互联网资产搜索引擎,除了 CT 日志查询,还能扫描主机的开放端口、服务、TLS 配置等。数据量比 crt.sh 大,但免费版有查询频率限制,需要注册账号。

适合需要全面资产发现的场景,覆盖证书、主机指纹、Web 指纹等。

Cert Spotter

Cert Spotter 由 SSLMate 提供,专注于 CT 日志监控。和 crt.sh 的区别是它更偏向持续监控——注册域名后,有新证书签发时会自动告警。免费 API 每天有查询限额,付费版支持 webhook 通知。

适合需要实时监控证书变更的场景,比如防止未授权的证书签发。

Facebook CT Search 是 Meta 提供的 CT 日志查询工具,界面简洁,直接输入域名或证书指纹就能查。数据源和 crt.sh 类似,都是聚合多个 CT log 的结果。

修改 SSH 监听端口与 SELinux 配置

概述

出于安全考虑,修改 SSH 默认端口(22)是一个常见的安全加固措施。本文介绍如何修改 SSH 监听端口,并正确配置 SELinux 以允许新端口的访问。

修改 SSH 监听端口

1. 编辑 SSH 配置文件

sudo vi /etc/ssh/sshd_config

找到 #Port 22 这一行,取消注释并修改为需要的端口:

Port 22
Port 2222

建议同时保留默认端口和自定义端口,便于测试。确认新端口正常工作后,再删除默认端口配置。

2. 重启 SSH 服务

sudo systemctl restart sshd

3. 验证新端口

# 检查 SSH 服务监听端口
sudo ss -tlnp | grep sshd

# 或使用 netstat
sudo netstat -tlnp | grep sshd

应该看到新端口(如 2222)已开始监听。

unattended-upgrades:Debian/Ubuntu 自动安全更新

unattended-upgrades 是 Debian 和 Ubuntu 系统上用于自动安装安全更新的工具。对于没有专人日常维护的服务器,它能确保已知漏洞及时被修补,减少被攻击的风险。

安装

首先更新软件包列表并安装:

sudo apt update
sudo apt upgrade
sudo apt install unattended-upgrades

安装完成后,系统会自动创建一个 cron 任务和 systemd 计时器,用于周期性检查并安装更新。

配置

主要配置文件有两个:

启用 / 禁用自动更新

/etc/apt/apt.conf.d/20auto-upgrades

内容格式:

# 禁用
//APT::Periodic::Update-Package-Lists "0";
//APT::Periodic::Unattended-Upgrade "0";

# 启用:每天检查并自动安装
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

控制哪些包会被更新

/etc/apt/apt.conf.d/50unattended-upgrades

默认配置大致如下(// 开头的行被忽略):

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}";
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-infra-security";
    "${distro_id}ESM:${distro_codename}-infra-security";
};

Unattended-Upgrade::Package-Blacklist {
    # 在此列出不需要自动更新的包
};

几个常用配置:

  • 只更新安全包:在 Allowed-Origins 中仅保留带 -security 后缀的行
  • 排除特定包:在 Package-Blacklist 中添加包名,每行一个
  • 自动重启:需要时(如内核更新),取消注释 Unattended-Upgrade::Automatic-Reboot "true"; 并设置 Unattended-Upgrade::Automatic-Reboot-Time "02:00";