Eu tenho uma caixa ReadyNAS chamada "storage" que acredito ser baseada no Debian. Eu posso ssh nele como root. Estou tentando reconfigurar o servidor da web, mas estou com um problema de permissão de arquivo que simplesmente não entendo. Não posso fazer nada com /etc/frontview/apache/apache.pem
raiz! Parece não ter permissões especiais em comparação com outros arquivos no mesmo diretório e posso trabalhar com eles.
storage:~# whoami
root
storage:~# cd /etc/frontview/apache/
storage:/etc/frontview/apache# ls -lah apache.pem*
-rw------- 1 admin admin 4.0k Jul 10 2013 apache.pem
-rw------- 1 admin admin 4.0k Jun 9 05:57 apache.pem.2017-02-04
-rw------- 1 admin admin 1.5k Jun 9 05:57 apache.pem.orig
storage:/etc/frontview/apache# touch apache.pem
touch: creating `apache.pem': Permission denied
storage:/etc/frontview/apache# touch apache.pem.2017-02-04
storage:/etc/frontview/apache# rm -f apache.pem
rm: cannot unlink `apache.pem': Operation not permitted
O que há de tão especial neste arquivo que não pode ser tocado? Não consigo deletá-lo. Não posso alterar as permissões nele. Não posso mudar de dono.
O diretório parece estar bem. Ele tem espaço restante, não é montado como somente leitura. Na verdade, eu posso editar outros arquivos no mesmo diretório.
# ls -ld /etc/frontview/apache
drwxr-xr-x 8 admin admin 4096 Jun 9 05:44 /etc/frontview/apache
# df /etc/frontview/apache
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hdc1 2015824 504944 1510880 26% /
files
permissions
root
ext3
Stephen Ostermiller
fonte
fonte
ls -ld /etc/frontview/apache
edf /etc/frontview/apache
. Talvez a pasta esteja em um espaço em disco montadoro
?# mount
:/dev/hdc1 on / type ext3 (rw,noatime)
Respostas:
Acabei de encontrar o problema. O atributo "imutável" foi definido nesse arquivo.
ls
não mostra isso. Você precisa de um comando diferente para vê-lo:Depois de remover o bit imutável, posso editar esse arquivo:
fonte
ls
não tem uma opção para listar atributos. Eu esqueço, mas talvez até o sistema solicite uma consulta não seja portátil, por isso foi provavelmente mais fácil implementá-los em um utilitário separado.)ls
mostrasse esse bit ou se algum dos outros comandos que eu usei tivesse mensagens de erro mais úteis (e específicas) sobre o motivo pelo qual as permissões foram negadas.touch
sabem é que o sistema que chamou de tentativa (open("apache.pem", O_WRONLY|O_CREAT|..., 0666)
) falhouEACCESS
. (Usestrace -efile touch apache.pem
para ver as chamadas do sistema relacionadas a arquivos que ele faz). Como diz a página de manual da chamada de sistema , existem muitos motivos possíveis para o EACCESS, e muitos deles envolvem diretórios-pai e não o próprio arquivo. Escrever código para precisão deduzir por que uma chamada de sistema retornou o erro aconteceu seria extremamente difícil, uma vez que diferentes sistemas de arquivos e sistemas operacionais são diferentes ...errno
) e imprime isso. (Usando aperror
função de biblioteca padrão C , ou equivalente). Esse é um dos casos raros em que isso nem sempre é uma dica suficiente para o usuário encontrar rapidamente o problema, mas na maioria das vezes funciona muito bem. (Especialmente quando combinado com ostrace
caso de haver alguma dúvida sobre exatamente qual operação produziu o erro.) Não é perfeito, mas pode ser muito pior (cf. MS Windows, onde na melhor das hipóteses você obtém um código de erro para o google.)chattr +i
, e notou querm foo
(sem-f
) prompts:rm: remove write-protected regular file ‘foo’
. Porquefaccessat(AT_FDCWD, "/var/tmp/foo", W_OK) = -1 EACCES (Permission denied)
. O POSIX exigerm
que seja solicitado por padrão antes de remover arquivos protegidos contra gravação e, por isso, verifica-o em primeiro lugar. Então, você teria uma grande pista mais rapidamente se não tivesse usadorm -f
. : /access(3)
solicita que o kernel verifique as permissões como se estivesse realmente abrindo para gravação, para pegar as ACLs e os atributos.