mirror of
https://github.com/mii443/izoli.git
synced 2025-08-22 16:05:40 +00:00
add readonly mount
This commit is contained in:
@ -72,29 +72,53 @@ impl IzoliBox {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mounts = [
|
let mounts = [
|
||||||
("tmp", "tmpfs", MsFlags::empty()),
|
("tmp", Some("tmpfs"), MsFlags::empty()),
|
||||||
("proc", "proc", MsFlags::empty()),
|
("proc", Some("proc"), MsFlags::empty()),
|
||||||
("dev", "devtmpfs", MsFlags::empty()),
|
|
||||||
("lib", "/lib", MsFlags::MS_BIND | MsFlags::MS_REC),
|
|
||||||
("usr/lib", "/usr/lib", MsFlags::MS_BIND | MsFlags::MS_REC),
|
|
||||||
("usr/bin", "/usr/bin", MsFlags::MS_BIND | MsFlags::MS_REC),
|
|
||||||
("bin", "/bin", MsFlags::MS_BIND | MsFlags::MS_REC),
|
|
||||||
("lib64", "/lib64", MsFlags::MS_BIND | MsFlags::MS_REC),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
for (target, source, flags) in mounts.iter() {
|
for (target, source, flags) in mounts.iter() {
|
||||||
info!("mounting {} {} {:?}", target, source, flags);
|
info!("mounting {} {:?} {:?}", target, source, flags);
|
||||||
fs::create_dir_all(format!("{}/{}", root, target))?;
|
fs::create_dir_all(format!("{}/{}", root, target))?;
|
||||||
let full_target = format!("{}/{}", root, target);
|
let full_target = format!("{}/{}", root, target);
|
||||||
Self::umount_mount(
|
Self::umount_mount(
|
||||||
Some(source),
|
source.clone(),
|
||||||
&full_target,
|
&full_target,
|
||||||
Some(source),
|
source.clone(),
|
||||||
*flags,
|
*flags,
|
||||||
None::<&str>,
|
None::<&str>,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// readonly monut
|
||||||
|
let mounts = [
|
||||||
|
("bin", "/bin"),
|
||||||
|
("usr/bin", "/usr/bin"),
|
||||||
|
("usr/lib", "/usr/lib"),
|
||||||
|
("lib", "/usr/lib"),
|
||||||
|
("lib64", "/usr/lib64"),
|
||||||
|
];
|
||||||
|
|
||||||
|
for (target, source) in mounts.iter() {
|
||||||
|
let target: &str = &format!("{}/{}", root, target);
|
||||||
|
info!("mounting {} to {} readonly", source, target);
|
||||||
|
fs::create_dir_all(target)?;
|
||||||
|
mount(
|
||||||
|
Some(*source),
|
||||||
|
target,
|
||||||
|
Some("none"),
|
||||||
|
MsFlags::MS_BIND | MsFlags::MS_REC,
|
||||||
|
None::<&str>,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
mount(
|
||||||
|
None::<&str>,
|
||||||
|
target,
|
||||||
|
None::<&str>,
|
||||||
|
MsFlags::MS_BIND | MsFlags::MS_REMOUNT | MsFlags::MS_RDONLY | MsFlags::MS_REC,
|
||||||
|
None::<&str>,
|
||||||
|
)?;
|
||||||
|
}
|
||||||
|
|
||||||
info!("chroot to {}", root);
|
info!("chroot to {}", root);
|
||||||
chroot(&root)?;
|
chroot(&root)?;
|
||||||
set_current_dir("/")?;
|
set_current_dir("/")?;
|
||||||
|
Reference in New Issue
Block a user