A propriedade do usuário do arquivo é alterada ao transferir arquivos entre computadores?

3

Cenário: Um arquivo criado no computador A ( userA ), que obtém a propriedade do arquivo como userA nas permissões de arquivo, é transferido para computador B com um usuário diferente ( userB ) ....

Does the ownership of the original file change from the original user (userA) in computer A to the user (userB) of computer B?

How can I create a file that is only writable by me, the creator and owner, and only readable to anyone who might receive that file on other computers?

Eu criei um testfile.txt com permissões de arquivo 755 no computador A ( userA ) para comparar as permissões e propriedades deste arquivo antes e depois de transferi-lo usando scp do computador A para o B. notei como meu arquivo original, agora no computador B, tem o id do usuário como userB em vez de userA [onde o arquivo foi criado].

Computador A, tendo 'userA'

rwx-r-x-r-- userA testfile.txt

Computador B, tendo 'userB'

rwx-r-x-r-- userB testfile.txt

Eu pensei, e queria, tornar o arquivo legível, gravável e executável pelo proprietário (que eu achava que seria o usuário do computador em que eu criei o arquivo).

Obrigado! Eu sou novo nisso!

    
por bretonics 10.04.2013 / 00:12

3 respostas

0

Sim.

Tudo depende de quem cria o arquivo no destino. Tente isto:

$ touch some_file
$ ls -l some_file
-rw-r--r-- 1 userA userA 0 Apr 9 17:44 some_file
$ ls -ln some_file
-rw-r--r-- 1 501 501 0 Apr 9 17:44 some_file

Portanto, no meu exemplo, o UID numérico do userA é 501.

Agora transfira-o, entrando no sistema remoto como userB:

$ scp some_file userB@computerB:
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 userB users 0 Apr 9 17:50 some_file
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 1743 20 0 Apr 9 17:50 some_file

Como você vê aqui, o userB criou o arquivo, e o userB tem o numérico uid 1743. Veja também como o timestamp mudou?

Este é o comportamento padrão do scp. Você pode preservar os atributos usando a opção "-p" do scp. Isso preserva apenas o registro de data e hora e as permissões - e, mais importante, não a propriedade. Isso pode ser exatamente o que você está procurando:

$ scp -p some_file userB@computerB:
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 userB users 0 Apr 9 17:44 some_file
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 1743 20 0 Apr 9 17:44 some_file

Note que além do scp, existem muitas maneiras diferentes de criar arquivos em máquinas remotas - NFS, FTP, WebDAV ... elas se comportarão de maneiras diferentes, mas igualmente previsíveis. Não vamos nos deixar levar - você perguntou sobre scp.

(OT nota, você realmente criou o arquivo com 754 permissões! rwx = 111 = 7, rx = 101 = 5, r - = 100 = 4 - você vê, r, we x são bits em uma palavra octal onde r = 4, w = 2, x = 1. É por isso que você verá referências a octal em relação às permissões. Obrigado ernie pela correção!)

    
por 10.04.2013 / 02:57
1

A forma geral do scp quando você está copiando localmente para o remoto é:

scp localfile username@remotehost:/some/remote/directory

Neste caso, você está dizendo ao scp que deseja fazer o login como username no sistema remoto, e esse é o nome de usuário com o qual a gravação ocorrerá. Muito provavelmente no seu exemplo, você usou userB quando estava scp'ing o arquivo para o computador B.

Se você estivesse copiando um arquivo remoto para um host local, por exemplo:

scp username@remotehost:/some/remote/file /some/local/directory

Nesse caso, você faz o login como username no sistema remoto e, em seguida, grava localmente como o usuário no qual você está executando o comando scp. Este exemplo copiará o arquivo do host remoto para o sistema em que você está executando, como o usuário com o qual você está atualmente conectado (já que a gravação será executada pelo usuário atualmente conectado). Isso não afetará nada no remotehost, pois você está apenas lendo o arquivo de lá e copiando-o para o host local. Como você pode ler o arquivo remoto, o arquivo local precisa ter permissões de gravação para você, pois você está gravando o arquivo localmente.

Em outras palavras, o proprietário do arquivo geralmente corresponderá ao gravador do arquivo. Então, se você estiver logado como userA e gravar um arquivo, o proprietário será userA. Um exemplo mais simples pode ser algo assim:

user@server:~$ ls -l /var/log/syslog
-rw-r----- 1 syslog adm 6615 Apr  9 17:09 /var/log/syslog  

Observe que esse arquivo é de propriedade do syslog, mas pode ser lido por qualquer pessoa no grupo adm, a qual o usuário pertença. Então, se copiarmos o arquivo para o diretório pessoal do usuário (~ /):

user@server:~$ cp /var/log/syslog ~/
user@server:~$ ls -l ./syslog
-rw-r----- 1 user user 6615 Apr  9 17:10 ./syslog

Observe que a versão copiada do arquivo agora pertence a user . scp está fazendo a mesma coisa, exceto que a origem ou o destino pode envolver o login como um usuário diferente para um sistema diferente.

Observe que as permissões são rastreadas com o ID do usuário, uma representação numérica do usuário. Você pode ver seu UID atual com o comando id . Em geral, para sistemas individuais, os UIDs não serão o mesmo sistema para o sistema, pois as contas não são compartilhadas (a menos que você esteja usando LDAP ou similar). Eu acredito que tradicionalmente, 0 é raiz, UIDs inferiores a 1000 são reservadas para contas do sistema (por exemplo, mail, news, bin, daemon, etc), e usuários regulares começam em 1000. Até onde eu sei, UIDs regulares de usuários são atribuídos sequencialmente, portanto, se você criou três contas, elas provavelmente seriam 1000, 1001 e 1002.

De volta à sua pergunta original sobre como enviar um arquivo somente leitura, é necessário garantir que o leitor no sistema remoto não tenha o mesmo UID que o proprietário do arquivo. ou seja, se você (userA) estivesse preparando um arquivo para userB, você poderia fazer algo como:

scp localfile userA@remotehost:/some/remote/directory

Nesse caso, o proprietário do arquivo terminará sendo userA (e sabemos que o userA existe no sistema remoto, pois é com isso que estamos logados como) e userB não teria permissões de gravação (assumindo o arquivo era originalmente 755). Edit: você pode precisar de um -p para preservar as permissões?

É claro que, se o userB tiver permissões root ou sudo, elas poderão tornar o arquivo gravável, independentemente do que você fizer.

    
por 10.04.2013 / 00:53
0

Quando você transfere um arquivo da origem para o destino, as permissões e, de fato, a propriedade estão sujeitas aos parâmetros da transferência. Como disse @ernie, a propriedade depende de como você transfere o arquivo.

As permissões dependem do umask do arquivo.

Para servidores FTP antigos, o umask geralmente é configurado na configuração do servidor FTP. Para servidores SFTP (cp sobre SSH ou scp), você tem que configurar os plugins PAM para o ssh de acordo com esta resposta na falha do servidor.

    
por 10.04.2013 / 01:19