3.2. Comandos de root

El servidor apache bajo el que funciona eBox y cualquier otro script de perl que utilice el API de eBox, utilizan un id de usuario dedicado. El usuario es normalmente llamado “ebox”. Los módulos de eBox necesitan ejecutar ciertos comandos y escribir ciertos ficheros con privilegios de root, esto se hace usando sudo.

Se puede llamar a cualquier comando utilizando la función root() en el paquete perl EBox::Sudo. Si el comando falla, root() lanza una excepción de tipo EBox::Exceptions::Sudo::Command, asegúrese de que sea capturada si es correcto que el comando falle o si desea informar al usuario de una forma distinta. En cualquier caso se pueden usar los métodos output, error y exitValue para obtener más información sobre el fallo de comando. En los raros casos en lo que el propio programa sudo falla la excepción levantada es del tipo EBox::Exceptions::Sudo::Wrapper y los últimos métodos no estarán disponibles.

Ejemplo 3.2. Using EBox::Sudo::root()

try {
  EBox::Sudo::root("/usr/bin/eject -t");
}
catch EBox::Exceptions::Sudo::Wrapper with {
  throw EBox::Exceptions::Internal("sudo program failed");
}
catch EBox::Exceptions::Sudo::Command with {
  my ($ex) = @_;
  EBox::debug("/usr/bin/eject failed. Stderr was " . (join "\n", @{ $ex->error() })) ;
  throw EBox::Exceptions::External("Cannot close CD-ROM tray. Please close it manually" );
}

EBox::Sudo provee funciones de interfaz con comandos frecuentemente ejecutados con privilegios de superusuario. stat propociona interfaz con el programa stat, resulta util para obtener informacion sobre cualquier archivo. Si necesitas una infromacion mas concisa sobre el archivo puedes usar fileTest para realizar comprobaciones simples sobre archivos, como hace el programa /usr/bin/test.