Restaurar permiso ejecutable al comando Chmod en Linux

me encontré con un hilo de debate interesante en Twitter. Se trata de una pregunta de entrevista. La pregunta es – ¿Qué hace si el permiso ejecutable del comando Chmod se elimina accidentalmente? Como sabrá, el chmod (significa Ch ángel modificación e) el comando se usa para establecer o cambiar los permisos de acceso de un archivo o directorio en sistemas similares a Unix. Entonces, si se elimina el permiso ejecutable de chmod, no puede asignar los permisos a ningún programa, incluido el comando chmod en sí. Está sentado en un panel de entrevistas y el entrevistador acaba de hacer esta pregunta. Entonces, ¿cómo se restaura el permiso ejecutable al comando chmod en Linux?

“¿Copiaré el binario chmod de otros sistemas?”, podría responder. Bueno, solo se te da un sistema. Por lo tanto, no puede copiar el binario chmod de otros sistemas. Puedes volver a responder, “Configuraré el bit de ejecución desde Perl”. El entrevistador dice “No hay intérpretes en su máquina”. Tampoco hay conexión a Internet/teléfono, por lo que tampoco puede ponerse en contacto con nadie para pedir ayuda. En una situación tan grave, ¿cómo se restaura el permiso ejecutable del comando Chmod? Si ya sabes la respuesta, un gran aprobado por tu inteligencia. Si no eres un pensador crítico (¡como yo!), sigue leyendo.

Advertencia:

No intente eliminar el permiso de ejecución del comando chmod en un sistema de producción. Pruebe esto en una VM o máquina de prueba. Es solo para fines educativos.

¿Qué hace si elimina accidentalmente el permiso ejecutable del comando Chmod?

Digamos que accidentalmente ejecuta el siguiente comando:

                      # chmod -x $(which chmod)
                    

Aquí el -X flag eliminará el permiso ejecutable del programa dado. En nuestro caso, es chmod.

Eres muy curioso y realmente no sabes qué hará este comando. Ahora perdiste el permiso ejecutable del comando chmod. No hay forma de restaurar el permiso ejecutable chmod nuevamente. Si intenta establecer el permiso, el siguiente comando:

                      # chmod +x $(which chmod)
                    

Recibirá el siguiente mensaje de error:

                      bash: /usr/bin/chmod: Permission denied
                    

Incluso si cierra la sesión e intenta desde otros sudo usuarios, no puede asignar permisos usando el comando chmod:

                      
                        $ sudo chmod +x $(which chmod)
                      
                      
sudo: chmod: command not found
                    

¿Cómo se restauran los permisos de chmod a su original? Bueno, es más fácil de lo que piensas.

Restaurar permiso ejecutable al comando Chmod en Linux

Hay algunas formas de restaurar el permiso de ejecución de chmod. Aquí, he dado 7 métodos.

Método 1: copie el contenido del binario chmod a otros binarios de trabajo

Recuerde que eliminamos el permiso ejecutable del comando chmod solo, pero no el permiso de otros comandos. ¿Derecha? ¡Sí! Los otros comandos todavía tienen el permiso ejecutable. Entonces, podemos solucionar este problema copiando el contenido del comando chmod a cualquier otro comando ejecutable, por ejemplo example “mkdir”, y restaurar el permiso ejecutable chmod a su original.

Antes de copiar, hagamos una copia de seguridad del comando mkdir usando el comando:

                      # cp /usr/bin/mkdir /usr/bin/mkdir.bak
                    

Luego copie el contenido de /usr/bin/chmod a /usr/chmod/mkdir usando el comando “cat”:

                      # cat /usr/bin/chmod > /usr/bin/mkdir
                    

Ahora, el comando mkdir se ha convertido en el comando chmod (porque copiamos el contenido de chmod al binario mkdir).

Y luego, restaure el permiso ejecutable del binario chmod real usando el comando:

                      # mkdir +x /usr/bin/chmod
                    

Alternativamente, puede copiar el contenido de mkdir nuevamente al binario chmod:

                      # mv /usr/bin/mkdir /usr/bin/chmod
                    

Finalmente, restaure el comando mkdir original desde la copia de seguridad:

                      # mv /usr/bin/mkdir.bak /usr/bin/mkdir
                    

¡Hecho! Restauramos con éxito el permiso de ejecución del comando chmod.

Compruebe si los permisos ejecutables se restauran con el comando “ls”:

                      # ls -l /usr/bin/chmod
                    

O,

                      # ls -l $(which chmod)

                      
                        -r-xr-xr-x
                      
                       1 root root 63864 May 27 07:16 /usr/bin/chmod
                    

Tenga en cuenta las letras “x” en el resultado anterior. Indica permiso de ejecución.

También puede verificarlo asignando permisos ejecutables a cualquier otro programa con chmod como se muestra a continuación:

                      # chmod +x ostechnix.sh
                    
                      # ls -l
