Um arquivo pode ser editado com a permissão 'write', mas não em seu diretório pai?

5

Suponha que o proprietário / usuário não tenha a permissão de gravação em um diretório, mas ele o possui em um arquivo abaixo dele. O arquivo aqui pode ser editado ou não? Se sim, existe alguma situação em que o arquivo não possa ser editado?

    
por h8pathak 25.03.2015 / 19:18

3 respostas

4

Sim, o arquivo pode ser editado.

No que diz respeito ao diretório, o arquivo não pode ser editado se você remover a permissão de execução no diretório do destino (proprietário / grupo / outros).

EDITAR: Se você quiser que o proprietário não possa editar o arquivo alterando a permissão do diretório (supondo que o mesmo usuário possua o diretório e o arquivo), você pode simplesmente remover o diretório. executar permissão no diretório para o proprietário. Por exemplo, você pode fazer a permissão para o proprietário como rw- , ou seja, 6 .

    
por 25.03.2015 / 19:28
3

Como as outras respostas afirmaram: Sim, o arquivo pode ser editado / modificado. E, Correndo o risco de dividir os cabelos, permita-me salientar que a pergunta diz

… he has [write permission] on a file under [the directory].

e para fazer o comentário semi-óbvio de que, para editar um arquivo no significado tradicional da palavra, o usuário também deve ter a permissão read para o arquivo, a fim de obter seu conteúdo atual. Sem permissão de leitura, o usuário pode sobrescrever dados existentes e / ou adicionar dados (anexados) no final, mas ele não pode fazer edições úteis como corrigir erros de digitação ou inserir texto.

E eu digo "modificado" para enfatizar que estamos falando de vários cenários, para incluir os que eu mencionei acima (substituir ou anexar), bem como

  • copiando os dados do arquivo (por exemplo, para um arquivo em outro diretório), manipulá-lo de alguma forma e, em seguida, copiá-lo de volta (sobrescrevendo o arquivo) ou
  • usando um editor de texto tradicional , como vi , (ou até mesmo um editor hexadecimal , se aplicável),

e vi , em particular, não tem problemas com a edição de um arquivo nesta situação. Eu não testei muitos outros editores. Espero que a maioria deles (por exemplo, emacs , pico ,…) seja boa também.

Mas,

sed  -i  sed_command(s)  filename

não funcionará, porque sed -i funciona por

  • criando um arquivo temporário no mesmo diretório,
  • copiando o texto do arquivo original para o novo arquivo (temporário), executando o sed_command(s) especificado no processo,
  • excluindo o arquivo original e, em seguida,
  • renomeando o arquivo temporário para o nome original (e chmod ing para corresponder ao modo original do arquivo original).

e essas operações falham quando o diretório está protegido contra gravação. (Eu acredito / suspeito que alguns outros editores podem se comportar da mesma maneira, mas não posso citar nenhum exemplo.)

Portanto, sed -i requer acesso de gravação ao diretório. E, claro, também requer permissão de leitura para o arquivo. Mas o final surpresa de dupla torção é: não requer acesso de gravação ao arquivo . Afinal, você não precisa de acesso de gravação a um arquivo para excluí-lo; basta escrever o acesso ao diretório.

    
por 25.03.2015 / 22:32
0

Você não precisa ter permissões de gravação no diretório, mas o executável x bit precisa ser definido.

Portanto, considere uma direcory foo com um arquivo bar . Se as permissões estiverem configuradas como

 drwx--x--x   foo
 -rw-rw-rw-   foo/bar

por exemplo, o acesso de gravação está disponível para qualquer pessoa desde que o x bit seja fornecido. Nem mesmo o acesso de leitura r ao diretório é necessário.

    
por 25.03.2015 / 19:25