Encontré un hilo de discusión interesante en Twitter. Se trata de una pregunta de entrevista. La pregunta es:¿Qué haces si el permiso ejecutable del comando Chmod se elimina accidentalmente? Como sabrá, el chmod (significa Ch ángel mod 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. Puede responder de nuevo:"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é haces si eliminas 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 con otros usuarios de sudo, 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:copiar el contenido del binario chmod a otros binarios que funcionen
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. Por lo tanto, podemos solucionar este problema copiando el contenido del comando chmod a cualquier otro comando ejecutable, por ejemplo, "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 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 /bin/ 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:usar 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 - Uso de 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 sus permisos 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". Por ejemplo, ejecute el siguiente comando para instalar acl en Debian, Ubuntu y sus derivados:
# apt install acl
Método 5 - Uso de 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 son correctos, 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 "Busybox" 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 al hilo de Twitter antes mencionado, 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 y los permisos al mismo tiempo