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_userfilevault_user_passwordfilevault_additional_users_and_passwords 列表。

为你组织中的计算机设置 institutional 恢复密钥

你可以选择:

  • 部署预生成的密钥链恢复密钥
  • 部署 DER 证书,该证书会被添加到密钥链并生成一个即兴的恢复密钥

证书

通过提供的证书文件自动创建机构恢复密钥

这是我最喜欢的选项,因为准备工作最少,并且结果与 Keychain 选项相同

证书的公共名称必须是 "FileVault Recovery Key"

你可以手动生成 DER 证书:

  1. 创建一个 FileVault 主密钥链
  2. 仅导出公共证书元素到 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,__删除私钥__,并将其部署在你的计算机上:

  1. 创建一个 FileVault 主密钥链
  2. 从主密钥链中删除私钥
  3. 在每台 Mac 上部署更新的主密钥链

解锁用户的启动磁盘

如果用户忘记了他们的 macOS 用户帐户密码并且无法登录到他们的 Mac,你可以使用包含在原始 FileVaultMaster.key 文件中的私钥来解锁磁盘。

  1. 启动时按住 Command-R 进入 macOS Recovery。
  2. 连接包含 private-recovery-key 或原始 FileVaultMaster.keychain 的外部驱动器,该驱动器包含私钥。
  3. 从 macOS Recovery 的菜单栏中选择 实用工具 > 终端
  4. 解锁 FileVault 主密钥链。
security unlock-keychain /path/to/FileVaultMaster.keychain
  1. 解锁加密的启动磁盘。
# 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

授权

MIT

作者:Marco Massari Calderone (c) 2020 - marco@marcomc.com

关于项目

Ansible role to configure FileVault2 on macOS. Also used in Splinter provisioning tool.

安装
ansible-galaxy install marcomc.macos_filevault2
许可证
mit
下载
117
拥有者
Biker, tinkerer, Dev Ops something...