前言:

  作为一个用惯了Linux类系统的人,突然更换成了需要操作的windows系统,而且要对windows系统做操作一些获取类的操作,对我来说就感觉十分困难;获取属主属组在Linux内一行命令就可以解决的事情放在windows就让我变得毫无头绪。

这次分享我将已经踩完坑的代码发布出来,并且代码整量就是来做获取文件owner、对文件赋权、和修改owner的


需要用到的模块

win32security

win32api

①、获取一个文件的owner,即所有者

new_file = path+file
def get_file_owner(new_file):sd = win32security.GetFileSecurity(new_file, win32security.OWNER_SECURITY_INFORMATION)owner_sid = sd.GetSecurityDescriptorOwner()name, domain, account_type = win32security.LookupAccountSid(None, owner_sid)if dimain == win32api.GetComputerName():domain == "."if name == "Administrators":__local_administrators = "%s\\Administrators" % win32api.GetComputerName()else:return "%s\\%s" % (domain,name)
只需要传入对应文件即可获取文件的owner

②、修改文件owner

empower_file = path+file
注意传入owner的格式为 域\用户名
def set_file_owner(empower_file, owner):domain_user = owner.split(r'\\')user_info = win32security.LookupAccountName(domain_user[0],domain_user[1])hToken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), win32security.TOKEN_ALL_ACCESS)new_state = [(win32security.LookupPrivilegeValue(None, win32security.SE_TAKE_OWNERSHIP_NAME),win32security.SE_PRIVILEGE_ENABLED),(win32security.LookupPrivilegeValue(None, win32security.SE_RESTORE_NAME),win32security.SE_PRIVILEGE_ENABLED)]win32security.AdjustTokenPrivileges(hToken, False, new_state)sd = win32security.SECURITY_DESCRIPTOR()sd.SetSecurityDescriptorOwner(user_info[0], False)win32security.SetFileSecurity(empower_file, win32security.OWNER_SECURITY_INFORMATION, sd)

对于部分人来说这可能已经够了,可如果只能提供一个用户呢

脚本传参只传入了用户没有携带域,那这个函数就不能使用了

使用另一种方法:

def set_all_permissions(file,owner):userx, domain, type = win32security.LookupAccountName("", owner)sd = win32security.GetFileSecurity(file, win32security.DACL_SECURITY_INFORMATION)dacl = sd.GetSecurityDescriptorDacl()dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_ALL_ACCESS, userx)sd.SetSecurityDescriptorDacl(1, dacl, 0)win32security.SetFileSecurity(file, win32security.DACL_SECURITY_INFORMATION, sd)

使用以上的方式虽然不能更改owner,但是可以将用户对文件所有操作的权限增加进去,达到控制文件的需求

另外提供一个只需要提供用户来修改owner的函数

这个函数有一些限制,但依旧能适合一些场景,并且已经将坑踩完,所以一并发出来

def set_file_owner(file, owner):domain_user = owner.split(r'\\')user_info = win32security.LookupAccountName(domain_user[0], domain_user[1])owner_acl = win32security.GetFileSecurity(file, win32security.OWNER_SECURITY_INFORMATION)owner_acl.SetSecurityDescriptorOwner(user_info[0], True)win32security.SetFileSecurity(file, win32security.OWNER_SECURITY_INFORMATION, owner_acl)

上方代码实现修改文件的所有者,但是一些限制和条件我这里说明

test 是普通用户

aadmin 是管理员组的用户

administrator 是最高管理员

①、test只能使用自己的owner去修改权限

例如 文件aaa.json 所有者为aadmin

修改成功

②、test使用别的用户的owner(aadmin)去修改权限

修改失败

③、test使用自己的owner(test)去修改文件默认所有者为administrators的权限

失败,因为test是普通用户

④、aadmin使用自己的owner(aadmin) 去修改文件默认所有者为administrators的权限

成功,因为aadmin是管理员组的用户

以上就是此次的所有内容,为了能够解决尽可能多的需求,这里已经把我所知的实现方式都列举了出来,希望能够解决你的问题,减少无必要的时间浪费。

