如何用Python获取文件安全属性中的组/用户名列表?
获取文件安全属性中的组/用户名列表(Python实现)
当然有对应的实现方法,分平台操作如下:
Windows 平台
Windows下可以借助pywin32库调用系统API读取文件的安全描述符,解析出权限列表中的用户和组。
步骤1:安装依赖
pip install pywin32
代码实现
import win32security import win32api def get_file_security_principals(file_path): # 获取文件的DACL(自主访问控制列表) sd = win32security.GetFileSecurity(file_path, win32security.DACL_SECURITY_INFORMATION) dacl = sd.GetSecurityDescriptorDacl() principals = [] for ace_idx in range(dacl.GetAceCount()): ace = dacl.GetAce(ace_idx) sid = ace[2] # 提取ACE中的SID(安全标识符) try: # 将SID转换为可读的域\用户名格式 name, domain, _ = win32security.LookupAccountSid(None, sid) principals.append(f"{domain}\\{name}") except win32security.error: # 处理无法解析的SID(比如特殊系统账户) principals.append(f"SID: {win32security.ConvertSidToStringSid(sid)}") return list(set(principals)) # 去重后返回 # 示例调用 if __name__ == "__main__": target_file = r"C:\Users\YourName\Desktop\test.txt" print("文件的组/用户名列表:") print(get_file_security_principals(target_file))
Linux/macOS 平台
类Unix系统可以通过两种方式实现:调用系统命令getfacl,或者使用pylibacl库直接操作ACL。
方法1:调用getfacl命令(无需额外安装Python库)
import subprocess def get_file_security_principals(file_path): # 执行getfacl命令获取文件ACL信息 proc = subprocess.run( ["getfacl", "-p", file_path], capture_output=True, text=True, check=True ) principals = [] for line in proc.stdout.splitlines(): # 筛选出用户和组条目 if line.startswith(("user:", "group:")): parts = line.split(":", maxsplit=2) principal = parts[1].strip() if principal: principals.append(principal) return list(set(principals)) # 示例调用 if __name__ == "__main__": target_file = "/home/yourname/test.txt" print("文件的组/用户名列表:") print(get_file_security_principals(target_file))
方法2:使用pylibacl库
pip install pylibacl
import acl def get_file_security_principals(file_path): acl_obj = acl.ACL(file_path) principals = [] for entry in acl_obj: # 筛选用户和组类型的ACL条目 if entry.tag_type in (acl.ACL_USER, acl.ACL_GROUP): principals.append(entry.qualifier) return list(set(principals)) # 示例调用 if __name__ == "__main__": target_file = "/home/yourname/test.txt" print("文件的组/用户名列表:") print(get_file_security_principals(target_file))
注意事项
- Windows环境下,运行代码的账户需要有读取目标文件安全属性的权限(部分系统文件可能需要管理员权限)。
- Linux环境下,
getfacl工具一般默认安装,若缺失可通过包管理器安装(比如apt install acl)。
内容的提问来源于stack exchange,提问作者Luis Fernandez
相关产品推荐
相关产品推荐

