Linux

更改 SMB Samba 共享的 Windows ACL - 直接在 linux 中

  • October 4, 2017

有沒有辦法直接通過 Linux 本身從 Samba 共享的文件和文件夾中設置 Windows ACL?

我知道有 setfacl/getfacl 選項,但它們只能在以下之間更改: - DENY | 只讀 | 完全控制 - 如果我做對了。

但我需要一個 Windows 安全組修改權限。並且遞歸到所有以下目錄。如果我直接通過 SMB 連接從 Windows 更改它,這將需要數小時和數天,因為文件量很大。有沒有辦法做到這一點,還是仍然不可能?我知道資訊儲存在共享中的任何位置,因為我可以將 Linux 中的文件複製到共享文件夾,並且它們會自動獲得先前選擇的修改權限。

為了避免通過 SMB 更改設置,我從共享中複製了文件。刪除共享中的所有文件並更改共享上 Windows 的權限。

Actually this is how I proceeding so far:

In Linux:

1. I copy files and folders from the share folder to a separate location.
2. I delete all stuff in the share folder.

In Windows:

3. Then accessing the empty share folder through SMB.
4. From here I can change recursively the permissions for access groups to apply "modify" permissions.


Back in Linux:

5. Now I can copy the files and folders back into the share folder to set the permissions.

-> 文件通過複製過程獲得了新權限。

如果您執行的是 Samba 4,那麼命令samba-tool ntacl肯定可以做到。

不幸的是,很難找到有關如何使用此命令設置 ACL 的詳細文件:

#samba-tool ntacl set -h
Usage: samba-tool ntacl set <acl> <file> [options]

Set ACLs on a file.


Options:
 -h, --help            show this help message and exit
 --quiet               Be quiet
 --xattr-backend=XATTR_BACKEND
                       xattr backend type (native fs or tdb)
 --eadb-file=EADB_FILE
                       Name of the tdb file where attributes are stored
 --use-ntvfs           Set the ACLs directly to the TDB or xattr for use with
                       the ntvfs file server
 --use-s3fs            Set the ACLs for use with the default s3fs file server
                       via the VFS layer
 --service=SERVICE     Name of the smb.conf service to use when applying the
                       ACLs

 Samba Common Options:
   -s FILE, --configfile=FILE
                       Configuration file
   -d DEBUGLEVEL, --debuglevel=DEBUGLEVEL
                       debug level
   --option=OPTION     set smb.conf option from command line
   --realm=REALM       set the realm name

 Credentials Options:
   --simple-bind-dn=DN
                       DN to use for a simple bind
   --password=PASSWORD
                       Password
   -U USERNAME, --username=USERNAME
                       Username
   -W WORKGROUP, --workgroup=WORKGROUP
                       Workgroup
   -N, --no-pass       Don't ask for a password
   -k KERBEROS, --kerberos=KERBEROS
                       Use Kerberos
   --ipaddress=IPADDRESS
                       IP address of server
   -P, --machine-pass  Use stored machine account password

 Version Options:
   -V, --version       Display version number

我會建議你這個程序:

# 1)
# In Windows
# Go to one shared folder/file and change the permissions as desired

#2)
# In Linux
# Get infos of the ACLs of the directory/file you just set up in SDDL format

#samba-tool ntacl get --as-sddl /path/to/my/share
O:LAG:BAD:P(A;OICI;0x001f01ff;;;BA)(A;OICI;0x001200a9;;;SO)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)

#3)
# Use the SDDL parameter to change all the files you want with same ACL

# samba-tool ntacl set "O:LAG:BAD:P(A;OICI;0x001f01ff;;;BA)(A;OICI;0x001200a9;;;SO)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)" /path/to/other/files 

細節:

samba-tool ntacl get --as-sddl [file/directory]

將獲得 SDDL 格式的 ACL 資訊。更多關於 SDDL的資訊

samba-tool ntacl set "[SDDL string]" [file/directory]

將在文件/文件夾上應用指定的 ACL

該解決方案並不完美,它可以幫助您。

關於 samba-tool 命令: https ://www.samba.org/samba/docs/man/manpages-3/samba-tool.8.html

Samba 郵件列表的相關問題: https ://lists.samba.org/archive/samba-technical/2011-October/079820.html

引用自:https://serverfault.com/questions/875298