Mover o diretório (com conteúdo) para o diretório pessoal de outro usuário (sem sudo)?

2

Eu tenho um diretório que eu quero mover (com seu conteúdo, recursivamente) para o diretório home do usuário do outro. Eu não tenho permissão para escrever no diretório pessoal do usuário, mas sei sua senha.

Eu sei copiar o diretório usando scp -r (veja aqui ). No entanto, os dois diretórios estão localizados no mesmo sistema de arquivos, portanto, se eu quiser mover o diretório, copiar e remover o original será ineficiente. Existe uma maneira de mover o diretório, sem usar sudo (não sei a senha da raiz, mas sei a senha do outro usuário)?

Relacionado: Veja aqui sobre como mover um único arquivo . Essa postagem, no entanto, não funciona para diretórios.

    
por becko 02.06.2016 / 14:19

5 respostas

3

Mover arquivos (sem alterar a propriedade deles) requer apenas a capacidade de gravar nos diretórios que os contêm. Então, para mover /home/usera/dir1/dir2 e seu conteúdo para /home/userb/dir3 , começando como usera :

cd ~/dir1
find . -type d -print0 | xargs -0 chmod 777
su userb
cd ~/dir3
mv ~usera/dir1/dir2 .
exit

depois, como usera , restaure as permissões para o que elas devem ser (em especial, em dir1 ).

usera continuará sendo o proprietário dos arquivos movidos, o que pode não ser conveniente. Outra opção é fazer algo semelhante, criando um farm de links com cp -rl ; isso funciona em condições semelhantes e tem a vantagem de criar todos os novos diretórios pertencentes a userb .

    
por 02.06.2016 / 14:43
1

Eu faria o contrário de Kupferdache:

Eu criaria um diretório gravável publicamente em minha casa, acessaria a outra conta e moveria o arquivo para meu diretório, a fim de alterar a permissão do diretório.

Nota: este é um movimento real. Então você deve configurar a permissão conforme necessário. Portanto, sua solução com scp pode ser a segura (permissões de arquivos seguras e boas do seu lado)

    
por 02.06.2016 / 14:40
1

Isso funcionaria para as suas necessidades? O Rsync copiará os diretórios, arquivos e permissões para o diretório de destino.

rsync -avz /path/to/files target_server:/path_to_files

Edit: E você pode adicionar o sinalizador para remover o original se a cópia for bem sucedida.

    
por 02.06.2016 / 20:33
0

Eu usaria chown <new username> com todos os arquivos recuslive e, em seguida, su <new username> mv os arquivos.

    
por 02.06.2016 / 14:31
0

Certo, você não quer isso, então vamos tentar algo diferente!

1- Fazendo os comandos como o outro usuário sem pedir mais senha:

Primeiro você precisa preparar seu ambiente, assim você não precisará da senha para fazer os comandos.

Prepare o usuário2:

user2@machine:~$ cp /bin/bash .bash
user2@machine:~$ chmod a+s /home/user2/.bash

E agora, user1, você pode se logar como usuário2 sem nenhuma senha!

user1@machine:~$ /home/user2/.bash -p
bash-4.3$ whoami 
user2

Agora, dentro do user1, você pode fazer isso sem nenhuma senha.

user1@machine:~$ chmod -R 777 source ; /home/user2/.bash -pc "mv source dest"

Mas isso pode ser muito inseguro, porque se outro usuário descobrir que /home/user2/.bash -p entrará como o usuário2 sem senha, sua segurança não será segura. Isso será seguro se você tiver os dois usuários dentro de um grupo comum, então você usará chmod ug + se não chmod a + s para preparar seu ambiente, e somente os usuários do grupo poderão executar o bash como o outro usuário! Nice não é?

2- Fazendo a jogada pedindo a senha (mais segura):

Se você não tiver os usuários em um grupo comum e quiser executar comandos como o outro, convém usar a senha solicitando uma versão assim:

user1@machine:~$ chmod -R 777 source ; su user2 -c "mv source dest"

Isso ajuda?

    
por 02.06.2016 / 14:35