eseguendo il comando history come altro utente


0

Sono confuso sul motivo per cui sto riscontrando problemi nell'esecuzione di un comando di cronologia come un altro utente per restituire tutta la cronologia di quell'utente - Devo eseguire il ciclo tra tutti gli utenti e ottenere la loro cronologia

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

Non ottengo alcun output cronologico quando eseguo: sudo -u anotheruser history

per risolvere ho provato: sudo -u anotheruser bash -c 'which history'

Inoltre ho corso: sudo find / -name 'history' -type f

e non ottengo alcun eseguibile restituito.

Qualcuno può dirmi perché un comando sudo non può essere eseguito da un altro utente?

Risposte:


1

(1) historyè una shell incorporata; non c'è eseguibile

(2) bash -crende le bashshell non interattive e non interattive non usano la cronologia. Questo non è ben documentato, ma ho bisogno di entrambi -ie set -o historydi inserire la cronologia in una shell con -c:

bash -ic 'set -o history; history'

(Testato in 4.1.2 (1) su RedHat e 4.3.11 (1) su Ubuntu)

(3) i timestamp non sono scritti nel file della cronologia per impostazione predefinita, quindi a meno che tu non abbia (precedentemente) impostato / forzato HISTTIMEFORMATper i tuoi utenti o che tu non abbia (precedentemente) deliberatamente impostato, le righe / voci lette dal file della cronologia saranno (tutte ) hanno l'ora corrente

(4) sudocambia userid e groupid ma non il resto dell'ambiente, quindi il tuo comando cercherà il file di cronologia dell'utente che lo esegue, non quello in $username; Inserisci-i

(5) Potrebbe essere più semplice da leggere $5/.bash_history- almeno per gli userid che eseguono bash e hanno una home directory, che gli userid di sistema per lo più non


Un secondo utente non ha ottenuto il timestamp della cronologia fino a quando non ho eseguito 'set -o history'. Ho notato che i dati sono codificati sopra il comando all'interno del mio file .bash_history senza emettere 'set -o history', quindi per il mio utente in Ubuntu 14.04 sembra essere configurato automaticamente con cronologia con data e ora (ma come dici tu ho bisogno di HISTTIMEFORMAT per mostra il timestamp). Differenze tra distro forse?
rupert160,

1
@ rupert160 HISTIMEFORMAT è necessario per visualizzare i timestamp o per scriverli nel file. set -o historyè almeno per me necessario per ottenere la shell non interattiva per leggere il file; senza che non abbia alcuna storia passata da visualizzare con o senza timestamp.
dave_thompson_085,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.