Windows
將 HEX ACL 轉換為權限
我正在嘗試編寫一個腳本來從我的 Ubuntu 伺服器機器上抓取 Samba 共享 ACL。我一直在使用
smbcacls
讀取每個文件/文件夾的權限。當使用者只有RX
或WX
權限時,這很好,但只要使用者有任何標記為“特殊權限”的東西,它就會以十六進制顯示。例子:
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
意思?它看起來像 binary flags00000000111100000000111111111
,但我找不到任何關於這些含義的文件。任何提示/文件連結?
SDDL 的含義記錄在這裡,例如: https ://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/f4296d69-1c0f-491f-9587-a960b292d070
例如的含義
0x001F01FF
是“文件完全訪問”0x001F01FF = 0x001E01FF + 0x00010000(這是刪除-> 參見連結)。這意味著您的計算結果中缺少刪除權限。通過添加原子十六進制權限來建構逐位權限
Falco 的答案通常會更有用,但為了完整起見,單個文件權限標誌記錄在Windows 開發中心的文件訪問權限常量下,標準和通用標誌記錄在ACCESS_MASK下。
分解 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(刪除文件)