copie de fichiers d'un utilisateur à un autre sur une seule machine

20

Comment copier des fichiers ou des répertoires d'un utilisateur à un autre utilisateur sur une même machine via un terminal ?

Supposons qu'il existe un fichier test.txt dans le répertoire personnel de USER1. J'ai besoin de copier ce fichier dans le répertoire personnel de USER2 sur ma machine. Comment puis-je le faire via un terminal?

nischalinn
la source

Réponses:

26

En supposant que vous ayez des sudoprivilèges, la commande suivante fera l'affaire.

sudo cp /home/USER1/FNAME /home/USER2/FNAME && sudo chown USER2:USER2 /home/USER2/FNAME

Copiera le fichier de USER1 vers USER2, puis changera le propriétaire de la copie dans / home / USER2 en USER2

Si vous ne disposez pas de sudoprivilèges, les deux utilisateurs devront s'assurer que vous disposez des autorisations de lecture sur le répertoire USER1 et d'un accès en écriture sur le répertoire USER2. Si vous disposez de ces accès, vous pouvez entrer la commande:

cp /home/USER1/FNAME /home/USER2/FNAME

Cela copiera le fichier en question, mais USER2 ne pourra peut-être pas manipuler le fichier tant qu'il n'aura pas les autorisations appropriées.

Charles Green
la source
Cela ne fonctionnera que si USER1 dispose d'un accès sudo, ce qui pourrait ne pas être le cas dans un système multi-utilisateur.
BostonHiker
L'autre option serait de définir les autorisations sur leur propre dossier pour permettre à l'autre utilisateur de les récupérer, mais cette option est beaucoup plus facile si possible.
Geary Shull
@BostonHiker J'avais supposé que la personne qui faisait la copie n'était ni USER1 ni USER2, et avait les privilèges sudo. C'est probablement une mauvaise hypothèse de ma part.
Charles Green
@Charles Green - veuillez modifier votre réponse pour énoncer vos hypothèses, sinon elle est incomplète / trompeuse.
BostonHiker
@BostonHiker Done. Merci de me garder honnête.
Charles Green
6

si vous n'avez pas les privilèges sudo mais que vous pouvez vous connecter avec les deux utilisateurs, vous pouvez utiliser scp avec localhost:

scp file1 user2@localhost:/home/user2/
fort
la source
Qu'est-ce qui vous fait penser qu'il s'agit d'un hôte distant ou qu'il y a un serveur SSH / SFTP en cours d'exécution sur la machine en question?
David Foerster
1
En supposant que vous avez installé SSH
loudstil
5

En tant qu'UTILISATEUR1:

cp [filename] /tmp
chmod 777 /tmp/[filename]

En tant qu'UTILISATEUR2:

cp /tmp/[filename] .

En tant qu'UTILISATEUR1:

rm /tmp/[filename]
Ryan J McCall
la source
Vous méritez plus de votes positifs :)
Neeraj Jain
1

Supposons que vous n'avez pas installé ssh ou que vous ne voulez pas partager les clés / secrets.

Supposons que l'utilisateur1 soit dans le groupe1, et l'utilisateur2 dans le groupe2, et à la fois utilisateur1! = Utilisateur2 et groupe1! = Groupe2.

Créez un groupe partagé, group3s.

addgrp group3

Ajoutez à la fois user1 et user2 aux group3s.

Créez un répertoire dans un endroit mutuellement accessible, où un utilisateur possède, mais possède la propriété de groupe de group3s.

#as user1,
mkdir $place/shared && chown user1.group3s $place/shared && chmod 770 $place/shared;
#as user1 or user2,
cp $file $place/shared && chgrp $place/shared/$file && chmod 660 $place/shared/$file

Mais, supposons que vous ne puissiez pas créer le nouveau groupe partagé et placer les deux utilisateurs dans ce groupe?

Créez le répertoire et donnez-lui 770 autorisations,

mkdir $place/shared && chown user1.group1 $place/shared && chmod 770 $place/shared;

Ensuite, en tant que root / admin, changez la propriété du groupe en groupe de l'autre utilisateur,

sudo bash
chgrp group2 $place/shared && chmod g+s $place/shared

La commande chmod g + s définit le bit setgid afin que les fichiers placés dans le répertoire aient la propriété du groupe définie sur group2.

ChuckCottrill
la source
0

Toutes les autres réponses ici nécessitent un accès root, permettent à n'importe quel utilisateur sur la même machine de copier le fichier ou nécessitent un partage de mot de passe. Voici une méthode qui ne fonctionne pas:

Demandez USER2(appelons-le Bob) d'exécuter les commandes suivantes (vous pouvez remplacer /tmppar n'importe quel répertoire sur lequel les deux utilisateurs sont autorisés à écrire, mais /tmpest idéal car par défaut, il est collant, ce qui empêche un utilisateur malveillant de renverser ce processus. Un répertoire appartenant à par Bob qui est lisible dans le monde fonctionne également):

[bob@computer ~]$ touch /tmp/test.txt
[bob@computer ~]$ chmod 622 /tmp/test.txt

Cela crée un fichier accessible en écriture, mais non lisible.

Ensuite, USER1(appelons-la Alice) exécuté (si vous êtes paranoïaque, Alice peut d'abord vérifier les autorisations pour vous assurer que le fichier appartient à Bob):

[alice@computer ~]$ dd if="$HOME/test.txt" of=/tmp/test.txt

Cela écrase le contenu de /tmp/test.txt. Si vous souhaitez vérifier l'intégrité du fichier, Alice doit également générer un hachage du fichier. Par exemple:

[alice@computer ~]$ openssl sha1 < "$HOME/test.txt" > /tmp/test.txt.sha1

Vous pouvez à la place signer numériquement le fichier ou toute autre méthode pour garantir son intégrité.

Et enfin, Bob déplace le fichier et en prend possession:

[bob@computer ~]$ mv /tmp/test.txt "$HOME" 
[bob@computer ~]$ chmod 600 "$HOME/test.txt"

Et Bob peut vérifier l'intégrité s'il le souhaite. Si c'est le cas, il devrait vérifier pour s'assurer que seule Alice peut écrire /tmp/test.txt.

[bob@computer ~]$ diff /tmp/test/txt.sha1 <(openssl sha1 < "$HOME/test.txt")

Si le fichier a été copié correctement, cela ne devrait afficher aucune sortie.

Chris
la source
-1

Avant de copier un utilisateur sur un autre, vous devez vous connecter en tant qu'utilisateur su, puis utiliser la commande cp

sudo cp /home/shyam/Desktop/sparkhadoop_2.11-1.0.jar /home/hadoop/Desktop
Shyam Gupta
la source
Cela ne transfèrera pas la propriété USER2mais la laissera comme rootsi. -1
David Foerster
@DavidFoerster nous ne transférons pas la propriété, nous copions le fichier d'un utilisateur à un autre utilisateur. en utilisant l'utilisateur root, nous pouvons transférer le fichier. OK
Shyam Gupta