Por que o cp não configura atributos de origem e falha com -p?

1

Eu tenho estes arquivos:

-rw-rw-r-- 1 root   adm    0 Jun 22 11:25 a
-rw-rw-r-- 1 wilmes wilmes 0 Jun 22 11:23 b

Quando cp b para um usuário como wilmes, por que ele mantém o dono original de um (root)?

Eu uso este comando (sem aliases): cp b a

Por que falha quando eu uso -p no comando cp -p b a?

cp: preserving times for 'a': Operation not permitted

Eu notei isso no Ubuntu 17.04 com o ext4. User wilmes é membro do grupo adm e o diretório que contém se parece com isto:

drwxrwxr-x 2 wilmes wilmes 4,0K Jun 22 12:09 ../user/

E mais importante: onde isso é documentado?

    
por martinw 22.06.2017 / 12:16

2 respostas

1

Ele falha porque você precisa ser o proprietário do arquivo de destino (a), o cp não substituirá a segurança básica do unix. Um usuário pode preservar seus próprios arquivos, wilmes - > wilmes, mas não pode fazer isso para outros usuários, e certamente não para root. Estou assumindo que você não está logado como root, nem como wilmes.

Nesse caso, um arquivo é de propriedade de root, o outro de wilmes. Para preservar, você deve tentar executar:

sudo cp -p b a

Links relevantes:

Exemplo:

Crie um arquivo para raiz, um e um arquivo para um usuário padrão (joe), b.

joe@testbed:~/tmp2$ sudo touch a
joe@testbed:~/tmp2$ touch b

Verifique se as permissões estão corretas.

joe@testbed:~/tmp2$ ls -l
total 0
-rw-r--r-- 1 root    root    0 Jun 22 13:51 a
-rw-r--r-- 1 joe     joe     0 Jun 22 13:51 b

Tentativa de copiar o arquivo de propriedade do usuário, b, sobre o arquivo de propriedade da raiz (o que violaria as permissões):

joe@testbed:~/tmp2$ cp -p b a
cp: cannot create regular file 'a': Permission denied

Repita cópia como root, permissões preservadas:

joe@testbed:~/tmp2$ sudo cp -p b a
joe@testbed:~/tmp2$ ls -l
total 0
-rw-r--r-- 1 joe joe 0 Jun 22 13:51 a
-rw-r--r-- 1 joe joe 0 Jun 22 13:51 b

Nota: Permissão negada, não Operação não permitida . Eu imagino que você vê não permitido porque o usuário wilmes tem acesso ao arquivo, por meio de um grupo, no entanto, eles não são o proprietário , então eles não podem sobrescrevê-lo completamente.

Logicamente, você está substituindo um arquivo que pertence a outro usuário (root) e solicitando que o sistema também torne você o proprietário desse arquivo, o que seria uma falha de segurança catastrófica.

Por exemplo, e se eu viesse um usuário normal, malicious.username01 e quisesse substituir o crontab por algo como ntp que pertence ao root? Se o que você está tentando fazer funcionou, eu poderia simplesmente escrever minha própria versão mal-intencionada e simplesmente cp -p my-malicious-script /etc/cron.daily/ntp . Isso seria terrível. Realmente muito terrível.

    
por 22.06.2017 / 12:27
2

When I cp b over to a as user wilmes why does it keep the original owner of a (root)?

Porque cp por padrão (sem -a ou -p flags) não modifica a hora nem o proprietário do arquivo de destino. No seu caso, o arquivo a é de propriedade de root , mas desde que você tenha acesso de gravação através do grupo, você pode modificar o arquivo, incluindo truncá-lo e reescrevê-lo completamente. O que você não pode fazer é modificar os timestamps, já que somente o dono do arquivo pode fazer isso.

Se o arquivo de destino não existisse, ele seria criado com o fluxo do usuário executando cp , ou seja, wilmes . (E sem o privilégio de superusuário, você também não poderia alterar o proprietário.)

No entanto, como você também tem acesso de gravação ao diretório, é possível primeiro remover o arquivo de destino e, em seguida, recriá-lo. Nesse caso, ele seria de propriedade do usuário que está executando cp .

    
por 01.07.2017 / 17:44

Tags