访问控制列表(ACL)是微软Windows安全模型的核心组成部分。除了控制对安全资源的访问外,ACL还用于沙箱隔离、事件审计和指定强制完整性级别。然而以编程方式操作ACL(特别是在Rust中)极其困难。
Windows包含两种ACL类型:
修改现有ACL需要创建新ACL。删除操作相对简单,只需复制除目标条目外的所有现有条目。但对于DACL的插入操作更为复杂:
以appjaillauncher-rs项目为例,该工具使用AppContainers沙箱化Windows应用。通过windows-acl库:
添加DACL允许条目:
match ACL::from_file_path(string_path, false) {
Ok(mut acl) => {
let sid = string_to_sid(string_sid).unwrap_or(Vec::new());
if sid.capacity() == 0 {
return false;
}
acl.remove(
sid.as_ptr() as PSID,
Some(AceType::AccessAllow), None
).unwrap_or(0);
if !acl.allow(sid.as_ptr() as PSID, true, mask).unwrap_or_else(|code| {
false
}) {
return false;
}
},
...
}
删除DACL允许条目:
match ACL::from_file_path(string_path, false) {
Ok(mut acl) => {
let sid = string_to_sid(string_sid).unwrap_or(Vec::new());
if sid.capacity() == 0 {
return false;
}
let result = acl.remove(
sid.as_ptr() as PSID,
Some(AceType::AccessAllow),
None);
if result.is_err() {
return false;
}
},
...
}
windows-acl为Rust开发Windows安全工具开辟了新可能:
我们期待这个工作能促进Windows Rust开发者社区的发展,并激励更多基于Rust的安全工具诞生!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。