Una gran aplicación necesita, en un momento específico, realizar una pequeña cantidad de escrituras en un archivo que requiere permisos de root. No es realmente un archivo, sino una interfaz de hardware que está expuesta a Linux como un archivo.
Para evitar otorgar privilegios de root a toda la aplicación, escribí un script bash que realiza las tareas críticas. Por ejemplo, el siguiente script habilitará el puerto 17 de la interfaz de hardware como salida:
echo "17" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio17/direction
Sin embargo, como suid
está deshabilitado para los scripts de bash en mi sistema, me pregunto cuál es la mejor manera de lograrlo.
Use alguna solución presentada aquí
Llame al script
sudo
desde la aplicación principal y edite la lista de sudoers en consecuencia, para evitar requerir una contraseña al llamar al script. Me incomoda un poco dar privilegios de sudoecho
.Simplemente escriba un programa en C, con
fprintf
, y configúrelo en suid root. Codifique las cadenas y los nombres de archivo y asegúrese de que solo root pueda editarlo. O lea las cadenas de un archivo de texto, de manera similar, asegurándose de que nadie pueda editar el archivo.¿Alguna otra solución que no se me ocurrió y es más segura o más simple que las presentadas anteriormente?