Skip to content

Instantly share code, notes, and snippets.

@Telling
Last active November 1, 2022 17:52
Show Gist options
  • Save Telling/fd4970dd342597976de95176ec03d4ef to your computer and use it in GitHub Desktop.
Save Telling/fd4970dd342597976de95176ec03d4ef to your computer and use it in GitHub Desktop.
create-daemon-user
#!/usr/bin/env bash
# Make sure we are root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
if [ -z "$1" ]; then
echo "Provide the user name as the first argument." 1>&2
exit 1
fi
get_next_daemon_uid() {
all_uids=$(dscl . -list /Users UniqueID | grep -o '[0-9]\+' | sort -nr)
for uid in $all_uids; do
if (( uid < 500 )); then
echo "$((( uid + 1 )))"
exit 0
fi
done
exit 1
}
next_uid=$(get_next_daemon_uid)
username="$1"
realname="${1} daemon"
echo "Creating group _${username} with gid: ${next_uid}"
dscl . -create "/Groups/_${username}"
dscl . -create "/Groups/_${username}" PrimaryGroupID "$next_uid"
dscl . -create "/Groups/_${username}" RecordName "_${username}" "$username"
dscl . -create "/Groups/_${username}" RealName "$realname"
dscl . -create "/Groups/_${username}" Password \*
echo "Creating user _${username} with uid: ${next_uid}"
dscl . -create "/Users/_$username"
dscl . -create "/Users/_$username" NFSHomeDirectory /var/empty
dscl . -create "/Users/_$username" Password \*
dscl . -create "/Users/_$username" PrimaryGroupID "$next_uid"
dscl . -create "/Users/_$username" RealName "$realname"
dscl . -create "/Users/_$username" RecordName "_${username}" "$username"
dscl . -create "/Users/_$username" UniqueID "$next_uid"
dscl . -create "/Users/_$username" UserShell /usr/bin/false
dscl . -delete "/Users/_$username" PasswordPolicyOptions
dscl . -delete "/Users/_$username" AuthenticationAuthority
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment