Windows 7을 통해 액세스하는 Linux 서버(RHEL 6)에 삼바 공유가 있습니다.
생성 마스크 0664로 삼바 공유를 설정했지만 Windows 7 컴퓨터에서 삼바를 통해 파일을 생성하면 권한 수준이 0674인 파일이 생성됩니다. 파일을 편집하면 권한도 0674로 변경됩니다. . 공유에 대한 생성 마스크를 제거하고 기본 생성 마스크 0644를 사용하면 권한이 0774인 파일이 생성됩니다. 내 umask는 0022입니다. 매뉴얼에서 여러 설정을 시도했지만 아무것도 수행하지 못하는 것 같습니다. 장난. 무슨 일이 일어나고 있는지, 이 문제를 어떻게 해결할 수 있는지에 대한 아이디어가 있습니까?
이상적으로 새 파일의 권한 수준은 0664이고 기존 파일은 권한 수준을 유지합니다.
참고로 다음의 출력이 있습니다 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
답변1
다음 중 하나를 활성화하면 문제가 발생하는 경우가 많습니다.
map archive
(소유자를 위해 unix 실행 비트를 사용함)map system
(그룹에 대해 unix 실행 비트 사용)map hidden
(다른 경우에는 유닉스 실행 비트를 사용합니다)inherit permissions
create mask
삼바가 등을 무시하게 만듭니다 .inherit acls
기본적으로 no로 설정해야 하는 항목 도 있습니다.
"MS-DOS 및 Unix의 파일 권한 및 속성"8장. 고급 디스크 공유위의 내용을 친절하게 설명합니다.
그러나 Microsoft Office 제품은 이상한 동작을 일으키고 버그/예기치 않은 동작을 유발합니다. 위의 맵 또는 상속 옵션을 설정하고 create mask
피 하더라도 force create mode
Microsoft Office 응용 프로그램을 사용하여 문서를 편집할 때 그룹 실행 권한이 설정되는 것을 보았습니다. 이는 다른 프로그램에서는 발생하지 않습니다. 예를 들어 메모장으로 .txt 파일을 편집하면 권한이 정상적으로 유지됩니다. Office는 파일을 생성할 뿐만 아니라 임시 파일, 이름 변경 및 권한을 약간 혼란스럽게 만듭니다.
많이 조사한 후에는 일종의 Samba POSIX ACL 버그와 혼동될 수도 있습니다.
- 이전 2007 데비안 버그 보고서"samba: POSIX acls를 사용하여 생성 모드를 잘못 해석합니다"
- "기본 ACL의 잘못된 동작"는 Samba에 대한 가장 최근의 버그 보고서인 것 같지만 슬프게도 'RESOLVED INVALID'(이르게?)로 종료되었습니다.
Linux 측에서 관찰된 동작
Windows 탐색기 컨텍스트 메뉴를 통해 생성된 빈 단어 docx 파일에 대한 확장 ACL(아직 열리지 않고 단어별로 저장되지 않음)
$ getfacl test.docx
# file: test.docx
# owner: tester
# group: tester
user::rw-
group::rw-
other::---
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
Ubuntu 16.04 LTS에서 Samba 구성을 확인할 때 map archive
기본적으로 활성화되어 있는 것 같지만 그룹 실행 비트가 아닌 소유자의 실행 비트를 사용해야 하므로 제 경우에는 이것이 원인이 아니었습니다.
$ testparm -s -v 2>&1 | grep 'map archive'
map archive = Yes
Windows 측에서 관찰된 동작
SysInternals 프로세스 모니터를 사용하고 notepad.exe를 사용하여 .txt 파일을 편집하는 것과 WINWORD.EXE를 사용하여 .docx 파일을 편집하는 것을 비교하면 Office 제품군은 임시 파일 생성, 이름 바꾸기 등의 멋진 작업을 많이 수행합니다. 특히 notepad.exe와는 달리 , WINWORD.EXE는 액세스 제어 목록을 조작하는 것 같습니다. 프로몬에서 본 것처럼
SetSecurityFile
Information: Group, DACL
그래서 저는 이것이 Microsoft Office 응용 프로그램이 UNIX 그룹 권한을 조작하는 이유라고 생각합니다.
더 자세히 조사하려면 Windows 파일 개체 보안 감사를 켜서 정확히 무엇이 변경되었는지 확인해야 했습니다. 이벤트 ID 4670은 ~WRD0000.tmp
적용된 권한 변경을 보여줍니다. (내 생각에는 Word에서 충돌이 발생할 경우 정기적인 저장 및 복구를 위해 이것을 사용하는 것 같습니다.)
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)
SDDL(Security Descriptor Definition Language)의 권한 변경은 추가 ACE(액세스 제어 항목)가 추가된 것으로 나타나는 DACL(임의 액세스 제어 목록 부분)입니다. ACE가 (A;;0x1200a9;;;WD)
바로 앞에 추가됩니다. 제가 해석한 방법은 다음과 같습니다.
A;
액세스 허용을 의미하며 동일하게 유지됩니다.;
상속 없음0x1200a9;
FILE_GENERIC_READ | FILE_EXECUTE
읽기 및 실행 액세스를 의미합니다.WD
'모두' 수탁자를 의미합니다.
그런 다음 나중에 프로세스 모니터에서 작업으로 본 ~WRD0000.tmp
이름으로 변경되었습니다 . 따라서 결국 어떤 이유로든 단어가 수행한 ACE 변경 사항 중 일부로 끝납니다.test.docx
SetRenameInformationFile
test.docx