'Permissão negada' para um arquivo que possuo?


13

Meu usuário, bob, não pode acessar arquivos que ele possui (teoricamente). Estou executando o Fedora Core 8. Provavelmente é mais fácil mostrar do que dizer:

> ls -al .
total 32
drwxrwxr-x 7 bob bob 4096 May 18 14:33 .
drwxrwxr-x 4 bob bob 4096 May 12 15:44 ..
drwxr-xr-x 2 bob bob 4096 June 1 14:22 log

> cd ./log
-bash: cd: log/: Permission denied

> ls -al ./log
ls: cannot access log/..: Permission denied
ls: cannot access log/the.log: Permission denied
ls: cannot access log/.: Permission denied
total 0
d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..
-????????? ? ? ? ?            ? the.log

> sudo ls -al ./log
drw-rw-r-- 3 bob bob      4096 Jun  2 04:11 .
drwxrwxr-x 7 bob bob      4096 May 18 14:33 ..
-rw-rw-r-- 1 bob bob         0 Jun  1 04:12 the.log

O ls -aldestaca-se como muito estranho. Ele listará os arquivos que não tenho permissão para ver, mas não me mostrarão as permissões?

Então, as perguntas são: o que causaria isso? E o que posso fazer para repará-lo?

Respostas:


17
> sudo ls -al ./log
...
drw-rw-r-- 3 bob bob      4096 Jun  2 04:11 .

Não parece que Bob tenha permissões de execução para ./log, então ele não pode cdfazê-lo.

Mas

> ls -al .
...
drwxr-xr-x 2 bob bob 4096 June 1 14:22 log

mostra que ele faz. Mas não parece que eles estão apontando para o mesmo arquivo (permissões diferentes, tempo de modificação diferente).

Tente sudo ls -ail ./loge ls -ailveja se o inode é o mesmo.


10

As coisas são mais simples do que a corrupção do sistema de arquivos ou o selinux. Como você pode ver, está faltando a permissão x (executável) no diretório de log. Na verdade, para os diretórios x, significa que alguém pode mudar para esse diretório. Basta fazer um "chmod + x log" para corrigir esse perm e você poderá acessá-lo.


> Na verdade, para os diretórios x, significa que alguém pode mudar para esse diretório. Eu continuo esquecendo isso; obrigado.
yPhil

6

Vi coisas assim quando o sistema de arquivos foi corrompido ou se você tem uma unidade com falha. A correção geralmente é executar o fsck no sistema de arquivos e corrigir os erros encontrados.


Eu fiz isso há cerca de uma hora em um dos meus servidores de arquivos. +1
Thomas Denton

2

Além disso, verifique as configurações do SE / Linux. Às vezes, as permissões no arquivo não têm nada a ver com a possibilidade de acessá-lo ou não.


1
Concordo com @David Mackintosh. Se o SELinux estiver ativado e se os arquivos / diretórios foram criados por outra pessoa e depois mudou a propriedade para bob, é provável que isso aconteça. como o contexto dos arquivos permanece com o autor original e não será acessível até que o contexto também seja alterado para usuário de Bob.
Viky

2

Os arquivos podem ter o conjunto imutável ou anexar apenas atributos estendidos. Já tive isso antes e nem mesmo o root pode excluir o arquivo.

Atributos estendidos podem ser visualizações via "lsattr" e alterados via "chattr"


1
> sudo ls -al ./log
drw-rw-r-- 3 bob bob 4096 2 de junho 04:11.

Não sei por que, mas o "." entrada em ./log/ não possui permissões de execução. As permissões devem ser idênticas às de ./log.

Você pode tentar chmod 755 ./log e chmod 755 ./log/. e veja se algum comando corrige o acesso?

Fora isso, eu aconselho que você execute um fsck no sistema de arquivos porque parece que ele está fora de sincronia.


1

Você já tentou mudar a propriedade do diretório para outra pessoa e depois voltar para Bob? O conselho de Zoredache é melhor - apenas fsck!


2
Esse tipo de problema sempre acaba sendo permissões de diretório.
doublejosh 24/02

1

Uma resposta mais concisa IMO.

Seu diretório não possui permissões executáveis, exigidas pelo cd .

Consertar:

$ sudo chmod +x ./log

Recursivamente:

$ sudo chmod -R +x ./log

+ x está adicionando o atributo executável. Você sempre pode remover o atributo executando -x

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.