Montar unidad remota con SAMBA en linux RedHat5 (desde PHP)

Estos días pasados he estado peleándome con lo siguiente: necesitaba que un programa en PHP (ejecutado en máquina llamada RH5, que corre sobre un Red Hat 5) fuera capaz de montar una unidad de cd/dvd remota (más en concreto, de un equipo local Windows XP SP3).

Os comento, un poco por encima, los pasos a seguir para conseguir esto:

  1. Compartir la unidad del equipo windows con nombre de usuario apache (para ello el usuario apache debe existir en el sistema W’s y en este ejemplo, tendrá contraseña=apache). Supongamos que la máquina Windows tiene ip=IPW y el nombre del recurso compartido es E.
  2. Verificar que tenemos el cliente samba instalado en la máquina RedHat5. Para ello podemos comprobar, una vez realizado el paso (1), que desde línea de comandos podemos montar la unidad remota, en, por ejemplo /mnt/miunidadremota (evidentemente, este directorio debe existir en nuestra máquina RH5). Ejecutamos:

    /bin/mount -t cifs //IPW/E /mnt/miunidadremota -o user=apache,pass=apache,uid=apache,gid=apache
    ls /mnt/miunidadremota

    Una vez ejecutados los dos comandos de arriba deberíamos ver los ficheros del cd. Si no lo vemos, hay algo mal en los puntos (1) y (2). Revísalos.

  3. Habilitar en /etc/sudoers que el usuario apache pueda montar y desmontar la unidad remota E (Si no sabes qué es sudoers o mount o para qué se utiliza, googlea man sudo y man moun).

    Evidentemente, el usuario apache debe existir en el sistema RH5. Para comprobar que existe, ejecuta:

    more /etc/passwd | grep apache

    Y deberías ver algo asi:

    apache:x:48:48:Apache:/var/www:/bin/bash


    Nota que el usuario apache tiene shell! (/bin/bash, para más señas).

    Continuamos editando /etc/sudoers. Lo puedes hacer con el comando visudo, o directamente editando /etc/sudoers (este último método no lo recomiendo). Una vez editado, añade al final las siguientes líneas:

    apache ALL = NOPASSWD: /bin/mount
    apache ALL = NOPASSWD: /bin/umount
    apache ALL = /sbin/mount.cifs
    apache ALL = /sbin/umount.cifs

  4. A continuación, comprueba si tienes activado SELinux. En mi caso está desactivado. Si sigues todos los pasos restantes y al final no te funciona, chequea /var/messages para ver qué está pasando…y seguramente encontrarás que SELinux te está impidiendo realizar el montado de la unidad remota…
  5. Haz un more /etc/sudores | grep requiretty
    comprueba que esa línea está comentada, esto es:
    #Defaults requiretty.
    Si la tienes descomentada no funcionará.
  6. Crea tu programa en PHP para montar la unidad remota! ;)
    En mi caso es algo asi (las líneas 8 y 10 son las que importan):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    include("functions.php");
    include("config.php");
    echo "Librerias cargadas...<br />";
     
    if (isset($ipCD)){ // es un rec externo... montarlo!
     
      echo "Montando unidad remota...";
      $mountlike = 'sudo /bin/mount -t cifs //'.$ipCD.'/'.$unidadCD.' '.$rutaEntrada.' -o user='.$userCD.',pass='.$passCD.',uid=apache,gid=apache';
      echo $mountlike.'<br />';
      exec($mountlike, $out, $retval);
    }

  7. Esto es todo amigos!
    Si consideras que se puede hacer mejor, o ves algún fallo que yo no veo… (dejemos la seguridad al margen 8-) ), deja un comentario.

    Related posts:

    1. Linux: Sustitución de texto en múltiples ficheros usando SED [resuelto]
    2. VNC desde Samsung Omnia
    3. Accediendo a máquinas remotas: PuTTY y NX-Server

2 Responses to “Montar unidad remota con SAMBA en linux RedHat5 (desde PHP)”

Leave a Reply

Paypal donate

Please help me keep this blog up by donating.

Por favor, ayúdame a continuar con el blog donando.