Windows 获取和修改Owner
前言:
作为一个用惯了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相关推荐
- python用WMI等获取及修改windows系统信息
通过查找相关资料,总结了一下python用WMI等获取windows系统信息以及修改系统的相关配置,代码如下(附件中有本代码附件): #-*- coding:utf-8 -*- import time ...
- mfc获取别的计算机是否在线,VC获取并修改计算机屏幕分辨率(MFC)
//检测当前分辨率 int Width = GetSystemMetrics(SM_CXSCREEN); int Height = GetSystemMetrics(SM_CYSCREEN); DEV ...
- mfc改计算机名称,VC获取并修改计算机屏幕分辨率(MFC)
//检测当前分辨率 int Width = GetSystemMetrics(SM_CXSCREEN); int Height = GetSystemMetrics(SM_CYSCREEN); DEV ...
- winapi获取和修改camera raw界面元素数据
camera raw 界面如下: 需求就是根据 windows api 来操作界面右边的色温.色调.曝光等属性,进而对图片进行调色.根据 spy++ 捕获的窗口信息,理论上是可以拿到并修改值的. 根据 ...
- java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...
JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringB ...
- Windows注册表修改实例完全手册(上)
注册表是Windows操作系统的核心.它实质上是一个庞大的数据库,存放有计算机硬件和全部配置信息.系统和应用软件的初始化信息.应用软件和文 档文件的关联关系.硬件设备说明以及各种网络状态信息和数据.可 ...
- 怎么获取php文件,学习猿地-php怎么获取文件修改时间?
获取方法:1.使用filemtime()函数,可返回上次文件内容被修改的时间,语法格式"filemtime(文件);":2.使用filectime()函数,可返回上次文件权限.所有 ...
- 修改.html 打开方式 注册表,windows 注册表修改资料打开方式
windows 注册表修改文件打开方式 描述遇到的问题 在打开jsp文件时,右击选择打开方式中选择dreamweaver,但是却是以firefox打开 初步分析应该是jsp也和firefox进行了关联 ...
- windows获取本地时间_如何在Windows 8中重新获得本地登录
windows获取本地时间 By default a fresh Windows 8 installation prompts you to create a synchronized cloud-e ...
- 《工具癖》Mac与Windows获取文件绝对路径的快捷键
对于开发者而言, 快速获取文件的绝对路径,是一件很提升效率的事情, 一般的做法是,右键... 其实是有快捷键的! Mac获取文件绝对路径 mac的快捷键为: command+option+c Wind ...
最新文章
- 零拷贝 zero-copy 原理
- 【Netty】Netty 核心组件 ( Pipeline | ChannelPipeline )
- Centos 安装 Wireshark
- (75)内核APC执行过程,分析 KiDeliverApc 函数
- selenium webdriver(python)_selenium、webdriver及浏览器的关系及对应版本安装
- [TJOI2018]智力竞赛 (匈牙利)
- java 中for循环中重复定义的变量 为什么不报错?
- int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
- 腾讯云自曝自家技术只值1分钱,这技术以后谁还敢用
- JAVA线程池_并发队列工作笔记0001---认识阻塞队列_非阻塞队列
- JavaScript在一个数组中插入另一个数组
- React:工程化开发
- Python求水仙花数
- 在r中弄方差分析表_R语言 | 方差分析(上)
- 吴晓慧讲述:“随手记安全吗”网贷平台“出清”利好行业发展
- localhost无法访问的问题
- 判断IE版本并给出提示升级浏览器
- OO和PO的最大区别是什么?
- 二维彩虹产品功能更新(H5编辑二维码)
- 计算机通信与网络(一)
热门文章
- 如何创建一个facebook账户
- OSChina 周五乱弹 —— 有一个朝代红薯不能去
- 笔记本的无线网共享给台式机上网
- Ubuntu 16.04下使用Wine安装Windows版的微信(不太完美)
- C++17 关键新特性介绍及代码讲解 (6) — fold expression
- c4d r21中文语言包安装失败怎么办,Windows10系统下语言包安装失败的解决方案
- 东北大学——考研复试——计算机网络——2014年
- BZOJ_1619_[Usaco2008_Nov]_Guarding_the_Farm_保卫牧场_(模拟+bfs)
- 上交计算机考研专业课,2020上海交通大学计算机考研经验,过来人谈考研
- mysql sphinx windows安装_Sphinx在windows下如何安装使用