Ich habe eine Samba-Freigabe auf einem Linux-Server (RHEL 6), auf die ich über Windows 7 zugreife.
Ich habe die Samba-Freigabe mit einer Erstellungsmaske von 0664 eingerichtet, aber wenn ich Dateien über Samba von meinem Windows 7-Rechner aus erstelle, werden die Dateien mit einer Berechtigungsstufe von 0674 erstellt. Wenn ich eine Datei bearbeite, werden deren Berechtigungen ebenfalls auf 0674 geändert. Wenn ich die Erstellungsmaske für die Freigabe entferne und mich auf die Standarderstellungsmaske von 0644 verlasse, werden Dateien mit Berechtigungen von 0774 erstellt. Meine Umask ist 0022. Ich habe eine Reihe von Einstellungen aus dem Handbuch ausprobiert, aber keine scheint zu funktionieren. Irgendwelche Ideen, was passiert und wie ich das beheben kann?
Im Idealfall hätten neue Dateien die Berechtigungsstufe 0664 und vorhandene Dateien würden ihre Berechtigungsstufe behalten.
Als Referenz hier die Ausgabe von testparm -v
:
[global]
dos charset = CP850
unix charset = UTF-8
display charset = LOCALE
workgroup = WORKGROUP
realm =
netbios name = SERVER
netbios aliases =
netbios scope =
server string = Bart
interfaces =
bind interfaces only = No
security = DOMAIN
auth methods =
encrypt passwords = Yes
update encrypted = No
client schannel = Auto
server schannel = Auto
allow trusted domains = Yes
map to guest = Never
null passwords = No
obey pam restrictions = No
password server = passwordserver.domain.com
smb passwd file = /var/lib/samba/private/smbpasswd
private dir = /var/lib/samba/private
passdb backend = tdbsam
algorithmic rid base = 1000
root directory =
guest account = nobody
enable privileges = Yes
pam password change = No
passwd program =
passwd chat = *new*password* %n\n *new*password* %n\n *changed*
passwd chat debug = No
passwd chat timeout = 2
check password script =
username map =
password level = 0
username level = 0
unix password sync = No
restrict anonymous = 0
lanman auth = No
ntlm auth = Yes
client NTLMv2 auth = No
client lanman auth = No
client plaintext auth = No
preload modules =
dedicated keytab file =
kerberos method = default
map untrusted to domain = No
log level = 0
syslog = 1
syslog only = No
log file = /var/log/samba/log.%m
max log size = 10240
debug timestamp = Yes
debug prefix timestamp = No
debug hires timestamp = Yes
debug pid = No
debug uid = No
debug class = No
enable core files = Yes
smb ports = 445 139
large readwrite = Yes
max protocol = NT1
min protocol = CORE
min receivefile size = 0
read raw = Yes
write raw = Yes
disable netbios = No
reset on zero vc = No
acl compatibility = auto
defer sharing violations = Yes
nt pipe support = Yes
nt status support = Yes
announce version = 4.9
announce as = NT
max mux = 50
max xmit = 16644
name resolve order = lmhosts wins host bcast
max ttl = 259200
max wins ttl = 518400
min wins ttl = 21600
time server = No
unix extensions = No
use spnego = Yes
client signing = auto
server signing = No
client use spnego = Yes
client ldap sasl wrapping = plain
enable asu support = No
svcctl list =
deadtime = 0
getwd cache = Yes
keepalive = 300
lpq cache time = 30
max smbd processes = 0
paranoid server security = Yes
max disk size = 0
max open files = 16384
socket options = TCP_NODELAY
use mmap = Yes
hostname lookups = No
name cache timeout = 660
ctdbd socket =
cluster addresses =
clustering = No
ctdb timeout = 0
load printers = No
printcap cache time = 750
printcap name =
cups server =
cups encrypt = No
cups connection timeout = 30
iprint server =
disable spoolss = No
addport command =
enumports command =
addprinter command =
deleteprinter command =
show add printer wizard = Yes
os2 driver map =
mangling method = hash2
mangle prefix = 1
max stat cache size = 256
stat cache = Yes
machine password timeout = 604800
add user script =
rename user script =
delete user script =
add group script =
delete group script =
add user to group script =
delete user from group script =
set primary group script =
add machine script =
shutdown script =
abort shutdown script =
username map script =
logon script =
logon path = \\%N\%U\profile
logon drive =
logon home = \\%N\%U
domain logons = No
init logon delayed hosts =
init logon delay = 100
os level = 20
lm announce = Auto
lm interval = 60
preferred master = No
local master = No
domain master = Auto
browse list = Yes
enhanced browsing = Yes
dns proxy = Yes
wins proxy = No
wins server =
wins support = No
wins hook =
kernel oplocks = Yes
lock spin time = 200
oplock break wait time = 0
ldap admin dn =
ldap delete dn = No
ldap group suffix =
ldap idmap suffix =
ldap machine suffix =
ldap passwd sync = no
ldap replication sleep = 1000
ldap suffix =
ldap ssl = start tls
ldap ssl ads = No
ldap deref = auto
ldap follow referral = Auto
ldap timeout = 15
ldap connection timeout = 2
ldap page size = 1024
ldap user suffix =
ldap debug level = 0
ldap debug threshold = 10
eventlog list =
add share command =
change share command =
delete share command =
preload =
lock directory = /var/lib/samba
state directory = /var/lib/samba
cache directory = /var/lib/samba
pid directory = /var/run
utmp directory =
wtmp directory =
utmp = No
default service =
message command =
get quota command =
set quota command =
remote announce =
remote browse sync =
socket address = 0.0.0.0
nmbd bind explicit broadcast = Yes
homedir map = auto.home
afs username map =
afs token lifetime = 604800
log nt token command =
time offset = 0
NIS homedir = No
registry shares = No
usershare allow guests = No
usershare max shares = 0
usershare owner only = Yes
usershare path = /var/lib/samba/usershares
usershare prefix allow list =
usershare prefix deny list =
usershare template share =
panic action =
perfcount module =
host msdfs = Yes
passdb expand explicit = No
idmap backend = tdb
idmap alloc backend =
idmap cache time = 604800
idmap negative cache time = 120
idmap uid =
idmap gid =
template homedir = /home/%D/%U
template shell = /bin/false
winbind separator = \
winbind cache time = 300
winbind reconnect delay = 30
winbind max clients = 200
winbind enum users = No
winbind enum groups = No
winbind use default domain = No
winbind trusted domains only = No
winbind nested groups = Yes
winbind expand groups = 1
winbind nss info = template
winbind refresh tickets = No
winbind offline logon = No
winbind normalize names = No
winbind rpc only = No
create krb5 conf = Yes
comment =
path =
username =
invalid users =
valid users =
admin users =
read list =
write list =
printer admin =
force user =
force group =
read only = Yes
acl check permissions = Yes
acl group control = No
acl map full control = Yes
create mask = 0744
force create mode = 00
security mask = 0777
force security mode = 00
directory mask = 0755
force directory mode = 00
directory security mask = 0777
force directory security mode = 00
force unknown acl user = No
inherit permissions = No
inherit acls = No
inherit owner = No
guest only = No
administrative share = No
guest ok = No
only user = No
hosts allow =
hosts deny =
allocation roundup size = 1048576
aio read size = 0
aio write size = 0
aio write behind =
ea support = No
nt acl support = Yes
profile acls = No
map acl inherit = No
afs share = No
smb encrypt = auto
block size = 1024
change notify = Yes
directory name cache size = 100
kernel change notify = Yes
max connections = 0
min print space = 0
strict allocate = No
strict sync = No
sync always = No
use sendfile = No
write cache size = 0
max reported print jobs = 0
max print jobs = 1000
printable = No
printing = cups
cups options = raw
print command =
lpq command = %p
lprm command =
lppause command =
lpresume command =
queuepause command =
queueresume command =
printer name =
use client driver = No
default devmode = Yes
force printername = No
printjob username = %U
default case = lower
case sensitive = Auto
preserve case = Yes
short preserve case = Yes
mangling char = ~
hide dot files = Yes
hide special files = No
hide unreadable = No
hide unwriteable files = No
delete veto files = No
veto files =
hide files =
veto oplock files =
map archive = Yes
map hidden = No
map system = No
map readonly = yes
mangled names = Yes
store dos attributes = No
dmapi support = No
browseable = Yes
access based share enum = No
blocking locks = Yes
csc policy = manual
fake oplocks = No
locking = Yes
oplocks = Yes
level2 oplocks = Yes
oplock contention limit = 2
posix locking = Yes
strict locking = Auto
share modes = Yes
dfree cache time = 0
dfree command =
copy =
preexec =
preexec close = No
postexec =
root preexec =
root preexec close = No
root postexec =
available = Yes
volume =
fstype = NTFS
set directory = No
wide links = No
follow symlinks = Yes
dont descend =
magic script =
magic output =
delete readonly = No
dos filemode = No
dos filetimes = Yes
dos filetime resolution = No
fake directory create times = No
vfs objects =
msdfs root = No
msdfs proxy =
[path]
comment = path
path = /path/
valid users = usera, userb, userc
read only = No
create mask = 0664
directory mask = 0775
wide links = Yes
Antwort1
Das Problem wird häufig durch die Aktivierung einer der folgenden Optionen verursacht:
map archive
(verwendet Unix-Ausführungsbit für den Eigentümer)map system
(verwendet Unix-Ausführungsbit für Gruppe)map hidden
(verwendet Unix-Execute-Bit für andere)inherit permissions
create mask
bewirkt , dass Samba usw. ignoriert- es gibt auch
inherit acls
welche sollte standardmäßig auf nein
"Dateiberechtigungen und Attribute unter MS-DOS und Unix" inKapitel 8. Erweiterte Festplattenfreigabenerklärt das oben Gesagte gut.
Microsoft Office-Produkte verursachen jedoch ein seltsames Verhalten und lösen einen Fehler/unerwartetes Verhalten aus. Selbst mit create mask
und/oder force create mode
festgelegt und unter Vermeidung der oben genannten Zuordnungs- oder Übernahmeoption habe ich gesehen, dass beim Bearbeiten von Dokumenten mit Microsoft Office-Anwendungen Gruppenausführungsberechtigungen festgelegt werden. Dies passiert bei anderen Programmen nicht. Bearbeiten Sie beispielsweise eine TXT-Datei mit Notepad und die Berechtigungen bleiben erhalten. Office erstellt nicht nur Dateien, sondern bringt auch etwas mit temporären Dateien, Umbenennungen und Berechtigungen durcheinander.
Nach einigem Herumwühlen ist klar, dass es sich auch um eine Verwechslung mit einer Art Samba POSIX ACL-Fehler handeln könnte:
- Alter Debian-Fehlerbericht von 2007„Samba: interpretiert den Erstellungsmodus mit POSIX-ACLs falsch“
- "Falsches Verhalten bei Standard-ACLs" scheint der aktuellste Fehlerbericht für Samba zu sein, wird aber leider mit „BEHOBEN, UNGÜLTIG“ geschlossen (vorzeitig?).
Beobachtetes Verhalten auf der Linux-Seite
Die erweiterten ACLs für eine leere Word-Docx-Datei, die über das Kontextmenü des Windows-Explorers erstellt wurde (noch nicht von Word geöffnet und gespeichert)
$ getfacl test.docx
# file: test.docx
# owner: tester
# group: tester
user::rw-
group::rw-
other::---
Nach dem Speichern über MS Word 2016
$ getfacl test.docx
# file: test.docx
# owner: tester
# group: tester
user::rw-
user:tester:rw-
group::rw-
group:tester:rw-
mask::rwx
Beim Überprüfen der Samba-Konfiguration unter Ubuntu 16.04 LTS scheint es map archive
standardmäßig aktiviert zu sein, aber das sollte das Ausführungsbit des Besitzers verwenden, nicht das Ausführungsbit der Gruppe, also war das in meinem Fall nicht die Ursache
$ testparm -s -v 2>&1 | grep 'map archive'
map archive = Yes
Beobachtetes Verhalten auf der Windows-Seite
Wenn man SysInternals Process Monitor verwendet und das Bearbeiten einer .txt-Datei mit notepad.exe mit dem Bearbeiten einer .docx-Datei mit WINWORD.EXE vergleicht, macht die Office-Suite eine Menge raffinierte Kleinarbeit beim Erstellen temporärer Dateien, Umbenennen usw. Insbesondere scheint WINWORD.EXE im Gegensatz zu notepad.exe mit Zugriffskontrolllisten herumzuspielen. Wie von procmon gesehen
SetSecurityFile
Information: Group, DACL
Ich vermute, dass dies der Grund ist, warum Microsoft Office-Anwendungen an der UNIX-Gruppenberechtigung herumfummeln.
Für eine genauere Untersuchung musste die Sicherheitsüberwachung von Windows-Dateiobjekten aktiviert werden, um festzustellen, was sich genau geändert hat. Die Ereignis-ID 4670 zeigt die ~WRD0000.tmp
angewendeten Berechtigungsänderungen an (ich glaube, Word verwendet dies zum regelmäßigen Speichern und Wiederherstellen, wenn es abstürzt).
Object:
Object Server: Security
Object Type: File
Object Name: C:\Users\<user>\Desktop\TestAudit\~WRD0000.tmp
Handle ID: 0xfd0
Process:
Process ID: 0x1ae4
Process Name: C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE
Permissions Change:
Original Security Descriptor:
D:AI(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;S-1-5-<SID>-1001)
New Security Descriptor:
D:(A;;0x1200a9;;;WD)(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;S-1-5-21-<SID>-1001)
Die Berechtigungsänderung in SDDL (Security Descriptor Definition Language) ist ein DACL (Discretionary Access Control List Part), bei dem anscheinend ein zusätzlicher ACE (Access Control Entry) hinzugefügt wurde. Der ACE (A;;0x1200a9;;;WD)
wird ganz vorne hinzugefügt. So habe ich es interpretiert:
A;
Bedeutung Zugriff erlauben, blieb gleich;
keine Vererbung0x1200a9;
bedeutetFILE_GENERIC_READ | FILE_EXECUTE
Lese- und AusführungszugriffWD
bedeutet der Treuhänder für „jedermann“
Später ~WRD0000.tmp
wird es dann umbenannt, test.docx
was ich im Prozessmonitor als SetRenameInformationFile
Vorgang gesehen habe. Am Ende test.docx
landen also einige der ACE-Änderungen, die Word aus irgendeinem Grund vorgenommen hat.