Нет идеального ответа.При изменении идентификаторов пользователей первоначальный идентификатор пользователя обычно не сохраняется, поэтому информация теряется.Некоторые программы, такие как logname
и who -m
, осуществляют взлом, где они проверяют, какой терминал подключен к stdin
, а затем проверяют, какой пользователь вошел в систему на этом терминале.
Это решение часто работает, но не является надежным и, конечно, не должно считаться безопасным.Например, представьте, если who
выдает следующее:
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
использовал su
для доступа к root и запускает вашу программу.Если STDIN
не перенаправлен, то такая программа, как logname
, выдаст tom
.Если он перенаправлен (например, из файла) следующим образом:
logname < /some/file
, то результатом будет "no login name
", поскольку вход не является терминалом.Тем не менее, еще интереснее то, что пользователь может выдавать себя за другого зарегистрированного пользователя.Так как Джо вошел в систему на pts / 1, Том мог притвориться им, выполнив
logname < /dev/pts1
Теперь он говорит joe
, хотя Том и выполнил команду.Другими словами, если вы используете этот механизм в любой роли безопасности, вы с ума сошли.