Làm cách nào để tạo chia sẻ Samba có thể ghi từ Windows mà không cần quyền 777?


33

Tôi có một đường dẫn trên máy Linux (Debian 8) mà tôi muốn chia sẻ với Samba 4 tới máy tính Windows (Win7 và 8 trong một miền). Trong tôi smb.confđã làm như sau:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
guest ok = yes
public = yes

Tôi có quyền truy cập đọc hoàn hảo từ Windows. Nhưng để có quyền truy cập ghi, tôi cần phải làm chmod -R 777 /path/to/shaređể có thể ghi vào nó từ Windows.

Những gì tôi muốn là viết quyền truy cập từ Windows sau khi tôi cung cấp thông tin đăng nhập Linux của chủ sở hữu Linux /path/to/share.

Tôi đã thử:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes

Sau đó, Windows yêu cầu thông tin đăng nhập, nhưng bất kể tôi nhập gì, nó luôn bị từ chối.

Cách chính xác để có quyền truy cập ghi vào cổ phiếu Samba từ máy tính miền Windows mà không cần cấp 777 là gì?

Câu trả lời:


49

Tôi khuyên bạn nên tạo một người dùng chuyên dụng cho chia sẻ đó và chỉ định nó trong force user(xem tài liệu) .

Tạo người dùng ( shareuserví dụ) và đặt chủ sở hữu của mọi thứ trong thư mục chia sẻ cho người dùng đó:

adduser --system shareuser
chown -R shareuser /path/to/share

Sau đó thêm force uservà cho phép cài đặt mặt nạ trong smb.conf:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
public = yes
create mask = 0644
directory mask = 0755
force user = shareuser

Lưu ý đó guest oklà một từ đồng nghĩa cho public.


1
Tôi gặp vấn đề tương tự và tất cả các tìm kiếm google cho thấy cách bẩn chỉ đơn giản là sử dụng 777. Tôi muốn 775 cho thư mục dùng chung của mình và tôi muốn các tệp được tạo bằng "defaultUser" linux của tôi, tôi cũng sử dụng công khai = yes. Thư mục là 775, mặt nạ tạo và thư mục là 775 nhưng trong Windows thì không thể ghi được và tôi không thể hiểu tại sao. Thêm force user = defaultUserđã làm công việc cho tôi.
firepol

Tôi không thể làm việc này, bất cứ khi nào tôi cố gắng chia sẻ thư mục, tôi chỉ nhận được một cửa sổ cho tôi biết tôi cần phải cho phép "người khác" viết để chia sẻ thư mục.
Mark Kramer

Tôi đã nhận nó, vấn đề là vị trí của smb.conf. Google và thậm chí tài liệu sambas cho biết tệp nên có /usr/local/samba/libnhưng thực tế nó nằm trong/etc/samba
Mark Kramer

1
@MarkKramer Nên theo dõi các tài liệu có trong bản phân phối Linux cụ thể của bạn vì nhiều bản phân phối sắp xếp lại các tệp để phù hợp với FHS (Tiêu chuẩn phân cấp hệ thống tệp) của Linux Foundation. Tôi khuyên bạn nên đọc và tìm kiếm các tài liệu được phân phối cùng với bản phân phối của bạn vì không phải lúc nào google cũng là câu trả lời hay nhất, ví dụ bạn có thể nhận thông tin cho một phiên bản phần mềm khác. Trân trọng.
RobertL

2

Trong cài đặt chia sẻ trong smb.conf, bạn sẽ cần chỉ định tên của người dùng và / hoặc nhóm được phép ghi vào chia sẻ, sử dụng một write list = ...dòng.

Thí dụ:

[myshare]
...
write list = my_linux_username

Sau đó, bạn sẽ cần sử dụng smbpasswdlệnh để thiết lập mật khẩu để xác thực my_linux_usernamecho Samba:

sudo smbpasswd -a my_linux_username

Bước này là cần thiết vì mật khẩu hệ thống tiêu chuẩn /etc/shadowđược băm trong các thuật toán không tương thích với thuật toán băm mật khẩu được sử dụng trong giao thức SMB. Khi khách hàng gửi gói xác thực SMB, nó sẽ bao gồm mật khẩu băm. Nó chỉ có thể được so sánh với một mật khẩu băm khác sử dụng cùng một thuật toán.

(Các hướng dẫn rất cũ từ thiên niên kỷ trước có thể khuyên bạn nên vô hiệu hóa mã hóa mật khẩu trong Samba và sử dụng một số bản hack đăng ký nhất định để cho phép Windows phát ra mật khẩu không được mã hóa vào mạng. Lời khuyên này đã lỗi thời : các bản hack đăng ký đó có thể không còn hoạt động trong các phiên bản hiện tại của Windows và cho phép bất cứ ai có thể theo dõi lưu lượng truy cập mạng của bạn để nắm bắt mật khẩu của bạn một cách tầm thường.)


Có một điều nữa bạn có thể phải làm phía khách hàng. Khi hệ thống máy khách Windows của bạn được kết nối với miền Active Directory và bạn đã đăng nhập bằng tài khoản AD, nó sẽ tự động thêm tiền tố vào tất cả tên người dùng không đủ tiêu chuẩn với tên miền AD của người dùng, tức là bạn sẽ xác thực AD_DOMAIN\your_username, không chỉ your_username.

Nếu bạn đã đăng nhập bằng tài khoản cục bộ (hoặc hệ thống máy khách của bạn không được kết nối với tên miền AD), Windows có thể tự động thêm tiền tố tên người dùng với tên máy chủ của khách hàng trừ khi bạn chỉ định một tên miền khác.

Để đăng nhập thành công vào máy chủ Samba độc lập từ máy khách Windows độc lập, bạn có thể phải chỉ định tên người dùng của mình là SAMBA_SERVER_HOSTNAME\your_username.

Nếu không, Samba sẽ thấy tên người dùng như WINDOWS_CLIENT_HOSTNAME\your_username, kết luận rằng họ không có cách nào để xác minh bất kỳ người dùng nào thuộc tên miền WINDOWS_CLIENT_HOSTNAMEvà sẽ từ chối đăng nhập.

(Các phiên bản mới hơn của Samba có thể có kiểm tra tích hợp cho tình huống cụ thể này và chúng có thể cho phép bạn truy cập. Tuy nhiên, đây về cơ bản là cách xác thực SMB hoạt động "dưới mui xe" và nếu bạn cần xử lý các phiên bản cũ của Samba , nó có thể vẫn hữu ích.)


1

Tôi đang tìm kiếm điều này bởi vì tôi đang vội và thậm chí không có thời gian để tập trung vào việc tạo người dùng và vì vậy ...

Chỉ cần phải đưa ra các dữ liệu của một máy debian 9 càng sớm càng tốt và đây là cách nhanh nhất tôi tought của, nếu bạn muốn tránh bỏ qua các lệnh bạn cũng có thể làm được điều này nhưng nó được rõ ràng là không được khuyến khích trừ khi bạn đang ở trong một khẩn trương .

[mymfolder]
path = /mymfolder
writeable = yes
browseable = yes
public = yes
create mask = 0777
directory mask = 0777
force user = root 

Và nếu bạn đi theo con đường này, bạn có thể hạn chế bởi máy chủ bằng cách sử dụng tùy chọn "máy chủ cho phép". Xem: samba.org/samba/docs/server_security.html
ctorx
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.