Samba ได้รับอนุญาตแบ่งปันปฏิเสธการเขียนไฟล์ของผู้ใช้ แต่ยังคงแสดง


12

ปัญหาที่แปลกมาก ...

แซมบ้าแชร์บนรีโมท:

[javaerpm]
    path = /u/abas/erpm/java
    force user = erpm
    guest ok = yes
    read only = no
    writeable = yes

เมาคำสั่งบนโลคัลโดยใช้รูท:

root@crunchbang:/mnt/abas# mount -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm

รูทสามารถอ่าน / เขียน / cd ได้อย่างไม่มีปัญหาเลย:

root@crunchbang:/mnt/abas# cd javaerpm
root@crunchbang:/mnt/abas/javaerpm# touch test
root@crunchbang:/mnt/abas/javaerpm# ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test
root@crunchbang:/mnt/abas/javaerpm# rm test

แต่ถ้าฉันเปลี่ยนไปใช้ผู้ใช้ปกติและทำสิ่งเดียวกันฉันได้รับสิ่งนี้:

shawn@crunchbang:/mnt/abas/javaerpm$ touch test
touch: cannot touch `test': Permission denied

ฉันสามารถllและฉันจะเห็นว่ามันเขียนไฟล์ต่อไป:

shawn@crunchbang:/mnt/abas/javaerpm$ ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test

ฉันสามารถrmไม่มีปัญหา:

shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$

ฉันลองตัวเลือกการติดตั้งที่แตกต่างกัน uid=501ไม่เปลี่ยนแปลงอะไรเลย พยายามnounixแล้ว แต่มันก็ไม่ทำงานเลยและฉันก็ไม่เห็นอะไรเลยที่ใช้รูทหรือผู้ใช้แบบจำเจ


Q นี้ดูเหมือนจะเป็นปัญหาเกือบเดียวกันแน่นอน: unix.stackexchange.com/questions/71896/...
slm

ไม่ใช่ปัญหาเดียวกัน
shrimpwagon

ฉันพูดเกือบ 8-) ความคิดเห็นนั้นตรงกับฉันมากขึ้นที่จะเชื่อมโยง Q ของเธรดทั่วไปและ A เข้าด้วยกันเพื่อผู้ใช้ในอนาคต แต่คิดว่าคุณน่าจะลองใช้ดู
slm

คำตอบ:


7

หมายเหตุ: ฉันแค่เดาที่นี่ฉันไม่ใช่กูรู samba

Samba / CIFS อย่างน้อยวิธีที่คุณใช้งานที่นี่ไม่ได้ทำซ้ำข้อมูลรับรองระหว่างเซิร์ฟเวอร์และไคลเอนต์ เนื่องจากforce userคำสั่งบนเซิร์ฟเวอร์การดำเนินการทั้งหมดจะดำเนินการในฐานะผู้ใช้erpmบนเซิร์ฟเวอร์ อย่างไรก็ตามเนื่องจากทั้งไคลเอนต์และเซิร์ฟเวอร์กำลังใช้ระบบยูนิกซ์พวกเขาจะไม่สนใจส่วนขยาย CIFS POSIXโดยอัตโนมัติ สิ่งนี้ทำให้การอนุญาต unix ดูเหมือนว่าจะทำงานได้ถึงจุดหนึ่ง แต่เท่าที่เซิร์ฟเวอร์อนุญาตและคุณพบกรณีที่สิทธิ์ unix อ้างสิทธิ์และสิ่งที่เซิร์ฟเวอร์อนุญาตแตกต่างกัน

คุณจะสังเกตเห็นว่าไฟล์ทั้งหมดปรากฏเป็น ID ผู้ใช้ 501 นั่นคือ uid ของพวกเขาบนเซิร์ฟเวอร์

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

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

หากคุณเรียกใช้strace touch testคุณจะสังเกตเห็นว่าการopenโทร (ซึ่งสร้างไฟล์) สำเร็จแล้วการutimesโทร (หรือบน Linux การutimensatโทรของระบบ) ไม่สามารถตั้งเวลาได้

นี่เป็นเรื่องแปลกเพราะน่าutimes จะประสบความสำเร็จเนื่องจากtouchเรียกมันด้วยอาร์กิวเมนต์ NULL (หมายถึง "ตั้งค่าการประทับเวลาเป็นเวลาปัจจุบัน") และสิ่งนี้ควรจะได้รับอนุญาตให้ผู้โทรที่อาจเขียนลงไฟล์และไม่เพียง ให้กับเจ้าของเช่นการตั้งค่าการประทับเวลาโดยพลการ ฉันสงสัยว่าutimensatจริง ๆ แล้วทำการตรวจสอบตามสิทธิ์และกำหนดว่าสิทธิ์บอกว่าคุณไม่สามารถเขียนไปยังไฟล์นั้นแม้ว่าระบบไฟล์จะอนุญาตให้มีการดำเนินการเขียนโดยไม่คำนึงถึงสิทธิ์ที่แท้จริง

ข้อได้เปรียบหลักของส่วนขยาย CIFS POSIX เมื่อฝั่งเซิร์ฟเวอร์กำลังทำงานโดยได้รับอนุญาตจากผู้ใช้ที่ไม่ใช่รูทเพื่อดำเนินการผ่านบิตที่สามารถเรียกใช้งานได้และเป็นเจ้าของกลุ่ม อาจทำให้สับสนน้อยลงหากคุณจับคู่ความเป็นเจ้าของของผู้ใช้กับผู้ใช้ฝั่งไคลเอ็นต์รายเดียวด้วยforceuidตัวเลือกเมานท์


3
ขอบคุณมากสำหรับการตอบสนองอย่างละเอียด ในที่สุดฉันก็พยายามusername=guest,defaults,nopermและแก้ไขปัญหาทั้งหมด ฉันไม่รู้คำตอบที่จะยอมรับในสิ่งนี้เพราะusername=guest,defaults,nopermอาจไม่ใช่คำตอบที่ดีที่สุดและฉันไม่มีเวลาลองคำตอบของคุณ ขอขอบคุณอีกครั้ง!
shrimpwagon

@ shrimpwagon ขอบคุณสำหรับการอัปเดตของคุณ สิ่งนี้แก้ปัญหาของฉันได้ ... ฉันลืมไปนานแล้วว่าต้องใช้ท่อในการตั้งค่าเริ่มต้นและ noperm เมื่อทำการติดตั้ง
แมทธิว
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.