23 votos

Inadvertidamente destruyó la estructura de permisos de mi disco, ¿por qué?

Estaba tratando de chown dentro de /opt y, por alguna razón, chown saltó a los padres y me di todo.

¿Alguien puede sugerir por qué / cómo podría suceder esto y cómo evitar hacerlo en el futuro? Es un poco preocupante que ejecutar un comando en un directorio determinado pueda saltar y ejecutarlo efectivamente en el directorio root.

 ubuntu: /opt > sudo chown -R root:www-data .*
chown: changing ownership of '../var/lib/lxcfs/proc/cpuinfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/meminfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/stat': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/uptime': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/diskstats': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/swaps': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/devices': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/blkio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/hugetlb': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/rdma': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/pids': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/freezer': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpuset': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/memory': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/perf_event': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpu,cpuacct': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/net_cls,net_prio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/name=systemd': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/unified': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs': No such file or directory
^C
:ubuntu: /opt >
 

45voto

steeldriver Puntos 19092

El shell glob .* coincide .. (el directorio padre) en este caso, lamentablemente /:

steeldriver@t400s:/opt$ ls .*
.:

..:
bin  boot  cdrom  dev  etc  home  initrd.img  initrd.img.old  lib  lib32  lib64
libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  swapfile  sys
tmp  usr  var  vmlinuz  vmlinuz.old

Para la discusión adicional, consulte:

25voto

mchid Puntos 8951

Esto sucedió debido a que utilizó:

sudo chown -R root:www-data .*

cuando usted debe haber utilizado este lugar:

sudo chown -R root:www-data ./*

En primer lugar, -R es recursivo para todos los directorios bajo el directorio de destino.

Además, * coincidirá con todos los archivos y directorios del directorio actual. Siguiente, .* coincidirá con todos los archivos y directorios de un nivel por encima de la actual directorio.

Para evitar esto en el futuro, puede utilizar el ls comando para verificar que la ruta de acceso antes de ejecutar el chown comando como en estos ejemplos:

ls -a ./*
ls -a *
ls -a .*
ls -a ../*

Otra forma de evitar esto es utilizar siempre la ruta de acceso completa al directorio que desea ejecutar un comando.

He aquí un ejemplo:

sudo chown -R root:www-data /opt/*

Editar:

Puede utilizar el siguiente comando para chmod todos los archivos ocultos o de directorios directamente bajo /opt (suponiendo que el primer carácter después de la . que hace ocultos es una letra, un número, un guión o un guión bajo, que debería ser cierto para la mayoría de los archivos).

for i in /opt/.[A-Za-z0-9-_]*; do sudo chmod root:www-data "/opt/$i"; done

Usted puede comprobar lo que los archivos que este te chmod ejecutando el siguiente comando:

ls /opt/.[A-Za-z0-9-_]*

La primera parte del comando: for i in /opt/.[A-Za-z0-9-_]* dice que, para todos los resultados de la glob /opt/.[A-Za-z0-9-_]* de asignar a cada resultado a la variable "i".

El pegote aquí dice que el primer carácter debe ser . y que el siguiente carácter [A-Za-z0-9-_] debe ser cualquier carácter, a-Z o a-z o a cualquier número del 0 al 9 o una - o _.

Esto excluye los resultados . y .. que representan el directorio actual y el directorio sobre el directorio actual y sólo se incluyen los directorios y ficheros ocultos.

La segunda parte de el comando: do sudo chmod root:www-data "/opt/$i" dice que para ejecutar el comando para todas las variables que coinciden con el valor actual de $i.

La tercera parte de el comando: done dice que estoy acabado.


Además, utilizar la -R opción chmod y -R opción es recursivo y se aplicará a todos los directorios y archivos.

Cuando sólo se utilice solamente el chmod comando sin opciones, el comando sólo se aplican a un determinado archivo o directorio que le dio y no se aplicará de forma recursiva a los directorios.

5voto

alexis Puntos 301

Los problemas vinieron porque .* coincide con todo lo que comienza con un punto. El contexto es el directorio actual, ya que esta expresión no incluye una ruta de acceso. Así que, si no son ocultos los archivos o carpetas como .git en el directorio actual, que podrá coincidir con ellos. Pero (como se verá por ejecutar ls -a en que carpeta), también coinciden . y ..

Y .., por supuesto, es el directorio padre, por lo chmod -R de forma recursiva dirigido todo en el directorio padre.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: