Il n'y a pas parfait réponse. Lorsque vous changez d'identifiant, l'identifiant d'origine n'est généralement pas conservé, et l'information est donc perdue. Certains programmes, tels que logname
y who -m
mettre en place un hack où ils vérifient quel terminal est connecté à stdin
et vérifiez ensuite 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 que who
produit les résultats suivants :
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 arriver à Root, et exécute votre programme. Si STDIN
n'est pas redirigé, alors un programme comme logname
produira tom
. S'il EST redirigé (par exemple à partir d'un fichier) comme tel :
logname < /some/file
Alors le résultat est " no login name
"puisque l'entrée n'est pas le terminal. Mais ce qui est encore plus intéressant, c'est que l'utilisateur peut se faire passer pour un autre utilisateur connecté. Puisque Joe est connecté sur pts/1, Tom pourrait se faire passer pour lui en exécutant
logname < /dev/pts1
Maintenant, il est dit joe
même si Tom est celui qui a lancé la commande. En d'autres termes, si vous utilisez ce mécanisme dans un quelconque rôle de sécurité, vous êtes fou.