การเป็นเจ้าของไฟล์ของผู้ใช้เปลี่ยนไปเมื่อทำการถ่ายโอนไฟล์ระหว่างคอมพิวเตอร์หรือไม่?


3

สถานการณ์: ไฟล์ที่สร้างขึ้นภายใต้คอมพิวเตอร์ A ( userA ) ซึ่งรับสิทธิ์เป็นเจ้าของไฟล์เป็น userA ในสิทธิ์ของไฟล์นั้นจะถูกโอนไปยังคอมพิวเตอร์ B ที่มีผู้ใช้อื่น ( UserB ) ....

Does the ownership of the original file change from the original user (userA) in computer A to the user (userB) of computer B?

How can I create a file that is only writable by me, the creator and owner, and only readable to anyone who might receive that file on other computers?

ฉันสร้าง testfile.txt ด้วยสิทธิ์ของไฟล์ 755 บนคอมพิวเตอร์ A ( userA ) เพื่อเปรียบเทียบการอนุญาตและความเป็นเจ้าของของไฟล์นี้ก่อนและหลังฉันถ่ายโอนโดยใช้ scp จากคอมพิวเตอร์ A ถึง B ฉันสังเกตว่าไฟล์ต้นฉบับของฉันตอนนี้บนคอมพิวเตอร์ B มีรหัสผู้ใช้เป็นอย่างไร UserB แทน userA [ตำแหน่งที่สร้างไฟล์]

คอมพิวเตอร์ A มี 'userA'

rwx-r-x-r-- userA testfile.txt

คอมพิวเตอร์ B มี 'userB'

rwx-r-x-r-- userB testfile.txt

ฉันคิดและต้องการทำให้เจ้าของไฟล์อ่านได้เขียนได้และปฏิบัติการได้ (ซึ่งฉันคิดว่าจะเป็นผู้ใช้จากคอมพิวเตอร์ที่ฉันสร้างไฟล์ขึ้นมา)

ขอบคุณ! ฉันใหม่ที่นี้!

คำตอบ:


0

ใช่.

ทั้งหมดนี้ขึ้นอยู่กับผู้ที่สร้างไฟล์บนปลายทาง ลองสิ่งนี้:

$ touch some_file
$ ls -l some_file
-rw-r--r-- 1 userA userA 0 Apr 9 17:44 some_file
$ ls -ln some_file
-rw-r--r-- 1 501 501 0 Apr 9 17:44 some_file

ดังนั้นในตัวอย่างของฉันตัวเลข uid ของ userA คือ 501

ตอนนี้โอนมันเข้าสู่ระบบระยะไกลเป็น userB:

$ scp some_file userB@computerB:
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 userB users 0 Apr 9 17:50 some_file
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 1743 20 0 Apr 9 17:50 some_file

ดังที่คุณเห็นที่นี่ userB สร้างไฟล์และ userB มีตัวเลข uid 1743 ดูการเปลี่ยนแปลงการประทับเวลาด้วยหรือไม่

นี่คือพฤติกรรมเริ่มต้นของ scp คุณสามารถคงคุณลักษณะไว้ได้โดยใช้ตัวเลือก "-p" ของ scp สิ่งนี้จะเก็บบันทึกเวลาและการอนุญาตเท่านั้น - และที่สำคัญไม่ใช่การเป็นเจ้าของ นี่อาจเป็นสิ่งที่คุณกำลังมองหา:

$ scp -p some_file userB@computerB:
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 userB users 0 Apr 9 17:44 some_file
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 1743 20 0 Apr 9 17:44 some_file

โปรดทราบว่านอกเหนือจาก scp แล้วยังมีวิธีสร้างไฟล์บนเครื่องระยะไกลหลายวิธี ได้แก่ NFS, FTP, WebDAV ... สิ่งเหล่านี้จะทำงานในรูปแบบที่แตกต่างกัน อย่าปล่อยให้ไปถูก - คุณถามเกี่ยวกับ SCP

(โน้ต OT คุณสร้างไฟล์ด้วยสิทธิ์ 754! rwx = 111 = 7, rx = 101 = 5, r - = 100 = 4 - คุณเห็น r, w และ x เป็นบิตในคำฐานแปดโดยที่ r = 4, w = 2, x = 1 นั่นคือเหตุผลที่คุณจะเห็นการอ้างอิงถึงเลขฐานแปดเกี่ยวกับการอนุญาตขอบคุณ ernie สำหรับการแก้ไข!)


ที่ดี! ดังนั้นการอนุญาตให้ใช้ไฟล์โดยเฉพาะการอนุญาตของ 'เจ้าของ' จึงมีความสำคัญมากกว่าสำหรับการจัดการไฟล์ภายใต้ระบบเดียวกัน เนื่องจากไฟล์ใดที่ถูกถ่ายโอนไปยังระบบคอมพิวเตอร์อื่นจะแทนที่ความเป็นเจ้าของไฟล์นั้นด้วยระบบใหม่ .... ถูกต้อง? ถ้าเป็นเช่นนั้นมีวิธีที่จะรักษาความเป็นเจ้าของไฟล์ที่คุณสามารถถ่ายโอนไปรอบ ๆ ระบบที่ไม่สามารถเข้าถึงเจ้าของได้หรือไม่? ขอบคุณ!
bretonics

