Cómo quitar un usuario de un grupo en Linux

Si bien existen varias formas para realizar esta tarea, la más simple es mediante el comando deluser:

sudo deluser <USUARIO> <GRUPO>

lo cual quita el usario del grupo indicado. No borra el usuario ni el grupo. Para que aplique el cambio es necesario volver a iniciar sesión.

Ejemplo:

$ sudo deluser invitado admin

con lo que el usuario invitado deja de pertenecer al grupo admin.

También se puede hacer mediante el comando usermod, pero obliga a especificar TODOS los grupos suplementarios a los que debe quedar asociado el usuario. Es decir, el usuario se quitará de los grupos a los que pertenezca y no se mencionen en la lista:

sudo usermod -G <GRUPO1>[,<GRUPO2>...]

Atención: tener cuidado al utilizar este comando ya que si indicamos alguno de los siguientes, borramos el usuario:

$ sudo deluser invitado

$ sudo usedel invitado

Este último no es el mismo comando, pero al ser parecido podemos confundirnos.

Anuncios

Acceder a página protegida con htaccess mediante PHP (file_get_contents)

Ya vimos como utilizar curl para acceder a una página que se encuentra protegida por htaccess desde un script PHP, y ahora les presento una alternativa más simple: utilizar la función file_get_contents.

El único requisito que tiene es que debe estar activado el flag allow_url_fopen  en php.ini

Entonces, el bloque de código modelo que lo utiliza es el siguiente:

<?php
  $url = 'http://www.destino.com/secure/index.php';
 
  $username = 'ht_user';
  $password = 'ht_pass';
 
  //Credenciales htaccess
  $context = stream_context_create(array (
    'http' => array (
      'header' => 'Authorization: Basic ' . base64_encode("$username:$password")
    )));
 
  $data = file_get_contents($url, false, $context);
?>

En este ejemplo, obtendremos dentro la variable $data el contenido de la página index.php, para poder utilizarlo en el resto del script.

Se puede utilizar este medio para invocar otros scripts que devuelvan urls, json, etc. como si fuera un API a la aplicación.

Acceder a página protegida con htaccess mediante PHP (curl)

Si necesitamos acceder a una página que se encuentre protegida por credenciales htaccess desde un script PHP, podemos utilizar la extensión curl que nos provee (pueden tener problemas al intentar activarla). Para ello, les porpongo un bloque de código que la utiliza:

<?php
  $url = 'http://www.destino.com/secure/index.php';
 
  $username = 'ht_user';
  $password = 'ht_pass';
 
  $ch=curl_init();
  curl_setopt($ch,CURLOPT_URL,$url);
  
  //Credenciales htaccess
  curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

  //curl_exec devuelve el contenido obtenido en lugar de True
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
  $data = curl_exec($ch);
  
  curl_close($ch);
 
?>

En este ejemplo, obtendremos dentro la variable $data el contenido de la página index.php, para poder utilizarlo en el resto del script.

Se puede utilizar este medio para invocar otros scripts que devuelvan urls, json, etc. como si fuera un API a la aplicación.

Solucionar error de la extensión curl de PHP en Windows

Supongamos que necesitamos invocar una url a partir de nuestro código PHP. Una forma de hacerlo es mediante la extensión curl. Es posible que en Windows al intentar activarla, no logremos hacer que funcione.

Si el código que la utiliza es similar a:

<?php
  $ch=curl_init();
  curl_setopt($ch,CURLOPT_URL,'http://localhost/');
  curl_exec($ch);
  curl_close($ch);
 ?>

obtendremos el error:

Fatal error: Call to undefined function curl_init()

 

Para solucionarlo debemos primero verificar en el archivo de configuración php.ini que:

  • el directorio de extensiones (extension_dir) sea el correcto
  • la línea extension=php_curl.dll esté descomentada (sin el ; inicial)

A continuación ubicamos el directorio donde está instalado PHP y de allí copiamos los archivos:

  • libeay32.dll
  • ssleay32.dll

al directorio bin dentro de la ubicación donde se encuentra instalado de Apache.

Para finalizar reiniciamos el servicio de Apache.

 

Podemos corroborar que la extensión fue activada exitosamente a través de la información de phpinfo(), mediante un script con el código:

