Самый надежный способ идентифицировать текущего пользователя через sudo - PullRequest
3 голосов
/ 06 февраля 2010

У меня есть приложение, которое может запускаться или не запускаться, пока пользователи попадают в общую учетную запись пользователя. Я хотел бы достоверно определить, кто является настоящим пользователем для своего рода ACL «системы чести». Я думаю, что есть какой-то способ, отслеживая родительский / групповой / сеансовый процесс, идентифицируя способ, которым делает команда pstree, но я не уверен, как это сделать лучше или есть лучшие альтернативы.

Я пытался getlogin() изначально. Это работает, если используется ./myapp, но не с помощью 'cat input | . / myapp` (потому что «управляющий терминал» - это канал, принадлежащий общей учетной записи).

Я бы предпочел не доверять переменным среды, поскольку я не хочу, чтобы моя "система чести" была полностью разрушена просто unset, когда информация все еще доступна в другом месте.

Я также хотел бы избежать принудительного поиска в базе данных паролей, поскольку это удаленный RPC (NIS или LDAP), и я почти уверен, что wtmp уже содержит информацию, которая мне нужна.

Ответы [ 3 ]

2 голосов
/ 06 февраля 2010

Для сценария оболочки вы можете использовать это, чтобы получить пользователя sudo'ing:

WHO=$(who am i | sed -e 's/ .*//'`)

и извлеките идентификатор из логина, используя:

ID_WHO=$(id -u $WHO)

Я выведу эквивалент библиотеки C позже.

1 голос
/ 11 сентября 2012

Как насчет:

#!/usr/bin/ksh
username=`id | cut -d"=" -f2 | cut -d" " -f1`

if [ $username == "0(root)" ]
then
  print "Yes, the user is root"
else
 print "Sorry! the user $username, is not a root"
fi
1 голос
/ 06 февраля 2010

sudo устанавливает переменные окружения SUDO_USER, SUDO_UID и SUDO_GID.

Вы можете проверить это с помощью:

$ sudo env
[sudo] password for shteef: 
TERM=xterm
# [...snip...]
SHELL=/bin/bash
LOGNAME=root
USER=root
USERNAME=root
SUDO_COMMAND=/usr/bin/env
SUDO_USER=shteef
SUDO_UID=1000
SUDO_GID=1000

Но если у ваших пользователей есть доступ к общедоступной оболочке, то я полагаю, что вы также не можете слепо доверять этому.

...