1
การอนุญาตเหล่านั้นในตอนท้าย (เช่น 111) ไม่ใช่เลขฐานแปด แต่เป็นแบบไบนารี 7, 5, และ 4 ถือได้ว่าเป็นฐานแปด (หรือระบบตัวเลขใด ๆ ที่มีฐานมากกว่า) แต่ฉันคิดว่าคุณพยายามถ่ายทอดทศนิยมเทียบเท่า
ernie

1
@macam ดูเหมือนว่าคุณกำลังขอให้สร้างไฟล์ที่อ่านได้ทุกที่ สิ่งนี้เป็นไปไม่ได้เว้นแต่คุณจะเขียนไฟล์จากนั้นเปลี่ยนการอนุญาต หากผู้ใช้สามารถเขียนไฟล์ลงดิสก์ได้พวกเขาจะสามารถแก้ไขได้ โปรดทราบว่าบางรูปแบบไฟล์อนุญาตให้คุณสร้างไฟล์เวอร์ชันอ่านอย่างเดียว แต่นั่นหมายถึงอ่านอย่างเดียวในเครื่องมือของพวกเขา (PDF เป็นตัวอย่างที่ดีของสิ่งนี้) คุณยังคงสามารถแก้ไข 0s และ 1 พื้นฐานได้โดยตรง
ernie

ถูกต้องเออร์นี่ฉันกำลังคิดเลขฐานแปดเขียนเลขฐานสอง ... ผิดพลาดอะไรผิดไป! ฉันจะอัปเดตดังนั้นจึงไม่ถูกต้องตามข้อเท็จจริง
Rich

1

รูปแบบทั่วไปสำหรับ scp เมื่อคุณคัดลอกภายในเครื่องไปยังรีโมทคือ:

scp localfile username@remotehost:/some/remote/directory

ในกรณีนี้คุณกำลังบอก scp ที่คุณต้องการลงชื่อเข้าใช้ username บนระบบรีโมตและนั่นคือชื่อผู้ใช้ที่การเขียนจะเกิดขึ้น มีแนวโน้มมากที่สุดในตัวอย่างของคุณคุณใช้ userB เมื่อคุณหนีไฟล์ไปที่คอมพิวเตอร์ B

หากคุณกำลังคัดลอกไฟล์ระยะไกลไปยัง localhost เช่น

scp username@remotehost:/some/remote/file /some/local/directory

ในกรณีนี้คุณเข้าสู่ระบบในฐานะ username ไปยังระบบรีโมตจากนั้นเขียนโลคัลเป็นผู้ใช้ที่คุณใช้งานคำสั่ง scp ดังนี้ ตัวอย่างนี้จะคัดลอกไฟล์จาก remotehost ไปยังระบบที่คุณใช้งานอยู่ในขณะที่ผู้ใช้ที่คุณเข้าสู่ระบบในฐานะ (เนื่องจากการเขียนจะดำเนินการโดยผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน) สิ่งนี้จะไม่ส่งผลกระทบอะไรกับรีโมตโฮสต์เพราะคุณจะอ่านไฟล์จากที่นั่นและคัดลอกไฟล์ไปยังโลคอลโฮสต์ เนื่องจากคุณสามารถอ่านไฟล์ระยะไกลได้ไฟล์ในเครื่องจะต้องมีสิทธิ์ในการเขียนสำหรับคุณเช่นเดียวกับที่คุณเขียนไฟล์ในเครื่อง

ใส่วิธีอื่น - เจ้าของไฟล์โดยทั่วไปจะตรงกับผู้เขียนไฟล์ ดังนั้นหากคุณเข้าสู่ระบบในชื่อผู้ใช้และเขียนไฟล์เจ้าของจะเป็นผู้ใช้ ตัวอย่างที่ง่ายกว่าอาจเป็นดังนี้:

user@server:~$ ls -l /var/log/syslog
-rw-r----- 1 syslog adm 6615 Apr  9 17:09 /var/log/syslog  

โปรดทราบว่าไฟล์นี้เป็นของ syslog แต่ทุกคนในกลุ่มผู้อ่านสามารถอ่านได้ ถ้าเราคัดลอกไฟล์ไปยังโฮมไดเร็กตอรี่ของผู้ใช้ (~ /):

user@server:~$ cp /var/log/syslog ~/
user@server:~$ ls -l ./syslog
-rw-r----- 1 user user 6615 Apr  9 17:10 ./syslog

โปรดทราบว่าในขณะนี้เจ้าของเวอร์ชันของไฟล์ที่คัดลอกแล้ว user. scp กำลังทำสิ่งเดียวกันยกเว้นที่มาหรือปลายทางอาจเกี่ยวข้องกับการเข้าสู่ระบบในฐานะผู้ใช้รายอื่นไปยังระบบอื่น

