รูปแบบทั่วไปสำหรับ 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 พวกเขาจะสามารถทำให้ไฟล์เขียนได้ไม่ว่าคุณจะทำอะไร