将 HEX ACL 转换为权限

将 HEX ACL 转换为权限

我正在尝试编写一个脚本来从我的 Ubuntu 服务器机器上抓取 Samba 共享 ACL。我一直用它smbcacls来读取每个文件/文件夹的权限。当用户只有RXWX权限时,这是没问题的,但是一旦用户拥有任何标记为“特殊权限”的东西,它就会以十六进制显示。

例子:

user@machine: ~$ smbcacls //server/share folder_1/ --authentication=.credentials

印刷:

REVISION:1
CONTROL:SR|PD|DP
OWNER:SERVER\Admin
GROUP:SERVER\everyone
ACL:SERVER\Admin:ALLOWED/0x0/0x001e01ff

与继承有关0x0,但这是什么0x001e01ff意思?它看起来像二进制标志00000000111100000000111111111,但我找不到任何关于它们含义的文档。

有任何提示/文档链接吗?

答案1

SDDL 含义记录如下: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/f4296d69-1c0f-491f-9587-a960b292d070

0x001F01FF例如,意思是“文件完全访问”

0x001F01FF = 0x001E01FF + 0x00010000(即删除->参见链接)。这意味着您的计算结果中缺少删除权限。通过添加原子十六进制权限来构建按位权限

答案2

Falco 的回答通常会更有用,但为了完整性,单个文件权限标志记录在文件访问权限常量在 Windows 开发人员中心,标准和通用标志记录在访问掩码

分解 0x001E01FF,我们有:

  • 0x00100000 = SYNCHRONIZE(由内核使用?不太确定这到底是做什么的!)
  • 0x00080000 = WRITE_OWNER(取得文件所有权)
  • 0x00040000 = WRITE_DAC(更改文件权限)
  • 0x00020000 = READ_CONTROL(查看文件的现有权限)

并且

  • 0x00000100 = FILE_WRITE_ATTRIBUTES(更改文件属性)
  • 0x00000080 = FILE_READ_ATTRIBUTES(查看文件属性)
  • 0x00000040 = FILE_DELETE_CHILD(删除所有子项 - 仅适用于文件夹)
  • 0x00000020 = FILE_EXECUTE(运行文件/遍历文件夹)
  • 0x00000010 = FILE_WRITE_EA(写入扩展属性)
  • 0x00000008 = FILE_READ_EA(读取扩展属性)
  • 0x00000004 = FILE_APPEND_DATA(将数据附加到文件,或创建子文件夹)
  • 0x00000002 = FILE_WRITE_DATA(将数据写入文件,或在文件夹中创建文件)
  • 0x00000001 = FILE_READ_DATA(从文件读取数据,或列出文件夹内容)

但我们显然没有

  • 0x00010000 = DELETE(删除文件)

相关内容