Windows 获取和修改Owner相关推荐

  1. python用WMI等获取及修改windows系统信息

    通过查找相关资料,总结了一下python用WMI等获取windows系统信息以及修改系统的相关配置,代码如下(附件中有本代码附件): #-*- coding:utf-8 -*- import time ...

  2. mfc获取别的计算机是否在线,VC获取并修改计算机屏幕分辨率(MFC)

    //检测当前分辨率 int Width = GetSystemMetrics(SM_CXSCREEN); int Height = GetSystemMetrics(SM_CYSCREEN); DEV ...

  3. mfc改计算机名称,VC获取并修改计算机屏幕分辨率(MFC)

    //检测当前分辨率 int Width = GetSystemMetrics(SM_CXSCREEN); int Height = GetSystemMetrics(SM_CYSCREEN); DEV ...

  4. winapi获取和修改camera raw界面元素数据

    camera raw 界面如下: 需求就是根据 windows api 来操作界面右边的色温.色调.曝光等属性,进而对图片进行调色.根据 spy++ 捕获的窗口信息,理论上是可以拿到并修改值的. 根据 ...

  5. java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...

    JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringB ...

  6. Windows注册表修改实例完全手册(上)

    注册表是Windows操作系统的核心.它实质上是一个庞大的数据库,存放有计算机硬件和全部配置信息.系统和应用软件的初始化信息.应用软件和文 档文件的关联关系.硬件设备说明以及各种网络状态信息和数据.可 ...

  7. 怎么获取php文件,学习猿地-php怎么获取文件修改时间?

    获取方法:1.使用filemtime()函数,可返回上次文件内容被修改的时间,语法格式"filemtime(文件);":2.使用filectime()函数,可返回上次文件权限.所有 ...

  8. 修改.html 打开方式 注册表,windows 注册表修改资料打开方式

    windows 注册表修改文件打开方式 描述遇到的问题 在打开jsp文件时,右击选择打开方式中选择dreamweaver,但是却是以firefox打开 初步分析应该是jsp也和firefox进行了关联 ...

  9. windows获取本地时间_如何在Windows 8中重新获得本地登录

    windows获取本地时间 By default a fresh Windows 8 installation prompts you to create a synchronized cloud-e ...

  10. 《工具癖》Mac与Windows获取文件绝对路径的快捷键

    对于开发者而言, 快速获取文件的绝对路径,是一件很提升效率的事情, 一般的做法是,右键... 其实是有快捷键的! Mac获取文件绝对路径 mac的快捷键为: command+option+c Wind ...

最新文章

  1. 零拷贝 zero-copy 原理
  2. 【Netty】Netty 核心组件 ( Pipeline | ChannelPipeline )
  3. Centos 安装 Wireshark
  4. (75)内核APC执行过程,分析 KiDeliverApc 函数
  5. selenium webdriver(python)_selenium、webdriver及浏览器的关系及对应版本安装
  6. [TJOI2018]智力竞赛 (匈牙利)
  7. java 中for循环中重复定义的变量 为什么不报错?
  8. int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
  9. 腾讯云自曝自家技术只值1分钱,这技术以后谁还敢用
  10. JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列
  11. JavaScript在一个数组中插入另一个数组
  12. React:工程化开发
  13. Python求水仙花数
  14. 在r中弄方差分析表_R语言 | 方差分析(上)
  15. 吴晓慧讲述:“随手记安全吗”网贷平台“出清”利好行业发展
  16. localhost无法访问的问题
  17. 判断IE版本并给出提示升级浏览器
  18. OO和PO的最大区别是什么?
  19. 二维彩虹产品功能更新(H5编辑二维码)
  20. 计算机通信与网络(一)

热门文章

  1. 如何创建一个facebook账户
  2. OSChina 周五乱弹 —— 有一个朝代红薯不能去
  3. 笔记本的无线网共享给台式机上网
  4. Ubuntu 16.04下使用Wine安装Windows版的微信(不太完美)
  5. C++17 关键新特性介绍及代码讲解 (6) — fold expression
  6. c4d r21中文语言包安装失败怎么办,Windows10系统下语言包安装失败的解决方案
  7. 东北大学——考研复试——计算机网络——2014年
  8. BZOJ_1619_[Usaco2008_Nov]_Guarding_the_Farm_保卫牧场_(模拟+bfs)
  9. 上交计算机考研专业课,2020上海交通大学计算机考研经验,过来人谈考研
  10. mysql sphinx windows安装_Sphinx在windows下如何安装使用