惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
Help Net Security
Help Net Security
P
Privacy International News Feed
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
A
Arctic Wolf
Latest news
Latest news
T
Threat Research - Cisco Blogs
L
LINUX DO - 最新话题
P
Privacy & Cybersecurity Law Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
月光博客
月光博客
N
News and Events Feed by Topic
Jina AI
Jina AI
博客园 - 司徒正美
WordPress大学
WordPress大学
罗磊的独立博客
雷峰网
雷峰网
AI
AI
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Security @ Cisco Blogs
博客园 - 三生石上(FineUI控件)
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cisco Blogs
博客园 - 【当耐特】
The Hacker News
The Hacker News
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Schneier on Security
Schneier on Security
博客园 - Franky
S
SegmentFault 最新的问题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cloudbric
Cloudbric
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
Last Week in AI
Last Week in AI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Know Your Adversary
Know Your Adversary
Google DeepMind News
Google DeepMind News

达拉斯・卢

OpenWRT 使用 udp2raw 对抗 WireGuard 阻断 博客程序架构的思考与展望 如何证明你是原创作者 Nginx 泛域名配置的隐患与对策 WISeID S/MIME 证书 V2EX 刑满释放记 邮件服务的域名成功从 SURBL 黑名单移除 网站多语言的设计细节 网站评论系统的目前进展和展望 在公网使用 iptables 转发端口时保留客户端 IP 邮件投递平台 Postal 的使用经验 自建 Postal 完美替代 SendGrid 互联网在崩塌吗,然后呢 在 SvelteKit 应用中使用 JSON-LD 网页的打印样式应该怎么写 “茴字的四种写法”之 IP 与域名 怎么伪造 Git 提交的时区 供大众交流的论坛和其它替代产品还是不好用 改编不是照搬 一次排查诡异的网络问题的经历
使用 Radicale 在 Ubuntu 24.04 中搭建 vCards CardDav 服务
达拉斯・卢 · 2024-10-17 · via 达拉斯・卢

vCards 是一个中国黄页开源项目,整理了一批常用的企业联系人,并精心设定了头像;可以导入到手机、电脑中,优化来电和信息界面的使用体验。支持 vcf 文件下载,要求使用者手动导入;如果后续有变动,仍需重复手动导入操作。本文探讨使用 Radicale 在 Ubuntu 24.04 中搭建 CardDav 服务,以实现方便在各个设备上订阅导入,以及让黄页联系人自动保持最新的目标。

准备工作

出于安全考虑,建议使用专用的用户:

sudo useradd --system --user-group --home-dir /home/radicale --shell /sbin/nologin radicale

创建 Radicale 数据目录:

sudo mkdir -p /home/radicale/collections/collection-root
sudo chown -R radicale: /home/radicale

vCards

vCards 项目已经可以直接输出 Radicale 所支持的数据格式。

sudo apt install git npm

# 切换到用户 radicale
sudo su -l radicale -s /bin/bash
cd ~
git clone https://github.com/metowolf/vCards.git
cd vCards
npm install
npm run radicale

完成后,数据会输出在 vCards 目录中的 radicale,创建一个软链接,以供 Radicale 使用:

ln -s /home/radicale/vCards/radicale /home/radicale/collections/collection-root/cn

运行 crontab -e,添加一个定时任务,以使得数据自动保持最新。鉴于项目更新频率,可设置为每周更新一次:

0 5 * * 1 cd /home/radicale/vCards && git pull && npm run radicale

Radicale

Radicale 是一个开源的 CalDav 和 CardDav 服务器软件,基于 Python 编写。

安装

安装 Radicale

sudo apt install python3-pip python3.12-venv

python3 -m venv /home/radicale/python3-env
source /home/radicale/python3-env/bin/activate
pip install radicale

配置

创建配置目录:

mkdir /etc/radicale

因为联系人数据是由 vCards 项目自动生成,为避免日后数据混乱,所以要关闭 Radicale 的修改写入功能。创建权限配置 /etc/radicale/rights

[root]
user: .+
collection:
permissions: R

# (same as user name)
[principal]
user: .+
collection: {user}
permissions: R

[collections]
user: .+
collection: {user}/[^/]+
permissions: rR

参考 官方文档 ,创建 Radicale 配置文件 /etc/radicale/config

[rights]
type = from_file
file = /etc/radicale/rights
[storage]
type = multifilesystem
filesystem_folder = /home/radicale/collections

创建服务配置 /etc/systemd/system/radicale.service

[Unit]
Description=A simple CalDAV (calendar) and CardDAV (contact) server
After=network.target
Requires=network.target

[Service]
ExecStart=/home/radicale/python3-env/bin/python -m radicale
Restart=on-failure
User=radicale
# Deny other users access to the calendar data
UMask=0027
# Optional security settings
PrivateTmp=true
ProtectSystem=strict
#ProtectHome=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
NoNewPrivileges=true
ReadWritePaths=/home/radicale/collections

[Install]
WantedBy=multi-user.target

启动服务并查看状态:

sudo systemctl deamon-reload
sudo systemctl enable --now radicale
sudo systemctl status radicale

提供 HTTPS 访问

Caddy

安装 Caddy 并编辑配置文件:

sudo apt install caddy

sudo vim /etc/caddy/CaddyFile

配置:

vcards.example.com {
    reverse_proxy localhost:5232
}

启动:

sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl enable --now caddy
sudo systemctl status caddy

请确保 80/443 端口开放:

sudo ufw allow 80,443/tcp

Nginx

参考以下配置:

server {
        listen          443 ssl http2;
        listen          [::]:443 ssl http2;
        server_name vcards.example.com;

        # ssl cert ...
        # security ...

        location ^~ /{
                proxy_pass          http://localhost:5232;
        }
        access_log off;
}

使用

访问 https://vcards.example.com,如果一切正常,会看到 Radicale 的登录页面,用户名 cn 密码任意填写,即可登录并查看到 vCards 提供的联系人信息。

订阅相关参数:

  • 服务器:vcards.example.com
  • 用户名: cn
  • 密码:cn 或任意填写

在设备中添加订阅:

  • iOS: 「设置」--「通讯录」--「账户」--「添加账户」-- 「其他」--「添加 CardDAV 账户」。因为 iOS 的 Bug,并不能随时修改描述,建议将 描述 填写为「中国黄页」。
  • Mac:「通讯录」--「设置」--「账户」--「其他通讯录账户」
  • ThunderBird
    • 旧版:需要安装 TbSync 及 Provider for CalDav & CardDav 扩展。「工具」--「Synchronization Settings(TbSync)」--「Account actions」--「CalDav & CardDav」-- 「Manual Configuration
    • 新版:等待官方支持
  • Android:需要安装 DAVx5。「+」--「使用 URL 和用户名登录」

可尝试使用由 vCards 的作者 metowolf 提供的公开订阅服务:vcards.metowolf.com (以 vcards.metowolf.com替换vcards.example.com)

结语

本方案中 Radicale 对于订阅用户来说,是只读的。如果你有需要临时加入一些号码,建议在本地另建一个与主联系人的有相同主号码的联系人,iOS 会自动将 vCards 中的黄页联系人和本地联系人自动合并显示。

订阅同步的方式,可能会消耗相当的服务器流量,如果你有资源,可以搭建公开的同步服务并分享给他人使用;如果你在白嫖他们提供的服务,建议设置为最慢的同步频率,以节省你的电量、流量,以及英雄们的服务器带宽和流量。