GNU/Linux >> Tutoriels Linux >  >> Linux

Comment trouvez-vous l'utilisateur d'origine via plusieurs commandes sudo et su ?

Il n'y a pas de parfait réponse. Lorsque vous modifiez les ID utilisateur, l'ID utilisateur d'origine n'est généralement pas conservé, de sorte que les informations sont perdues. Certains programmes, tels que logname et who -m mettre en œuvre un hack où ils vérifient pour voir quel terminal est connecté à stdin , puis vérifiez quel utilisateur est connecté sur ce terminal.

Cette solution souvent fonctionne, mais n'est pas infaillible et ne doit certainement pas être considéré comme sûr. Par exemple, imaginez si who affiche ce qui suit :

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 utilisé su pour accéder à la racine et exécute votre programme. Si STDIN n'est pas redirigé, alors un programme comme logname affichera tom . S'il EST redirigé (par exemple depuis un fichier) comme suit :

logname < /some/file

Alors le résultat est "no login name ", puisque l'entrée n'est pas le terminal. Plus intéressant encore, cependant, est le fait que l'utilisateur pourrait se faire passer pour un autre utilisateur connecté. Puisque Joe est connecté sur pts/1, Tom pourrait faire semblant d'être lui en exécutant

logname < /dev/pts1

Maintenant, il dit joe même si tom est celui qui a exécuté la commande. En d'autres termes, si vous utilisez ce mécanisme dans n'importe quel type de rôle de sécurité, vous êtes fou.


Résultats :

Utilisez who am i | awk '{print $1}' OU logname car aucune autre méthode n'est garantie.

Connecté en tant que soi :

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

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

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$

Ceci est un ksh fonction que j'ai écrit sur HP-UX. Je ne sais pas comment cela fonctionnera avec Bash sous Linux. L'idée est que le sudo Le processus s'exécute en tant qu'utilisateur d'origine et les processus enfants sont l'utilisateur cible. En revenant sur les processus parents, nous pouvons trouver l'utilisateur du processus d'origine.

#
# 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
}

Je sais que la question initiale date d'il y a longtemps, mais les gens (comme moi) la posent encore et cela semblait être un bon endroit pour mettre la solution.


Linux
  1. Comment configurer les privilèges Sudo pour l'utilisateur sous Linux

  2. Différence entre l'utilisateur Sudo et l'utilisateur root ?

  3. Comment compresser un fichier et conserver le fichier .gz ?

  4. Comment faire pour que sudo demande le mot de passe root ?

  5. Comment les commandes telles que fdisk -l trouvent-elles la taille du secteur ?

Comment utiliser Sudo et le fichier Sudoers

Qu'est-ce que l'UID sous Linux, comment le trouver et le modifier

Comment changer le mot de passe sudo via la ligne de commande sur CentOS 8

Comment devenir utilisateur root dans la ligne de commande Ubuntu en utilisant su et sudo

Comment créer un utilisateur Sudo sur Ubuntu et Debian

Comment trouver le PID et le PPID d'un processus sous Linux