Как проверить правильную настройку пароля без пароля от userA к userB, из сеанса userB

Резюме

Существует ли неинтерактивный (без присмотра, не требующий ncurses-based control terminal) метод, чтобы проверить правильность настройки sudo, чтобы разрешить пароль без sudo'ing из одной учетной записи пользователя, отличного от root, другому?

Зачем

У меня есть сценарий, когда некоторая обработка должна выполняться с другой учетной записью пользователя, но выполнение должно выполняться без какого-либо вмешательства пользователя, поскольку не будет доступного терминала управления (например, из фонового процесса).

  • Переменная HOST в / etc / sudoers
  • Почему мои серверы не могут разговаривать друг с другом по прямому подключению Ethernet?
  • Настройка шрифта программирования в RHEL 5 + gvim
  • RHEL6 Не удается запустить мой скрипт при завершении работы и перезагрузке
  • Расширение XFS parititon (xfs_growfs)
  • Написать в файл без перенаправления?
  • Детали

    Это работает под Linux (в частности, RHEL 5 или RHEL 6 или грубые эквивалентные машины CentOS). Для этого вопроса нет других операционных систем или вариантов Linux.

    Для обсуждения предположим, что есть две учетные записи пользователей: userA и userB.

    Мне нужен метод проверки того, что можно сделать sudo без пароля от userA к userB, все из учетной записи userB.

    Команды, выполняемые в учетной записи userB внутри этого sudo-вызова, будут выполняться для таких задач, как запуск программ пользовательского пространства (например, не выполнение команд администрирования системы, таких как fdisk ).

    Ключевым ограничением здесь является то, что метод должен быть выполнен из учетной записи userB, а не учетной записи пользователя, в фоновом процессе без терминала управления.

    Этот метод должен быть реализован в сценарии Bash с помощью sed / awk / etc. команды для проверки файлов.

    Системный администратор не должен участвовать в этом методе (например, не требуются скрипты setuid).

    Это возможно? Если да, то как?

    Исследование

    Считайте, что файл sudoers может быть трудно разобрать. Рассмотрение аналогичного вопроса в разделе Как запустить определенную программу как root без запроса пароля? неясно, как скрипт без полномочий root может проверять содержимое файла sudoers, не используя какой-либо интерактивный механизм, такой как visudo которого требуется терминал с поддержкой ncurses, который не является вариантом.

    Кроме того, https://unix.stackexchange.com/a/260739/21372 указывает правильный синтаксис для sudo без пароля от userA к userB, но мой вопрос здесь, вероятно, просто сводится к тому, как видеть эту конфигурацию без запуска приложения с ограниченным ncurses как visudo , но я не уверен, что это так просто.

  • Каков самый простой способ установить Meld на RedHat Linux RHEL 5.4?
  • Как установить libgdiplus на CentOS 7?
  • Узлы виртуальной машины Fencing
  • Настройки GSettings / DConf не сохраняются постоянно
  • Команда git не найдена
  • Используйте настольные динамики через SSH с ноутбука
  • 2 Solutions collect form web for “Как проверить правильную настройку пароля без пароля от userA к userB, из сеанса userB”

    Вы не можете этого сделать, анализируя файлы конфигурации sudo, поскольку конфигурация sudo доступна только для чтения. Даже если вы можете прочитать конфигурацию sudo, трудно разобрать ее достоверно (особенно для обработки нелокальной информации, такой как базы данных LDAP), и она не сообщает всю историю (например, разрешение может быть передано через группу).

    Единственная реалистичная проверка заключается в том, чтобы запустить sudo как пользователь A. Так как вам нужно сделать эту проверку из скрипта, работающего как пользователь B, вам понадобится способ для пользователя B запустить проверку как пользователь A. Либо написать небольшую программу ( а не сценарий, который является setuid A, или дать пользователю B разрешение на запуск проверки как пользователя A через sudo.

    Если вы не можете заставить администратора при настройке правила sudo, позволяющего пользователю B запускать проверку как A, тогда единственная программа setuid. Эта программа будет ссылаться на sudo -u userB -b true чтобы проверить, что A разрешено запускать true как пользователь B. Вот исходный код C для этой программы (предупреждение: untested!):

     #include <unistd.h> int main(void) { execl("/usr/bin/sudo", "sudo", "-u", "userB", "-b", "/bin/true", (char*)NULL); return 126; } 

    Скомпилируйте его и создайте результирующий исполняемый setuid A (он должен принадлежать A, затем запустите chmod 4755 /path/to/executable ).

    Обратите внимание, что это решение не является полным: оно будет работать только в том случае, если A разрешено выполнять команды как B в силу того, что он является пользователем A, а не если он получает эту привилегию в силу принадлежности к группе. Если вам нужно проверить членство в группе, вам нужно запустить sg как пользователь A, чтобы получить членство в этой группе, а затем запустить его sudo .

    У вас есть две разные проблемы, которые вы поднимаете в этом вопросе.

    1. Как разрешить / подтвердить права sudo для пользователяA
      Ссылка на домашнюю страницу проекта Sudo

    2. Как просмотреть настройки sudo как userB (не root)

    # 1 выполним погружение в документацию для / etc / sudoers и связанных файлов sudo и команды. У меня нет опыта, ограничивающего команды одним пользователем в качестве другого пользователя без полномочий root, поэтому я не могу сказать, кроме тех случаев, когда я знаю, что это можно сделать.

    # 2 – полностью проблема с разрешениями конфигураций для sudo, таких как / etc / sudoers /etc/sudo.conf /etc/sudoers.d/* и т. Д. В моих системах эти файлы являются режимами -r--r-----. root root -r--r-----. root root userB не сможет их прочитать:

    1. являясь членом корневой группы
    2. прошу вашего системного администратора изменить эти разрешения.

    Это так просто; без одной из этих двух вещей пользователь userB не сможет прочитать или проанализировать файл.

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