Dlaczego pliki w udziale zamontowanym smbfs są tworzone z ustawionym bitem wykonywalnym?

14

Zainstalowałem udział samba za pomocą komendy smbmount:

$ sudo smbmount \\\\foo\\bar /mnt/bar -o user=tom

Kiedy tworzę nowe pliki, są one tworzone przy użyciu zestawu bitów wykonywalnych dla właściciela, grupy i świata. Na przykład

$ touch hello.txt 
$ ls -la hello.txt
-rwxr-xr-x 1 root root 0 Dec  2 12:28 hello.txt

Ten sam plik po utworzeniu w udziale zamontowanym w systemie plików NFS konfiguruje prawidłowe uprawnienia bez ustawiania jakiegokolwiek bitu wykonywalnego.

Dlaczego to się dzieje? Jak można to naprawić?

vivekian2
źródło

Odpowiedzi:

11

NFS został wynaleziony w świecie uniksowym, więc od razu rozumie tradycyjne uprawnienia uniksowe. (ACL współczesnych systemów uniksowych to inna sprawa, ale ostatnie implementacje NFS powinny sobie z nimi poradzić.)

Samba została wymyślona w świecie komputerów IBM / Microsoft, aby wymieniać pliki z systemami, które nie miały uprawnień poza tylko do odczytu / do odczytu i zapisu. Jest teraz macierzysty dla systemu Windows. Domyślnie Samba nie przesyła uprawnień uniksowych. W zależności od konfiguracji wszystkie pliki są oznaczone jako pliki wykonywalne (co jest denerwujące) lub wszystkie pliki (z wyjątkiem katalogów) są oznaczone jako pliki wykonywalne (co jest denerwujące).

Istnieje wiele rozszerzeń protokołu Samba / CIFS, które sprawiają, że jest on bardziej odpowiedni dla systemu Unix. Spróbuj włączyć rozszerzenia Unix w konfiguracji serwera:

[global]
unix extensions = yes
Gilles „SO- przestań być zły”
źródło
Niestety w intranecie mojej firmy nie mam dostępu do konfiguracji serwera. Być może najlepiej byłoby zamontować tylko za pomocą NFS na kliencie Linux. Większy problem dotyczy klienta Windows, gdzie konfiguracja NFS jest uciążliwa.
vivekian2
@ vivekian2 Rzeczywiście, jeśli masz wybór, zdecydowanie polecam używanie NFS na kliencie Linux i SMB na kliencie Windows.
Gilles „SO- przestań być zły”,
10

To brzmi jak twój problem, zatytułowany: Skopiowane pliki zyskują bit wykonania na Sambie / CIFS .

fragment

Po skopiowaniu pliku z rw-r ----- na woluminie zamontowanym w CIFS, kopia otrzymuje rwxr -----. Więc zyskuje bit wykonania:

Dalej w dół strony, ustawienie map archive = now /etc/samba/smb.conf:

fragment

  [Global]
  <snip>
  map archive = no
  <snip>
slm
źródło
To z pewnością rozwiązuje problem plików zapisywanych z systemu Windows uzyskujących flagę wykonania. Dzięki! Kolejne szalone domyślne, czy ktoś używał flag archiwalnych w ciągu ostatnich 2 dekad? :)
Rennex
4

Możesz spróbować: mount -t cifs

Google „mount cifs” na użytek, nie jest trudne do zrozumienia, ale będziesz chciał ustawić opcje za pomocą flagi -o:

uid =, gid =, rw, noperm, dir_mask = 0775, file_mask = 0664

Użytkownik i grupa są identyfikatorami, ponieważ w liczbach nie są to aliasy tekstu. Te opcje zapewnią ci dostęp do r / w, uprawnienia są kontrolowane przez mount no server, a konkretnie file_mask=0664upewnią się, że twoje pliki nie będą wykonywalne. Ponadto będziesz mógł pracować ze swoimi udziałami samba jako lokalnymi katalogami.

MaKR
źródło
W najnowszej wersji samby można użyćfile_mode=0644,dir_mode=0755
Jokester
OSTRZEŻENIE: Opcja montowania CIFS „dmask” jest przestarzała. Zamiast tego użyj „dir_mode”. OSTRZEŻENIE: Opcja montowania CIFS „maska” jest przestarzała. Zamiast tego użyj „file_mode”.
Hubbitus,
4

Możesz dowiedzieć się, dlaczego tak się dzieje, z następującego wyjaśnienia na stronie internetowej Samby w sekcji Uprawnienia do plików i atrybuty w MS-DOS i Unix :

https://www.samba.org/samba/docs/using_samba/ch08.html

Ma to związek z mapowaniem bitów System, Hidden i Archive dla systemu plików MS-DOS.

System plików MS-DOS nie wykorzystuje bitów wykonywalnych, więc trzy bity wykonywalne w systemie plików Unix są ponownie wykorzystywane do reprezentowania bitów systemowych, ukrytych i archiwalnych dla systemu plików MS-DOS.

Więc kiedy przeglądasz uprawnienia do plików przy użyciu ls -lw Uniksie, przeglądasz uprawnienia do plików odpowiednie dla MS-DOS (lub Windows), pamiętając, że trzy bity wykonywalne w Uniksie reprezentują bity System, Ukryty i Archiwum dla MS-DOS.

W smb.confJednakże, można wyłączyć tę mapowanie się na akcję z:

map archive = no
map system = no
map hidden = no

i wymuś tryb tworzenia plików za pomocą:

force create mode = 0660
Stacey Richards
źródło
Okazało się to takie proste ... Dziękuję za wyjaśnienia!
anton_rh
1

Używam QNAP TS439 - i miałem ten problem z plikami wykonywalnymi.

Chociaż musiałem użyć następujących w moim /etc/fstabpliku

//192.168.0.1/audio /media/audio cifs credentials=/home/cheese/.smbcredentials,uid=1000,file_mode=0664,iocharset=utf8  0  0 
layolayo
źródło