O localizador possui um conjunto interno de permissões de arquivos mais restritivo?

1

Meu OSX Mountain Lion tem dois usuários (digamos, me e otheruser ).

Quando logado como me , posso ver /Users/otheruser/Public e descartar arquivos em /Users/otheruser/Public/Drop Box , onde não consigo vê-los. Isso funciona da mesma maneira com finder e shell ( ls "/Users/otheruser/Public/Drop Box" imprime ls: .: Permission denied ).

No entanto, se o arquivo chamado de forma idêntica ao que você está tentando colocar em /Users/otheruser/Public/Drop Box já está lá, as coisas mudam:

.

Comoshell:

$cpa.txt"/Users/otheruser/Public/Drop Box"

$

A cópia foi bem-sucedida e o arquivo em /Users/otheruser/Public/Drop Box foi substituído.

O arquivo também é substituído se a cópia for feita por meio de APIs do sistema de arquivos em um programa.

O que causa a diferença de comportamento? A diferença é intencional (ou seja, a Apple queria isso)? Se não é intencional, qual comportamento está correto?

    
por executor21 26.03.2013 / 22:34

1 resposta

2

Eu consideraria o comportamento do Finder um bug, mas a diferença é parcialmente intencional (e devido a uma diferença na filosofia). Quando você usa cp para copiar um arquivo em cima do outro, ele simplesmente substitui o arquivo sem perguntar (ou mesmo notando que isso aconteceu). Normalmente, o Finder perguntará se você tem certeza de que deseja substituí-lo; Nesse caso, parece que as permissões da pasta impedem que isso seja feito com sucesso, então você recebe um erro.

Eu provavelmente explicaria as permissões na pasta Drop Box um pouco para esclarecer o que as permissões realmente permitem e não permitem. Existem três permissões básicas de acesso que você pode ter em uma pasta: ler, escrever e "executar" (às vezes chamado de "pesquisa"). Ler oferece a você a capacidade de ler os nomes dos itens em uma pasta, mas não concede nenhuma capacidade de tocá-los de qualquer maneira. Escrever permite adicionar, remover e renomear itens dentro da pasta. "Execute" dá a capacidade de "tocar" o conteúdo da pasta se você souber os nomes dos arquivos.

Quando você usa o Finder para conceder a alguém acesso "somente leitura" a uma pasta, ele realmente concede leitura e execução; isso significa que eles podem ver os nomes dos arquivos e pastas nele, e interagir com eles (sujeitos às permissões nos próprios itens). Se você realmente concedesse acesso de leitura sem executar, eles poderiam ver os nomes dos arquivos, mas não qualquer outra coisa sobre os arquivos (por exemplo, ls em tal pasta funcionaria, mas ls -l obterá erros de permissão quando tentar obter as propriedades dos arquivos ).

Se você concede a alguém que execute o acesso a uma pasta (e nada mais), isso significa que eles podem trabalhar com os arquivos nessa pasta se eles souberem (ou adivinharem) os nomes dos arquivos. ls /path/to/exec-folder falhará, mas ls -l /path/to/exec-folder/filename funcionará se existir um arquivo com esse nome.

O que a pasta Drop Box tem é escrever e executar (mas sem acesso de leitura) para todos, exceto o proprietário. Isso significa que em / Users / otheruser / Public / Drop Box, você pode adicionar arquivos, listar suas propriedades (se souber seus nomes) e até mesmo movê-los, renomeá-los ou excluí-los (novamente, se souber seus nomes). O Finder não pode tirar proveito disso, porque ele realmente quer ser capaz de dar uma olhada no conteúdo da pasta; já que não pode fazer isso, desiste de interagir com o Drop Box. Muitas ferramentas de linha de comando são muito mais precisas no que fazem e, portanto, nunca percebem que estão trabalhando em uma pasta ilegível:

$ echo "This is the file's contents." >somefile.txt
$ cp somefile.txt /Users/otheruser/Public/Drop\ Box
$ ls /Users/otheruser/Public/Drop\ Box    # Unable to look around
ls: Drop Box: Permission denied
$ ls -l /Users/otheruser/Public/Drop\ Box/somefile.txt    # But if you know the filename...
-rw-r--r--+ 1 gordon  staff     29 Mar 26 21:35 /Users/otheruser/Public/Drop Box/somefile.txt
$ more /Users/otheruser/Public/Drop\ Box/somefile.txt
This is the file's contents.
$ mv /Users/otheruser/Public/Drop\ Box/somefile.txt /Users/otheruser/Public/Drop\ Box/newname.txt
$ rm /Users/otheruser/Public/Drop\ Box/newname.txt
$
    
por 27.03.2013 / 02:40