GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovi l'utente originale attraverso più comandi sudo e su?

Non esiste un perfetto Rispondere. Quando si modificano gli ID utente, l'ID utente originale non viene in genere conservato, quindi le informazioni vengono perse. Alcuni programmi, come logname e who -m implementano un hack dove controllano quale terminale è connesso a stdin , quindi controlla quale utente ha effettuato l'accesso su quel terminale.

Questa soluzione spesso funziona, ma non è infallibile e certamente non dovrebbe essere considerato sicuro. Ad esempio, immagina se who emette quanto segue:

tom     pts/0        2011-07-03 19:18 (1.2.3.4)
joe     pts/1        2011-07-03 19:10 (5.6.7.8)

tom usato su per accedere a root ed esegue il programma. Se STDIN non viene reindirizzato, allora un programma come logname produrrà tom . Se viene reindirizzato (ad esempio da un file) in questo modo:

logname < /some/file

Quindi il risultato è "no login name ", poiché l'input non è il terminale. Ancora più interessante, tuttavia, è il fatto che l'utente potrebbe fingere di essere un altro utente che ha effettuato l'accesso. Poiché Joe ha effettuato l'accesso su pts/1, Tom potrebbe fingere di essere lui eseguendo

logname < /dev/pts1

Ora dice joe anche se Tom è quello che ha eseguito il comando. In altre parole, se usi questo meccanismo in qualsiasi tipo di ruolo di sicurezza, sei pazzo.


Risultati:

Usa who am i | awk '{print $1}' OPPURE logname poiché nessun altro metodo è garantito.

Accesso effettuato come self:

evan> echo $USER
evan
evan> echo $SUDO_USER

evan> echo $LOGNAME
evan
evan> whoami
evan
evan> who am i | awk '{print $1}'
evan
evan> logname
evan
evan>

sudo normale:

evan> sudo -s
root> echo $USER
root
root> echo $SUDO_USER
evan
root> echo $LOGNAME
root
root> whoami
root
root> who am i | awk '{print $1}'
evan
root> logname
evan
root>

sudo su - :

evan> sudo su -
[root ]# echo $USER
root
[root ]# echo $SUDO_USER

[root ]# echo $LOGNAME
root
[root ]# whoami
root
[root ]# who am i | awk '{print $1}'
evan
[root ]# logname
evan
[root ]#

sudo su -; su tomo :

evan> sudo su -
[root ]# su tom
tom$ echo $USER
tom
tom$ echo $SUDO_USER

tom$ echo $LOGNAME
tom
tom$ whoami
tom
tom$ who am i | awk '{print $1}'
evan
tom$ logname
evan
tom$

Questo è un ksh funzione che ho scritto su HP-UX. Non so come funzionerà con Bash su Linux. L'idea è che il file sudo il processo è in esecuzione come utente originale e i processi figlio sono l'utente di destinazione. Tornando indietro attraverso i processi padre, possiamo trovare l'utente del processo originale.

#
# The options of ps require UNIX_STD=2003.  I am setting it
# in a subshell to avoid having it pollute the parent's namespace.
#
function findUser
{
    thisPID=$$
    origUser=$(whoami)
    thisUser=$origUser
    while [ "$thisUser" = "$origUser" ]
    do
        ( export UNIX_STD=2003; ps -p$thisPID -ouser,ppid,pid,comm ) | grep $thisPID | read thisUser myPPid myPid myComm
        thisPID=$myPPid
    done
    if [ "$thisUser" = "root" ]
    then
        thisUser=$origUser
    fi
    if [ "$#" -gt "0" ]
    then
        echo $origUser--$thisUser--$myComm
    else
        echo $thisUser
    fi
    return 0
}

So che la domanda originale risale a molto tempo fa, ma le persone (come me) lo stanno ancora chiedendo e questo sembrava un buon posto per mettere la soluzione.


Linux
  1. Come impostare i privilegi di Sudo per l'utente in Linux

  2. Perché l'utente root ha bisogno dell'autorizzazione Sudo?

  3. Come trovare il tipo di un file Img e montarlo?

  4. Come si danno su le variabili di ambiente dell'utente corrente

  5. Come si esegue il gunzip di un file e si conserva il file .gz?

Come usare Sudo e il file Sudoers

Che cos'è l'UID in Linux, come trovarlo e modificarlo

Come modificare la password sudo tramite la riga di comando su CentOS 8

Come diventare utente root in Ubuntu Command Line usando su e sudo

Come creare un utente Sudo su Ubuntu e Debian

Come trovare il PID e il PPID di un processo in Linux