Hodei-Shield Agent: guía beta para macOS¶
Instala la versión 2.20.0 en macOS 13 o posterior (Apple Silicon o
Intel). Necesitas una cuenta de administrador, HTTPS saliente a la URL de tu
plataforma y a hs-agent-releases.s3.gra.io.cloud.ovh.net, un token de
inscripción (sirve una vez; lo crea en la consola el administrador de tu
organización o el de tu MSSP), un id de agente (letras, dígitos, . _ : -;
será el nombre permanente de la máquina), la URL de la plataforma
(https://…) y OpenSSL 3 (brew install openssl@3; el openssl del sistema es
LibreSSL y no puede hacer la comprobación). Los informes de error van a Sentry por defecto:
para desactivarlos, crea la marca antes de instalar el .pkg (final de esta guía).
Aún no medido en un Mac. Todos los pasos siguientes están
NOT RUN(no ejecutados): se escriben desde el empaquetado. Eres de los primeros en seguirlos. Si un paso falla, detente y escribe a info@hodeitek.com; no repitas la inscripción.
1. Descarga¶
Solo desde el almacén de versiones, nunca desde un enlace de correo o chat.
V="${V:?set V to the version you were given}"
B=https://hs-agent-releases.s3.gra.io.cloud.ovh.net
mkdir hodei-install && cd hodei-install
curl -fsSLO "$B/agent/$V/hodei-shield-$V-universal.pkg"
curl -fsSLO "$B/agent/$V/SHA256SUMS"
curl -fsSLO "$B/agent/$V/SHA256SUMS.sig"
Antes de ejecutar nada, comprueba que la descarga es auténtica: verificar una versión del agente y verificar la descarga.
2. Verificación¶
Versión independiente de esta comprobación: verify-release.md.
El .pkg está firmado con un Developer ID de Apple y notarizado; SHA256SUMS.sig
es la firma de versión (Ed25519) sobre SHA256SUMS. Guarda como
hodei-shield-release.pub.pem (es la huella de la clave, no el checksum del paquete; el paquete se comprueba con SHA256SUMS más abajo. Para calcular la huella de la clave guardada: /opt/homebrew/opt/openssl@3/bin/openssl pkey -pubin -in hodei-shield-release.pub.pem -outform DER | tail -c 32 | shasum -a 256 → 8b730d2fcbd90e2656bd9b3f265638f1e8e8ac2379d48b0636feb5efe5a88f07 -):
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAEUqKd+ot7BESwk+vf6EVBKudMi6F6jmY3dJeHXfCWkQ=
-----END PUBLIC KEY-----
/usr/local/opt/openssl@3/bin/openssl en Intel):
SSL=/opt/homebrew/opt/openssl@3/bin/openssl
$SSL base64 -d -A -in SHA256SUMS.sig -out SHA256SUMS.sig.raw
$SSL pkeyutl -verify -rawin -pubin -inkey hodei-shield-release.pub.pem \
-sigfile SHA256SUMS.sig.raw -in SHA256SUMS # Signature Verified Successfully
grep " hodei-shield-$V-universal\.pkg\$" SHA256SUMS | shasum -a 256 -c - # ...pkg: OK
pkgutil --check-signature "hodei-shield-$V-universal.pkg" # Developer ID Installer: Hodeitek
3. Instalación¶
sudo installer -pkg "hodei-shield-$V-universal.pkg" -target /
sudo -u _hodeishield tee /var/lib/hodei-shield/hodei-shield.toml >/dev/null <<'EOT'
platform_url = "https://<platform host>"
state_dir = "/var/lib/hodei-shield"
EOT
/usr/local/bin/hodei-shield version
_hodeishield, la carpeta de estado y el
fichero de CA, y arranca el servicio, que espera en silencio hasta que te inscribas.
Un servicio que se reinicia sin parar es un fallo.
Qué instala el paquete en tu Mac¶
installer solo imprime sus propias líneas de progreso (la última, The install was successful.). Los mensajes del propio paquete van al log del instalador; para leerlos:
El paquete instala:
- /usr/local/bin/hodei-shield: el agente (root:wheel 0755).
- /Applications/Hodei-Shield.app: la ventana de estado, opcional. Solo lee un fichero de estado y no guarda claves.
- /Library/LaunchDaemons/com.hodeitek.hodei-shield.plist y /Library/LaunchDaemons/com.hodeitek.hodei-shield.runtime-dir.plist: el servicio del agente. Corre con la cuenta de sistema _hodeishield, nunca como root.
- /Library/PrivilegedHelperTools/com.hodeitek.hodei-shield.update y /Library/LaunchDaemons/com.hodeitek.hodei-shield.update.plist: el ayudante de actualización. Está cargado pero inactivo: las versiones estables de macOS no se actualizan solas, y se actualiza instalando el nuevo .pkg.
- /etc/hodei-shield/platform-ca.pem (la CA de la plataforma), /etc/newsyslog.d/com.hodeitek.hodei-shield.conf (rotación de logs; aún no está activa en 2.20.1, así que /var/log/hodei-shield crece hasta que lo vacíes), /usr/local/libexec/hodei-shield/uninstall.sh (el desinstalador), /usr/local/share/doc/hodei-shield/THIRD-PARTY-NOTICES.
- Carpetas: /var/lib/hodei-shield (0700, estado y clave privada), /var/log/hodei-shield (0750, logs), /var/run/hodei-shield (estado para la ventana), /private/var/db/hodei-shield-update (root 0700, registros de actualización).
Para quitarlo todo: sudo /usr/local/libexec/hodei-shield/uninstall.sh (añade --purge para borrar también el estado y los logs).
Ítems de inicio: tras la instalación, macOS puede avisar de que se han añadido ítems en segundo plano, y Ajustes del Sistema → General → Ítems de inicio → Permitir en segundo plano muestra el agente como «Hodeitek SL». Es el agente de Hodei-Shield (firmado por Hodeitek S.L.). Déjalo activado: si lo desactivas, el agente deja de ejecutarse y el equipo deja de informar.
Icono de la barra de menús: en esta versión la barra de menús muestra un escudo gris, aunque todo funcione. Es normal y no significa que el agente esté detenido. Pasa el puntero por encima para ver el estado, o abre Hodei-Shield.app para ver el detalle.
4. Inscripción¶
Una vez por máquina. El token se teclea oculto, nunca en una línea de comandos.
cd /
IFS= read -rs HODEI_TOKEN && echo
printf '%s' "$HODEI_TOKEN" | sudo -u _hodeishield env \
HODEI_PLATFORM_URL="https://<platform host>" \
HODEI_STATE_DIR=/var/lib/hodei-shield \
/usr/local/bin/hodei-shield enroll --token-stdin --agent-id '<this machine id>'
unset HODEI_TOKEN
sudo launchctl kickstart -k system/com.hodeitek.hodei-shield
enrolled: producer=endpoint_agent:<id> public_key_id=… tenant_id=….
Lo que verás¶
{"timestamp":"…","level":"INFO","fields":{"message":"enrolled as a signing producer","public_key_id":"…","producer":"\"endpoint_agent:<your-agent-id>\"","tenant_id":"…"},"target":"agent_enroll::producer"}
enrolled: producer=endpoint_agent:<your-agent-id> public_key_id=<uuid> tenant_id=<uuid>
If the agent service is stopped, start it: sudo launchctl load -w /Library/LaunchDaemons/com.hodeitek.hodei-shield.plist. If it is running and was waiting for this enrollment, it will pick it up within 5 minutes; to pick it up now: sudo launchctl kickstart -k system/com.hodeitek.hodei-shield
enrolled: es el resultado: anota el public_key_id. Después ejecuta el kickstart que sugiere, para que el agente empiece a informar ya y no en 5 minutos.
Si falla, no reutilices el token: pide uno nuevo a tu administrador. Error de certificado o
TLS: no añadas certificados ni desactives comprobaciones; el agente solo confía en
/etc/hodei-shield/platform-ca.pem. Envía la salida de hodei-shield diagnose a tu
administrador; otros fallos: resolución de problemas.
5. Comprobar en la consola¶
sudo launchctl print system/com.hodeitek.hodei-shield | head, y esto debe salir con 0:
sudo -u _hodeishield sh -c 'cd /var/lib/hodei-shield && exec /usr/local/bin/hodei-shield self-test'.
La máquina aparece en Endpoints tras su primer ciclo. Registros (la carpeta solo la lee la cuenta de servicio, así que usa sudo):
sudo tail -50 /var/log/hodei-shield/hodei-shield.err.log, o ambos logs con
sudo sh -c 'tail -50 /var/log/hodei-shield/*.log'. Un Mac sin EDR ni antivirus
informa de un fail (Third-party EDR present and active); es cierto, no un fallo.
Aviso esperado: las versiones estables de macOS y Windows no se actualizan solas. Aproximadamente una vez por hora el registro muestra una línea
WARNupdate poll/apply did not succeed; continuing on current versioncon el motivoself-update is not supported on this OS by this release. Es lo esperado y no indica un problema: se actualiza instalando el paquete nuevo. (Una versión posterior lo registra una sola vez, como información.)Controles en «Error» en esta beta: algunos controles pueden aparecer como «Error» en sistemas cuyo idioma no es el inglés, o porque el agente se ejecuta sin permisos de administrador. No significa que el control esté fallando: el agente no pudo leerlo con fiabilidad y no lo cuenta como cumplido. La próxima versión beta lo corrige.
6. Actualizar a mano¶
macOS no tiene aplicador de actualizaciones: se actualiza a mano con un .pkg. No te inscribas de nuevo. /var/lib/hodei-shield no se toca.
Descarga y verifica el nuevo .pkg como en los pasos 1 y 2 y:
V=<nueva versión>
sudo cp -p /usr/local/bin/hodei-shield ~/hodei-shield.prev # copia para revertir
sudo installer -pkg "hodei-shield-$V-universal.pkg" -target /
/usr/local/bin/hodei-shield version # la versión nueva
sudo -u _hodeishield sh -c 'cd /var/lib/hodei-shield && exec /usr/local/bin/hodei-shield self-test'
sudo launchctl bootout system/com.hodeitek.hodei-shield, después
sudo install -o root -g wheel -m 0755 ~/hodei-shield.prev /usr/local/bin/hodei-shield,
y sudo launchctl bootstrap system /Library/LaunchDaemons/com.hodeitek.hodei-shield.plist.
7. Desinstalación¶
Antes, pide a tu administrador que revoque la máquina (consola: Endpoints, el
endpoint, Revoke enrolment). El .pkg 2.20.0 trae un desinstalador (NOT RUN en un Mac):
sudo /usr/local/libexec/hodei-shield/uninstall.sh # como root; conserva la clave y los registros
sudo /usr/local/libexec/hodei-shield/uninstall.sh --purge # borra también clave, cola, config, registros (irreversible)
/Library/PrivilegedHelperTools/com.hodeitek.hodei-shield.update), la app, la CA y el recibo, y la
cuenta _hodeishield si la creó el paquete. Sin --purge conserva /var/lib/hodei-shield
(clave privada, cola, hodei-shield.toml; pasa a root antes de borrar la cuenta, NOT RUN;
una reinstalación la devuelve) y /var/log/hodei-shield;
/etc/hodei-shield queda si contiene telemetry-off. Los registros aún no rotan (la regla
viene desactivada): /var/log/hodei-shield crece hasta que lo borres. Los .pkg
anteriores no traen desinstalador: quítalos a mano:
sudo launchctl unload -w /Library/LaunchDaemons/com.hodeitek.hodei-shield.plist
sudo launchctl unload -w /Library/LaunchDaemons/com.hodeitek.hodei-shield.runtime-dir.plist
sudo rm /Library/LaunchDaemons/com.hodeitek.hodei-shield.plist /Library/LaunchDaemons/com.hodeitek.hodei-shield.runtime-dir.plist
sudo rm /usr/local/bin/hodei-shield
sudo dscl . -delete /Users/_hodeishield; sudo dscl . -delete /Groups/_hodeishield
sudo pkgutil --forget com.hodeitek.hodei-shield
/var/lib/hodei-shield conserva la clave privada de la máquina: bórralo solo a propósito.
Privacidad y ayuda. Los informes de error (solo fallos, sin datos personales) van a Sentry;
para desactivarlos: sudo mkdir -p /etc/hodei-shield && sudo touch /etc/hodei-shield/telemetry-off
(antes de instalar el .pkg). Ayuda: info@hodeitek.com o el botón Beta de la consola.