import std.sysadmin;
Wrapper für privilegierte Kernel-Operationen: Dateisystem-Einhängen, Chroot, Hostnamen, Sync und Reboot.
Achtung: Fast alle Funktionen erfordernCAP_SYS_ADMIN,CAP_SYS_CHROOToderCAP_SYS_BOOT. Auf normalen Nutzersystemen geben sie-EPERMzurück.
Syscalls: mount(165), umount2(166), chroot(161), sethostname(170), reboot(169), sync(162).
→ std.security_ext · std.ns · std.xattr
| Konstante | Wert | Bedeutung |
|---|---|---|
MS_RDONLY | 1 | Schreibgeschützt einhängen |
MS_NOSUID | 2 | SUID/SGID-Bits ignorieren |
MS_NODEV | 4 | Gerätedateien verbieten |
MS_NOEXEC | 8 | Ausführen verbieten |
MS_SYNCHRONOUS | 16 | Synchrone Schreibvorgänge |
MS_REMOUNT | 32 | Eingehängten Mount neu konfigurieren |
MS_NOATIME | 1024 | Zugriffszeiten nicht aktualisieren |
MS_BIND | 4096 | Bind-Mount (Verzeichnis an anderer Stelle einblenden) |
MS_MOVE | 8192 | Mount verschieben |
MS_REC | 16384 | Rekursiver Bind/Unbind |
MS_SILENT | 32768 | Kernel-Meldungen unterdrücken |
MS_STRICTATIME | 16777216 | Zugriffszeiten immer schreiben |
| Konstante | Wert | Bedeutung |
|---|---|---|
MNT_FORCE | 1 | Erzwingen (kann Datenverlust verursachen) |
MNT_DETACH | 2 | Lazy Unmount (unsichtbar machen, wird später gelöst) |
MNT_EXPIRE | 4 | Für abgelaufene Mounts markieren |
| Konstante | Wert | Beschreibung |
|---|---|---|
LINUX_REBOOT_CMD_RESTART | 0x01234567 | Neustart |
LINUX_REBOOT_CMD_HALT | 0xCDEF0123 | Halt (kein Poweroff) |
LINUX_REBOOT_CMD_POWER_OFF | 0x4321FEDC | Ausschalten |
LINUX_REBOOT_CMD_RESTART2 | 0xA1B2C3D4 | Neustart mit Nachricht |
LINUX_REBOOT_CMD_CAD_ON | 0x89ABCDEF | Ctrl-Alt-Del aktivieren |
LINUX_REBOOT_CMD_CAD_OFF | 0 | Ctrl-Alt-Del deaktivieren |
Die Magic-Zahlen (LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2) werden intern von Reboot() eingesetzt — nicht selbst übergeben.
| Funktion | Signatur | Beschreibung |
|---|---|---|
SyncAll | (): int64 | Schreibt alle gepufferten Daten auf Speichermedien; kein root nötig |
Chroot | (path: pchar): int64 | Setzt Wurzelverzeichnis (erfordert CAP_SYS_CHROOT) |
SetHostname | (name: pchar, len: int64): int64 | Setzt Kernel-Hostname (erfordert CAP_SYS_ADMIN) |
Mount | (source: pchar, target: pchar, fsType: pchar, flags: int64): int64 | Hängt Dateisystem ein |
MountData | (source: pchar, target: pchar, fsType: pchar, flags: int64, data: pchar): int64 | Wie Mount, mit zusätzlichen Mount-Optionen |
Umount | (target: pchar, flags: int64): int64 | Hängt Dateisystem aus |
Reboot | (cmd: int64): int64 | Neustart/Halt/Poweroff (erfordert CAP_SYS_BOOT) |
import std.sysadmin;
fn main(): int64 {
// tmpfs mit max. 100 MB, ohne SUID und ohne Geräte
var r: int64 := MountData("tmpfs", "/tmp/sandbox", "tmpfs",
MS_NOSUID | MS_NODEV,
"size=100m,mode=0755");
if (r < 0) { return r; }
// Aufräumen
Umount("/tmp/sandbox", 0);
return 0;
}
import std.sysadmin;
fn BindMount(src: pchar, dst: pchar): int64 {
return Mount(src, dst, "", MS_BIND);
}
import std.sysadmin;
fn MountProc(): int64 {
return Mount("proc", "/proc", "proc", MS_NOSUID | MS_NODEV | MS_NOEXEC);
}
import std.sysadmin;
fn SafeUmount(path: pchar): int64 {
// Zuerst versuchen
var r: int64 := Umount(path, 0);
if (r = 0) { return 0; }
// Falls beschäftigt: lazy unmount
return Umount(path, MNT_DETACH);
}
import std.sysadmin;
fn Shutdown(): int64 {
SyncAll(); // Erst alle Daten schreiben
return Reboot(LINUX_REBOOT_CMD_POWER_OFF);
}
Reboot sollte immer SyncAll aufgerufen werden.Chroot + ProcessSetNoNewPrivs() + Capability-Dropping (→ std.security_ext).MountData übergibt den data-String direkt an den Kernel. Format ist Dateisystem-spezifisch: tmpfs = size=X,mode=0NNN; ext4 = noatime,data=writeback.Reboot sofort aus — kein Graceful-Shutdown der Prozesse. Vorher SyncAll() und Prozesse beenden.CAP_SYS_ADMIN.Letzte Aktualisierung: 2026-06-06