Ejecutar grupo de comandos bajo el efecto de sudo

    En muchas ocaciones es necesario ejecutar sudo sobre un grupo de comandos, es una tarea muy común en sistemas tipos UNIX usar tuberías (pipe), redirección y concatenar comandos (&&, ||), por ejemplo si ejecutamos:

    sudo comando1 && comando2 || comando3
    

    El resultado obtenido no es el deseado debido a que los comandos 2 y 3 se invocaron con los privelegios del usuario actual y no bajo la influencia de sudo

    Un ejemplo más específico

    Partamos de la idea de que hemos instalado y configurado wordpress y queremos encontrar los ficheros donde wordpress usa la palabra array:

    $ sudo find /var/www/wordpress -type f -name '*.php' -print0 | xargs -0 grep -l array
    
    grep: /var/www/wordpress/index.php: Permiso denegado
    grep: /var/www/wordpress/wp-rss.php: Permiso denegado
    grep: /var/www/wordpress/wp-register.php: Permiso denegado
    grep: /var/www/wordpress/wp-atom.php: Permiso denegado
    grep: /var/www/wordpress/wp-login.php: Permiso denegado
    ...
    

    Como se muestra en el ejemplo anterior grep no tiene acceso a los ficheros que se encuentran en /var/www debido a que se ejecuta con los privilegios del usuario actual.

    La solución

    Ejecutar el grupo de comandos en una subshell, para ello tecleamos:

    $ sudo bash -c "find /var/www/wordpress -type f -name '*.php' -print0 | xargs -0 grep -l array"
    

    Lecturas recomendadas

    – Carl Albing, JP Bossen, Cameron Newham. bash Cookbook. Acápite 17.15, Using sudo on a Group of Commands
    – man sudo
    – man sudoers
    – man bash




    Dejar un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *