Jak utworzyć udział Samba, który można zapisywać w systemie Windows bez uprawnień 777?

33

Mam ścieżkę na komputerze z systemem Linux (Debian 8), który chcę udostępnić Sambie 4 komputerom z systemem Windows (Win7 i 8 w domenie). W moim smb.confzrobiłem następujące:

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

Mam doskonały dostęp do odczytu z systemu Windows. Ale aby mieć dostęp do zapisu, muszę to zrobić chmod -R 777 /path/to/share, aby móc pisać do niego z systemu Windows.

To, czego chcę, to dostęp do zapisu z systemu Windows po podaniu poświadczeń Linuksa właściciela Linuxa /path/to/share.

Próbowałem już:

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

Następnie system Windows prosi o poświadczenia, ale bez względu na to, co wprowadzam, zawsze jest to odrzucane.

Jaki jest prawidłowy sposób uzyskania dostępu do zapisu do udziałów Samby z komputera z domeną Windows bez przyznania 777?

Bar Foo
źródło

Odpowiedzi:

49

Zalecam utworzenie dedykowanego użytkownika dla tego udziału i określenie go w force user(patrz dokumenty) .

Utwórz użytkownika ( shareuserna przykład) i ustaw dla niego właściciela wszystkiego w folderze udostępniania:

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

Następnie dodaj force userustawienia maski uprawnień i w smb.conf:

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

Pamiętaj, że guest okjest to synonim public.

yaegashi
źródło
1
Miałem podobny problem i wszystkie wyszukiwania w Google wykazały nieprzyzwoity sposób korzystania z 777. Chciałem 775 dla mojego folderu współdzielonego i chciałem, aby pliki były tworzone przy użyciu mojego linuxa „defaultUser”, użyłem również public = yes. Folder miał 775, stwórz, a maska ​​dir to 775, ale w Windowsie nie było możliwości zapisu i nie mogłem zrozumieć, dlaczego. Dodanie force user = defaultUserwykonało dla mnie pracę.
firepol
Nie mogę tego uruchomić, za każdym razem, gdy próbuję udostępnić katalog, po prostu pojawia się okno z informacją, że muszę udzielić uprawnień do zapisu „innym”, aby udostępnić katalog.
Mark Kramer
Rozumiem, problemem była lokalizacja smb.conf. Dokumentacja Google, a nawet sambas, mówi, że plik powinien być, /usr/local/samba/libale tak naprawdę jest/etc/samba
Mark Kramer
1
@ MarkKramer Dobrym pomysłem jest śledzenie dokumentów zawartych w konkretnej dystrybucji Linuksa, ponieważ wiele dystrybucji reorganizuje pliki tak, aby pasowały do ​​FHS Linux Foundation (Fileystem Hierarchy Standard). Zalecam czytanie i przeszukiwanie dokumentów dostarczonych wraz z dystrybucją, ponieważ Google nie zawsze jest najlepszą odpowiedzią, na przykład możesz uzyskać informacje o innej wersji oprogramowania. Z poważaniem.
RobertL
2

W ustawieniach udostępniania w smb.confmusisz określić nazwy użytkowników i / lub grup, które mogą zapisywać w udziale, używającwrite list = ... linii.

Przykład:

[myshare]
...
write list = my_linux_username

Następnie musisz użyć smbpasswdpolecenia, aby ustawić hasło do uwierzytelnienia my_linux_usernamedla Samby:

sudo smbpasswd -a my_linux_username

Ten krok jest konieczny, ponieważ standardowe hasła systemowe w /etc/shadow są zaszyfrowane algorytmami niezgodnymi z algorytmami skrótu haseł używanymi w protokole SMB. Gdy klient wysyła pakiet uwierzytelniający SMB, zawiera on zaszyfrowane hasło. Można go porównać tylko do innego skrótu hasła, który używa tego samego algorytmu.

(Bardzo, bardzo stare instrukcje z poprzedniego tysiąclecia mogą zalecać wyłączenie szyfrowania haseł w Sambie i użycie pewnych haków rejestru, aby umożliwić systemowi Windows wysyłanie niezaszyfrowanych haseł do sieci. Ta rada jest nieaktualna : te hacki rejestru mogą nie działać w obecnych wersjach Windows i pozwól każdemu, kto może monitorować ruch sieciowy, na trywialne przechwytywanie hasła).


Jest jeszcze jedna rzecz, którą możesz zrobić po stronie klienta. Gdy system kliencki Windows zostanie przyłączony do domeny Active Directory i zalogujesz się na konto AD, automatycznie poprzedza wszystkie niekwalifikowane nazwy użytkownika nazwą domeny AD użytkownika, tzn. Będziesz uwierzytelniać się AD_DOMAIN\your_usernamenie tylko your_username.

Jeśli jesteś zalogowany za pomocą konta lokalnego (lub twój system klienta nie jest przyłączony do domeny AD), Windows może automatycznie poprzedzić nazwę użytkownika nazwą hosta klienta chyba że podasz inną nazwę domeny.

Aby pomyślnie zalogować się do autonomicznego serwera Samba z autonomicznego klienta Windows, może być konieczne podanie nazwy użytkownika jako SAMBA_SERVER_HOSTNAME\your_username.

W przeciwnym razie Samba zobaczy nazwę użytkownika jako WINDOWS_CLIENT_HOSTNAME\your_username, stwierdzi, że nie ma możliwości zweryfikowania użytkowników należących do nazwanej domeny WINDOWS_CLIENT_HOSTNAME, i odrzuci login.

(Nowsze wersje Samby mogą mieć wbudowane sprawdzenie tej konkretnej sytuacji i mimo to mogą umożliwiać ci dostęp. Ale w ten sposób w zasadzie działa uwierzytelnianie SMB „pod maską” i jeśli musisz poradzić sobie ze starszymi wersjami Samby , może się przydać).

telcoM
źródło
1

Szukałem tego, ponieważ spieszyłem się i nawet nie miałem czasu na skupienie się na tworzeniu użytkowników, więc ...

Musiałem jak najszybciej wyjąć dane z maszyny debian 9 i był to najszybszy sposób, jaki wymyśliłem, jeśli chcesz uniknąć pomijania poleceń, możesz to zrobić, ale oczywiście nie jest to zalecane, chyba że jesteś w pospiesz się .

[mymfolder]
path = /mymfolder
writeable = yes
browseable = yes
public = yes
create mask = 0777
directory mask = 0777
force user = root 
Alpha2k
źródło
A jeśli pójdziesz tą drogą, możesz ograniczyć przez hosta za pomocą opcji „Host allow”. Zobacz: samba.org/samba/docs/server_security.html
ctorx