Protokollbefehl als anderer Benutzer ausführen

756
rupert160

Ich bin verwirrt, warum ich Probleme habe, einen History-Befehl als einen anderen Benutzer auszuführen, um die gesamte Benutzerhistorie zurückzugeben. Ich muss alle Benutzer durchlaufen und deren Verlauf abrufen

cat /etc/passwd | awk -F: '' > $.users.txt while read username; do echo $username sudo -u $username bash -c 'export HISTTIMEFORMAT="%F %T "; history' >../log/$.hist #sudo -u $username bash -c 'export HISTTIMEFORMAT="%F %T "; history' done < ./$.users.txt 

Ich bekomme keine Verlaufsausgabe, wenn ich renne: sudo -u anotheruser history

Ich habe versucht, Fehler zu beheben: sudo -u anotheruser bash -c 'which history'

Auch ich lief: sudo find / -name 'history' -type f

und ich bekomme keine ausführbare Datei zurück.

Kann mir jemand sagen, warum ein Sudo-Befehl nicht von einem anderen Benutzer ausgeführt werden kann?

0

1 Antwort auf die Frage

1
dave_thompson_085

(1) historyist ein Shell-Builtin; Es gibt keine ausführbare Datei

(2) bash -cmacht nicht bashinteraktiv und nicht interaktive Shells verwenden keine Historie. Dies ist nicht sehr gut dokumentiert, aber ich brauche beides -iund set -o historyum Geschichte in eine Shell zu bringen -c:

bash -ic 'set -o history; history' 

(Getestet in 4.1.2 (1) unter RedHat und 4.3.11 (1) unter Ubuntu)

(3) Zeitstempel werden standardmäßig nicht in die Protokolldatei geschrieben. Wenn Sie also nicht (zuvor) HISTTIMEFORMATIhre Benutzer ( erzwungen) festgelegt haben oder (zuvor) absichtlich festgelegt haben, werden (alle) Zeilen / Einträge aus der Protokolldatei gelesen haben die aktuelle Uhrzeit

(4) sudoändert die Benutzer-ID und die Gruppen-ID, jedoch nicht den Rest der Umgebung, so dass Ihr Befehl nach der Protokolldatei des Benutzers sucht, der sie ausführt, nicht nach der in $username; hinzufügen-i

(5) Es ist möglicherweise einfacher, nur zu lesen $5/.bash_history- zumindest für Benutzer-IDs, die bash ausführen und über ein Home-Verzeichnis verfügen

Ein zweiter Benutzer hat seine Geschichte nicht mit einem Zeitstempel versehen, bis ich 'set -o history' ausgeführt habe. Mir ist aufgefallen, dass die Daten oberhalb des Befehls in der .bash_history-Datei codiert sind, ohne dass 'set -o history' ausgegeben wird. Für meinen Benutzer in Ubuntu 14.04 scheint es, dass er automatisch mit einem Zeitstempel versehen wird (aber wie Sie sagen, ich brauche HISTTIMEFORMAT.) Zeitstempel anzeigen). Unterschiede zwischen den Distros vielleicht? rupert160 vor 7 Jahren 0
@ rupert160 HISTIMEFORMAT ist erforderlich, um entweder Zeitstempel anzuzeigen oder _write_ in die Datei zu schreiben. "set -o history" ist zumindest für mich erforderlich, um die nicht interaktive Shell zu _read_ der Datei zu bringen; ohne dass er keine Vergangenheit mit oder ohne Zeitstempel anzeigen kann. dave_thompson_085 vor 7 Jahren 1