| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #!/bin/sh
- # Provision Keiji's service identity and private directories on Linux.
- set -eu
- if [ "$(id -u)" -ne 0 ]; then
- echo 'Run this script as root (for example, sudo ./deploy/setup.sh).' >&2
- exit 1
- fi
- if [ ! -x /sbin/nologin ]; then
- echo '/sbin/nologin is not available; refusing to create the service user.' >&2
- exit 1
- fi
- # Do not silently repurpose an existing human account or change its shell.
- if getent group keiji >/dev/null; then
- :
- else
- groupadd --system keiji
- fi
- if getent passwd keiji >/dev/null; then
- entry=$(getent passwd keiji)
- existing_gid=$(printf '%s\n' "$entry" | cut -d: -f4)
- existing_shell=$(printf '%s\n' "$entry" | cut -d: -f7)
- group_gid=$(getent group keiji | cut -d: -f3)
- if [ "$existing_shell" != /sbin/nologin ] || [ "$existing_gid" != "$group_gid" ]; then
- echo 'Existing keiji account has a different shell or primary group; review it manually.' >&2
- exit 1
- fi
- else
- useradd --system --no-create-home --gid keiji --shell /sbin/nologin keiji
- fi
- # Refuse symlinks at managed paths rather than following them as root.
- for directory in /etc/keiji /var/lib/keiji /var/lib/keiji/images; do
- if [ -L "$directory" ] || { [ -e "$directory" ] && [ ! -d "$directory" ]; }; then
- echo "Not a safe directory: $directory" >&2
- exit 1
- fi
- done
- # Config is root-managed, readable by the service group, never service-writable.
- install -d -o root -g keiji -m 0750 /etc/keiji
- # Existing configuration contents are deliberately not changed recursively.
- # An administrator must install individual secrets as root:keiji mode 0640.
- # SQLite needs write access to its directory for journal and sidecar files.
- install -d -o keiji -g root -m 0700 /var/lib/keiji /var/lib/keiji/images
- # Do not recursively change ownership or modes on existing application data.
- cat <<'MSG'
- Keiji identity and directories are ready.
- Install your environment file as root:keiji mode 0640, for example:
- install -o root -g keiji -m 0640 /path/to/keiji.env /etc/keiji/keiji.env
- Existing files were not modified. Review their ownership, permissions and ACLs.
- This script does not install or start Keiji.
- MSG
|