feature/cras-instalacion-sin-privilegios #21
Reference in New Issue
Block a user
No description provided.
Delete Branch "feature/cras-instalacion-sin-privilegios"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
El instalador exigía root o `sudo -n` (NOPASSWD), así que una cuenta con sudo CON contraseña —el caso de los servidores Linux— no podía actualizarse desde el panel. La contraseña guardada no ayudaba: se usa para autenticar SSH y a sudo nunca se le entrega, por decisión de diseño contra el antipatrón de AServers (`echo '{password}' | sudo -S`, que expone el secreto en argv). En vez de rodear esa decisión, se quita la necesidad de privilegios. El agente no necesita root para funcionar: su unit corre como el usuario que instala, y las rutas de data_folder las escribe SQL Server, no él. install.sh solo pedía privilegios por dos razones circunstanciales — el PREFIX por omisión en /opt y el unit en /etc/systemd/system. Modo nuevo `--user-service`: instala bajo el home y registra un unit de systemd de usuario. Para sobrevivir al cierre de sesión intenta lingering y, si el destino no lo permite, cae a @reboot en el crontab del usuario más un vigilante cada 5 min que sustituye al Restart=always. Con eso, al panel le bastan el usuario y la contraseña que ya tiene registrados. Además, la sonda de elevación pasa a ser compartida entre instalar y verificar (antes eran copias paralelas que ya diferían en la etiqueta) y distingue casos que se reportaban idénticos: - `requiretty` en el sudoers ya no se confunde con "sin privilegios": el remedio es el opuesto, porque agregar NOPASSWD no lo arregla. - Una regla NOPASSWD acotada a otros comandos se reporta como tal, con la lista. - Verificar informa si la ruta es escribible y si la instalación sin privilegios es viable en ese servidor, en vez de solo decir que faltan permisos. Dos bugs encontrados al probarlo, ambos con prueba: - `pgrep -f <ruta>` hacía match consigo mismo, porque la propia línea de cron del vigilante contiene esa ruta. Sin el ancla `^`, el vigilante creía que el agente corría y no lo rearrancaba nunca. - `expectedStepCount` comparaba solo con 'service', así que la barra de una instalación en modo usuario habría llegado al 100 % con un paso pendiente. `resolveLinuxPrivilege` no tenía ninguna prueba; se agregan seis. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>Pull request closed