Почему 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 (где принято решение) менее выразительно, но также работает, и это поставило меня на путь поиска четкого решения.

  • Запустить скрипт heredoc через su, прикрепленный к текущему tty
  • как написать скрипт, который будет запускать команды после su, без использования -c
  • Два приложения GUI как разные пользователи на одном экране
  • переключиться на пользователя sudo с командой AND не работает
  • Как отключить вывод dd?
  • В OS X, как мне входить в интерактивном режиме с правами root, начиная с обычной учетной записи пользователя?
  • логин с пользователем apache
  • Выполнение некоторых частей скрипта как непривилегированного пользователя с оболочкой
  • One Solution collect form web for “Почему pam_exec.so работает с sudo, а не с su?”

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

    Interesting Posts

    Как получить путь, индекс строки и содержимое строки в оболочке bash?

    найти с несколькими вариантами -exec; redirecting &> / dev / null для одной команды exec отправляет процесс в фоновый режим

    Как удалить строки, включенные в один файл из другого файла в bash?

    Случайный "деаутентификация по местному выбору (Причина: 3 = DEAUTH_LEAVING)"

    Написание простого скрипта rc.d во FreeBSD

    Сеть отключена

    Локальный кеш Nix игнорируется, поскольку в файле информации NAR отсутствует подпись

    Как сделать эти старые графические интерфейсы (например, установщик debian / arch)

    Отдельное имя хоста сервера, отображаемое в журналах cron этого сервера

    Почему Linux не может видеть USB-устройства при запуске?

    Разрешить имя netbios и передать его в mount.cifs в скрипте

    Запуск сценария на Debian 8 (Jessie) с помощью etherwake не будет работать

    Могу ли я запретить использование пространства подкачки для определенного процесса (и его просто убить)?

    соединение шпатлёвки работает, но командная строка ssh отказывается от аутентификации пароля

    Действие крюка при создании процесса

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