Zum Inhalt springen

Perl + User


dosenfutta

Empfohlene Beiträge

hallo zusammen,

kleines problem das ich bisher noch nicht lösen konnte.

ich habe ein skript, welches diverse datenbankmanipulationen vornimmt (mit dbi) dasskript kann und darf nur von root ausgeführt werden.

(der rechner wird nur über ssh administriert, root login an ssh deaktiviert in der sshd_config)

nun mein problem, das skript soll ein logfile schrieben welches mir den eigeloggten user mitloggt. nun die eigentliche frage: wie finde ich raus welcher user das root skript ausgeführt hat. (user welselt zu root mit su, ich benötige den normalen usernamen)

bin für jede erdenktlich art von brainstorming dankbar.

grüsse

dose

Link zu diesem Kommentar
Auf anderen Seiten teilen

nene,

das is die lösung:

who|grep "`ps|grep bash|awk '{print $2}'`"|awk '{print $1}'

warum umstädnlich wenns auch einfach geht

zitat

-----------------------------------------------------------------------------

wieso vergibst du nicht das spezielle Bit (Rechte) Set-User-ID ?? "s" auf das File? Oder warum merkst du dir nicht in einer Variablen wer das Skript ausgeführt hat und anschließend wechselst du zu root??

------------------------------------------------------------------------------

wie ich bereits in meiner fragestellung erläutert habe, darf und kann das skript nur von root ausgeführt werden (rechte 700) - das hat schon seine gründe :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von dosenfutta

nene,

das is die lösung:

who|grep "`ps|grep bash|awk '{print $2}'`"|awk '{print $1}'

das kapier ich nicht ganz - warum denn so umständlich??

Jetzt hast du zwar die aktuelle Shell und damit den Usernamen, aber mit dem kannst du auch nix anfangen wenn du jetzt mit su zu root wechselst und dann das Kommando nochmal ausführst bekommst du wieder root. Du musst doch die Info in irgend einer Variablen erhalten und wenn das so ist, dann kannst du doch auch whoami sagen und dir merken wer du warst bevor du root wurdest. Oder steh ich jetzt auf dem Schlauch??

Link zu diesem Kommentar
Auf anderen Seiten teilen

herr schlaubi,

wechsel doch mal bitte mit su zu root

und führ den reg oben aus ......

was bekommst du - den username mit dem du dich eingeloggt hast und nicht "root" obwohl du root bist. mit whoami bist du root - gibt er dir root aus, bist du user gibt er dir den user aus

wieso soll ich mit mit whoami merken wer ich war? das skritp ist geownt bei root -> kann nur von root ausgeführt werden und das bedeutet ich muss vorher schon root sein bevor ich das skript starte. warum merken ?

naja auf jeden fall ist das problem definitiv gelöst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von palvoelgyi

aber dieser Befehl gibt den normalen User aus.

Frank

Das will er ja auch so - oder etwa nicht??

Original geschrieben von dosenfutta

herr schlaubi,

wechsel doch mal bitte mit su zu root

und führ den reg oben aus ......

was bekommst du - den username mit dem du dich eingeloggt hast und nicht "root" obwohl du root bist. mit whoami bist du root - gibt er dir root aus, bist du user gibt er dir den user aus

wieso soll ich mit mit whoami merken wer ich war? das skritp ist geownt bei root -> kann nur von root ausgeführt werden und das bedeutet ich muss vorher schon root sein bevor ich das skript starte. warum merken ?

naja auf jeden fall ist das problem definitiv gelöst.

Also ich muss absolut auf dem Schlauch stehen, ich kapier es nicht - also erklärs mir mal bitte....

Es ist doch so:

root@home:~> su

root@localhost's password:

Last login: Sat Oct 11 14:58:53 2003 from localhost

Have a lot of fun...

home:~#

und dann:

home:~# who|grep "`ps|grep bash|awk '{print $2}'`"|awk '{print $1}'

root

home:~#

Und wo hilft dir jetzt der Befehl bei deinem Problem:

Original geschrieben von dosenfutta

wie finde ich raus welcher user das root skript ausgeführt hat. (user welselt zu root mit su, ich benötige den normalen usernamen)

