// On disposal, cease to be root. public void Dispose() { setreuid(this.previousUid, this.previousUid); setregid(this.previousGid, this.previousGid); this.previousUid = 0; this.previousGid = 0; }
// Revert from root. private static void Unrootify() { // if (previousUid == 0) // throw new InvalidOperationException("Cannot unrootify unroot."); setreuid(previousUid, previousUid); setregid(previousGid, previousGid); previousUid = 0; previousGid = 0; }
// Become root. internal RootPrivilege() { this.previousUid = getuid(); this.previousGid = getgid(); setreuid(0, 0); setregid(0, 0); this.IsRoot = true; }
// Become root. internal RootPrivilege() { if (getuid() == 0) { throw new InvalidOperationException("Cannot rootify root."); } this.previousUid = getuid(); this.previousGid = getgid(); setreuid(0, 0); setregid(0, 0); }
// Become root. private static void Rootify() { if (previousUid != 0) { throw new InvalidOperationException("Cannot rootify root."); } previousUid = getuid(); previousGid = getgid(); setreuid(0, 0); setregid(0, 0); // Console.WriteLine ($"uid={getuid()} gid={getgid()} euid={geteuid()} egid={getegid()}"); }
public static extern int fchownat(int dirfd, byte *path, uid_t owner, gid_t group, int flags);
public static extern int lchown(byte *path, uid_t owner, gid_t group);
public static extern int fchown(int fd, uid_t owner, gid_t group);
public static extern int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
public static extern int setegid(gid_t gid);