สำหรับงานย้ายข้อมูลชั่วคราว ฉันต้องตั้งค่าเซิร์ฟเวอร์ NFS UID บนเครื่องทั้งสองเครื่องไม่ตรงกัน ดังนั้นฉันจึงต้องหลีกเลี่ยงปัญหาการอนุญาต

โชคดีที่ฉันคิดว่ามีall_squashตัวเลือก มันบอกว่า:

all_squash: Map all uids and gids to the anonymous user. Useful for NFS-exported public FTP directories, news spool directories, etc. The opposite option is no_all_squash, which is the default setting.

ในการแมปกับผู้ใช้และกลุ่มที่ต้องการ ฉันได้ระบุเพิ่มเติมanonuid=12345และanongid=15101982:

anonuid and anongid: These options explicitly set the uid and gid of the anonymous account. This option is primarily useful for PC/NFS clients, where you might want all requests appear to be from one user. As an example, consider the export entry for /home/joe in the example section below, which maps all requests to uid 150 (which is supposedly that of user joe).

สร้างไฟล์บนไคลเอนต์ที่เชื่อมต่อกับการแชร์ NFS และอย่างที่คาดไว้ ฉันเห็นพฤติกรรมต่อไปนี้ (uid/gid ถูกเปลี่ยนเป็น12345):

$ touch test && ls -l test
-rw-rw-r-- 1 12345 12345 0 Aug 25 18:10 test

อย่างไรก็ตาม ไฟล์ที่มีอยู่แล้วในการแชร์ยังคงมี uid และ gid ดั้งเดิม:

$ ls -l existing-file
-rw-rw-r-- 1 98765 98765 0 Aug 25 18:11 existing-file

ฉันไม่เข้าใจสิ่งต่าง ๆ ถูกต้องหรือไม่? ฉันคิดว่าall_squashมันจะสควอชไฟล์ uid และ gids ทั้งหมดหรือไม่ หากไม่เป็นเช่นนั้น จะสามารถทำได้หรือไม่

answer

โปรโตคอล NFS ใช้ข้อมูลประจำตัวแบบ RPC เมื่อมีการสร้างไฟล์ใหม่ โดยการตั้งค่า all_squash+anonuid คุณจะเปลี่ยนข้อมูลประจำตัวที่เชื่อมโยงกับไคลเอนต์นั้น ๆ IOW มีผลเฉพาะการตรวจสอบสิทธิ์สำหรับคำขอของผู้ใช้และความเป็นเจ้าของไฟล์และไดเรกทอรีที่สร้างขึ้นใหม่ ความเป็นเจ้าของไฟล์ที่มีอยู่จะไม่ได้รับผลกระทบ