โปรดทราบว่าการอนุญาตจะถูกติดตามด้วย id ผู้ใช้ซึ่งเป็นตัวแทนตัวเลขของผู้ใช้ คุณสามารถดู UID ปัจจุบันของคุณด้วย id คำสั่ง โดยทั่วไปสำหรับแต่ละระบบ UID จะไม่เป็นระบบเดียวกับระบบเนื่องจากบัญชีจะไม่ถูกแชร์ (ยกเว้นว่าคุณใช้ LDAP หรือคล้ายกัน) ฉันเชื่อว่าตามธรรมเนียมแล้ว 0 คือรูท UID ที่น้อยกว่า 1,000 ถูกสงวนไว้สำหรับบัญชีระบบ (เช่นจดหมายข่าว bin daemon ฯลฯ ) และผู้ใช้ทั่วไปเริ่มต้นที่ 1,000 เท่าที่ฉันรู้ UID ของผู้ใช้ทั่วไปจะถูกกำหนด ตามลำดับดังนั้นหากคุณสร้างสามบัญชีพวกเขาน่าจะเป็น 1,000, 1001 และ 1002

กลับไปที่คำถามดั้งเดิมของคุณเกี่ยวกับวิธีส่งไฟล์แบบอ่านอย่างเดียวคุณต้องตรวจสอบให้แน่ใจว่าผู้อ่านในระบบระยะไกลไม่มี UID เดียวกันกับเจ้าของไฟล์ เช่นถ้าคุณ (userA) กำลังเตรียมไฟล์สำหรับ userB คุณสามารถทำสิ่งต่อไปนี้:

scp localfile userA@remotehost:/some/remote/directory

ในกรณีนี้เจ้าของไฟล์จะจบลงด้วยการเป็น userA (และเรารู้ว่า userA มีอยู่ในระบบรีโมตเนื่องจากเป็นสิ่งที่เราเข้าสู่ระบบในฐานะผู้ใช้) และ userB จะไม่มีสิทธิ์ในการเขียน (สมมติว่าไฟล์นั้นเป็น 755 เดิม ) แก้ไข: คุณอาจต้องใช้ -p เพื่อรักษาสิทธิ์หรือไม่

แน่นอนถ้า userB มีสิทธิ์ root หรือ sudo พวกเขาจะสามารถทำให้ไฟล์เขียนได้ไม่ว่าคุณจะทำอะไร


ดังนั้นฉันจึงลองรหัสที่สอง "scp username @ remotehost: / some / remote / file / some / local / directory" เข้าสู่ระบบเป็นชื่อผู้ใช้ของระบบระยะไกล (userB) และเขียนไฟล์ในท้องถิ่นเป็น userA จากระบบท้องถิ่น อย่างไรก็ตามการตรวจสอบเจ้าของไฟล์บน computerB ไฟล์นั้นมีเจ้าของ 'userB' อีกครั้ง คุณพูดถึง id แล้วมีการติดตามด้วยการแสดงตัวเลขและ UIDS จะไม่เป็นระบบเดียวกันกับระบบเนื่องจากบัญชีไม่ได้ถูกแชร์ แต่ทำไมทั้ง UIDS ของฉันสำหรับทั้งสองระบบจึงมี UID # เหมือนกันคิดว่า userA ไม่มีอยู่ในคอมพิวเตอร์ B ? เหตุใดจึงมีการโอนความเป็นเจ้าของไฟล์
bretonics

ชื่อผู้ใช้ทั้งหมดจากคอมพิวเตอร์ที่แตกต่างกันมี UID # เหมือนกันหรือไม่ ฉันทดสอบ 3 Mac ทั้งหมดล้วนมี UID # เหมือนกันแม้จะไม่ใช่ของฉันก็ตาม
bretonics

ฉันแก้ไขคำตอบ - เวอร์ชันย่อคือว่ารุ่นที่สองของ SCP จะไม่ส่งผลกระทบต่อไฟล์ระยะไกล - มันจะอ่านได้เท่านั้นจากนั้นก็เขียนไฟล์ในเครื่องในขณะที่ผู้ใช้เรียกใช้คำสั่ง scp โดยทั่วไปแล้ว UID จะถูกกำหนดตามลำดับโดยเริ่มต้นที่ผู้ใช้ 1,000 คน
ernie

0

เมื่อคุณถ่ายโอนไฟล์จากแหล่งไปยังปลายทางการอนุญาตและความเป็นเจ้าของนั้นขึ้นอยู่กับพารามิเตอร์ของการถ่ายโอน ตามที่ @ernie กล่าวว่าการเป็นเจ้าของจะขึ้นอยู่กับวิธีการถ่ายโอนไฟล์ของคุณ

สิทธิ์ขึ้นอยู่กับ umask ของไฟล์

สำหรับเซิร์ฟเวอร์ FTP ของโรงเรียนเก่ามักจะตั้งค่า umask ในการกำหนดค่าเซิร์ฟเวอร์ FTP สำหรับเซิร์ฟเวอร์ SFTP (cp over SSH หรือ scp) คุณต้องตั้งค่าปลั๊กอิน PAM สำหรับ ssh ตามคำตอบนี้ มากกว่าในความผิดพลาดของเซิร์ฟเวอร์


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