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.