`Permissão negada` para o CD em um diretório, mesmo que as permissões estejam corretas


13

Isso é tão estranho. Conectado a uma caixa Linux (RHEL) como um usuário 'g', fazendo um ls -lahshow

drwxrwxrwx 6 g    g    4.0K Jun 23 13:27 .
drwxrw-r-x 6 root root 4.0K Jun 23 13:15 ..
-rwxrw---- 1 g    g     678 Jun 23 13:26 .bash_history
-rwxrw---- 1 g    g      33 Jun 23 13:15 .bash_logout
-rwxrw---- 1 g    g     176 Jun 23 13:15 .bash_profile
-rwxrw---- 1 g    g     124 Jun 23 13:15 .bashrc
drw-r----- 2 g    g    4.0K Jun 23 13:25 .ssh

Portanto, o usuário 'g' no grupo 'g' / deve / pode ler e gravar no diretório .ssh, mas se ls -lah .ssh/eu conseguir ls: .ssh/: Permission denied. Eu também recebo Permissão negada se eu tentar e catqualquer arquivo no diretório

Se eu entrar como root e alterar as permissões para 700, 744, 766ou qualquer coisa, desde que a permissão 'user' é 7 funciona e eu posso CD e LS o diretório e arquivos dentro.

id g retorna

uid=504(g) gid=506(g) groups=506(g)

Editar:

Copiei essas permissões exatamente para outra caixa idêntica e não há problema. Eu posso cdentrar em um diretório sem executar permissões.

Respostas:


27

O diretório irá exigir que o conjunto bit de execução em ordem para que você possa entrar. Não sei o que você testou, mas você não pode inserir um diretório sem o bit de execução ou ler os arquivos nele:

$ mkdir foo
$ echo "baz" > foo/bar
$ chmod 660 foo
$ cd foo
bash: cd: foo: Permission denied
$ cat foo/bar
cat: foo/bar: Permission denied

Ou seja, a menos que seu processo tenha o conjunto de recursos CAP_DAC_OVERRIDE POSIX (como o root possui), que permite inserir diretórios sem o conjunto de bits executável, iirc.

Basicamente, você deve tentar manter o diretório .ssh em 700 e tudo em 600, apenas para garantir a segurança. A página de manual ssh fornece instruções por arquivo sobre as propriedades necessárias e modos de permissão para arquivos em ~ / .ssh.


17

Um diretório requer permissão de execução para cdentrar nele. Esse é o comportamento esperado.


Mas eu também não pode catquaisquer arquivos no diretório com as mesmas permissões, eles devem não precisa executar permissões para ler
Smudge

4
Você precisa executar permissões no diretório para acessar qualquer coisa dentro de um diretório. Esta resposta está correta.
precisa

1
@samarudge Considere xum diretório para lhe dar permissão para "estar" nesse diretório. Sem ele, você não pode fazer o cd no diretório, não pode ver o que está no diretório, não pode abrir o que está no diretório. Se você não tem permissão para estar na biblioteca, não pode ler os livros lá.
DerfK

Se eu adicionar permissões de execução ao diretório (744 ao diretório, 644 aos arquivos dentro), recebo um erro do SSHD dizendo que as permissões do diretório .ssh devem ser 644 ou menos. Mas com as permissões que 644 ele diz que não pode acessar .ssh / authorized_keys
Smudge

* Ele diz especificamente '.ssh / diretório', e não os arquivos
Smudge

2

Para ls ou cd em um diretório, você precisa executar permissões. Enquanto você não os tiver, não será possível inspecionar o conteúdo e ver as permissões dos arquivos, portanto, provavelmente as permissões dos arquivos estão erradas, se você não puder obtê-las.

A permissão de diretório de 700 e as permissões de arquivo 644 estão perfeitamente configuradas para mim.


As permissões para os arquivos são 644, o proprietário dos arquivos é g: g, portanto as permissões dos arquivos estão corretas. Se eu adicionar permissões de execução para o SSHD diretório diz que eu preciso soltar as permissões para 644 ou sob
Smudge

Das observações ensolarados estão corretas - para baixo votação um pouco dura
AndyM

0

Presumo que este é um problema de arquivo ssh agora? não é um problema geral de chmod?

Se sim, tente

$chmod go-w ~/
$chmod 700 ~/.ssh
$chmod 600 ~/.ssh/*
$chmod 600 ~/.ssh/.*

Outra questão, poderia ser o ponto de montagem, é montado em outro lugar, CIFS, NFS?
AndyM

0

Os diretórios precisam de um conjunto de bits x (para o diretório em que esse bit é visto como bit de pesquisa) para abrir. Então eu uso o tree para obter apenas o conjunto de pastas e evitar o pesadelo de ter todos os arquivos definidos como executáveis ​​(a opção para o tree é -d List directories only.):

sudo tree -faid here_goes_your_directory xargs -L1 -I{} sudo chmod 755  "{}"

Atenção!!! você deve levar isso em consideração:

  • o uso de chmod ou chown recursivo no /diretório raiz ou nos diretórios do sistema destruirá o seu sistema operacional (na verdade, qualquer coisa recursiva no /diretório ou nos diretórios do sistema é perigosa)

  • essa não é uma boa prática de segurança para definir permissões em massa assim

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.