sao chép tệp từ người dùng này sang người dùng khác trong một máy


20

Làm cách nào để sao chép bất kỳ tệp hoặc thư mục nào từ người dùng này sang người dùng khác trong cùng một máy qua thiết bị đầu cuối ?

Giả sử có một tệp test.txt trong thư mục chính của USER1. Tôi cần sao chép tập tin đó vào thư mục chính của USER2 trong máy của mình. Làm thế nào tôi có thể làm điều đó thông qua thiết bị đầu cuối?

Câu trả lời:


26

Giả sử rằng bạn có sudođặc quyền, lệnh sau sẽ làm.

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

Sẽ sao chép tệp từ USER1 sang USER2, sau đó thay đổi chủ sở hữu của bản sao trong / home / USER2 thành USER2

Nếu bạn không có sudođặc quyền, thì hai người dùng sẽ cần đảm bảo rằng bạn có quyền đọc trên thư mục USER1 và ghi quyền truy cập vào thư mục USER2. Nếu bạn có những quyền truy cập này, bạn có thể nhập lệnh:

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

Điều này sẽ sao chép tệp đang đề cập, nhưng USER2 có thể không thể thao tác tệp cho đến khi chúng có quyền thích hợp.


Điều này sẽ chỉ hoạt động nếu USER1 có quyền truy cập sudo, có thể không phải là trường hợp trong hệ thống nhiều người dùng.
BostonHiker

Tùy chọn khác sẽ là đặt các quyền trên thư mục riêng của họ để cho phép người dùng khác lấy chúng, nhưng tùy chọn này dễ dàng hơn nhiều nếu có thể.
Geary Shull

@BostonHiker Tôi đã đưa ra giả định rằng người thực hiện bản sao không phải là USER1 hoặc USER2 và có quyền riêng tư sudo. Đây có lẽ là một giả định kém về phía tôi.
Charles Green

@Charles Green - vui lòng chỉnh sửa câu trả lời của bạn để nêu các giả định của bạn, nếu không nó không đầy đủ / sai lệch.
BostonHiker

@BostonHiker Xong. Cảm ơn đã giữ cho tôi trung thực.
Charles Green

6

nếu bạn không có đặc quyền sudo nhưng bạn có thể đăng nhập với hai người dùng thì bạn có thể sử dụng scp với localhost:

scp file1 user2@localhost:/home/user2/

Điều gì khiến bạn nghĩ rằng đây là về một máy chủ từ xa hoặc máy chủ SSH / SFTP đang chạy trên máy đang được đề cập đến?
David Foerster

1
Giả sử bạn đã cài đặt SSH
tostil 14/2/2017

5

Là NGƯỜI DÙNG1:

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

Như USER2:

cp /tmp/[filename] .

Là NGƯỜI DÙNG1:

rm /tmp/[filename]

Bạn mong muốn nhiều upvote hơn :)
Neeraj Jain

1

Giả sử bạn chưa cài đặt ssh hoặc không thể chia sẻ khóa / bí mật.

Giả sử user1 nằm trong nhóm1 và user2 nằm trong nhóm2 và cả user1! = User2 và group1! = Group2.

Tạo một nhóm chia sẻ, nhóm3.

addgrp group3

Thêm cả user1 và user2 vào nhóm3.

Tạo một thư mục ở một nơi có thể truy cập lẫn nhau, nơi một người dùng sở hữu, nhưng có quyền sở hữu nhóm của nhóm3.

#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

Nhưng, giả sử bạn không thể tạo nhóm mới, chia sẻ và đặt cả hai người dùng vào nhóm đó?

Tạo thư mục và cấp cho nó 770 quyền,

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

Sau đó, với tư cách là root / admin, hãy thay đổi quyền sở hữu nhóm thành nhóm người dùng khác,

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

Lệnh chmod g + s thiết lập bit setgid để các tệp được đặt trong thư mục có quyền sở hữu nhóm được đặt thành nhóm2.


0

Mọi câu trả lời khác ở đây đều yêu cầu quyền truy cập root, cho phép bất kỳ người dùng nào trên cùng một máy sao chép tệp hoặc yêu cầu chia sẻ mật khẩu. Đây là một phương pháp không:

USER2(hãy gọi anh ta là Bob) chạy các lệnh sau (bạn có thể thay thế /tmpbằng bất kỳ thư mục nào mà cả hai người dùng đều có quyền ghi, nhưng /tmplý tưởng vì theo mặc định, nó bị dính, ngăn người dùng độc hại phá hỏng quy trình này. bởi Bob có thể đọc được trên thế giới cũng hoạt động):

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

Điều này tạo ra một tập tin có thể ghi trên thế giới, nhưng không thể đọc được.

Sau đó, USER1hãy (hãy gọi cô ấy là Alice) chạy (nếu bạn bị hoang tưởng, Alice có thể kiểm tra các quyền trước tiên để đảm bảo tệp được sở hữu bởi Bob):

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

Điều này ghi đè lên nội dung của /tmp/test.txt. Nếu bạn muốn kiểm tra tính toàn vẹn của tệp, Alice cũng nên tạo một hàm băm của tệp. Ví dụ:

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

Thay vào đó, bạn có thể ký điện tử vào tệp hoặc bất kỳ phương pháp nào khác để đảm bảo tính toàn vẹn của tệp.

Và cuối cùng Bob di chuyển tệp và sở hữu nó:

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

Và Bob có thể kiểm tra tính toàn vẹn nếu anh ta thích. Nếu vậy, anh ta nên kiểm tra để đảm bảo chỉ Alice mới có thể viết thư /tmp/test.txt.

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

Nếu tập tin được sao chép chính xác, điều này sẽ không hiển thị đầu ra.


-1

Trước khi đi sao chép một người dùng này sang người dùng khác, bạn cần phải đăng nhập với tư cách là người dùng su và sau đó bạn sử dụng lệnh cp

sudo cp /home/shyam/Desktop/sparkhadoop_2.11-1.0.jar /home/hadoop/Desktop

Điều này sẽ không chuyển quyền sở hữu USER2nhưng để lại như rootvậy. -1
David Foerster

@DavidFoerster chúng tôi không chuyển quyền sở hữu, chúng tôi sao chép tệp từ người dùng này sang người dùng khác. sử dụng người dùng root, chúng tôi có thể chuyển tập tin. OK
Shyam Gupta
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.