Samba chia sẻ quyền từ chối tập tin người dùng viết nhưng vẫn hiển thị


12

Vấn đề rất lạ ...

Samba chia sẻ trên remote:

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

Lệnh Mount trên local sử dụng root:

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

Root có thể đọc / ghi / cd không có vấn đề gì cả:

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

Nhưng nếu tôi chuyển sang một người dùng thông thường và làm điều tương tự thì tôi nhận được điều này:

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

Tôi có thể llvà tôi có thể thấy rằng nó đã viết tập tin bằng mọi cách:

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

Tôi thậm chí có thể rmkhông có vấn đề:

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

Tôi đã thử các tùy chọn gắn khác nhau. uid=501không thay đổi bất cứ điều gì. Đã thử nounixnhưng sau đó nó không hoạt động và tôi không thấy gì khi sử dụng root hay shawn user.


Q này có vẻ là vấn đề gần như chính xác: unix.stackexchange.com/questions/71896/iêu .
slm

Không chính xác cùng một vấn đề.
Tômwagon

Tôi nói gần 8-). Nhận xét đó được định hướng nhiều hơn để tôi liên kết các chủ đề chung của Q và A với nhau cho các khách hàng tiềm năng trong tương lai, nhưng nghĩ rằng bạn có thể kiểm tra nó.
slm

Câu trả lời:


7

Lưu ý: Tôi chỉ đoán ở đây, tôi không phải là một bậc thầy samba.

Samba / CIFS, ít nhất là cách bạn đang sử dụng ở đây, không tái tạo thông tin đăng nhập giữa máy chủ và máy khách. Do force userchỉ thị trên máy chủ, tất cả các hoạt động được thực hiện như người dùng erpmtrên máy chủ. Tuy nhiên, vì cả máy khách và máy chủ đều đang chạy một hệ thống unix, chúng tự động phân tách các tiện ích mở rộng CIFS POSIX . Điều này làm cho các quyền unix dường như hoạt động đến một điểm, nhưng chỉ khi máy chủ cho phép, và bạn đã gặp phải trường hợp quyền truy cập unix yêu cầu và những gì máy chủ cho phép khác nhau.

Bạn sẽ nhận thấy rằng tất cả các tệp xuất hiện dưới dạng ID người dùng 501. Đó là uid của họ trên máy chủ.

Khi bạn cố gắng tạo hoặc xóa một tập tin, điều này đòi hỏi phải có quyền ghi trên thư mục. Tất cả quyền truy cập được ánh xạ tới một người dùng duy nhất trên máy chủ, do đó, quyền ghi lại xem liệu có erpmđược phép ghi vào thư mục đó trên máy chủ hay không. Câu trả lời là có.

Khi bạn chạy touch, nó tạo tập tin và sau đó thay đổi thời gian sửa đổi. Thay đổi thời gian sửa đổi của tệp yêu cầu quyền sở hữu và điều này được kiểm tra bởi mã hệ thống tệp chung, ở phía máy khách.

Nếu bạn chạy strace touch test, bạn sẽ nhận thấy rằng opencuộc gọi (tạo tệp) thành công, sau đó utimescuộc gọi (hay đúng hơn là trên Linux, utimensatcuộc gọi hệ thống) không đặt được thời gian.

Điều này thực sự hơi kỳ lạ vì utimes nên thành công, vì touchgọi nó bằng đối số NULL (có nghĩa là Bộ đặt dấu thời gian theo thời gian hiện tại) và điều này được cho phép đối với bất kỳ người gọi nào có thể ghi vào tệp, và không chỉ cho chủ sở hữu như đặt dấu thời gian tùy ý. Tôi nghi ngờ rằng utimensatthực sự đang thực hiện kiểm tra dựa trên quyền và xác định rằng các quyền nói rằng bạn không thể ghi vào tệp đó, mặc dù hệ thống tệp sẽ cho phép thao tác ghi bất kể quyền thực tế.

Ưu điểm chính của các tiện ích mở rộng CIXS POSIX khi phía máy chủ đang chạy với sự cho phép của người dùng không phải là root là mang theo bit thực thi và có thể là quyền sở hữu nhóm. Nó có thể ít gây nhầm lẫn hơn nếu bạn ánh xạ quyền sở hữu người dùng với một người dùng phía khách hàng với forceuidtùy chọn gắn kết.


3
Cảm ơn bạn rất nhiều vì đã phản hồi kỹ lưỡng. Cuối cùng tôi đã cố gắng username=guest,defaults,nopermvà điều đó hoàn toàn khắc phục vấn đề. Tôi không biết câu trả lời nào để chấp nhận câu hỏi này vì username=guest,defaults,nopermcó lẽ không phải là câu trả lời hay nhất và tôi không có nhiều thời gian hơn để thử câu trả lời của bạn. Cám ơn bạn một lần nữa!
Tômwagon

@shaleighwagon Cảm ơn bạn đã cập nhật. Điều này đã giải quyết vấn đề của tôi ... Tôi đã quên từ lâu về việc phải đặt ống dẫn mặc định và noperm khi lắp.
Matthew
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.