คัดลอกไฟล์จากผู้ใช้หนึ่งไปยังอีกในเครื่องเดียว


20

วิธีการคัดลอกไฟล์หรือไดเรกทอรีใด ๆ จากผู้ใช้รายหนึ่งให้กับผู้ใช้อื่นในเครื่องเดียวกันผ่านทางขั้ว ?

สมมติว่ามีหนึ่งไฟล์test.txtในโฮมไดเร็กทอรีของ USER1 ฉันต้องการคัดลอกไฟล์นั้นไปยังโฮมไดเร็กตอรี่ของ 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 และมีสิทธิ์ sudo นี่อาจเป็นข้อสมมติฐานที่แย่ในส่วนของฉัน
Charles Green

@Charles Green - โปรดแก้ไขคำตอบของคุณเพื่อระบุสมมติฐานของคุณมิฉะนั้นจะไม่สมบูรณ์ / ทำให้เข้าใจผิด
BostonHiker

@BostonHiker เรียบร้อยแล้ว ขอบคุณที่ทำให้ฉันซื่อสัตย์
Charles Green

6

หากคุณไม่มีสิทธิ์ sudo แต่คุณสามารถเข้าสู่ระบบด้วยผู้ใช้สองคนจากนั้นคุณสามารถใช้ scp กับ localhost:

scp file1 user2@localhost:/home/user2/

อะไรทำให้คุณคิดว่านี่เป็นเรื่องเกี่ยวกับรีโมตโฮสต์หรือมีเซิร์ฟเวอร์ SSH / SFTP ที่ทำงานอยู่ในเครื่องที่สงสัย
David Foerster

1
สมมติว่าคุณติดตั้ง SSH
ดัง

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

สร้างไดเรกทอรีในที่ที่สามารถเข้าถึงได้โดยที่ผู้ใช้รายหนึ่งเป็นเจ้าของ แต่มีความเป็นเจ้าของกลุ่มของกลุ่ม 3

#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;

จากนั้นในฐานะผู้ดูแลระบบเปลี่ยนความเป็นเจ้าของกลุ่มเป็นกลุ่มผู้ใช้อื่น

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

คำสั่ง chmod g + s ตั้ง setgid bit เพื่อให้ไฟล์ที่อยู่ในไดเรกทอรีมีการเป็นเจ้าของกลุ่มที่ตั้งค่าเป็น group2


0

ทุกคำตอบอื่น ๆ ที่นี่จะต้องเข้าถึงรากช่วยใด ๆของผู้ใช้บนเครื่องเดียวกันในการคัดลอกไฟล์หรือต้องใช้รหัสผ่านที่ใช้ร่วมกัน นี่คือวิธีการที่ไม่:

มีUSER2(เรียกเขาว่า Bob) เรียกใช้คำสั่งต่อไปนี้ (คุณสามารถแทนที่/tmpด้วยไดเรกทอรีใด ๆ ที่ผู้ใช้ทั้งสองมีสิทธิ์ในการเขียน แต่/tmpเหมาะอย่างยิ่งเพราะโดยค่าเริ่มต้นมันเหนียวซึ่งป้องกันผู้ใช้ที่ประสงค์ร้ายจากการล้มล้างกระบวนการนี้ โดย Bob ที่สามารถอ่านได้ทั่วโลกยังใช้งานได้):

[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
David Foerster

@DavidFoerster เราไม่ได้ถ่ายโอนความเป็นเจ้าของเราคัดลอกไฟล์จากผู้ใช้รายหนึ่งไปยังผู้ใช้รายอื่น ใช้ผู้ใช้รูทเราสามารถถ่ายโอนไฟล์ได้ ตกลง
Shyam Gupta
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.