Откуда sudo берет имя текущего пользователя, вошедшего в систему?

Откуда sudo берет имя текущего пользователя, вошедшего в систему?

Когда я попытался выполнить «sudo su» вместо «sudo su -» после входа в систему как root и выполнения su-команды для другого пользователя, система попыталась выполнить sudo для меня как для нового пользователя, но через root...

Когда я набираю env, он все еще показывает username=root в среде. Разве sudo не смотрит на текущего вошедшего в систему пользователя, а на параметры среды?

[oracle@tst-01]$ sudo su grid
Sorry, user oracle is not allowed to execute '/bin/su grid' as root on tst-01.testdomain.com.
[oracle@tst-01]$ env
HOSTNAME=tst-01.testdomain.com
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
QTDIR=/usr/lib64/qt-3.3
USER=oracle
SUDO_USER=ujjain
USERNAME=root
MAIL=/var/spool/mail/ujjain
PATH=/usr/lib/oracle/10.2.0.4/client64/bin:/usr/lib/oracle/10.2.0.4/client64/bin:/sbin:/bin:/usr/sbin:/usr/bin
PWD=/home/ujjain
LANG=en_US.utf8
HOME=/opt/apps/oracle
SUDO_COMMAND=/bin/su
SHLVL=2
LOGNAME=oracle
CVS_RSH=ssh
LESSOPEN=|/usr/bin/lesspipe.sh %s
SUDO_GID=3000
ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client64
G_BROKEN_FILENAMES=1
_=/bin/env
[oracle@tst-01 ujjain]$ sudo su - grid
[grid@tst-01 ~]$ 

Кажется, что sudo su newuser также должно работать, если sudo будет искать только то, имеет ли текущий вошедший в систему пользователь права sudo для sudo для нового пользователя. Что делает sudo su и почему для пользователей без прав root важно использовать sudo su - newuser с дефисом?

решение1

В su - username, дефис означает, что среда пользователя реплицируется, т. е. оболочка по умолчанию и рабочий каталог считываются из /etc/passwd, а любые файлы конфигурации входа для пользователя (например ~/.profile) берутся из источника. Короче говоря, вы получаете практически ту же среду, как если бы вы вошли в систему обычным образом. (Хотя новый пользователь может не владеть терминалом, что приведет к сбою таких программ, как screen.)

Если не использовать дефис, то вы более или менее сохраните среду пользователя, вызвавшего su, в том числе останетесь в том же рабочем каталоге, к которому у вас может не быть прав доступа.

suне будет запрашивать пароль, если его вызвал пользователь root, поэтому, если вы сначала использовали sudo(или su), чтобы стать пользователем root, вам не понадобится пароль, чтобы стать любым другим пользователем.

Связанный контент