Ten mucho cuidado:¡los scripts combinados con setuid son peligrosos!
Primero, eche un vistazo a esta pregunta/respuesta, especialmente a esta respuesta y advertencia de seguridad.
Si aún desea ejecutar su script con setuid
establecido, entonces puede escribir un programa C corto como contenedor y establecer el setuid
bit en el binario compilado.
Ejemplo de envoltorio:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Otra solución usando sudo
(mencionado aquí):
-
Como root, evite el acceso de escritura (y tal vez otro) a su secuencia de comandos:
chown root /absolute/path/to/your/script.sh chmod 700 /absolute/path/to/your/script.sh
-
Verifique que nadie excepto root pueda reemplazar el script , p.ej. modificando los derechos de acceso de la carpeta principal:
chown root /absolute/path/to/your/ chmod 755 /absolute/path/to/your/
-
Modificar los derechos de acceso de sudo en
/etc/sudoers
convisudo
:ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Puede encontrar más detalles sobre la configuración (p. ej., restringir el acceso a usuarios o grupos específicos) en la página de manual de sudoers.
Luego, todos los usuarios pueden ejecutar el script como root sin contraseña:
sudo /absolute/path/to/your/script.sh
Esto es similar a usar la solución wrapper/setuid anterior.
La forma más fácil y segura es usar bits SETUID en los permisos de archivo. De esa manera, los permisos de comando se elevarán a permisos de propietario de archivo.
para evitar que se edite el script, no configure los bits de escritura para todos.