Cómo agregar programáticamente secure_path en el archivo sudoers

11

Estoy tratando de construir un script de datos de usuario para una instancia EC2 que construye node y npm desde github, y luego inicia un servicio. Para engrasar estas ruedas, necesito agregar:

:/usr/local/bin

hasta el final de la línea en / etc / sudoers que comienza:

Defaults        secure_path="

/superuser/927512/how-to-set-path-for-sudo-commands habla sobre el uso de visudo para lograr esto, pero quiero hacerlo programáticamente dentro de los datos de usuario de EC2.

/programming/16282789/adding-sudo-permissions-to-sudoers-for-user-via-shell-script habla sobre la edición del archivo sudoers, pero parece estar demasiado cocido por lo que estoy intentando conseguir.

Pensé que sería fácil agarrar la línea y reemplazarla, pero estoy perplejo. ¡No solo por esa molesta coma invertida de cierre!

belial
fuente

Respuestas:

6

Si puede vivir reemplazando el secure_pathvalor en lugar de agregarlo, puede usar una solución mucho más fácil. Por lo general, sudo tiene un directorio de configuración como /etc/sudoers.ddonde puede colocar archivos de configuración adicionales.

Simplemente cree un archivo allí con su secure_pathvalor completo :

Defaults secure_path="<default value>:/usr/local/bin"

Esto sobrescribe el valor de la configuración principal. Si el valor de la ruta es el mismo para todas sus máquinas, esto se puede implementar fácilmente con scripts o un paquete.

Esto tiene la ventaja adicional de que no tiene que verificar y posiblemente fusionar archivos de configuración cuando el paquete sudo se actualice en el futuro.

Gerald Schneider
fuente
2

suponiendo que conozca la línea con secure_path existe, un simple comando sed para hacer esto

sed -i -e '/secure_path/ s[=.*[&:/usr/local/bin[' /etc/sudoers

o un poco más sofisticado (más verificación de sintaxis en la entrada):

sed -i -r -e '/^\s*Defaults\s+secure_path/ s[=(.*)[=\1:/usr/local/bin[' /etc/sudoers
tonioc
fuente