Samba 하위 폴더에 대한 권한을 변경하는 방법은 무엇입니까?

Samba 하위 폴더에 대한 권한을 변경하는 방법은 무엇입니까?

Active Directory에 ROLE_DOMAIN_MEMBER가 있는 Samba 서버가 있습니다. 나의 주요 목표는 각 공유의 공유 하위 폴더에 대해 서로 다른 권한을 설정하는 것입니다. 이는 Linux acl 또는 Windows 권한 GUI를 사용하여 수행할 수 있지만 저는 Windows GUI를 선호합니다. 이 경우 사용자가 직접 수행할 수 있습니다.

chmod, chown, acl, Windows GUI 및 Windows 콘솔 GUI를 사용하여 권한 변경을 시도했으며 하위 폴더에 대한 권한을 변경할 수 있지만 작동하지 않는 것 같습니다. samba-share에 그룹을 추가하는 것만으로도 저에게 효과적이었습니다. 하위 폴더에 적용

valid users = "+DOMAIN.LOCAL\IT" # "+DOMAIN.LOCAL\adm" # "+DOMAIN.LOCAL\DR" # "DOMAIN.LOCAL\PRINTERS"
admin users = "+DOMAIN.LOCAL\IT" # "+DOMAIN.LOCAL\adm" # "+DOMAIN.LOCAL\DR" # "DOMAIN.LOCAL\PRINTERS"

모든 smb.cfg와 테스트 공유를 여기에 인쇄합니다.

[global]
# No .tld
workgroup = DOMAIN
netbios name = samba4
server string = %h server (Samba, Ubuntu)
# Active Directory System
security = ads
# With .tld
realm = DOMAIN.LOCAL
# Just a member server
domain master = no
local master = no
preferred master = no
dns proxy = no
# Disable printing error log messages when CUPS is not installed.
printcap name = /dev/null
load printers = no
printcap cache time = 0
#additional section
obey pam restrictions = yes
map to guest = bad user
dns proxy = no
vfs objects = acl_xattr
map acl inherit = yes
nt acl support = yes
acl map full control = yes
#acl compatibility = auto
store dos attributes = yes
map archive = no
map hidden = no
map read only = no
map system = no
# Works both in samba 3.2 and 3.6.
#idmap backend = tdb
# no .tld
idmap config * : backend = tdb
idmap config * : range = 10000-99999
winbind enum users = yes
winbind enum groups = yes
# This way users log in with username instead of [email protected]
winbind use default domain = yes
# Inherit groups in groups
winbind nested groups = yes
winbind refresh tickets = yes
winbind offline logon = true
#winbind separator = \
# Becomes /home/example/username
template homedir = /home/%D/%U
#logon drive = H:
#logon home = \\smb\%U
# No shell access
template shell = /bin/bash
client use spnego = yes
client ntlmv2 auth = yes
#password server = dc01.domain.local, dc02.domain.local
password server = *
encrypt passwords = yes
unix password sync = yes
pam password change = yes
smb passwd file = /etc/samba/smbpasswd
os level = 20
restrict anonymous = 2
log file = /var/log/samba/samba.log
log level = 3
#logging = syslog@1 /var/log/samba/log.%m
vfs objects = full_audit
full_audit:success = mkdir rmdir unlink pwrite
full_audit:prefix = %u|%I|%m|%S
full_audit:failure = none
full_audit:facility = local5
full_audit:priority = notice
recycle:repository = /home/recycle/
recycle:keeptree = yes
recycle:versions = yes
max log size = 100000
panic action = /usr/share/samba/panic-action %d
guest ok = yes

[test$]
        path = /FS/test$
        browseable = yes
        read only = no
        inherit acls = yes
        inherit permissions = yes
        create mask = 700
        directory mask = 700
        valid users = "+DOMAIN.LOCAL\IT" # "+DOMAIN.LOCAL\adm" # "+DOMAIN.LOCAL\DR" # "DOMAIN.LOCAL\PRINTERS"
        admin users = "+DOMAIN.LOCAL\IT" # "+DOMAIN.LOCAL\adm" # "+DOMAIN.LOCAL\DR" # "DOMAIN.LOCAL\PRINTERS"

┌─[root@samba4]─[/FS]
└──╼ #ls -ld test\$/
drwxrwx---+ 6 root root 4096 Jun 25 15:44 test$/

액세스 제어 목록 구성:

cat /boot/config-4.4.0-87-generic  | grep _ACL
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_HFSPLUS_FS_POSIX_ACL=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CEPH_FS_POSIX_ACL=y
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y

내 파일 시스템 테이블:

UUID=4ec48dfe-c45d-124b-8145-09fe59cfad9b /FS ext4 relatime,acl,user_xattr,errors=remount-ro 0 1

samba.log에서 테스트 디렉터리에 대한 권한을 변경하려고 하면 acl 권한에 문제가 있습니다.

set_nt_acl: failed to set file acl on file test (Operation not permitted).

또한 테스트 디렉터리의 권한을 777로 변경하고 "마스크 만들기", "디렉터리 마스크", "사용자 관리" 옵션을 제거했습니다. 이제 새 사용자에게 파일 권한을 추가할 수도 없습니다.

답변1

Windows 권한을 사용하려면 해당 권한을 재정의하는 UNIX/Linux 권한 제어를 제거해야 합니다.

chmod 777 '/FS/test$'

공유 정의에서 다음 줄을 제거합니다.

create mask = 700
directory mask = 700
admin users = ...

관련 정보