Manter em arquivos mente esconderijos (ofuscação) não é substituto para a segurança (restringindo o acesso)
uSlackr
Respostas:
26
Você não pode. Há uma diferença fundamental na maneira como os sistemas de arquivos lidam com as configurações ocultas. No Windows, o sistema de arquivos armazena vários atributos para o arquivo em metadados, incluindo os atributos "oculto" e "sistema" (ambos tipos de arquivos ocultos). Nos sistemas de arquivos * nix comuns, nenhum atributo é armazenado. Em vez disso, as informações devem ser colocadas em outro lugar, como no nome do arquivo. A convenção é assim que os arquivos começam com. (e dependendo do seu sistema, talvez outros como _) não sejam mostrados pela maioria das ferramentas por padrão.
Isto é puramente por conveniência, a. iniciar um nome de arquivo significa absolutamente nada, mas "o usuário provavelmente não deseja ver isso o tempo todo". Para se certificar de que você sabe, a execução de eg ls -amostrará todos os arquivos.
Se você não deseja que um arquivo perturbe suas listagens no Linux, renomeie-o para começar com um ponto (bônus: isso também funcionará no OS X, se estivermos falando de um dispositivo portátil). Se você não deseja que os usuários encontrem um arquivo, está fazendo errado - é para isso que servem as permissões.
As permissões Unix, pois pertencem aos diretórios, freqüentemente confundem as pessoas, e talvez entendê-las melhor o ajude. As permissões "ler" e "executar" ( re x) significam algo diferente para diretórios do que para arquivos. Para diretórios, a xpermissão de execução determina se você acessa ou não os inodes no diretório. A rpermissão de leitura determina se você pode ou não acessar a listagem do diretório. Funcionalmente, xpermite que o usuário faça coisas em um diretório, enquanto a rpermissão permite que ele veja o que está nele. São diferentes e a diferença pode ser confusa. Vejamos um exemplo:
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 ..
Portanto, observe que, sem executar, ainda posso listar os arquivos (embora ls mostre um erro porque não é possível obter as propriedades do arquivo), mas não consigo mudar para o diretório ou ler os arquivos nele. Sem a leitura, não consigo listar os arquivos, mas ainda posso mudar para o diretório e, se souber o nome de um arquivo, ainda posso acessá-lo.
Observe, no entanto, que a remoção da permissão de leitura apenas oferece segurança pela obscuridade. Se o usuário adivinhar o nome do arquivo, ele poderá ler seu conteúdo.
Isso pode não ter sido realmente relevante para sua pergunta. Eu só queria ter certeza de que você entendeu as permissões de diretório.
é interessante. Também funciona no nautilus ou em outras ferramentas da GUI? Você consegue ver os arquivos ls -al?
Jakuje
1
código está faltando um "" no final (e no caso de você querer saber onde os upvotes são de:. askubuntu.com/a/713591/15811 ) ;-)
Rinzwind
14
Você pode realmente ocultar arquivos no Linux sem adicionar um ponto. Isso realmente os esconde no Nautilus; um lsda linha de comando ainda listará os arquivos.
Crie um arquivo de texto nomeado .hiddenna pasta em que deseja ocultar os arquivos.
Adicione os nomes dos arquivos ou pastas que você deseja ocultar, um por linha, ao arquivo.
não funciona aqui com "ls" no debian 5.0. É específico para nautilus, golfinho ou ...?
Tim Haegele
2
Os arquivos estão ocultos no Nautilus; não está em lslistas.
Faça
1
solução simplesmente impressionante! :)
Merianos Nikos
4
Um ponto é usado para ocultar arquivos no linux, e isso não pode ser alterado.
No entanto, você pode jogar com as permissões de arquivo para impedir que os usuários possam ter acesso a determinada pasta / arquivo. Tente experimentar com o chmodcomando.
Você está apenas tentando ocultar arquivos do gerenciador de arquivos e / ou do ambiente de trabalho da interface gráfica do usuário? Nesse caso, pode haver opções além de simplesmente prefixar o nome do arquivo com um ponto.
Eu acredito que os arquivos somente adicionais escondidos por qualquer gerenciador de arquivos Linux são arquivos de backup, ou seja, aqueles que terminam em um til ~ou .bakou o que eles acreditam que é a extensão do backup. De qualquer forma, você provavelmente está com sorte se tudo o que você deseja fazer é ocultar os arquivos de backup do gerenciador de arquivos.
Não dê aos seus arquivos uma extensão de backup para ocultá-los ou eles poderão ser excluídos acidentalmente !!
Além disso, você pode ocultar arquivos do Finder no Mac OS X usando o comando SetFile -a V [file]ou a edição, /.hiddenmas obviamente isso não oculta o arquivo do lsprograma da linha de comando .
No OS X, você também pode ocultar arquivos por chflags hidden filename.
slhck
2
Se você possui algumas habilidades de programação e se apenas o que precisa é ocultar nomes de arquivos para que o usuário possa parar de bagunçar o espaço visual, é possível invadi-lo!
Considerarei apenas as ferramentas de linha de comando, pois elas são bastante uniformes e são as únicas ferramentas constantemente usadas sou eu.
Existem várias maneiras de armazenar essas informações:
Você pode armazenar o atributo estendido "oculto" nos arquivos selecionados. Vejoman attr
attr -s hidden -V true your_file
Ou, como mencionado acima, você pode armazenar a lista de nomes de arquivos no .hiddenarquivo
Importante: Isso não funcionará imediatamente, você precisará implementar a lógica; os sistemas limpos apenas ignoram os .hiddenarquivos e os hiddenatributos estendidos!
Também existem várias implementações possíveis:
Se você tiver apenas alguns arquivos, escreva no seu .bashrcarquivo
alias ls='ls -I filename_1 -I filename_2'
man ls Para maiores informações.
Escreva um documento function lscomo ele lide com toda a lógica por trás do reconhecimento de arquivos ocultos e lista de montagem de todas as -Ientradas e, em seguida, execute
/bin/lscom os sinalizadores de ignorar apropriados. Tarefa muito trabalhosa, porque você precisa lidar com todos os lsparâmetros corretamente.
Obter fontes de coreutils
git clone git://git.sv.gnu.org/coreutils
ou
git clone git://git.suckless.org/sbase
Faça o patch da maneira que você precisa para lidar com a implementação de arquivos ocultos. E coloque-o no seuPATH
Eu o cortei em menos de 5 minutos usando fontes sem sugador e o diff é assim:
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)
Isso levará a uma cadeia muito, muito longa, se mais do que alguns arquivos precisarem ser ocultados. Para vários arquivos, existem maneiras mais eficientes de fazer isso, mas, para alguns arquivos, é uma boa solução.
JW0914 22/11
2
Atualmente você pode escrever o FUSE que oculta arquivos de acordo com a configuração especificada.
Este artigo me faz acreditar que você precisa ajustar a getdirfunção:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Isso lê o conteúdo de um diretório. Esta operação é a opendir(), readdir()..., closedir()seqüência em uma chamada. Para cada entrada de diretório, a filldir()função deve ser chamada.
Não sou programador, mas imagino que se possa getdiromitir todos os arquivos listados no .hiddenarquivo (por exemplo) . Se você implementar isso corretamente, todas as ferramentas (GUI ou não) serão afetadas.
Você pode 'esconder' o conteúdo de um diretório por tirar perms 'x' para o grupo, ou outro: chmod go-x directoryname. Você não podia mais listar arquivos, embora pudesse acessar um arquivo se soubesse o caminho exato. Isso não soa como o que você deseja.
Lembre-se de que o arquivo dotfile é uma conveniência, não realmente para ocultar o arquivo por motivos de segurança, mas para reduzir a confusão de arquivos durante a listagem de arquivos. Está cozido lse as outras ferramentas.
E também é falso. Embora a remoção de permissões de leitura de um diretório impeça a listagem de seu conteúdo, a remoção da permissão de execução negará qualquer acesso ao diretório. Quando você não tem permissão para executar um diretório, não terá acesso a nada além dele. Nem mesmo se houver um subdiretório com todos os direitos e você souber o caminho.
Respostas:
Você não pode. Há uma diferença fundamental na maneira como os sistemas de arquivos lidam com as configurações ocultas. No Windows, o sistema de arquivos armazena vários atributos para o arquivo em metadados, incluindo os atributos "oculto" e "sistema" (ambos tipos de arquivos ocultos). Nos sistemas de arquivos * nix comuns, nenhum atributo é armazenado. Em vez disso, as informações devem ser colocadas em outro lugar, como no nome do arquivo. A convenção é assim que os arquivos começam com. (e dependendo do seu sistema, talvez outros como _) não sejam mostrados pela maioria das ferramentas por padrão.
Isto é puramente por conveniência, a. iniciar um nome de arquivo significa absolutamente nada, mas "o usuário provavelmente não deseja ver isso o tempo todo". Para se certificar de que você sabe, a execução de eg
ls -a
mostrará todos os arquivos.Se você não deseja que um arquivo perturbe suas listagens no Linux, renomeie-o para começar com um ponto (bônus: isso também funcionará no OS X, se estivermos falando de um dispositivo portátil). Se você não deseja que os usuários encontrem um arquivo, está fazendo errado - é para isso que servem as permissões.
As permissões Unix, pois pertencem aos diretórios, freqüentemente confundem as pessoas, e talvez entendê-las melhor o ajude. As permissões "ler" e "executar" (
r
ex
) significam algo diferente para diretórios do que para arquivos. Para diretórios, ax
permissão de execução determina se você acessa ou não os inodes no diretório. Ar
permissão de leitura determina se você pode ou não acessar a listagem do diretório. Funcionalmente,x
permite que o usuário faça coisas em um diretório, enquanto ar
permissão permite que ele veja o que está nele. São diferentes e a diferença pode ser confusa. Vejamos um exemplo:Portanto, observe que, sem executar, ainda posso listar os arquivos (embora ls mostre um erro porque não é possível obter as propriedades do arquivo), mas não consigo mudar para o diretório ou ler os arquivos nele. Sem a leitura, não consigo listar os arquivos, mas ainda posso mudar para o diretório e, se souber o nome de um arquivo, ainda posso acessá-lo.
Observe, no entanto, que a remoção da permissão de leitura apenas oferece segurança pela obscuridade. Se o usuário adivinhar o nome do arquivo, ele poderá ler seu conteúdo.
Isso pode não ter sido realmente relevante para sua pergunta. Eu só queria ter certeza de que você entendeu as permissões de diretório.
fonte
Crie um arquivo
.hidden
no diretório com os nomes dos arquivos a serem ocultos (um nome em cada linha).Em seguida, adicione o seguinte ao seu
~/.bashrc
:Agora seu
ls
comando não lista esses arquivos.Eu uso essa técnica para ocultar meus arquivos
__pycache__
e__init__.py
.EDIT: como em outro comentário, isso também os oculta em pelo menos um (Nautilus), mas provavelmente em vários navegadores de arquivos da GUI também.
fonte
ls -al
?Você pode realmente ocultar arquivos no Linux sem adicionar um ponto. Isso realmente os esconde no Nautilus; um
ls
da linha de comando ainda listará os arquivos..hidden
na pasta em que deseja ocultar os arquivos.fonte
ls
listas.Um ponto é usado para ocultar arquivos no linux, e isso não pode ser alterado.
No entanto, você pode jogar com as permissões de arquivo para impedir que os usuários possam ter acesso a determinada pasta / arquivo. Tente experimentar com o
chmod
comando.fonte
Você está apenas tentando ocultar arquivos do gerenciador de arquivos e / ou do ambiente de trabalho da interface gráfica do usuário? Nesse caso, pode haver opções além de simplesmente prefixar o nome do arquivo com um ponto.
Eu acredito que os arquivos somente adicionais escondidos por qualquer gerenciador de arquivos Linux são arquivos de backup, ou seja, aqueles que terminam em um til
~
ou.bak
ou o que eles acreditam que é a extensão do backup. De qualquer forma, você provavelmente está com sorte se tudo o que você deseja fazer é ocultar os arquivos de backup do gerenciador de arquivos.Não dê aos seus arquivos uma extensão de backup para ocultá-los ou eles poderão ser excluídos acidentalmente !!
Além disso, você pode ocultar arquivos do Finder no Mac OS X usando o comando
SetFile -a V [file]
ou a edição,/.hidden
mas obviamente isso não oculta o arquivo dols
programa da linha de comando .fonte
chflags hidden filename
.Se você possui algumas habilidades de programação e se apenas o que precisa é ocultar nomes de arquivos para que o usuário possa parar de bagunçar o espaço visual, é possível invadi-lo!
Considerarei apenas as ferramentas de linha de comando, pois elas são bastante uniformes e são as únicas ferramentas constantemente usadas sou eu.
Existem várias maneiras de armazenar essas informações:
Você pode armazenar o atributo estendido "oculto" nos arquivos selecionados. Vejo
man attr
Ou, como mencionado acima, você pode armazenar a lista de nomes de arquivos no
.hidden
arquivoImportante: Isso não funcionará imediatamente, você precisará implementar a lógica; os sistemas limpos apenas ignoram os
.hidden
arquivos e oshidden
atributos estendidos!Também existem várias implementações possíveis:
Se você tiver apenas alguns arquivos, escreva no seu
.bashrc
arquivoman ls
Para maiores informações.Escreva um documento
function ls
como ele lide com toda a lógica por trás do reconhecimento de arquivos ocultos e lista de montagem de todas as-I
entradas e, em seguida, execute/bin/ls
com os sinalizadores de ignorar apropriados. Tarefa muito trabalhosa, porque você precisa lidar com todos osls
parâmetros corretamente.Obter fontes de coreutils
ou
Faça o patch da maneira que você precisa para lidar com a implementação de arquivos ocultos. E coloque-o no seu
PATH
Eu o cortei em menos de 5 minutos usando fontes sem sugador e o diff é assim:
fonte
ls.c
mentiras emsrc
, não o diretório raiz, e não há nenhuma funçãolsdir
nols.c
.Esta é a melhor solução que encontrei, adicione ao seu perfil :
Se você precisar de mais padrões, basta adicionar mais
--ignore
sinalizadores.fonte
Atualmente você pode escrever o FUSE que oculta arquivos de acordo com a configuração especificada.
Este artigo me faz acreditar que você precisa ajustar a
getdir
função:Não sou programador, mas imagino que se possa
getdir
omitir todos os arquivos listados no.hidden
arquivo (por exemplo) . Se você implementar isso corretamente, todas as ferramentas (GUI ou não) serão afetadas.fonte
Você pode 'esconder' o conteúdo de um diretório por tirar perms 'x' para o grupo, ou outro:
chmod go-x directoryname
. Você não podia mais listar arquivos, embora pudesse acessar um arquivo se soubesse o caminho exato. Isso não soa como o que você deseja.Lembre-se de que o arquivo dotfile é uma conveniência, não realmente para ocultar o arquivo por motivos de segurança, mas para reduzir a confusão de arquivos durante a listagem de arquivos. Está cozido
ls
e as outras ferramentas.fonte