копирование файлов от одного пользователя другому на одном компьютере

20

Как скопировать любые файлы или каталоги от одного пользователя другому пользователю на той же машине через терминал ?

Предположим, что в домашнем каталоге пользователя USER1 находится один файл test.txt . Мне нужно скопировать этот файл в домашний каталог пользователя USER2 на моем компьютере. Как я могу сделать это через терминал?

nischalinn
источник

Ответы:

26

Предполагая, что у вас есть sudoпривилегии, подойдет следующая команда.

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

Скопирует файл из USER1 в USER2, а затем изменит владельца копии в / home / USER2 на USER2

Если у вас нет sudoпривилегий, тогда оба пользователя должны будут убедиться, что у вас есть права на чтение в каталоге USER1, и доступ на запись в каталоге USER2. Если у вас есть эти доступы, вы можете ввести команду:

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

Это скопирует файл, о котором идет речь, но USER2, возможно, не сможет манипулировать файлом, пока не получит соответствующие разрешения.

Чарльз Грин
источник
Это будет работать, только если USER1 имеет доступ к sudo, что может быть не так в многопользовательской системе.
BostonHiker
Другой вариант - установить разрешения для своей собственной папки, чтобы позволить другому пользователю получить их, но этот вариант намного проще, если это возможно.
Geary Shull
@BostonHiker Я сделал предположение, что человек, делающий копию, не является ни USER1, ни USER2 и имеет привилегии sudo. Это, вероятно, плохое предположение с моей стороны.
Чарльз Грин
@Charles Green - отредактируйте свой ответ, чтобы изложить свои предположения, в противном случае он является неполным / вводящим в заблуждение.
BostonHiker
@BostonHiker Готово. Спасибо, что сохранили меня честно.
Чарльз Грин
6

если у вас нет привилегий sudo, но вы можете войти с двумя пользователями, вы можете использовать scp с localhost:

scp file1 user2@localhost:/home/user2/
loudstil
источник
С чего вы взяли, что речь идет об удаленном хосте или о том, что на данной машине работает SSH / SFTP-сервер?
Дэвид Фёрстер
1
Предполагая, что у вас установлен SSH
loudstil
5

Как USER1:

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

Как USER2:

cp /tmp/[filename] .

Как USER1:

rm /tmp/[filename]
Райан Дж Макколл
источник
Вы заслуживаете больше возражений :)
Neeraj Jain
1

Предположим, что у вас либо не установлен ssh, либо вы не можете делиться ключами / секретами.

Предположим, что user1 находится в group1, а user2 в group2, и user1! = User2 и group1! = Group2.

Создайте общую группу group3s.

addgrp group3

Добавьте и user1, и user2 в group3s.

Создайте каталог во взаимно доступном месте, где один пользователь владеет, но имеет групповое владение 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

Но предположим, что вы не можете создать новую общую группу и поместить обоих пользователей в эту группу?

Создайте каталог и дайте ему 770 разрешений,

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

Затем от имени пользователя root / admin измените владельца группы на группу другого пользователя,

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

Команда chmod g + s устанавливает бит setgid, так что для файлов, помещенных в каталог, для владельца группы установлено значение group2.

ChuckCottrill
источник
0

Любой другой ответ здесь требует root-доступа, позволяет любому пользователю на том же компьютере скопировать файл или требует совместного использования пароля. Вот метод, который не делает:

Пусть USER2(назовем его Бобом) выполнить следующие команды (вы можете заменить /tmpлюбой каталог, на который у обоих пользователей есть разрешения на запись, но /tmpон идеален, потому что по умолчанию он липкий, что не позволяет злонамеренному пользователю подорвать этот процесс. Бобом, который читается всем миром, тоже работает):

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

Это создает файл, который доступен для записи во всем мире, но не для чтения.

Затем USER1запустите (назовем ее Алиса) (если вы параноик, Алиса может сначала проверить разрешения, чтобы убедиться, что файл принадлежит Бобу):

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

Это перезаписывает содержимое /tmp/test.txt. Если вы хотите проверить целостность файла, Алиса также должна сгенерировать хеш файла. Например:

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

Вместо этого вы можете подписать файл цифровой подписью или любым другим способом гарантировать его целостность.

И, наконец, Боб перемещает файл и становится его владельцем:

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

И Боб может проверить целостность, если он хочет. Если это так, он должен проверить, чтобы убедиться, что только Алиса может писать /tmp/test.txt.

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

Если файл был скопирован правильно, это не должно отображать вывод.

Крис
источник
-1

Перед копированием одного пользователя другому необходимо войти в систему как пользователь su, а затем использовать команду cp

sudo cp /home/shyam/Desktop/sparkhadoop_2.11-1.0.jar /home/hadoop/Desktop
Шьям Гупта
источник
Это не передаст право собственности, USER2но оставит все как есть root. -1
Дэвид Фёрстер
@DavidFoerster: мы не передаем право собственности, мы копируем файл от одного пользователя другому. используя пользователя root, мы можем передать файл. ОК
Шьям Гупта