Se eu quiser restringir o acesso a uma pasta secret
em uma máquina compartilhada, eu realmente preciso recursivo chmod
na pasta
chmod -R g=,o= secret
ou está chmod
na pasta suficiente?
chmod g=,o= secret
Qual é a diferença prática?
Se eu quiser restringir o acesso a uma pasta secret
em uma máquina compartilhada, eu realmente preciso recursivo chmod
na pasta
chmod -R g=,o= secret
ou está chmod
na pasta suficiente?
chmod g=,o= secret
Qual é a diferença prática?
Para um diretório, o acesso de "leitura" permite listar o conteúdo e o acesso de "execução" permite percorrer o diretório para abrir um de seus filhos (arquivo ou subdiretório). Portanto, se você remover:
Obviamente, se você fizer uma alteração recursiva, uma reinicialização não recursiva acidental dos direitos de acesso ao diretório principal terá menos consequências.
Nem é preciso dizer que, se você criou um arquivo há dois dias (com um modo de leitura pública) e alguém leu o arquivo ontem ou fez uma cópia dele, não há nada que você possa fazer hoje para tornar esse arquivo privado.
xenoid diz (um tanto simplista) que, se você remover o grupo e outras permissões do seu diretório (hoje, agora), “qualquer coisa abaixo dele se tornará inacessível e você não precisará fazer uma alteração recursiva”. Concordo que, se você usar
chmod
seu diretório (de nível superior) adequadamente, ninguém além de você 1 poderá acessá-lo no futuro (ou seja, de agora em diante). Mas há algumas pegadinhas.Links físicos
Lembra daquele arquivo que você criou há dois dias? Suponha que seu adversário tenha feito um link físico para esse arquivo ontem (em vez de copiá-lo). Se você usar
chmod
apenas seu diretório (de nível superior), esse arquivo continuará a ter as permissões publicamente legíveis que você atribuiu ao criá-lo e, portanto, o criminoso ainda poderá lê-lo no futuro - (potencialmente), mesmo se você posteriormente o modifica. Se você fizer um recursivechmod
, isso protegerá as permissões no arquivo, o que afetará o link. O bandido ainda poderá fazerls -l
isso, então eles poderão ver quando você o alterar e quão grande é, mas não poderão lê-lo novamente.Diretório de trabalho
Suponha que, em seu
secret
diretório, você tenha umplans
diretório e também seja legível publicamente. E suponha que, cinco minutos atrás, o bandido abriu uma janela de terminal e disseAgora, depois de fazer o
chmod
onsecret
, o diretório de trabalho do bandido ainda é/home/clemisch/secret/plans
, e eles podem continuar a listar esse diretório e acessar os arquivos lá, potencialmente para sempre. Claro, uma vez que elescd
estejam em outro lugar, ou fechem aquela janela, ou saiam, ou a máquina seja reiniciada, eles perderão o acesso.Se você fizer um recursive
chmod
, isso garantirá as permissões em todos os arquivos e todos os diretórios, fazendo com que o invasor perca o acesso imediatamente.Isso pode não ser um risco muito grande se a máquina for um computador pessoal acessado apenas pelo console. Mas, se o bandido tiver deixado uma sessão
screen
ou em segundo plano, ele poderá usar esse ataque.tmux
E, se a máquina suportarssh
(ou outro acesso remoto; talvez até FTP seja suficiente), esse ataque pode ser usado.Erro humano
Como o xenóide apontou em sua resposta: Se você fizer um recursivo hoje e depois de amanhã acidentalmente
chmod
( apenas) o diretório de nível superior voltar para 755, ainda estará protegido pelo recursivo de hoje - todos os arquivos e os diretórios abaixo ainda estarão ilegíveis. (Claro, se você criar um novo arquivo amanhã e permitir que ele seja lido publicamente, ele será exposto quando você abrir as permissões no diretório. Mas isso seria verdade, independentemente de o arquivo de hoje ser recursivo ou não. )secret
chmod
chmod
secret
secret
secret
chmod
mazunki fez um comentário : “Acredito que
cp
carrega permissões”. Não tenho certeza do que eles queriam dizer, mas considere este cenário. Você quer fazer umdiff
entre dois arquivos:secret/plans/the/quick/brown/fox/file1
secret/jumps/over/the/lazy/dog/file2
Mas você não tem certeza exatamente de onde estão esses arquivos e precisa vasculhar para encontrá-los. Você pode ser tentado a fazer
Se você fizer isso,
/tmp/file1
terá a mesma proteção quesecret/plans/the/quick/brown/fox/file1
- então esse é outro motivo para fazer o recursivochmod
hoje.Mais uma coisa
Se o bandido abriu um de seus arquivos secretos cinco minutos atrás e o mantém aberto, ele poderá lê-lo no futuro – potencialmente mesmo que você o modifique. A boa notícia é que este é um ataque um tanto complicado de executar - o bandido deve ter pensado nisso, antes de você fazer o
chmod
. A má notícia é que esse ataque é muito difícil de se defender — um chmod recursivo não ajudará.__________
1 e, claro, usuários/processos privilegiados
PS Você pode encurtar um pouco o seu comando:
chmod go=
é equivalente achmod g=,o=
. (Isso não tornará o recursivochmod
mais rápido, é claro.)Recursive
chmod
afeta todos os subdiretórios e pastas também, não apenas a própria pasta.Se você não conceder acesso explicitamente a
.
, não poderá ler o conteúdo da pasta.Da mesma forma, você não poderá
cd
entrar nos subdiretórios da referida pasta, a menos que os explicitamente+x
.