GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann meine C/C++-Anwendung feststellen, ob der Root-Benutzer den Befehl ausführt?

getuid oder geteuid wäre die naheliegende Wahl.

getuid überprüft die Anmeldeinformationen des tatsächlichen Benutzers.

Die hinzugefügte e in geteuid steht für effective . Es überprüft die gültigen Anmeldeinformationen.

Nur zum Beispiel, wenn Sie sudo verwenden Um ein Programm als Root (Superuser) auszuführen, sind Ihre tatsächlichen Anmeldeinformationen immer noch Ihr eigenes Konto, aber Ihre effektiven Anmeldeinformationen sind die des Root-Kontos (oder eines Mitglieds der Wheel-Gruppe usw.)

Betrachten Sie beispielsweise Code wie diesen:

#include <unistd.h>
#include <iostream>

int main() { 
    auto me = getuid();
    auto myprivs = geteuid();


    if (me == myprivs)
        std::cout << "Running as self\n";
    else
        std::cout << "Running as somebody else\n";
}

Wenn Sie dies normal ausführen, getuid() und geteuid() gibt den gleichen Wert zurück, also heißt es "running as self". Wenn Sie sudo ./a.out machen stattdessen getuid() wird weiterhin Ihre Benutzer-ID zurückgeben, aber geteuid() gibt die Anmeldeinformationen für root oder wheel zurück, also heißt es "Als jemand anderes ausgeführt".


Ich würde NICHT empfehlen diese Änderung vornehmen, aber stattdessen Ihre Fehlermeldung verbessern. Es ist zweifelhaft, ob Ihre Anwendung tatsächlich "root" sein muss; Stattdessen benötigt es bestimmte Privilegien, die Root hat, die Betriebssysteme mit fein abgestuften Sicherheitskontrollen der Anwendung jedoch gewähren können, ohne ihr vollen Root-Zugriff zu gewähren. Selbst wenn das jetzt nicht möglich ist, könnte es in 6 Monaten oder 2 Jahren möglich sein, und die Benutzer werden irritiert sein, wenn Ihr Programm sich weigert, auf der Grundlage rückwärts gerichteter Annahmen über das Berechtigungsmodell ausgeführt zu werden, anstatt nur zu überprüfen, ob es erfolgreich funktioniert die privilegierten Operationen, die es benötigt.


#include <unistd.h> // getuid
#include <stdio.h> // printf

int main()
{
    if (getuid()) printf("%s", "You are not root!\n");
    else printf("%s", "OK, you are root.\n");
    return 0;
}

Linux
  1. So entfernen Sie Benutzer in Linux über die Befehlszeile

  2. Wie führe ich einen Befehl als Systemadministrator (root) aus?

  3. So verwenden Sie den id-Befehl unter Linux:5 nützliche Beispiele

  4. Wie können Sie installierte Versionen der glibc-Bibliotheken ermitteln?

  5. Wie kann ich PHP-Code von der Kommandozeile aus ausführen?

So verwenden Sie den usermod-Befehl unter Linux

So werden Sie ein Root-Benutzer in Ubuntu

Wie kann man die Zeichencodierung bestimmen, die ein Terminal in einem C/c++-Programm verwendet?

So verwenden Sie den ulimit-Befehl unter Linux

Wie deaktiviere ich die SSH-Anmeldung für den Root-Benutzer in Linux?

So bestimmen Sie die beste Bytegröße für den Befehl dd