marcomc.macos_filevault2
macOS 的 FileVault2 Ansible 角色
这个 Ansible 角色实现了一部分命令,通过 macOS v10.7 或更新系统中的 fdesetup
来仅仅 启用
FileVault2。
用于 Splinter,一个用于 macOS 的意见化配置工具。
示例剧本
- vars:
filevault_additional_users_and_passwords:
- { username: "testuser", password: "test_password" }
filevault_certificate: yes
filevault_certificate_file: "/path/to/my/DER.cer"
filevault_showrecoverykey: yes
filevault_user_password: "激活 FileVault 的用户密码"
- hosts: localhost
roles:
- marcomc.macos_filevault2
变量
实现的 启用
选项子集如下:
fdesetup enable
[-outputplist]
[-forcerestart]
[-authrestart]
[-keychain | [-certificate path_to_cer_file]]
[
[-defer file_path]
[-forceatlogin max_cancel_attempts]
[-dontaskatlogout]
[-showrecoverykey]
]
[-norecoverykey]
[-verbose]
每个选项都有对应的 ansible 变量(还有一些额外的变量以支持更多功能)。
verbose: no
filevault_user: "{{ ansible_user_id }}"
filevault_user_password: "{{ ansible_become_pass }}"
filevault_additional_users_and_passwords: []
# - { username: "testuser6", password: "testest" }
# - { username: "testuser7", password: "testest2" }
filevault_input_plist: '' # 如果想部署一个静态 plist 文件非常有用
filevault_keychain: no
filevault_keychain_file: no # 如果 institutional_type 为 'certificate' 则会被忽略
filevault_keychain_file_override: no # 覆盖任何现有副本 '/Library/Keychains/FileVaultMaster.keychain'
filevault_certificate: no
filevault_certificate_file: "" # 如果 institutional_type 为 'keychain' 则会被忽略
filevault_norecoverykey: no # 'yes' 表示仅使用 FileVaultMaster 密钥链作为恢复密钥
# 'no' 会生成个人恢复密钥
filevault_recovery_key_output_file: "~/Desktop/{{ ansible_hostname }}-presonal-recovery-key.txt" # 生成 FileVault2 个人恢复密钥的保存路径
filevault_outputplist: no
filevault_defer: no
filevault_defer_file: "/dev/null"
filevault_showrecoverykey: no
filevault_dontaskatlogout: no
filevault_forcerestart: no
filevault_authrestart: no
filevault_forceatlogin: no
filevault_max_cancel_attempts: '-1' # (-1: 忽略此选项, 0=下次, 9999=仅请求, 不强制)
filevault_forcerestart: no
你可以通过切换选项来获取你喜欢的安装方法,就像直接使用命令行工具一样:
# 示例:使用证书启用 FileVault2,无需生成个人恢复密钥
filevault_user: "{{ ansible_user_id }}"
filevault_user_password: "{{ ansible_become_pass }}"
filevault_additional_users_and_passwords:
- { username: "testuser6", password: "testest" }
filevault_certificate: yes
filevault_certificate_file: "~/Documents/certificate.cer"
filevault_norecoverykey: yes
这对应于:
fdesetup enable -certificate ~/Documents/certificate.cer -norecoverykey -inputplist < imput_plist
输入列表
你可以指定自己的输入 plist 以进一步自定义你的安装,或者在需要其他进程生成此文件时使用。
如果不指定自己的输入 plist(默认行为),则会动态生成一个 plist,结合 filevault_user
、filevault_user_password
和 filevault_additional_users_and_passwords
列表。
为你组织中的计算机设置 institutional
恢复密钥
你可以选择:
- 部署预生成的密钥链恢复密钥
- 部署 DER 证书,该证书会被添加到密钥链并生成一个即兴的恢复密钥
证书
通过提供的证书文件自动创建机构恢复密钥
这是我最喜欢的选项,因为准备工作最少,并且结果与
Keychain
选项相同
证书的公共名称必须是 "FileVault Recovery Key"
你可以手动生成 DER 证书:
- 创建一个 FileVault 主密钥链
- 仅导出公共证书元素到 FileVaultRecoveryKey.cer 文件
此外,你还可以使用 splinter-tools/filevault-recovery-key-generator.sh 脚本
确保将密钥链和其密码保存在安全的地方(Bitwarden、LastPass、1Password)
生成的自签名证书将被命名为 FileVault Recovery Key (<your_hostname>)
。
你的主机名被设置为证书描述,无法更改。
如果你希望括号中的描述不同于主机名,你必须暂时更改计算机名称以设置所需的证书 description
,然后将主机名恢复为原值。
#!/usr/bin/env bash
# 存储原始主机名
ORIGINAL_HOSTNAME=$(eval hostname)
# 将主机名更改为所需的描述
sudo scutil --set HostName "Institutional"
# 创建带有证书的密钥链
sh filevault-recovery-key-generator.sh FileVaultMaster
# 恢复原始主机名
sudo scutil --set HostName "${ORIGINAL_HOSTNAME}"
密钥链
如果你选择密钥链机构恢复密钥,请确保先生成包含你的恢复密钥的密钥链文件 FileVaultMaster.keychain
,__删除私钥__,并将其部署在你的计算机上:
解锁用户的启动磁盘
如果用户忘记了他们的 macOS 用户帐户密码并且无法登录到他们的 Mac,你可以使用包含在原始 FileVaultMaster.key
文件中的私钥来解锁磁盘。
- 启动时按住 Command-R 进入 macOS Recovery。
- 连接包含
private-recovery-key
或原始FileVaultMaster.keychain
的外部驱动器,该驱动器包含私钥。 - 从 macOS Recovery 的菜单栏中选择
实用工具 > 终端
。 - 解锁 FileVault 主密钥链。
security unlock-keychain /path/to/FileVaultMaster.keychain
- 解锁加密的启动磁盘。
# APFS 磁盘
diskutil ap unlockVolume "加密驱动器名称" -recoveryKeychain /path/to/FileVaultMaster.keychain
# Mac OS Extended (HFS Plus) 磁盘
diskutil cs list # 查找 UUID
diskutil cs unlockVolume {UUID} -recoveryKeychain /path/to/FileVaultMaster.keychain
授权
作者:Marco Massari Calderone (c) 2020 - marco@marcomc.com