Also wenn ich falsch liege dann sorry, aber ich kann auch nix anderes machen, als deine Kommandos einzugeben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

naja, wenn Du als User "root" ein "su" nach "root" durchführst, liefert das Kommando natürlich auch "root" zurück ;).

Das Skript sucht sich das Pseudo-TTY Deiner Shell und ermittelt dazu den entsprechenden User aus den login-records (utmp) mittels "who". Funktionieren tut dies allerdings nur unter bestimmten Voraussetzungen. So muss beispielsweise auch die bash laufen, ist dies nicht der Fall (weil der Nutzer nach dem "su" in eine andere Shell wechselt), schlägt das Kommando fehl.

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von nic_power

Hallo,

naja, wenn Du als User "root" ein "su" nach "root" durchführst, liefert das Kommando natürlich auch "root" zurück ;).

Sorry das war nur ein Schreibfehler weil ich nicht den Hostnamen posten wollte und da hab ich ausversehen statt nem user, root hingebastelt.

Ich habs nochmal getestet und es ist so:

user@home:~> su

user@localhost's password:

Last login: Sat Oct 11 14:58:53 2003 from localhost

Have a lot of fun...

home:~#

und dann:

home:~# who|grep "`ps|grep bash|awk '{print $2}'`"|awk '{print $1}'

root

home:~#

Und es kommt immernoch root raus ;)

Ich hab auch als root die Bash in Benutzung -> bash2.0.5

Original geschrieben von nic_power

Das Skript sucht sich das Pseudo-TTY Deiner Shell und ermittelt dazu den entsprechenden User aus den login-records (utmp) mittels "who". Funktionieren tut dies allerdings nur unter bestimmten Voraussetzungen. So muss beispielsweise auch die bash laufen, ist dies nicht der Fall (weil der Nutzer nach dem "su" in eine andere Shell wechselt), schlägt das Kommando fehl.

Nic

Wenn das Kommando solche Nebenwirkungen hat, würde ich es garnicht erst verwenden, weil das Skript überhaupt nicht portable wäre.

Trotzdem weiß ich immernoch nicht, woran es bei mir liegt, dass wenn ich das Kommando als root ausführe (vorher mit su zu root gewechselt) nicht einen Usernamen sondern root angezeigt bekomme.

Ich bin aber immernoch der Meinung, dass dieses Kommando nicht funktionieren kann (bzw. dass ein user angezeigt wird).

Ersichtlich wird dies, wenn man es mal aufdröselt:

who             # Es wird nachgesehen, wer eingeloggt ist

dann wird gegrept und zwar z.B. nach: pts/16 diese Ausgabe wird durch den awk gefiltert, so dass nur $1 ausgegeben wird:
who | grep pts/16 | awk '{print $1}'

und der user der herauskommt ist der user, dem das pseudo tty gerade zugesprochen ist, bei mir, nachdem ich auf dem selben tty als root eingeloggt bin eben root.

Also müsste man sich mal das ps-Kommando ansehen:

Nachdem man sich mit su eingeloggt hat wird von pts/16 auf pts/17 erhöht.

Aber das kannst du mit deinem Kommando nicht abfangen (du möchtest ja den User von pts/16) weil du ja wieder nach pts/17 suchst also user root.

Also ich gebs langsam auf.....du meinst dein Kommando funzt ich bin nicht überzeugt, what shells ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann scheint das nur bei Dir nicht zu funktionieren.

SSH Verbindung herstellen mit User frank

frank@server: who

frank pts/0 Oct 12 15:33

frank@server: su root

frank@server: whoami

root

frank@server: who

frank pts/0 Oct 12 15:33

frank@server: who|grep "`ps|grep bash|awk '{print $2}'`"|awk '{print $1}'

frank

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von palvoelgyi

Dann scheint das nur bei Dir nicht zu funktionieren.

SSH Verbindung herstellen mit User frank

frank@server: who

frank pts/0 Oct 12 15:33

frank@server: su root

frank@server: whoami

root

frank@server: who

frank pts/0 Oct 12 15:33

frank@server: who|grep "`ps|grep bash|awk '{print $2}'`"|awk '{print $1}'

frank

Frank

ich schließe mich ganz und gar dem an :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...