Como um usuário pode excluir os 755 arquivos de outro usuário?

35

Eu tenho um script de upload de backup que arquivos do scp para outro servidor usando o usuário upload. Outro script no servidor de destino os exibe para outro usuário e define o modo de arquivo como 755.

Se eu fizer o SSH no servidor de destino usando o uploadusuário, sou capaz de excluir os arquivos conhecidos. Eles não deveriam ser somente leitura?

Aqui está a aparência de um arquivo no servidor de destino e o usuário uploadpode excluí-lo.

-rwxr-xr-x 1 maciekish maciekish 650M Nov  1 01:07 2014-11-01-data.tar.bz2

O usuário uploadacabou de ser adicionado useradde não faz parte do maciekishgrupo.

Ao tentar excluir o arquivo como uploadvia ssh, recebo a pergunta se quero excluir "arquivo regular protegido contra gravação" e posso dizer Ye excluí-lo.

Maciej Swic
fonte
4
Essencialmente uma duplicata de Por que rmremover arquivos somente leitura?
G-Man diz 'Restabelecer Monica

Respostas:

64

Os arquivos são somente leitura; no entanto, a exclusão de um arquivo não o modifica, mas apenas o diretório pai (basicamente remove o arquivo da listagem de diretórios) - e parece que você tem permissões completas de gravação no diretório.

Você pode definir o stickybit - também conhecido como sinalizador "exclusão restrita" - que impedirá qualquer pessoa, exceto o proprietário, de renomear ou excluir arquivos nesse diretório (como em /tmp). Para fazer isso, execute chmod o+t *directory*como o proprietário do diretório.

gravidade
fonte
12

Em um sistema de arquivos Unix típico, qualquer arquivo pode ser identificado por um número arbitrário de entradas de diretório, cada uma contendo um "link físico".

Do ponto de vista da implementação, há uma diferença entre excluir a última entrada de diretório (link físico) para um arquivo e simplesmente excluir uma referência dentre muitas. No entanto, do ponto de vista semântico, não há diferença.

Se existirem vários links físicos para um arquivo, a gravação no arquivo usando qualquer um deles altera o arquivo visto por todos eles. O uso rmem um link, no entanto, apenas faz com que o arquivo não seja acessível por esse link. Outros links para o arquivo continuam a ver exatamente o mesmo arquivo.

supercat
fonte
3
Comumente conhecido como links físicos.
Bob
1
@ Bob: Eu sei que o termo "link físico" é usado para descrever as referências criadas para um arquivo já existente; nos casos em que um arquivo nunca teve mais de uma referência a ele, essa referência isolada ainda é chamada de "link físico"?
Supercat3
3
Não há diferença entre os links. Criar arquivo A, criar link físico B, excluir arquivo A. B agora é um arquivo ou um link físico? Para entender como funciona, é melhor vê-lo como N links físicos e não como 1 arquivo e (N-1). Há também os links que existem quando um arquivo é aberto.
precisa saber é o seguinte
@ gnasher729: Eu concordo que nos casos em que vários links existem ou existiram para um arquivo, faz sentido referir todos eles como "links físicos" se não houver diferença semântica entre eles. Por outro lado, eu pensaria que, do ponto de vista semântico e de desempenho, poderia haver vantagens em distinguir entre uma entrada de diretório que sempre foi a única referência a um arquivo, versus aquela na qual outros links físicos podem ter sido criados. De qualquer forma, não sabia se seria correto referir, digamos, as entradas do diretório, "cada uma das quais é chamada de 'link físico'".
Supercat
2
@ supercat não é incrivelmente comum, mas está correto. Considere o campo st_nlink("número de links físicos") em struct stat. Simplificando, os diretórios contêm links físicos para arquivos.
Hbbs #