Почему pam_exec.so работает с sudo, а не с su?

Я пытаюсь разрешить root-доступ из обычной пользовательской оболочки на основе успешного выполнения специальной программы, и цель состоит в том, чтобы как su и sudo отвечать на новую конфигурацию PAM. Специальная программа является единственным критерием авторизации.

Конфигурация, которую я пытаюсь использовать в Debian 9 в файле /etc/pam.d/common-auth:

 auth [success=done default=die] pam_exec.so seteuid /usr/bin/whoami 

… где whoami – это программа, которая возвращает успешный статус в качестве заполнителя для специальной программы. Остальная часть файла common-auth закомментирована.

Файл /etc/pam.d/su имеет:

 auth sufficient pam_rootok.so session required pam_env.so readenv=1 session required pam_env.so readenv=1 envfile=/etc/default/locale session optional pam_mail.so nopen session required pam_limits.so @include common-auth @include common-account @include common-session 

В результате sudo будет авторизовано, но su не будет:

 $ su su: Permission denied 

(Те же результаты на Fedora 25 с использованием файла system-auth: sudo works и su нет.)

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


Просматривая / var / log / messages, это регистрируется при попытке su :

 Mar 18 08:46:39 localhost kernel: [ 61.622184] audit: type=1100 audit(1489841199.166:114): pid=1107 uid=1000 auid=1000 ses=1 msg='op=PAM:authentication acct="root" exe="/bin/su" hostname=? addr=? terminal=/dev/pts/0 res=success' Mar 18 08:46:39 localhost kernel: [ 61.622480] audit: type=1101 audit(1489841199.166:115): pid=1107 uid=1000 auid=1000 ses=1 msg='op=PAM:accounting acct="root" exe="/bin/su" hostname=? addr=? terminal=/dev/pts/0 res=success' Mar 18 08:46:39 localhost kernel: [ 61.623224] audit: type=1103 audit(1489841199.167:116): pid=1107 uid=1000 auid=1000 ses=1 msg='op=PAM:setcred acct="root" exe="/bin/su" hostname=? addr=? terminal=/dev/pts/0 res=failed' 

Для сравнения, вот что происходит с sudo :

 Mar 18 08:47:00 localhost kernel: [ 82.750720] audit: type=1123 audit(1489841220.294:117): pid=1110 uid=1000 auid=1000 ses=1 msg='cwd="/home/user" cmd=67726570202D69206175646974202F7661722F6C6F672F6D65737361676573 terminal=pts/0 res=success' Mar 18 08:47:00 localhost kernel: [ 82.751369] audit: type=1110 audit(1489841220.295:118): pid=1110 uid=0 auid=1000 ses=1 msg='op=PAM:setcred acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/0 res=failed' Mar 18 08:47:00 localhost kernel: [ 82.751814] audit: type=1105 audit(1489841220.295:119): pid=1110 uid=0 auid=1000 ses=1 msg='op=PAM:session_open acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/0 res=success' 


ОБНОВИТЬ

Я пришел к решению, отражающему способ решения Debian этой проблемы, который получает твердую уверенность в успехе или неудачу, несмотря на различные команды, которые аутентифицируются в разных контекстах, как отметил @hildred. Во-первых, я расскажу о соответствующих строках из общей версии auth по умолчанию Debian:

 auth [success=1 default=ignore] pam_unix.so nullok_secure auth requisite pam_deny.so auth required pam_permit.so 

И вот замена, в которой используется запрос Qubes auth:

 auth [success=1 default=ignore] pam_exec.so seteuid /usr/lib/qubes/qrexec-client-vm dom0 qubes.VMAuth /bin/grep -q ^1$ auth requisite pam_deny.so auth required pam_permit.so 

Это «пропускает один», чтобы разрешать только на успех, иначе отрицать.

Предложение @hildred «перфорировать» стек с линией pam_permit до строки pam_exec (где принято решение) менее выразительно, но также работает, и это поставило меня на путь поиска четкого решения.

  • Есть ли разница между sudo su-root и sudo -u root -H / bin / bash?
  • Может sudo заменить su?
  • SSH с su и удаленной командой с использованием -c и запуска нескольких команд с параметрами
  • Установка umask для su root
  • root не может подключиться к symlinked socket другого пользователя
  • Confused для пользователя и su в linux
  • Разница между «xhost +» и «xhost + SI: localuser: AnotherUser»
  • Как войти в систему как root из Bash и делать что-то
  • One Solution collect form web for “Почему pam_exec.so работает с sudo, а не с su?”

    Есть две проблемы, которые я вижу прямо с места в карьер (кроме попыток экспериментальных конфигураций pam для общего, а не только одного сервиса) заключается в том, что su всегда аутентифицируется как root, тогда как sudo обычно аутентифицируется как пользователь, а su имеет достаточную строку авторизации, и вы используете нотации в общем файле. Нотация скобок не всегда устанавливает ваше состояние успеха. Это можно исправить, добавив auth, чтобы разрешить линию до exec или отбрасывать нотацию в скобках, так как для вашего варианта использования она не нужна или также использует нотацию с кронштейнами в строке корня ok, так что при отсутствии достаточного теста не будет установлен отрицательный успех ,

    Linux и Unix - лучшая ОС в мире.