Use azw binary in launch daemon
This commit is contained in:
committed by
T. R. Bernstein
parent
ce8e527e9c
commit
dd14a7922e
36
bin/azw-ensure-single-fv-user
Executable file
36
bin/azw-ensure-single-fv-user
Executable file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# vi: set ft=zsh tw=80 ts=2
|
||||||
|
|
||||||
|
function main {
|
||||||
|
local username="\$1"
|
||||||
|
|
||||||
|
function doesFilevaultUserExist() {
|
||||||
|
dscl . -list /Users | grep \${username} >&! /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
function isFilevaultUserEnabled() {
|
||||||
|
fdesetup list | grep \${username} &> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
function isFilevaultEnabled() {
|
||||||
|
fdesetup status | grep On &> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
function allowOnlyFilevaultUserToUnlock() {
|
||||||
|
local fdeuser
|
||||||
|
for fdeuser in \${(f)"\$(fdesetup list | cut -d',' -f1)"}; do
|
||||||
|
[[ \${fdeuser} != \${username} ]] && fdesetup remove -user "\${fdeuser}"
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ \$(id -un) == 'root' ] || { lop -- -e 'This script needs to be run by root. Aborting.'; return }
|
||||||
|
isFilevaultEnabled || { lop -- -e 'FileVault is disabled. Aborting.'; return }
|
||||||
|
doesFilevaultUserExist && isFilevaultUserEnabled && allowOnlyFilevaultUserToUnlock
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "${ZSH_EVAL_CONTEXT}" == toplevel || "${ZSH_EVAL_CONTEXT}" == cmdarg ]]; then
|
||||||
|
_DIR="${0:A:h}"
|
||||||
|
autoload -w zshlib
|
||||||
|
main "$@"
|
||||||
|
fi
|
||||||
@@ -11,7 +11,7 @@ function createLaunchDaemon() {
|
|||||||
<string>${serviceName}</string>
|
<string>${serviceName}</string>
|
||||||
<key>ProgramArguments</key>
|
<key>ProgramArguments</key>
|
||||||
<array>
|
<array>
|
||||||
<string>azw</string>
|
<string>/usr/local/bin/azw</string>
|
||||||
<string>update-zsh-libraries</string>
|
<string>update-zsh-libraries</string>
|
||||||
</array>
|
</array>
|
||||||
<key>StartCalendarInterval</key>
|
<key>StartCalendarInterval</key>
|
||||||
|
|||||||
@@ -5,42 +5,6 @@ function getDefaultFilevaultUsername() {
|
|||||||
print 'azwdevice'
|
print 'azwdevice'
|
||||||
}
|
}
|
||||||
|
|
||||||
function createEnsurerBinary() {
|
|
||||||
[[ -x $binaryPath ]] && return
|
|
||||||
cat > $binaryPath <<- BINARY
|
|
||||||
#!/usr/bin/env zsh
|
|
||||||
function {
|
|
||||||
local username="\$1"
|
|
||||||
|
|
||||||
function doesFilevaultUserExist() {
|
|
||||||
dscl . -list /Users | grep \${username} >&! /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function isFilevaultUserEnabled() {
|
|
||||||
fdesetup list | grep \${username} &> /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function isFilevaultEnabled() {
|
|
||||||
fdesetup status | grep On &> /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function allowOnlyFilevaultUserToUnlock() {
|
|
||||||
local fdeuser
|
|
||||||
for fdeuser in \${(f)"\$(fdesetup list | cut -d',' -f1)"}; do
|
|
||||||
[[ \${fdeuser} != \${username} ]] && fdesetup remove -user "\${fdeuser}"
|
|
||||||
done
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
[[ \$(id -un) == 'root' ] || return
|
|
||||||
isFilevaultEnabled || return
|
|
||||||
doesFilevaultUserExist && isFilevaultUserEnabled && allowOnlyFilevaultUserToUnlock
|
|
||||||
}
|
|
||||||
BINARY
|
|
||||||
chown root:wheel $binaryPath
|
|
||||||
chmod ug=rx,o=r $binaryPath
|
|
||||||
}
|
|
||||||
|
|
||||||
function createLaunchDaemon() {
|
function createLaunchDaemon() {
|
||||||
cat > ${launchDaemonPath} <<- LDAEMON
|
cat > ${launchDaemonPath} <<- LDAEMON
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
@@ -51,7 +15,8 @@ function createLaunchDaemon() {
|
|||||||
<string>${serviceName}</string>
|
<string>${serviceName}</string>
|
||||||
<key>ProgramArguments</key>
|
<key>ProgramArguments</key>
|
||||||
<array>
|
<array>
|
||||||
<string>${binaryPath}</string>
|
<string>/usr/local/bin/azw</string>
|
||||||
|
<string>ensure-single-fv-user</string>
|
||||||
<string>${filevault_username}</string>
|
<string>${filevault_username}</string>
|
||||||
</array>
|
</array>
|
||||||
<key>OnDemand</key>
|
<key>OnDemand</key>
|
||||||
@@ -79,8 +44,6 @@ function createLaunchdService() {
|
|||||||
|
|
||||||
function configure_system() {
|
function configure_system() {
|
||||||
lop -y h1 -- -i 'Allow only Filevault user to unlock disk'
|
lop -y h1 -- -i 'Allow only Filevault user to unlock disk'
|
||||||
local binaryPath='/usr/local/bin/ensure-single-filevault-user'
|
|
||||||
indicateActivity -- 'Create ensurer binary' createEnsurerBinary
|
|
||||||
createLaunchdService
|
createLaunchdService
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user