total 0

                      
                        -rwxr-xr-x
                      
                       1 root root 0 May 27 07:43 ostechnix.sh
                    

Este es el método más fácil ya que no tienes que memorizar nada. Simplemente copiamos el contenido de chmod a otros comandos usando el comando cat y luego restauramos el permiso de ejecución.

Lo probé en la edición del servidor Ubuntu 20.04. En otras distribuciones de Linux, el archivo binario chmod puede estar disponible en /compartimiento/ directorio. Puede encontrar la ubicación binaria de chmod usando el siguiente comando:

                      $ which chmod
                    

Este es, sin embargo, no sólo el camino. Hice una búsqueda rápida en Google y encontré algunos métodos más. Es posible que deba memorizar los siguientes comandos.

Método 2 – Usando el comando cp

Esta es otra forma de restaurar el permiso ejecutable a chmod.

En este método, usamos el comando “cp” para copiar los atributos:

                      # cp --attributes-only --preserve=mode /proc/self/exe /usr/bin/chmod
                    

Método 3: usar el enlazador/cargador GNU (ld)

En este método, puede ejecutar el cargador “ld” directamente y pasarle el comando que desea ejecutar como se muestra a continuación:

                      # /lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod
                    

Si utiliza sistemas de 32 bits, el comando sería:

                      $ /lib/ld-linux.so /usr/bin/chmod +x /usr/bin/chmod
                    

La ruta al cargador puede depender de la distribución de Linux que utilice. Los comandos anteriores son para Ubuntu y sus derivados. En otras distribuciones, la ruta puede ser diferente:

                      # /lib/libc.musl-x86_64.so.1 /bin/chmod +x /bin/chmod
                    

Método 4: usar setfacl

Podemos restaurar los permisos ejecutables de chmod usando el comando “setfacl”.

Primero, modifique la ACL de un archivo binario chmod para usuarios con permisos de lectura y ejecución:

                      # setfacl -m u::rx /usr/bin/chmod
                    

Luego, restaure los permisos de chmod a los originales:

                      # chmod +x $(which chmod)
                    

Finalmente, elimine todas las entradas de ACL de chmod. Esto es opcional.

                      # setfacl -b /usr/bin/chmod
                    

Si el comando setfacl no está disponible, instale el paquete “acl”. Para exampleejecute el siguiente comando para instalar acl en Debian , Ubuntu y sus derivados:

                      # apt install acl
                    

Método 5 – Usando rsync

Rsync no es solo para copiar o respaldar archivos y directorios entre sistemas. También se puede usar para asignar permisos para archivos.

Primero, copiemos el archivo binario chmod en la ubicación /tmp mientras asignamos permisos ejecutables a todos, es decir, usuarios, grupos y otros:

                      # rsync /usr/bin/chmod /tmp/chmod --chmod=ugo+x
                    

A continuación, compruebe si el permiso ejecutable está asignado a chmod:

                      $ ls -l /tmp/chmod
                    

Salida de muestra:

                      -r-xr-xr-x 1 root root 63864 May 27 10:01 /tmp/chmod
                    

Si los permisos están bien, simplemente sobrescriba el archivo original con el archivo /tmp/chmod:

                      # mv /tmp/chmod /usr/bin
                    

Método 6 – Uso de Busybox

Algunas distribuciones recientes de Linux tienen “Cuadro ocupado” instalado por defecto. Desde la página man de Busybox,

BusyBox combina versiones diminutas de muchas utilidades comunes de UNIX en un solo ejecutable pequeño. Proporciona reemplazos minimalistas para la mayoría de las utilidades que normalmente encuentra en GNU coreutils, util-linux, etc. Las utilidades en BusyBox generalmente tienen menos opciones que sus primos GNU con todas las funciones; sin embargo, las opciones que se incluyen brindan la funcionalidad esperada y se comportan de manera muy similar a sus contrapartes de GNU.

Para restaurar el permiso de ejecución de Chmod con busybox, ejecute:

                      # busybox chmod +x /usr/bin/chmod
                    

Método 7 – Uso de Perl

En caso de que Perl esté disponible en su sistema, puede corregir los permisos de ejecución de Chmod con el comando:

                      # perl -e 'chmod 0755, "/usr/bin/chmod"'
                    

Como puede ver, este es un problema trivial que los usuarios inteligentes de Linux pueden resolver fácilmente. Si eres un usuario de Linux principiante o intermedio, probablemente nunca lo descubras. Este tipo de preguntas se pueden hacer para verificar la presencia de ánimo del entrevistado y cómo piensa fuera de la caja. Gracias a lo mencionado Twitter hilo, aprendí algo útil hoy. Espero que te sea útil a ti también.

Lectura relacionada:

  • Cómo encontrar archivos según sus permisos en Linux
  • Cómo copiar archivos y cambiar la propiedad, los permisos al mismo tiempo

¡Gracias por pasar!

Ayúdanos a ayudarte:

¡¡Que tenga un buen día!!

Related Posts