Ist es möglich, ein Programm als bestimmten Benutzer auszuführen, jedoch mit Root-Berechtigungen?

2178
Sohcahtoa82

Ich entwickle zusammen mit PyCharm, entwickle ein Skript, das das Scapy-Modul für Python verwendet, um Port-Scans durchzuführen, Datenverkehr zu erfassen und Rohpakete zu erstellen. Dies erfordert natürlich root-Berechtigungen, und daher führe ich PyCharm als root aus (Ja, ich bin mir der Sicherheitsprobleme bewusst).

Das Problem ist, wenn PyCharm den Firmenlizenzserver kontaktiert, übermittelt es den aktuellen Benutzernamen, der natürlich "root" wird, und der Lizenzserver lehnt meine Anfrage ab. Wenn ich PyCharm nicht als root starte, übermittelt es meinen tatsächlichen Benutzernamen und erhält erfolgreich eine Lizenz. Ich kann mein Skript jedoch nicht ausführen, da es Rootberechtigungen benötigt, um die entsprechenden Aktionen auszuführen.

Gibt es eine Möglichkeit, PyCharm zum Laufen zu bringen und meinen tatsächlichen Benutzernamen an den Lizenzserver zu senden, aber dann über Root-Berechtigungen verfügen, ohne mein Konto nur bearbeiten zu müssen, um mir Root-Berechtigungen zu erteilen?

2

4 Antworten auf die Frage

0
HalosGhost

Ich stelle mir vor, dafür sudowäre das perfekt. Zum schnellen Test:

$ echo $USER halosghost $ sudo echo $USER [sudo] password for halosghost: halosghost 

Das heißt, ich habe die Berechtigungen erhöht, aber die Identität meines Benutzers beibehalten. Die -EFlagge kann auch besonders nützlich sein. Dadurch wird sichergestellt, dass die Umgebungsvariablen während der Ausführung beibehalten werden.

Ich habe vorher Sudo benutzt und es hat nicht funktioniert. PyCharm wurde gestartet, konnte jedoch keine Lizenz vom Server erhalten. Ich habe es jetzt gemacht und es hat funktioniert. Es kann erwähnenswert sein, dass bei "sudo echo $ USER" mein Benutzername und nicht "root" angezeigt wird. "Sudo whoami" sagt mir, dass ich root bin. BEARBEITEN: Ich frage mich, ob jemand im Unternehmen PyCharm als Root verwendet und meine Lizenzanfrage fehlgeschlagen ist, da bereits ein anderer Benutzer die Lizenz mit "root" als Benutzernamen hatte. Ich weiß nicht genau, wie die Floating-Lizenzen von PyCharm funktionieren. Sohcahtoa82 vor 9 Jahren 0
Es ist hilfreich zu wissen, wie PyCharm Ihren Benutzernamen erkennt. HalosGhost vor 9 Jahren 0
In der Tat würde es. In PyCharm habe ich eine Python-Konsole geöffnet und zur Überprüfung von Umgebungsvariablen verwendet. LOGNAME, USERNAME und USER sind alle "root". SUDO_USER ist natürlich mein tatsächlicher Benutzername. Wenn ich os.system ('echo $ USER') an dieser Eingabeaufforderung ausführe, wird mir mitgeteilt, dass ich root bin. Es sieht also so aus, als würde es wahrscheinlich immer noch dem Lizenzserver sagen, dass ich root bin. Der Server hat sich gerade entschieden, mir diesmal aus irgendeinem Grund eine Lizenz zu geben. Sohcahtoa82 vor 9 Jahren 0
Der Grund, warum Sie die Ergebnisse sehen, die Sie sehen, ist, dass die Shell Umgebungsvariablen * erweitert *, bevor * sie an den Befehl übergeben werden. Da Sie sudo verwenden, kann die Shell das Echo Builtin nicht verwenden (für die Shell ist das Echo nur ein weiterer Parameter für sudo). Die Shell erweitert also "$ USER" zu "halosghost" (Ihr Benutzername) und führt dann "sudo" mit den Parametern "echo" und "halosghost" aus. "Sudo" legt den Sicherheitskontext fest und führt dann "echo" mit dem Parameter "halosghost" aus. Glückwunsch, Sie liefen (höchstwahrscheinlich) `/ bin / echo` als root. a CVn vor 8 Jahren 0
0
wjv

Wie wäre es, PyCharm auf Ihrem lokalen Computer als sich selbst auszuführen und Ihre Entwicklung in einem Container durchzuführen, wie z. B. von Vagrant (nativ unterstützt in PyCharm) oder Docker (unterstützt über Plugin)?

0
Orrin Stimpson

Das hat für mich funktioniert ( http://esmithy.net/2015/05/05/rundebug-as-root-in-pycharm/ ). Sie erstellen im Wesentlichen einen anderen Interpreter für Python, ein Shell-Skript, das Python mit Sudo aufruft. Wenn es um das Erstellen einer Sudoers-Datei (/etc/sudoers.d/python) geht, musste ich die Zeile hinzufügen Defaults!/usr/bin/python2.7 !requiretty, um die Ausführung ohne tty zu ermöglichen.

0
Devin R

Drei Jahre zu spät zur Party, aber der Standardbefehl von Linux (und BSD und MacOS) lognamehätte das gewünschte Ergebnis.

My-Mac:~ devin$ logname devin My-Mac:~ devin$ sudo logname devin My-Mac:~ devin$ sudo su - My-Mac:~ root# echo $USER root My-Mac:~ root# logname devin 

Ich glaube, lognamedie tty des Startvorgangs betrachtet, also bin ich nicht sicher, ob dies für ein völlig kopfloses Programm (z. B. eines, das beim Start läuft) funktionieren würde. Es funktioniert, wenn Sie das Programm über nohup starten und trennen.

My-Mac:~ root# nohup logname appending output to nohup.out My-Mac:~ root# cat nohup.out devin