Crates.io | caps |
lib.rs | caps |
version | 0.5.5 |
source | src |
created_at | 2017-02-07 05:34:05.100285 |
updated_at | 2022-11-02 09:21:12.20918 |
description | A pure-Rust library to work with Linux capabilities |
homepage | |
repository | https://github.com/lucab/caps-rs |
max_upload_size | |
id | 8419 |
size | 70,385 |
A pure-Rust library to work with Linux capabilities.
caps
provides support for manipulating capabilities available in modern Linux
kernels. It supports traditional POSIX sets (Effective, Inheritable, Permitted)
as well as Linux-specific Ambient and Bounding capabilities sets.
caps
provides a simple and idiomatic interface to handle capabilities on Linux.
See capabilities(7)
for more details.
This library tries to achieve the following goals:
type ExResult<T> = Result<T, Box<dyn std::error::Error + 'static>>;
fn manipulate_caps() -> ExResult<()> {
use caps::{Capability, CapSet};
// Retrieve permitted set.
let cur = caps::read(None, CapSet::Permitted)?;
println!("Current permitted caps: {:?}.", cur);
// Retrieve effective set.
let cur = caps::read(None, CapSet::Effective)?;
println!("Current effective caps: {:?}.", cur);
// Check if CAP_CHOWN is in permitted set.
let perm_chown = caps::has_cap(None, CapSet::Permitted, Capability::CAP_CHOWN)?;
if !perm_chown {
return Err("Try running this as root!".into());
}
// Clear all effective caps.
caps::clear(None, CapSet::Effective)?;
println!("Cleared effective caps.");
let cur = caps::read(None, CapSet::Effective)?;
println!("Current effective caps: {:?}.", cur);
// Since `CAP_CHOWN` is still in permitted, it can be raised again.
caps::raise(None, CapSet::Effective, Capability::CAP_CHOWN)?;
println!("Raised CAP_CHOWN in effective set.");
let cur = caps::read(None, CapSet::Effective)?;
println!("Current effective caps: {:?}.", cur);
Ok(())
}
Some more examples are available under examples.
Licensed under either of
at your option.