Ocultar archivos en Linux sin usar el punto


32

Deseo ocultar archivos en Linux sin usar el punto, ya que es posible en Windows.

¿Hay alguna forma de hacer esto?


66
Tenga en cuenta que ocultar archivos (ofuscación) no reemplaza la seguridad (restringir el acceso)
uSlackr

Respuestas:


26

No puedes. Hay una diferencia fundamental en la forma en que los sistemas de archivos manejan configuraciones ocultas. En Windows, el sistema de archivos almacena varios atributos para el archivo en metadatos, incluidos los atributos "oculto" y "sistema" (ambos tipos de archivos ocultos). En los sistemas de archivos * nix comunes, no se almacena dicho atributo. En cambio, la información debe colocarse en otro lugar, como en el nombre del archivo. La convención es que los archivos comienzan con. (y dependiendo de su sistema, tal vez algunos otros como _) no se mostrarán en la mayoría de las herramientas de forma predeterminada.

Esto es puramente por conveniencia, a. comenzar un nombre de archivo no significa absolutamente nada, pero "el usuario probablemente no quiera ver esto todo el tiempo". Para asegurarse de que lo sabe, ejecutar, por ejemplo ls -a, mostrará todos los archivos.

Si no desea que un archivo desordene sus listados en Linux, debe cambiarle el nombre para que comience con un punto (Bonificación: esto también funcionará para OS X, si estamos hablando de un dispositivo portátil). Si no desea que los usuarios puedan encontrar un archivo, lo está haciendo mal, para eso están los permisos.

Los permisos de Unix, ya que pertenecen a directorios, a menudo confunden a las personas, y tal vez entenderlo mejor lo ayudará. Los permisos "leer" y "ejecutar" ( ry x) significan algo diferente para los directorios que para los archivos. Para los directorios, el xpermiso de ejecución determina si accede o no a los inodos en el directorio. El rpermiso de lectura dicta si puede acceder o no a la lista del directorio. Funcionalmente, xpermite al usuario hacer cosas en un directorio, mientras que el rpermiso le permite ver lo que contiene. Estos son diferentes, y la diferencia puede ser confusa. Veamos un ejemplo:


jeanluc@login64: ~ $ mkdir example
jeanluc@login64: ~ $ echo "you can read it" > example/file
jeanluc@login64: ~ $ ls example/
file
jeanluc@login64: ~ $ cat example/file
you can read it

jeanluc@login64: ~ $ chmod -x example/
jeanluc@login64: ~ $ ls example/
ls: cannot access example/file: Permission denied
file
jeanluc@login64: ~ $ cat example/file
cat: example/file: Permission denied
jeanluc@login64: ~ $ cd example/
-bash: cd: example/: Permission denied

jeanluc@login64: ~ $ chmod +x example/
jeanluc@login64: ~ $ chmod -r example/
jeanluc@login64: ~ $ ls example/
ls: cannot open directory example/: Permission denied
jeanluc@login64: ~ $ cat example/file
you can read it
jeanluc@login64: ~ $ cd example/
jeanluc@login64: ~/example $ ls
ls: cannot open directory .: Permission denied
jeanluc@login64: ~/example $ cd ..

Entonces, tenga en cuenta que sin ejecutar todavía puedo enumerar los archivos (aunque ls muestra un error porque no puede obtener las propiedades del archivo), pero no puedo cambiar al directorio o leer los archivos en él. Sin leer, no puedo enumerar los archivos, pero aún puedo cambiar al directorio y, si sé el nombre de un archivo, aún puedo acceder a él.

Sin embargo, tenga en cuenta que eliminar el permiso de lectura solo le brinda seguridad por oscuridad. Si el usuario adivina el nombre del archivo, podrá leer su contenido.

Puede que esto no haya sido realmente relevante para su pregunta, solo quería asegurarme de que entendiera los permisos del directorio.


26

Cree un archivo .hiddenen el directorio con los nombres de los archivos que se ocultarán (un nombre en cada línea).

Luego agregue lo siguiente a su ~/.bashrc:

ls () {
  if [ -f .hidden ]; then
    declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
    ls "$@"
  fi
}

Ahora su lscomando no enumera estos archivos.

Yo uso esta técnica para ocultar mi __pycache__y mis __init__.pyarchivos.


EDITAR: según otro comentario, esto también los oculta en al menos uno (Nautilus), pero probablemente también en varios navegadores de archivos GUI.


es interesante. ¿Funciona también en el nautilus u otras herramientas de interfaz gráfica de usuario? ¿Eres capaz de ver los archivos con ls -al?
Jakuje

1
falta un '' al final del código. (y en caso de que se pregunte de dónde provienen los votos a favor : askubuntu.com/a/713591/15811 ) ;-)
Rinzwind

14

En realidad, puede ocultar archivos en Linux sin agregar un punto. Esto realmente los esconde en Nautilus; un lsde la línea de comando seguirá enumerando los archivos.

  1. Cree un archivo de texto con el nombre .hiddenen la carpeta donde desea ocultar los archivos.
  2. Agregue los nombres de los archivos o carpetas que desea ocultar, uno por línea, al archivo.
  3. Actualiza tu navegador de archivos.

2
no funciona aquí con "ls" en debian 5.0. ¿Es específico de nautilus o delfín o ...?
Tim Haegele

2
Los archivos están ocultos en Nautilus; No en las lslistas.
Para hacer

1
¡Una solución increíble! :)
Merianos Nikos

4

Un punto se usa para ocultar archivos en Linux, y eso no se puede cambiar.

Sin embargo, podría jugar con los permisos de archivo para evitar que los usuarios puedan tener acceso a una carpeta / archivo determinado. Intenta experimentar con el chmodcomando.