<?php
  phpinfo();
?>

Si volvemos a probar el código del principio veremos que funciona correctamente.

Ubicación de la instalación de Apache en Windows

Al momento de instalar Apache, se debe definir el Path donde se ubicará. Si bien podemos establecer una ruta cualquiera, por lo general se mantiene la que se propone. Es por esto que si en algún momento desean saber donde está pueden probar con las ubicaciones en Windows:

  • C:\Archivos de programa\Apache Group\
  • C:\Archivos de programa\Apache Group\Apache2\
  • C:\Archivos de programa\Apache Software Foundation\Apache2.2\

También podemos determinarla consultando la información del servicio Apache2 o Apache2.2, según corresponda.

Consultar información de un servicio de Windows desde la línea de comandos

En Windows, podemos obtener información de un servicio accediendo a la línea de comando e ingresando:

sc qc <NOMBRE_SERVICIO>

Ejemplo:

sc qc Apache2.2

nos devuelve la información del servicio de Apache:

NOMBRE_SERVICIO: Apache2.2
        TIPO               : 10  WIN32_OWN_PROCESS
        TIPO_INICIO        : 2   AUTO_START
        CONTROL_ERROR      : 1   NORMAL
        NOMBRE_RUTA_BINARIO: "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\httpd.exe" -k runservice
        GRUPO_ORDEN_CARGA  :
        ETIQUETA           : 0
        NOMBRE_MOSTRAR     : Apache2.2
        DEPENDENCIAS       : Tcpip
                           : Afd
        NOMBRE_INICIO_SERVICIO: LocalSystem

Entre la información que podemos ver está la ruta al archivo binario (ejecutable) asociado al servicio.

Tratamiento de los errores del módulo DBI de Perl

Cuando utilizamos el módulo DBI para conectarnos a una base de datos en Perl, existen algunos atributos que definen cómo tratar las alertas y errores que sucedan:

PrintWarn

Valor por defecto: Si los warnings de Perl están activados, es 1. De lo contrario, 0.

Controla la impresión de los warnings que determina el driver. Utiliza la función warn.

Como los drivers lo utilizan poco, considero que se puede dejar en el valor por defecto (sea cual fuere)

PrintError

Valor por defecto: 1

Además de devolver los errores de la forma normal, fuerza warnings. Utiliza la función warn.

Considero que es correcto generar los warnings adicionales, manteniendo el valor por defecto, para que se alerten todos los errores.

RaiseError

Valor por defecto: 0

En lugar de devolver los errores de la forma normal, fuerza una excepción. Utiliza la función die. Si está activado, por lo general se desactiva PrintError. Pero si ambos estuvieran activados, se procesa primero PrintError (warning) y luego RaiseError (excepción). En el momento de la conexión, curiosamente, se procesan al revés!

Considero que debe activarse cuando el uso de la base de datos sea esencial para la aplicación (lo más común), de lo contrario la ejecución continúa aún cuando el módulo DBI detecte un error.

 

Los valores por defecto de estos atributos se establecen cuando se realiza la conexión:

my $dbh = DBI->connect("<DBI:CONNECTION>", "<DB_USER>", "<DB_PASS>");

En este caso: PrintWarn depende de si los warnings están activados, PrintError será 1 y RaiseError tendrá el valor 0.

 

Los atributos se pueden redefinir en el momento de la conexión:

my $dbh = DBI->connect("<DBI:CONNECTION>", "<DB_USER>", "<DB_PASS>",{RaiseError => <BOOL>, PrintError => <BOOL>, PrintWarn => <BOOL>});

Ejemplo:

my $dbh = DBI->connect("dbi:mysql:test:localhost:3306", "test", "secure",{RaiseError => 1, PrintError => 0});

En este caso determinamos el forzar una excepción ante un error, desactivando el warning que su hubiera generado en su lugar.

 

También se pueden modificar en cualquier momento posterior para realizar alguna acción en particular:

Ejemplo:

$dbh->{RaiseError} = 0;

 

Se puede agregar código Perl para manejar los warnings y las excepciones generadas en cada caso.

 

Basado en:

http://search.cpan.org/~timb/DBI-1.631/DBI.pm

http://oreilly.com/catalog/perldbi/chapter/ch04.html