Ist es möglich, den Besitz einer ausführbaren Datei mit sudo auf Root zu ändern?

Ist es möglich, den Besitz einer ausführbaren Datei mit sudo auf Root zu ändern?

Ich habe eine ausführbare Datei, die von meiner Benutzer-ID erstellt wurde und die ich als Root ausführen muss. Daher muss ich den Eigentümer meiner ausführbaren Datei in root:root ändern und setuid verwenden. Wenn ich versuche

sudo chown root:root [EXE_NAME]

Ich erhalte die Fehlermeldung:

chown: changing ownership of `[EXE_NAME]`: Operation not permitted

Meine Einschränkungen sind:

  • Ich habe sudo ALL ALL für meine Benutzer-ID in der sudoers-Datei, kann mich aber nicht als Root anmelden
  • Die ausführbare Datei, die als Root ausgeführt werden muss, versucht, mithilfe der Funktion pcap_open_live im Promiscious-Modus eine Bindung zu einer Netzwerkschnittstelle herzustellen (daher die Notwendigkeit, sie als Root auszuführen).

Gibt es eine bessere Möglichkeit, mein eigentliches Problem zu lösen, nämlich die Notwendigkeit, eine ausführbare Datei auszuführen, die an eine sichere Netzwerkschnittstelle bindet und weder sudo noch die Erstellung einer Root-eigenen Shell erfordert ( sudo tcsh)

Antwort1

Wenn sudoSie tatsächlich die UID 0 erhalten (prüfen Sie dies mit sudo id), vermute ich, dass die Datei auf einem Dateisystem liegt, das keine Berechtigungen unterstützt (z. B. FAT32). Auf einem solchen Dateisystem können Sie den Besitz (oder die Berechtigungen) einer Datei nicht ändern.

Antwort2

Wenn Ihr Dateisystem Eigentumsrechte unterstützt, fallen mir noch drei weitere Gründe ein:

  1. Die Partition wird schreibgeschützt gemountet.

    Versuchen Sie, die Datei umzubenennen oder eine andere Datei im selben Verzeichnis zu erstellen. Wenn das möglich ist, liegt das Problem nicht daran.

  2. Die Datei ist gesperrt.

    Überprüfen Sie, ob das Programm ausgeführt wird. Versuchen Sie, die Datei umzubenennen.

  3. Die Datei wird festgelegt alsnur anhängenoderunveränderlich.

    Um dies zu ändern, führen Sie den folgenden Befehl aus:

    sudo chattr -ai filename
    

Antwort3

Wenn Sie nur ändern müssenEigentum(und nicht den Besitz und die Gruppe), dann können Sie verwenden chown root filename. Mit dem Präfix „sudo“, wenn Sie nicht Root sind.

Wenn Sie die Gruppe ändern möchten, können Sie jederzeit chgrp

(Zugegeben, nicht so schön wie alles in einem einzigen Befehl).

Antwort4

Normale Benutzer können sich auch an eine Netzwerkschnittstelle binden, jedoch nicht an Ports unter 1024. Sie könnten Ihr Programm also an einen Port >= 1024 binden und dann entweder extern oder über auf diesen Port umleiten ssh -fN -L 0.0.0.0:<PRIV_PORT>:localhost:<UNPRIV_PORT>.

Allerdings könnte Ihr Problem auch mit SElinux zusammenhängen, das in RHEL standardmäßig aktiviert ist. Um es zu deaktivieren, legen Sie SELINUX=disabledfest /etc/selinux/config.

verwandte Informationen