2

¿Solo intenta ocultar archivos del administrador de archivos de la interfaz gráfica de usuario y / o del entorno de escritorio? Si es así, puede haber opciones más allá de simplemente prefijar el nombre del archivo con un punto.

Yo creo que los archivos sólo adicionales ocultos por cualquier administrador de archivos de Linux son archivos de copia de seguridad, es decir, los que terminan en una tilde ~o .bako lo que ellos creen que es la extensión de copia de seguridad. En cualquier caso, probablemente tenga suerte si todo lo que desea hacer es ocultar los archivos de respaldo del administrador de archivos.

¡No le dé a sus archivos una extensión de respaldo para ocultarlos o podrían borrarse accidentalmente!

Además, puede ocultar archivos del Finder en Mac OS X usando el comando SetFile -a V [file]o la edición, /.hiddenpero obviamente esto no ocultará el archivo del programa de la línea de comando ls.


3
En OS X también puedes ocultar archivos chflags hidden filename.
slhck

2

Si tiene algunas habilidades de programación y si solo lo que necesita es ocultar nombres de archivos para que el usuario convenza de dejar de saturar el espacio visual, ¡puede piratearlo!

Consideraré solo las herramientas de línea de comandos, ya que son bastante uniformes y son las únicas herramientas utilizadas constantemente por mí.

Hay muchas formas de almacenar esta información:

  1. Puede almacenar el atributo extendido "oculto" en los archivos seleccionados. Verman attr

      attr -s hidden -V true your_file
    
  2. O como se mencionó anteriormente, puede almacenar la lista de nombre de archivo en el .hiddenarchivo

Importante: Esto no funcionará desde el primer momento en que debe implementar la lógica, ¡los sistemas limpios simplemente ignorarán los .hiddenarchivos y los hiddenatributos extendidos!

También hay múltiples implementaciones posibles:

  1. Si solo tiene unos pocos archivos, escriba su .bashrcarchivo

    alias ls='ls -I filename_1 -I filename_2'
    

    man ls para más información.

  2. Escriba un mensaje function ls, ya que maneja toda la lógica detrás de reconocer archivos ocultos y ensamblar la lista de todas las -Ientradas, y luego ejecutar /bin/lscon los indicadores de ignorar adecuados. Tarea muy laboriosa, porque tienes que manejar todos los lsparámetros correctamente.

  3. Obtenga fuentes de coreutils

    git clone git://git.sv.gnu.org/coreutils
    

    o

    git clone git://git.suckless.org/sbase
    

    Parchelo de la manera que necesita para manejar su implementación de archivos ocultos. Y colóquelo en suPATH

    Lo pirateé en menos de 5 minutos usando fuentes suckless y diff es así:

     diff --git a/ls.c b/ls.c
     index cdfce4d..8197409 100644
     --- a/ls.c
     +++ b/ls.c
     @@ -214,6 +214,17 @@ lsdir(const char *path)
             first = 0;
             while ((d = readdir(dp))) {
     +///////////////////////////////////////////////
     +// Dirty hack to implement hidden files
     +// FIXME: Make proper(!) subroutine
     +               char attr_command[1024] = "attr -Lqg hidden "; // Oh, dear. That's bad
     +               int attr_code;
     +               strcat(attr_command, d->d_name);
     +               strcat(attr_command, " >/dev/null 2>&1");
     +               attr_code = system(attr_command);
     +               if (!attr_code)
     +                       continue;
     +///////////////////////////////////////////////
                     if (d->d_name[0] == '.' && !aflag && !Aflag)
                             continue;
                     else if (Aflag)
    

ls.cse encuentra src, no en el directorio raíz, y no hay ninguna función lsdiren ls.c.
Melab

2

Esta es la mejor solución que he encontrado, agregue a su perfil :

alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"

Si necesita más patrones, simplemente agregue más --ignorebanderas.


Esto conducirá a una cadena muy, muy larga si es necesario ocultar más de unos pocos archivos. Para varios archivos, hay formas más eficientes de hacer esto, pero para un par de archivos, una buena solución, no obstante.
JW0914

2

Hoy en día puede escribir FUSE que oculta los archivos de acuerdo con la configuración dada.

Este artículo me hace creer que necesita ajustar la getdirfunción:

getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Esto lee el contenido de un directorio. Esta operación es la opendir(), readdir(), ..., closedir()secuencia en una sola llamada. Para cada entrada de directorio, se filldir()debe llamar a la función.

No soy un programador, pero imagino que uno podría hacer getdiromitir todos los archivos enumerados en (por ejemplo) el .hiddenarchivo. Si implementa esto correctamente, todas las herramientas (GUI o no) se verán afectadas.


1

Se puede 'ocultar' el contenido de un directorio mediante la eliminación de 'x' permanentes para el grupo, o de otro tipo: chmod go-x directoryname. Ya no podría enumerar archivos, aunque podría acceder a un archivo si supiera la ruta exacta. Esto no suena como lo que quieres.

Tenga en cuenta que lo de los archivos de puntos es una conveniencia, no realmente para ocultar el archivo por razones de seguridad, sino para reducir el desorden de los archivos durante el listado de archivos. Está horneado lsy las otras herramientas.


Y también es falso. Si bien eliminar los permisos de lectura de un directorio le impide enumerar su contenido, eliminar el permiso de ejecución negará el acceso al directorio. Cuando no tiene permiso para ejecutar un directorio, no tendrá acceso a nada más allá. Ni siquiera si hay un subdirectorio con todos los derechos y conoces su camino.
Bachsau
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.