копіювання файлів від одного користувача до іншого на одній машині


20

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

Припустимо, в домашньому каталозі USER1 є один файл test.txt . Мені потрібно скопіювати цей файл у домашній каталог USER2 на своїй машині. Як я можу це зробити через термінал?

Відповіді:


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, і має привілей на судо. Це, мабуть, погане припущення з мого боку.
Чарльз Грін

@Charles Green - будь ласка, відредагуйте свою відповідь, щоб висловити свої припущення, інакше вона є неповною / оманливою.
BostonHiker

@BostonHiker Готово. Дякуємо, що тримаєте мене чесно.
Чарльз Грін

6

якщо у вас немає привілеїв sudo, але ви можете увійти з двома користувачами, тоді ви можете використовувати scp з localhost:

scp file1 user2@localhost:/home/user2/

Що змушує вас думати, що мова йде про віддалений хост або про те, що на відповідній машині працює SSH / SFTP-сервер?
Девід Фоерстер

1
Припустимо, що у вас встановлений SSH
голос


1

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

Припустимо, користувач1 знаходиться у групі1, а користувач2 - у групі2, а обидва користувач1! = Користувач2 та група1! = Група2.

Створіть спільну групу, 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.


0

Кожна інша відповідь тут вимагає кореневого доступу, дозволяє будь-якому користувачеві на тому ж апараті копіювати файл або вимагає спільного використання пароля. Ось метод, який не виконує:

Попросіть 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 користувача, ми можемо перенести файл. ОК
Шям Гупта
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.