Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

Original geschrieben von palvoelgyi

Das wäre eher eine Frage fürs Linuxforum.

Jep, hast recht, ich schiebs mal rüber....

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??

preUser="$(whoami)";

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 :)

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??

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.

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.

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

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 ;)

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

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 :)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.